目录
单表查询
IN / NOT IN / OR
查询条件在一个集合汇总 存在 / 不存在,也可以使用 OR 来替代
#查询课程 C02 C03 C04 的平均成绩 SELECT ACG(score) FROM grade WHERE courseid='C02' OR classid='C03' OR classid='C04' GROUP BY courseid; #以上查询语句相当于 SELECT AVG(score) FROM grade WHERE courseid IN ('C02','C03','C04') GROUP BY courseid;
#查询课程不在 C02 C03 C04 中的其他课程的平均成绩 SELECT ACG(score) FROM grade WHERE courseid!='C02' AND courseid!='C03' AND courseid!='C04'; SELECT ACG(score) FROM grade WHERE courseid NOT IN ('C02','C03','C04') GROUP BY courseid;
ANY
用于条件判断的子查询 > < >= <= =
找各个子集合中的或运算
> ANY
大于最小的
< ANY
小于最大的
SELECT * FROM student WHERE degree='本科' AND age < ANY(SELECT DISTINCT(age) FROM student WHERE degree='研究生'); #SELECT DISTINCT(age) FROM student WHERE degree='研究生' 表示选出研究生的不同年龄 # < ANY() 表示本科生年龄小于所有研究生学生的不同年龄中的任何一个,相当于小于其中的最大一个数 #同理 > ANY() 表示大于ANY中的子查询结果的最小的一个数
ALL
等价于在子集合中查询各个条件的 与运算 结果
> ALL
大于最大的
< ALL
小于最小的
#查找本科生年龄比研究生最小年龄还小的人 SELECT * FROM student WHERE degree='本科' AND age < ALL(SELECT DISTINCT(age) FROM student WHERE degree='研究生');
IS NULL 和 IS NOT NULL
#查询学历是NULL的人的信息 SELECT * FROM student WHERE degree IS NULL;
UNION
联合查询,将两条SQL语句的查询结果拼成一个结果集,一般用于不同表之间的联合查询
UNION使用的两个条件
-
两张表的列数必须一样
-
联合查询的数据类型要兼容
#查询姓张和姓王的学生 SELECT * FROM student WHERE sname LIKE '张%' OR sname LIKE '王%'; SELECT * FROM student WHERE sname LIKE '张%' UNION SELECT * FROM student WHERE sname LIKE '王%';
但是UNION更多的还是用在不同表之间的联合查询,将不同表之相似的信息查询整合在一起
#查询所有班级和课程 SELECT classid,classname FROM class UNION SELECT courseid,cname FROM course;
SELECT ***
SELECT NOW(); #查询当前时间 SELECT LENGTH('HELLO'); #查看当前字符串长度 SHOW VARIABLES; #查看mysql自带参数信息