MySQL多表查询
【摘要】 交叉连接查询语法: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...
交叉连接查询
- 语法:selectfrom 表1 cross join 表2;
或 selectfrom 表1,表2;
内连接查询:
- 注意:要查询的表,查询的条件,查询的字段。
-
隐式内连接:使用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
- select * from emp,dept where emp.dept_id = dept.id;
-
显式内连接:
- select * from emp inner join dept on emp.dept_id = dept.id;
注:inner 可以省略 <==> select * from emp join dept on emp.dept_id = dept.id;
- select * from emp inner join dept on emp.dept_id = dept.id;
-
外连接查询:
- 分类:
- 左外连接:左外连接的结果包括LEFT JOIN子句中指定的左表的所有记录,和所有满足连接条件的记录。
如果左表的某条记录在右表中没有匹配,则在右表中显示为空。(在左表的基础上,符合条件的右表的数据,也就是交集部分)。- select 字段列表 from 表1 left join 表2 on 条件;
- 右外连接:右外连接与左外连接正好相反,返回右表中所有指定的记录和所有满足连接条件的记录。
如果右表的某条记录在左表中没有匹配,则左表将返回空值。
(在右表的基础上,符合条件的左表的数据,也就是交集部分)。- select 字段列表 from 表1 right join 表2 on 条件;
- 左外连接:左外连接的结果包括LEFT JOIN子句中指定的左表的所有记录,和所有满足连接条件的记录。
注意:左表和右表是一个相对的概念,写在关键字(left join,right join)左边的那张表就是左表,右表同理。
复合条件连接查询
- 定义:复合条件连接查询就是在连接查询的过程中,通过添加过滤条件来限制查询结果,使查询结果更加精确。
子查询(嵌套查询)
- 定义:子查询是指一个查询语句嵌套在另一个查询语句内部的查询。在执行查询语句时,首先会执行子查询中的语句,然后将返回的结果作为外层查询的过滤条件。
- 子查询中常用的操作符有 ANY(SOME)、ALL、IN EXISTS ,还可以是比较运算符,如“<”、“<=”、“>”、“>=”、“!=”等。
- ANY(SOME) :对于子查询返回的列中的任何一个数值,如果比较结果为TRUE,就返回TRUE。
- 例如 “13 >any(15, 30, 12, 31)”,由于13>12,所以,该该判断会返回TRUE;只要13与集合中的任意一个进行比较,得到TRUE时,就会返回TRUE。
- ALL :ALL必须与比较操作符一起使用。ALL的意思是“对于子查询返回的列中的所有值,如果比较结果为TRUE,则返回TRUE”。
- 例如 “6 >all(2, 4, 5, 1)”,由于6大于集合中的所有值,所以这条判断就返回TRUE;而如果为“6 >all(2, 4, 5, 1,9)”,其中6小于9,因此该判断会返回FALSE。
- IN :用于判断一个给定值是否存在于子查询的结果集中。
- EXISTS :用于判断子查询的结果集是否为空。若子查询的结果集不为空,则返回 TRUE;否则返回 FALSE。(检测 行 的存在)
- 比较运算符 :“<”、“<=”、“>”、“>=”、“!=”等。
- ANY(SOME) :对于子查询返回的列中的任何一个数值,如果比较结果为TRUE,就返回TRUE。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)