程序员之路:MySQL子查询与连接_彭世瑜_新浪博客

举报
彭世瑜 发表于 2021/08/14 23:23:43 2021/08/14
【摘要】 第一部分:子查询 子查询(subquery):出现在其他SQL语句内的SELECT子句 例如: SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中: SELECT * FROM t1 称为Outer Query/Out...
第一部分:子查询

子查询(subquery):出现在其他SQL语句内的SELECT子句

例如:
SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2);
其中:
SELECT * FROM t1 称为Outer Query/Outer Statement
SELECT col2 FROM t2 称为SubQuery

特点:嵌套在查询内部,且必须始终出现在 圆括号内

子查询可以包含多个关键字或条件:
DISTINCT,GROUP BY,ORDER BY,LIMIT,函数等
子查询的外层查询可以是:
SELECT,INSERT,UPDATE,SET,DO

子查询可以返回:标量,一行,一列,子查询

比较运算符:
= , >, <, >=, <=, <>, !=, <=>
语法结构:
operand comparison_operator subquery

用ANY, SOME, ALL修饰
operand comparison_operator ANY (subquery)
operand comparison_operator SOME(subquery)
operand comparison_operator ALL(subquery)
程序员之路:MySQL子查询与连接

使用[NOT] IN :
operand comparison_operator [NOT] IN (subquery)
=ANY 与 IN 等效
!=ALL 与 <>ALL 与 NOT IN 等效

使用[NOT] EXISTS:
如果子查询返回任何一行,EXISTS将返回TRUE 否则返回FALSE

INSERT...SELECT将查询结果写入数据表
INSERT [INTO] tbl_name [(col_name,...)] SELECT...

多表更新
UPDATE table_references SET col_name1={expr1 | DEFAULT} [,col_name1={expr1 | DEFAULT}]...[WHERE where_condition]

第二部分:连接

连接:MySQL在SELECT语句,多表更新,多表删除语句中支持JOIN操作

连接语法结构:
table_reference
{[INNER | CROSS] JOIN | {LEFT | RIGHT} [OUTER] JOIN}
table_reference [[AS] alias]
ON condition_expr

数据参照表可以赋予别名

例如:
UPDATE table1 INNER JOIN table2 ON table1.name=table2.name SET table1.age=table2.age

连接类型:
INNER JOIN,内连接
JOIN  ==  INNER JOIN == CROSS JOIN等价
LEFT [OUTER] JOIN,左外连接
RIGHT [OUTER] JOIN,右外连接

说明:
内连接(INNER JOIN):显示左表及右表符合连接条件的记录,A ∩ B
程序员之路:MySQL子查询与连接
左外连接(LEFT JOIN):显示左表中的全部和右表符合连接条件的记录,A ∪ (A ∩ B) 程序员之路:MySQL子查询与连接
右外连接(RIGHT JOIN):显示右表中的全部和左表符合连接条件的记录,B ∪ (A ∩ B)
程序员之路:MySQL子查询与连接
连接条件
通常使用ON关键字来设定连接条件,也可以实验WHERE,WHERE关键字进行结果集记录的过滤

CREATE ...SELECT创建数据表的同时,将查询结果写入到数据表
CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] select_statement

No query specified?   因为在\G后面是不需要加;

事实外键,物理外键

外连接
A LEFT JOIN B join_condition

(1)数据表B的结果集合依赖数据表A
(2)数据表A 的结果集合根据左连接条件依赖所有的数据表(B表除外)
(3)左外连接条件决定如何检索数据表B(在没有指定WHERE条件的情况下)
(4)如果数据表A的某条记录符合WHERE条件,但是在数据表B不存在符合连接条件的记录,将生成一个所有列为空的额外的B行
(5)如果使用内连接查找的记录在数据表中不存在,并且在WHERE子句中尝试一下操作:col_name IS NULL 时,如果col_name 被定义为NOT NULL ,MySQL将在找到符合连接执行条件的记录后停止搜索更多的行。

自身连接
同一数据表对其自身进行连接

多表删除
DELETE tbl_name[. *] [,tbl_name[.*]]...
FROM table_references
[WHERE where_condition]





文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/109659398

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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