MySQL 关于我和连接查询的那些事 (这不是为难我哆啦A梦吗)之细节总结
Posted 憨憨的包
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 关于我和连接查询的那些事 (这不是为难我哆啦A梦吗)之细节总结相关的知识,希望对你有一定的参考价值。
连接查询分为内连接和外连接
无可厚非 ,交叉连接是内连接的基础,如下
select * from line CROSS JOIN vehicle
等价于:
select * from line,vehicle
内连接基于连接谓词,它将两张表 ( 如A 和 B) 的列组合在一起,产生新的结果表。内连接查询会将 A 表的每一行和 B 表的每一行进行比较,并找出满足连接谓词的组合。当连接谓词被满足,A 和 B 中匹配的行会按列组合(并排组合)成结果集中的一行。
内连接分 3 种:交叉连接、相等连接和自然连接 如下
SELECT fieldlist FROM table1 [INNER] JOIN table2
ON table1.column1=table2.column2
[where condition]
注意
连接依据的列可能包含 null 值,null 值不与任何值匹配(甚至和它本身)。
语法说明:(比较枯燥,懂的可以跳过)
有人会觉得很难,就小小总结下吧
fieldlist:table1 表和 table2 表中的字段列。如果 fieldlist 取两张表所有列,则可用“*”代替,此时会出现连接依据列重复,即 table1 表的 column1 与 table2 表的 column2 为重复列。table1 [INNER] JOIN table2:将 table1 表与 table2 表进行内连接,INNER 可省略。table1.column1=table2.column2:连接条件,其中 column1 和column2 为table1 表与table2 表的关联列,通常它们为外键列和主键列。“inner”可省略。“where condition”可省略,它为查询条件表达式
续 查询实操:
如果字段列表中的字段在两张表中是唯一的,则该字段前面不需要加表名前缀,例如本列中的“name” 和“licenseNo”,否则需要加表名前缀,如本列中的“v.vehicleID” “d.vehicleID”等
对的,一般来说,MySQL最难的就是多表查询,掌握多表查询,就掌握了MySQL的重难点
话不多说,直接重点摆上
语法:
SELECT fieldlist FROM table1 JOIN table2 ON table1.column1=table2.column2_1 JOIN table3 on
table2.column2_2=table3.column3 [where condition]
说明
table2 与 table1 和 table3 两两相连。一般通过外键联系
三表以上连接查询的方法与三表连接查询的方法一样,均是通过两两相连的方式实现
那怎么查询
使用两表连接查询语法
SELECT fieldlist FROM table1, table2
WHERE table1.column1=table2.column2 [and 其他条件]
推演三表查询
SELECT fieldlist FROM table1,table2,table3
WHERE table1.column1=table2.column2_1 and table2.column2_2=table3.column3 [and 其他条件]
如上
而外连接也同样重要
在内连接查询中,只有满足连接条件的记录才能出现在查询结果中。但在实际应用中,如果希望不满足连接条件的记录也在查询结果中出现,这时需要使用外连接查询
SELECT 字段名称 FROM 表名 1 LEFT|RIGHT|FULL [OUTER] JOIN 表名 2
ON 表名 1. 字段名 1= 表名 2. 字段名 2
“outer”可省略
在内连接查询中,只有满足连接条件的记录才能出现在查询结果中。但在实际应用中,如果希望不满足连接条件的记录也在查询结果中出现,这时需要使用外连接查询。根据不同的外连接形式,外连接所生成的结果集中不仅包含符合条件的数据记录,还包含左表、右表或左右表中所有的数据记录
总结如此,我想大概也对mysql的连接查询有了印象吧,感兴趣的可以收看我下次知识点总结
以上是关于MySQL 关于我和连接查询的那些事 (这不是为难我哆啦A梦吗)之细节总结的主要内容,如果未能解决你的问题,请参考以下文章