1.基本查询
1.1查询所有的列
SELECT *FROM `stu`;
1.2查询指定的列(sid,sname,age)是查询的列
SELECT `sid`,`sname`,`age`FROM`stu`;
2.条件查询
2.1条件查询介绍
条件查询就是在查询时给出WHERE子句,在 where 子句中经常使用的运算符如下:
比较运算符 | >、<、 >=、<=、<>、=、!= | 大于、小于、大于(小于)等于、不等于 |
between...and... | 显示某一区间的值 | |
IN(set) | 显示在In列表中的值 | |
like | 模糊查询 | |
is null | 判断是否为空 | |
逻辑运算 | and | 多个条件同时成立 |
or | 多个条件任一成立 | |
not | 不成立 |
2.2查询性别为女,并且年龄x小于50的记录
select *from stu where gender='famale' and age<50;
2.3 查询学号为S_1001,或者姓名为liSi的记录
SELECT *FROM `stu` WHERE `sid`='S_1001'OR `sname`='liSi';
2.4 查询学号为S_1001,S_1002,S_1003的记录
第一种
SELECT * FROM `stu` WHERE `sid`='S_1001' OR `sid`='S_1002' OR `sid`='S_1003';
第二种
SELECT * FROM `stu` WHERE `sid` IN('S_1001','S_1002','S_1003');
2.5 查询学号不是S_1001,S_1002,S_1003的记录
第一种
SELECT * FROM `stu` WHERE `sid` NOT IN('S_1001','S_1002','S_1003');
第二种
SELECT * FROM `stu` WHERE `sid`!='S_1001' AND `sid`!='S_1002' AND `sid`!='S_1003';
2.6 查询年龄为null的记录
SELECT *FROM `stu` WHERE `age`IS NULL;
2.7 查询年龄在20到40之间的学生记录
第一种用大于和小于
SELECT * FROM stu WHERE age>=20 AND age<=40;
第二种用 between and 是包括两端的数
SELECT * FROM stu WHERE age BETWEEN 20 AND 40;
3.模糊查询
当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。
通配符:_任意一个字母,%指任意0~n个字母
3.1查询姓名由5个字母构成的学生记录
SELECT * FROM `stu` WHERE `sname` LIKE '_____';
3.2查询姓名由5个字母构成,并且第5个字母为“i”的学生记录
SELECT * FROM `stu` WHERE `sname` LIKE '____i';
3.3查询姓名以“z”开头的学生记录
SELECT * FROM `stu` WHERE `sname` LIKE 'z%';
3.4查询姓名中第2个字母为“i”的学生记录
SELECT * FROM `stu` WHERE `sname` LIKE '_i%'
3.5查询姓名中包含“a”字母的学生记录
SELECT * FROM `stu` WHERE `sname` LIKE '%a%';
4.字段控制查询
4.1 去除重复记录
去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如emp表中sal字段就存在相同的记录。
SELECT DISTINCT `deptno` FROM emp
4.2 查看雇员的月薪与佣金之和
SELECT *, sal+comm FROM emp;
相加必须得是同一数值类型,有因为comm里有null相加结果还是null所以使用ifnull()函数将null转换为指定的数据
select *,sal+IFNULL(comm,0) from emp;
4.3 给列名添加别名
在上面查询中出现列名为sal+IFNULL(comm,0),这很不美观,现在我们给这一列给出一个别名,为月薪与佣金之和。AS也可以省略。
SELECT *,sal+IFNULL(comm,0) AS '月薪与佣金之和' FROM emp
SELECT *,sal+IFNULL(comm,0) '月薪与佣金之和' FROM emp
5.排序
5.1查询所有学生记录,按年龄升序排序
默认就是升序所以不用加ASC
SELECT * FROM `stu` ORDER BY age;
SELECT * FROM `stu` ORDER BY age ASC;
5.2查询所有学生记录,按年龄降序排序
SELECT *FROM stu ORDER BY age DESC;
5.3 查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序
SELECT * FROM emp ORDER BY sal DESC, empno DESC;
6.聚合函数
聚合函数是用来做纵向运算的函数:
- COUNT():统计指定列不为NULL的记录行数;
- MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
- MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
- SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
- AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
6.1COUNT
- 查询emp表中月薪大于2500的人数:
SELECT COUNT(*) FROM emp WHERE sal > 2500;
- 月薪与佣金之和大于2500元的人数:
SELECT COUNT(*) '月薪与佣金之和大于2500元的人数' FROM emp WHERE sal+IFNULL(comm,0)>2500;
- 查询有佣金的人数,以及有领导的人数
SELECT COUNT(comm) '有佣金的人数',COUNT(mgr) '有领导的人数' FROM emp
6.2SUM,AVG ,MAX和MIN
- 查询最高工资和最低工资:
SELECT MAX(sal), MIN(sal) FROM emp;
- 查询所有雇员月薪和:
SELECT SUM(sal) FROM emp;
- 查询所有雇员月薪+佣金和:
SELECT SUM(sal+IFNULL(comm,0)) FROM emp;
- 统计所有员工平均工资:
SELECT AVG(sal) FROM emp;