DML操作记录,增删改等操作
关键字:insert update delete
1:insert 插入操作
例子:题目:我要插入一条数据,id为1,姓名为:张三。生日1990-3-3,备注为:made in china.
代码:
insert into emp(id,name,birthday,resume)
values(1,'张三','1990-3-3','made in china')
插入全部字段的时候:
insert into emp values(1,'zhangsan','man','1990-5-10',1000,'2015-10-12','This is a good man');
可以用null表示:
insert into emp values(1,'zhangsan','man','1990-5-10',1000,null,null);
2:update 修改操作
题目:将所有员工的工资都改为5000元
update emp set salary =5000
题目2:将姓名为张三的员工的工资改为1200元
update emp set salary =1200 where name = '张三'
题目3:.将姓名为wangwu的员工的工资在原有基础增加10.10元
update emp set salary=salary+10.10 where name='wangwu';
3:delete 删除操作
1删除表中resume为空的记录(注意:如果要删除null的数据,必须用 is null)。
delete from emp where resume is null;
2删除表中的所有记录
delete from emp
DQL:查询记录
查询关键字:select
练习:
查询性别为女,并且年龄大于50的记录
select * from stu where gender='female' and age>50;
查询学号为S_1001,或者姓名为lisi的记录
select * from stu where sid='S_1001' or sname='lisi';
查询学号为S_1001,S_1002,S_1003的记录。
select * from stu where sid in('S_1001','S_1002','S_1003');
查询学号不是S_1001,S_1002,S_1003的记录。
select * from stu where sid not
in('S_1001','S_1002','S_1003');
查询年龄为null的记录。
select * from stu where age is null;
查询年龄在20到40之间的学生记录。
select * from stu where age>=20 and age<=40;
select * from stu where age between 20 and 40;
模糊查询:like
查询姓名由5个字母构成的学生记录。
select * from stu where sname like '_____';
查询姓名由5个字母组成,并且第5个字母为"i"的学生记录。
select * from stu where sname like '____i';
查询姓名以”z“开头的学生姓名和年龄。
select sname,age from stu where sname like 'z%';
查询姓名中第2个字母为“i”的学生姓名和性别.
select sname,gender from stu where sname like'_i%';
查询姓名中包含"a"字母的学生记录。
select * from stu where sname like '%a%';
字段控制查询
1.去除重复记录
去除重复记录(两行或者两行以上记录中系列的上数据都相同),例如emp表中sal字段就存在相同的记录。
当只查询emp表的sal字段时,那么就会出现重复的记录,那么想去除重复记录,我们就需要使用DISTINCT关
键字:
select distinct sal from emp;
2.查看雇员的月薪和奖金之和。
因为sal和comm两列的类型都是数值类型,所以可以做加法运算。如果sal或comm中有一个字段不是数值类
型,那么就会出错。
select ename,sal+comm as '总额' from emp;
[图片上传失败...(image-6a35fa-1565775990296)]
comm列有很多记录的值为null,因为任何东西与NULL相加结果还是null,所以结算结果可能会出现null。我要
一个数加null还要等于那个数应该怎么做呢?我们就需要使用IFNULL的方法,将NULL转换为0。
select *,sal+IFNULL(comm,0) as '总额' from emp;
[图片上传失败...(image-3cb580-1565775990296)]
排序 ORDER BY 列名 asc(默认) desc
关键字:asc升序 desc降序
select * from stu ORDER BY age asc;
或者
select * from stu order by age;
查询所有学生记录,按照年龄的降序进行排序。
select * from stu ORDER BY age desc;
查询所有雇员,按照月薪的降序排序,如果月薪相同时,按照编号进行排序。
select * from emp order by sal desc,empno asc;
聚合函数 sum avg max min count
1.聚合函数使用来做纵向运算的函数:
count():统计指定列不为null的记录行数。
max():计算指定列的最大值,如果指定列是字符串类型,那么就会使用字符串排序运算。
min():计算指定列的最小值,如果指定列是字符串类型,那么就会使用字符串排序运算。
sum():计算指定列的数值和,如果指定列的类型不是数值类型,那么计算结果为0;
avg():计算指定列的平均值,如果指定列的类型不是数值类型,那么计算结果为0;
2.count:当需要纵向统计的时候可以使用count()。
查询emp表中记录数。
select count(*) as '总数' from emp;
查询emp表中月薪大于2500的人数。
select count(*) from emp where sal>2500;
查询月薪与奖金之和大于2500的人数。
select count(*) from emp where sal+ifnull(comm,0)>2500;
查询有佣金的人数,有领导的人数。
select count(comm),count(mgr) from emp;
SUM和AVG
查询所有员工的月薪之和。
select sum(sal) from emp;
查询所有员工月薪和,以及所有员工的奖金和。
select sum(sal),sum(ifnull(comm,0)) from emp;
查询所有员工的月薪+奖金之和。
select sum(sal+ifnull(comm,0)) from emp;
统计所有员工的平均工资。
select avg(sal) from emp;
MAX和MIN
查询最高工资和最低工资。
select max(sal),min(sal) from emp;
[图片上传失败...(image-d2acb1-1565775990297)]
[图片上传失败...(image-ca04d2-1565775990297)]
[图片上传失败...(image-df7b7b-1565775990297)]
[图片上传失败...(image-37d21a-1565775990297)]
Having子句
1.having是在分组后对数据进行过滤
where是在分组前对数据进行过滤
2.having后面可以使用聚合函数
where后面不可以使用聚合函数
where是对分组前记录的条件,如何某行记录没有满足where子句的条件,那么这行记录将不会参加分组。而
having是对分组后数据的约束。
查询中各个关键字的先后顺序:
select-->from-->where-->group by-->having-->order by;