mysql-纪录级别操作
2017-02-21 本文已影响31人
戏之地
增加记录
insert [into]
tab_name (field1,filed2,.......)
values (value1,value2,.......);
create table employ_new(
id int primary key auto_increment,
name varchar(20) not null unique,
birthady data
salary float(7,2)
)
insert into
employee_new (id,name,birthday,salary)
values (1,'yuan','1990-09-09',9000);
----------------------------------------------
insert into
employee_new values (2,'alex','1989-08-08',3000);
//insert可以插入id相应的字段,然后id以插入的值继续增加
-- 插入多条数据,只需在后面累加就可以了
insert into employee_new values
(4,'alvin1','1993-04-20',3000),
(5,'alvin2','1995-05-12',5000);
-- 用set插入
insert into employee_new set id=12,name="value";
修改表记录
update tab_name set field1=value1,field2=value2,......[where 语句]
UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。
update employee_new set salary = salary+2000 where name = "A" and gender="女"
删除表记录
delete from tab_name [where ....]
delete from employee_new where name= "女"
# 删除表中的全部数据
delete from employee
使用truncate删除表中记录。
truncate table emp_new;
truncate指将表中的记录清空,然后生成一个具有相同字段的表
查询表记录
(1) select [distinct] *|field1,field2,...... from tab_name
-- 其中from指定从哪张表筛选,*表示查找所有列,也可以指定一个列
-- 表明确指定要查找的列,distinct用来剔除重复行。
select distinct name,age from result_table;
(2) select 也可以使用表达式,将选出来的数据用别名进行显示
select name,JS+10,Python+10 from result_table;
select name,JS +10 as JS成绩 from result_table
(3) where 子句进行过滤查询
select id,name,JS from Exam where JS > 90
where中可以使用的比较运算符
> < >= <= <> !=
between 80 and 100 值在80到100之间(包括)
in(89,43) 选取值只能是89或者43
like "jatrix%" %表示可以匹配多个字符 _只匹配一个字符
逻辑运算符 and or not
(4) order by 排定排序的列,排序的列可以是表中的列也可以是select 设置的别名,
主要因为优先级的问题,select的执行顺序前于order by
-- select *|field1,field2... from tab_name order by field [Asc|Desc]
默认为降序
select * from result order by JS
# 排序的时候如果有一个成绩为null
select name,(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)) as 总成绩
from result where name like "a%" order by 总成绩 desc ;
(5) group by
group by 后面跟字段或者数字索引
然后显示每个组的第一条数据
对成绩表按名字分组后,显示每一类名字的Django的分数总和>150的
select name,sum(Django) from ExamResult group by name
having sum(Django)>150;
# group by name 后面的having限制的界定条件应用于已经分成的组
对这些组来说,是否有组内全部Django总和大于150的组
having 和 where的区别
where只能在分组前筛选,having可以用在分组后筛选
使用where的地方都可以用having进行替换
having可以有聚合函数,但是where中就不能有
(6) 聚合函数
count函数:不统计null值的记录
SUM(列名):统计一列,统计不统计null没有关系,都按0
sum(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0))
as 总成绩 from ExamResult;
-- 统计一个班级JS成绩平均分
select sum(JS)/count(*) from ExamResult ;
-- 注意:sum仅对数值起作用,否则会报错。
AVG
select avg((ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)))
from ExamResult ;
注意:null 和所有的数计算都是null,所以需要用ifnull将null转换为0!
执行顺序
Mysql在执行sql语句时的执行顺序:
from where select group by having order by
来自哪,选择组有序
select JS as JS成绩 from ExamResult where JS成绩 >70;不成功
select JS as JS成绩 from ExamResult having JS成绩 >90;成功
select JS as JS成绩 from ExamResult group by JS成绩 having JS成绩 >80;成功
select JS as JS成绩 from ExamResult order by JS成绩;成功
select * from ExamResult as 成绩 where 成绩.JS>85;成功
limit
limint 1 只显示一个
limint 2,2 跳过两条,显示两条
使用正则表达式进行查询
select * from tb_name where emp_name REGEXP '^yu'
select * from tb_name where emp_name REGEXP 'yu$'
select * from tb_name where emp_name REGEXP 'm{2}'