引荐课程: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网别的相干文章!