共计 3949 个字符,预计需要花费 10 分钟才能阅读完成。
一、连贯查问:
是将两个查问 (或表) 的每一行,以“两两横同对接”的形式,所失去的所有行的后果,即一个表中的某行,跟另一个表中的某行。进行“横向对接”,失去一个新行。
连贯查问包含以下这些不同模式,连贯形式:
穿插连贯、内连贯、外连贯(分: 左外连贯,右外连贯)
连贯查问语法:
select * from 表名 [连贯形式] join 表名 [on 连贯条件] where ...;
测试数据:
mysql> select * from test;
+----+--------+------+------+
| id | name | sex | age |
+----+--------+------+------+
| 1 | name1 | 女 | 15 |
| 2 | name1 | 女 | 15 |
| 4 | name2 | 男 | 30 |
| 5 | name50 | 男 | 12 |
+----+--------+------+------+
mysql> select * from user;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | name1 | 18 |
| 2 | name2 | 15 |
| 3 | name3 | 20 |
| 4 | name4 | 30 |
+----+-------+------+
材料视频收费获取:https://jq.qq.com/?_wv=1027&k=jUsaRsWY,学习直通车
穿插连贯 (cross join):
- 1、穿插连贯其实能够认为是连贯查问的“齐全版本”, 即所有行都无条件地都连接起来。
- 2、关键字“cross”能够省略;
- 3、穿插连贯又称为“笛卡尔积”,通常利用价值不大
语法模式:
- select * from 表名, 表名;
- select * from 表名 join 表名;
- select * from 表名 cross join 表名;
标准的穿插连贯写法
mysql> select * from test cross join user;
+----+--------+------+------+----+-------+------+
| id | name | sex | age | id | name | age |
+----+--------+------+------+----+-------+------+
| 1 | name1 | 女 | 15 | 1 | name1 | 18 |
| 2 | name1 | 女 | 15 | 1 | name1 | 18 |
| 4 | name2 | 男 | 30 | 1 | name1 | 18 |
| 5 | name50 | 男 | 12 | 1 | name1 | 18 |
| 1 | name1 | 女 | 15 | 2 | name2 | 15 |
| 2 | name1 | 女 | 15 | 2 | name2 | 15 |
| 4 | name2 | 男 | 30 | 2 | name2 | 15 |
| 5 | name50 | 男 | 12 | 2 | name2 | 15 |
| 1 | name1 | 女 | 15 | 3 | name3 | 20 |
| 2 | name1 | 女 | 15 | 3 | name3 | 20 |
| 4 | name2 | 男 | 30 | 3 | name3 | 20 |
| 5 | name50 | 男 | 12 | 3 | name3 | 20 |
| 1 | name1 | 女 | 15 | 4 | name4 | 30 |
| 2 | name1 | 女 | 15 | 4 | name4 | 30 |
| 4 | name2 | 男 | 30 | 4 | name4 | 30 |
| 5 | name50 | 男 | 12 | 4 | name4 | 30 |
+----+--------+------+------+----+-------+------+
间接应用 join 进行连贯,相当于 cross join,默认就是 穿插连贯
mysql> select * from test join user;
查问后果跟下面统一!!!
还能够间接 from 表,表... 也相当于是穿插连贯
mysql> select * from test, user;
查问后果跟下面统一!!!
内连贯 (inner join)
- 1、内连贯其实是穿插连贯的根底上,再通过 on 条件而筛选进去的局部数据。
- 2、关键字“inner”能够省略,但倡议写上,真正有意义的是 on 连贯条件。
- 3、内连贯是利用最宽泛的一种连贯查问,其本质是依据条件筛选出“有意义的数据”。
语法模式: - select * from 表名 join 表名 on 连贯条件;
- select * from 表名 inner join 表名 on 连贯条件;
查出两个表中 name 字段相等的数据
mysql> select * from test inner join user on test.name=user.name;
+----+-------+------+------+----+-------+------+
| id | name | sex | age | id | name | age |
+----+-------+------+------+----+-------+------+
| 1 | name1 | 女 | 15 | 1 | name1 | 18 |
| 2 | name1 | 女 | 15 | 1 | name1 | 18 |
| 4 | name2 | 男 | 30 | 2 | name2 | 15 |
+----+-------+------+------+----+-------+------+
查出两个表中 name 字段相等的数据,通过 as 给表取个别名进行应用
mysql> select * from test as t inner join user as u on t.name=u.name;
查问后果跟下面统一!!!
查出两个表中 name 字段相等,test 表中 age>15,user 表中 age>10 的数据
如果应用表中有反复的字段,那么就须要通过 [表名. 字段名] 来应用,例如 age:mysql> select * from test inner join user on test.name=user.name where test.age>15 and user.age>10;
+----+-------+------+------+----+-------+------+
| id | name | sex | age | id | name | age |
+----+-------+------+------+----+-------+------+
| 4 | name2 | 男 | 30 | 2 | name2 | 15 |
+----+-------+------+------+----+-------+------+
查出两个表中 name 字段相等,且 sex='男' 的数据。如果应用表中没有反复的字段,那么能够通过 [表名. 字段名] 或者间接应用 [字段名] 应用,例如 sex :
mysql> select * from test as t inner join user as u on t.name=u.name where t.sex='男';
mysql> select * from test as t inner join user as u on t.name=u.name where sex='男';
+----+-------+------+------+----+-------+------+
| id | name | sex | age | id | name | age |
+----+-------+------+------+----+-------+------+
| 4 | name2 | 男 | 30 | 2 | name2 | 15 |
+----+-------+------+------+----+-------+------+
外连贯 – 左外连贯 (left join)
- 1、左外连贯其实是保障右边表的数据都可能取出的一种连贯。
- 2、左外连贯其实是在内连贯的根底上,再加上右边表中所有不能满足条件的数据
- 3、关键字“outer” 能够省略。
语法模式:
select * from 表名 left [outer] join on 连贯条件 where …;
以右边的表为基准,保障右边表的数据全副显示,匹配不到的数据为 NULL
mysql> select * from test left join user on test.name=user.name;
+----+--------+------+------+------+-------+------+
| id | name | sex | age | id | name | age |
+----+--------+------+------+------+-------+------+
| 1 | name1 | 女 | 15 | 1 | name1 | 18 |
| 2 | name1 | 女 | 15 | 1 | name1 | 18 |
| 4 | name2 | 男 | 30 | 2 | name2 | 15 |
| 5 | name50 | 男 | 12 | NULL | NULL | NULL |
+----+--------+------+------+------+-------+------+
外连贯 – 右外连贯 (right join)
- 1、右外连贯其实是保障左边表的数据都可能取出的一种连贯。
- 2、右外连贯其实是在内连贯的根底上,再加上左边表中所有不能满足条件的数据
- 3、关键字“outer” 能够省略。
语法模式:
select * from 表名 right [outer] join on 连贯条件 where …;
以左边的表为基准,保障左边表的数据全副显示,匹配不到的数据为 NULL
mysql> select * from test right join user on test.name=user.name;
+------+-------+------+------+----+-------+------+
| id | name | sex | age | id | name | age |
+------+-------+------+------+----+-------+------+
| 1 | name1 | 女 | 15 | 1 | name1 | 18 |
| 2 | name1 | 女 | 15 | 1 | name1 | 18 |
| 4 | name2 | 男 | 30 | 2 | name2 | 15 |
| NULL | NULL | NULL | NULL | 3 | name3 | 20 |
| NULL | NULL | NULL | NULL | 4 | name4 | 30 |
+------+-------+------+------+----+-------+------+
正文完