联表
内连接
返回两个表中指定键相同的行
--内连接
-- inner join 可以简写为 join
SELECT 信息表.*,成绩表.*
FROM 信息表
INNER JOIN 成绩表
ON 信息表.`学号`=信息表.`学号`;
-- 默认内连接方法(不使用join on 关键字)
SELECT 信息表.*,成绩表.*
FROM 信息表, 成绩表
where 信息表.`学号`=信息表.`学号`;
左连接
左连接: 结果中包括左表的所有行,及关键字段与左表相同的右表的行。
SELECT 信息表.*,成绩表.*
FROM 信息表
LEFT JOIN 成绩表
ON 信息表.`学号`=信息表.`学号`;
右连接
结果中除了包括与右表关键字段的左表行,还包括右表的所有行
SELECT 信息表.*,成绩表.*
FROM 信息表
RIGHT JOIN 成绩表
ON 信息表.`学号`=信息表.`学号`;
子查询
子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从 MySQL 4.1 开始引入,在 SELECT 子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表。
子查询可以在 SELECT、UPDATE 和 DELETE 语句中使用,而且可以进行多层嵌套。在实际开发时,子查询经常出现在 WHERE 子句中。
子查询在 WHERE 中的语法格式如下:WHERE <表达式> <操作符> (子查询)
其中,操作符可以是比较运算符+ ANY/ALL 或者 IN、NOT IN、EXISTS、NOT EXISTS 等关键字。
IN | NOT IN
当表达式与子查询返回的结果集中的某个值相等时,返回 TRUE,否则返回 FALSE;若使用关键字 NOT,则返回值正好相反。
EXISTS | NOT EXISTS
用于判断子查询的结果集是否为空,若子查询的结果集不为空,返回 TRUE,否则返回 FALSE;若使用关键字 NOT,则返回的值正好相反。
比较运算符 + ANY
准备两个表:
–T1(2,3)
–T2(1,2,3,4)
“>ANY”:父查询中的结果集大于子查询中任意一个值(大于子查询结果集中的最小值),则为真;
select * from T2 where n > ANY(select n from T1) 结果显示: 3,4
“=ANY”:与子查询IN相同,父查询条件表达式存在于子查询的结果集中里;
select * from T2 where n = ANY(select n from T1) 等价于 select * from T2 where n IN (select n from T1) 结果显示: 2,3
“<ANY”:父查询中的结果集小于子查询中任意一个值(小于子查询结果集中的最大值),则为真;
select * from T2 where n < ANY(select n from T1) 结果显示: 1,2
比较运算符 + ALL
准备两个表:
–T1(2,3)
–T2(1,2,3,4)
“>ALL” : 父查询中的结果集大于子查询中每一个值(大于子查询结果集中的最大值),则为真;
select * from T2 where n > ALL(select n from T1) 结果显示: 4
“<ALL” : 父查询中的结果集小于子查询中每一个值(小于子查询结果集中的最小值),则为真;
select * from T2 where n < ALL(select n from T1) 结果显示: 1
“<>ALL”:作用于NOT IN相同;
select * from T2 where n <> ALL(select n from T1) 等价于 select * from T2 where n NOT IN (select n from T1) 结果显示: 1,4