MySQL多表查询

MySQL多表查询


## 交叉连接查询
  1. 语法:selectfrom 表1 cross join 表2;

    或  select
    from 表1,表2;
    • 这样查询到的结果为两个表中所有数据行的乘积即笛卡尔积。

MySQL多表查询_第1张图片

内连接查询:

  • 注意:要查询的表,查询的条件,查询的字段。
    1. 隐式内连接:使用where条件消除无用数据

      • select * from emp,dept where emp.dept_id = dept.id;
        查询emp表和dept表中dept_id和id相等的数据
      • 常用写法:
        select
        t1.name, – 注释
        t1.gender,
        t2.name
        from
        emp t1,
        dept t2
        where
        t1.dept_id = t2.id
    2. 显式内连接:

      • select * from emp inner join dept on emp.dept_id = dept.id;
        注:inner 可以省略 <==> select * from emp join dept on emp.dept_id = dept.id;

外连接查询:

  • 分类:
    1. 左外连接:左外连接的结果包括LEFT JOIN子句中指定的左表的所有记录,和所有满足连接条件的记录。

      如果左表的某条记录在右表中没有匹配,则在右表中显示为空。(在左表的基础上,符合条件的右表的数据,也就是交集部分)。
      • select 字段列表 from 表1 left join 表2 on 条件;
      eg: select t1.*,t2.name from emp t1 left join dept t2 on t2.dept_id = t2.id;
    2. 右外连接:右外连接与左外连接正好相反,返回右表中所有指定的记录和所有满足连接条件的记录。
      如果右表的某条记录在左表中没有匹配,则左表将返回空值。
      (在右表的基础上,符合条件的左表的数据,也就是交集部分)。
      • select 字段列表 from 表1 right join 表2 on 条件;
      eg: select t1.*,t2.name from emp t1 right join dept t2 on t2.dept_id = t2.id;

注意:左表和右表是一个相对的概念,写在关键字(left join,right join)左边的那张表就是左表,右表同理。

复合条件连接查询

  • 定义:复合条件连接查询就是在连接查询的过程中,通过添加过滤条件来限制查询结果,使查询结果更加精确。

子查询(嵌套查询)

  • 定义:子查询是指一个查询语句嵌套在另一个查询语句内部的查询。在执行查询语句时,首先会执行子查询中的语句,然后将返回的结果作为外层查询的过滤条件。
  • 子查询中常用的操作符有 ANY(SOME)、ALL、IN EXISTS ,还可以是比较运算符,如“<”、“<=”、“>”、“>=”、“!=”等。
    1. ANY(SOME) :对于子查询返回的列中的任何一个数值,如果比较结果为TRUE,就返回TRUE。
      • 例如 “13 >any(15, 30, 12, 31)”,由于13>12,所以,该该判断会返回TRUE;只要13与集合中的任意一个进行比较,得到TRUE时,就会返回TRUE。
    2. ALL :ALL必须与比较操作符一起使用。ALL的意思是“对于子查询返回的列中的所有值,如果比较结果为TRUE,则返回TRUE”。
      • 例如 “6 >all(2, 4, 5, 1)”,由于6大于集合中的所有值,所以这条判断就返回TRUE;而如果为“6 >all(2, 4, 5, 1,9)”,其中6小于9,因此该判断会返回FALSE。
    3. IN :用于判断一个给定值是否存在于子查询的结果集中。
    4. EXISTS :用于判断子查询的结果集是否为空。若子查询的结果集不为空,则返回 TRUE;否则返回 FALSE。(检测 行 的存在)
    5. 比较运算符 :“<”、“<=”、“>”、“>=”、“!=”等。

你可能感兴趣的:(mysql,数据库,sql)