MySQL多表查询

举报
上传头像 发表于 2021/01/28 20:16:02 2021/01/28
【摘要】 交叉连接查询语法:selectfrom 表1 cross join 表2;或  selectfrom 表1,表2;内连接查询:注意:要查询的表,查询的条件,查询的字段。隐式内连接:使用where条件消除无用数据select * from emp,dept where emp.dept_id = dept.id;查询emp表和dept表中dept_id和id相等的数据常用写法:selectt1...

交叉连接查询

  1. 语法:selectfrom 表1 cross join 表2;

    或  select
    from 表1,表2;

内连接查询:

  • 注意:要查询的表,查询的条件,查询的字段。
    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. 比较运算符 :“<”、“<=”、“>”、“>=”、“!=”等。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。