Mysql入门级别

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;

LIMIT方言

你可能感兴趣的:(Mysql入门级别)