MySQLjoin多表连接知识详解
1. SQL join多表连接介绍
SQL Join⼦句,主要⽤在select语句中,把两个或多个表的⾏结合起来,基于这些表之间的共同字段(往往是id字段)来查询,从多个表中返回满⾜条件的所有⾏。
2.常见join⼦句类型
常见join⼦句类型有INNER JOIN(同JOIN)、LEFT JOIN、RIGHT JOIN、FULL JOIN,其中第⼀种为内连接,后三种为外连接。
不同的join⼦句类型区别如下图所⽰:
3.实践数据准备
#1.建表语句和内容插⼊。a是左边的表,b是右边的表
create table a(id int not null primary key auto_increment,name varchar(20) not null,age tinyint);)
create table b(aid int not null,city varchar(20) not null,telnum char(11));
insert into a values(1,'oldboy',35),(2,'oldgirl',28),(3,'inca',22),(5,'zs',23);
js中parsefloat用法insert into b values(1,'bj',135),(2,'sz',189),(3,'sh',166),(4,'hz',187);
#2.最终数据结果。
mysql> select * from a;
+----+---------+------+
| id | name    | age  |
+----+---------+------+
|  1 | oldboy  |  35 |
mysql面试题sql语句多表联查|  2 | oldgirl |  28 |
|  3 | inca    |  22 |
|  5 | zs      |  23 |
+----+---------+------+
4 rows in set (0.00 sec)
mysql> select * from b;
企业网站推广方案的策划
+-----+------+--------+
| aid | city | telnum |
+-----+------+--------+
|  1 | bj  | 135    |
|  2 | sz  | 189    |
|  3 | sh  | 166    |
|  4 | hz  | 187    |
+-----+------+--------+
4 rows in set (0.00 sec)
#提⽰:注意两个表的ID列有相同的id,也有不同的ID
4. 内连接(inner join)实践
内连接是⽣产最常见的连接,只输出关联ID匹配的⾏。内连接有三种语句,都是等同的。
mysql> select * from a join b on a.id=b.aid;        #<==省略了inner关键词。
mysql> select * from a inner join b on a.id=b.aid;  #<==带inner关键词。
mysql> select * from a,b where a.id=b.aid;
以上3个语句输出的信息相同,即为两个表中id相同的⾏信息。
+----+---------+------+-----+------+--------+
| id | name    | age  | aid | city | telnum |
+----+---------+------+-----+------+--------+
|  1 | oldboy  |  35 |  1 | bj  | 135    |
|  2 | oldgirl |  28 |  2 | sz  | 189    |
|  3 | inca    |  22 |  3 | sh  | 166    |
ps怎么学的快速入门5. 左外连接(left join)实践
LEFT JOIN⼦句会返回左表全部⾏和右表满⾜ON关联条件⾏,如果左表⾏在右表中没有匹配,那么这⼀⾏右表中对应数据⽤NULL代替。mysql> select * from a left join b on a.id=b.aid; #执⾏SQL输出结果如下。
+----+---------+------+------+------+--------+matlab播放视频文件
| id | name    | age  | aid  | city | telnum |
+----+---------+------+------+------+--------+
|  1 | oldboy  |  35 |    1 | bj  | 135    |
|  2 | oldgirl |  28 |    2 | sz  | 189    |
|  3 | inca    |  22 |    3 | sh  | 166    |
|  5 | zs      |  23 | NULL | NULL | NULL  |
+----+---------+------+------+------+--------+
6. 右外连接(right join)实践
RIGHT JOIN⼦句会右表全部⾏和左表满⾜ON关联条件⾏,如果右表⾏在左表中没有匹配,那么这⼀⾏左表中对应数据⽤NULL代替。mysql> select * from a right outer join b on a.id=b.aid;  #<==outer可省略。
+------+---------+------+-----+------+--------+
| id  | name    | age  | aid | city | telnum |
+------+---------+------+-----+------+--------+
|    1 | oldboy  |  35 |  1 | bj  | 135    |
|    2 | oldgirl |  28 |  2 | sz  | 189    |
|    3 | inca    |  22 |  3 | sh  | 166    |
| NULL | NULL    | NULL |  4 | hz  | 187    |
+------+---------+------+-----+------+--------+
mysql> select * from a right join b on a.id=b.aid;
+------+---------+------+-----+------+--------+
| id  | name    | age  | aid | city | telnum |
+------+---------+------+-----+------+--------+
|    1 | oldboy  |  35 |  1 | bj  | 135    |
|    2 | oldgirl |  28 |  2 | sz  | 189    |
|    3 | inca    |  22 |  3 | sh  | 166    |
| NULL | NULL    | NULL |  4 | hz  | 187    |
+------+---------+------+-----+------+--------+
7.外连接(outer join)实践
outer join有的库叫做FULL JOIN会返回左表和右表所有的⾏。如果其中⼀个表的数据⾏在另⼀个表中没有匹配的⾏,那么对⾯的数据⽤NULL代替,不过mysql暂不⽀持这种连接,但可以⽤union all连接左连接和右连接来实现。
mysql> (select * from a left join b on a.id=b.aid)
-> union all
-> (select * from a right join b on a.id=b.aid);
+------+---------+------+------+------+--------+
| id  | name    | age  | aid  | city | telnum |
+------+---------+------+------+------+--------+
|    1 | oldboy  |  35 |    1 | bj  | 135    |
|    2 | oldgirl |  28 |    2 | sz  | 189    |
|    3 | inca    |  22 |    3 | sh  | 166    |
|    5 | zs      |  23 | NULL | NULL | NULL  |
|    1 | oldboy  |  35 |    1 | bj  | 135    |
|    2 | oldgirl |  28 |    2 | sz  | 189    |
|    3 | inca    |  22 |    3 | sh  | 166    |
| NULL | NULL    | NULL |    4 | hz  | 187    |
+------+---------+------+------+------+--------+
8.⽼男孩后记:
有关mysql的join,其实可以简单得执⾏? join,查看MySQL⽀持的连接类型及例⼦,⼀般⼈我都不告诉他。
joined_table: {
transformer百科
table_reference {[INNER | CROSS] JOIN | STRAIGHT_JOIN} table_factor [join_specification]
| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_specification
| table_reference NATURAL [INNER | {LEFT|RIGHT} [OUTER]] JOIN table_factor
}
join_specification: {
ON search_condition
| USING (join_column_list)
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。