旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

mysql多表团结查询【MySQL教程】,mysql

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:72评论:0


导读:本篇文章是多表团结查询的引见,愿望对人人起到参考的作用。引荐课程:MySQL教程。多表衔接范例1.笛卡尔积(交织衔接)在MySQL中可认为CROSSJOI...
本篇文章是多表团结查询的引见,愿望对人人起到参考的作用。

引荐课程:MySQL教程。

多表衔接范例

1. 笛卡尔积(交织衔接) 在MySQL中可认为CROSS JOIN或许省略CROSS即JOIN,或许运用',' 如:

SELECT * FROM table1 CROSS JOIN table2 SELECT * FROM table1 JOIN table2 SELECT * FROM table1,table2

由于其返回的效果为被衔接的两个数据表的乘积,因而当有WHERE, ON或USING前提的时刻平常不发起运用,由于当数据表项目太多的时刻,会异常慢。平常运用LEFT [OUTER] JOIN或许RIGHT [OUTER] JOIN

2. 内衔接INNER JOIN 在MySQL中把INNER JOIN叫做等值衔接,即须要指定等值衔接前提在MySQL中CROSS和INNER JOIN被分别在一起。 join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition]

3. MySQL中的外衔接,分为左外衔接和右衔接,即除了返回相符衔接前提的效果以外,还要返回左表(左衔接)或许右表(右衔接)中不相符衔接前提的效果,相对应的运用NULL对应。

例子:

user表:
id | name
———
1 | libk
2 | zyfon
3 | daodao
user_action表:
user_id | action
—————
1 | jump
1 | kick
1 | jump
2 | run
4 | swim

sql语句:

select id, name, action from user as uleft join user_action a on u.id = a.user_id

效果:

id | name   | action
——————————–
1  | libk  | jump     效果1      
1  | libk  | kick     效果2        
1  | libk  | jump     效果3       
2  | zyfon  | run      效果4          
3  | daodao | null     效果5         
---------------------

剖析:

注重到user_action中另有一个user_id=4, action=swim的记载,然则没有在效果中涌现,

而user表中的id=3, name=daodao的用户在user_action中没有响应的记载,然则却涌现在了效果集合

由于现在是left join,一切的事情以left为准.

效果1,2,3,4都是既在左表又在右表的记载,5是只在左表,不在右表的记载

事情道理:

从左表读出一条,选出一切与on婚配的右表记载(n条)举行衔接,构成n条记载(包含反复的行,如:效果1和效果3),假如右侧没有与on前提婚配的表,那衔接的字段都是null.然后继续读下一条。

引伸:

我们可以用右表没有on婚配则显现null的规律, 来找出一切在左表,不在右表的记载, 注重用来推断的那列必需声明为not null的。

如:

select id, name, action from user as uleft join user_action a on u.id = a.user_idwhere a.user_id is NULL

(注重:1.列值为null应该用is null 而不能用=NULL

2.这里a.user_id 列必需声明为 NOT NULL 的.)

上面sql的result:

id | name | action
————————–
3 | daodao | NULL

以上就是mysql多表团结查询的细致内容,更多请关注ki4网别的相干文章!

标签:mysql


欢迎 发表评论: