联表

内连接

返回两个表中指定键相同的行

--内连接
-- inner join 可以简写为 join
SELECT 信息表.*,成绩表.*
FROM 信息表
INNER JOIN 成绩表
ON 信息表.`学号`=信息表.`学号`;


-- 默认内连接方法(不使用join on 关键字)
SELECT 信息表.*,成绩表.*
FROM 信息表, 成绩表
where 信息表.`学号`=信息表.`学号`;

image.png

左连接

左连接: 结果中包括左表的所有行,及关键字段与左表相同的右表的行。

SELECT 信息表.*,成绩表.*
FROM 信息表
LEFT JOIN 成绩表
ON 信息表.`学号`=信息表.`学号`;

image.png

右连接

结果中除了包括与右表关键字段的左表行,还包括右表的所有行

SELECT 信息表.*,成绩表.*
FROM 信息表
RIGHT JOIN 成绩表
ON 信息表.`学号`=信息表.`学号`;

image.png

子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从 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)

  1. “>ANY”:父查询中的结果集大于子查询中任意一个值(大于子查询结果集中的最小值),则为真;

    select * from T2
    where n > ANY(select n from T1)
    结果显示:
    3,4
  2. “=ANY”:与子查询IN相同,父查询条件表达式存在于子查询的结果集中里;

    select * from T2
    where n = ANY(select n from T1)
    等价于
    select * from T2
    where n IN (select n from T1)
    结果显示:
    2,3
  3. “<ANY”:父查询中的结果集小于子查询中任意一个值(小于子查询结果集中的最大值),则为真;

    select * from T2
    where n < ANY(select n from T1)
    结果显示:
    1,2

比较运算符 + ALL

准备两个表:

–T1(2,3)
–T2(1,2,3,4)

  1. “>ALL” : 父查询中的结果集大于子查询中每一个值(大于子查询结果集中的最大值),则为真;

    select * from T2
    where n > ALL(select n from T1)
    结果显示:
    4
  2. “<ALL” : 父查询中的结果集小于子查询中每一个值(小于子查询结果集中的最小值),则为真;

    select * from T2
    where n < ALL(select n from T1)
    结果显示:
    1
  3. “<>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
最后修改:2020 年 12 月 10 日
如果觉得我的文章对你有用,请随意赞赏