数据库-SQL的四种连接查询
Posted 煜成'Studio
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库-SQL的四种连接查询相关的知识,希望对你有一定的参考价值。
title: 数据库-SQL的四种连接查询
date: 2021-11-21 20:42:28
tags:
数据库-SQL的四种连接查询
内连接
inner join 或者 join
把两个表的有关系的字段通过某一字段相等的方式查询出来
外连接
1.左连接 left join 或者 left outer join
2.右连接 right join 或者 right outer join
3.完全外连接 full join 或者 full outer join
创建两个表:
person表
id,name,cardId
card表
id,name
create database testJoin;
use testJoin;
create table person (id int, name varchar(20), cardId int);
create table card (id int, name varchar(20));
show tables;
±-------------------+
| Tables_in_testjoin |
±-------------------+
| card |
| person |
±-------------------+
insert into card values(1, ‘饭卡’);
insert into card values(2, ‘建行卡’);
insert into card values(3, ‘农行卡’);
insert into card values(4, ‘工商卡’);
insert into card values(5, ‘邮政卡’);
insert into person values(1, ‘张三’, 1);
insert into person values(2, ‘李四’, 3);
insert into person values(3, ‘王五’, 6);
select * from card;
±-----±-------+
| id | name |
±-----±-------+
| 1 | 饭卡 |
| 2 | 建行卡 |
| 3 | 农行卡 |
| 4 | 工商卡 |
| 5 | 邮政卡 |
±-----±-------+
select * from person;
±-----±-----±-------+
| id | name | cardId |
±-----±-----±-------+
| 1 | 张三 | 1 |
| 2 | 李四 | 3 |
| 3 | 王五 | 6 |
±-----±-----±-------+
–并没有创建外键
–inner join 查询(内连接)
通过on显示条件
select * from person inner join card on person.cardId = card.id;
或者
select * from person inner card on person.cardId = card.id;
±-----±-----±-------±-----±-------+
| id | name | cardId | id | name |
±-----±-----±-------±-----±-------+
| 1 | 张三 | 1 | 1 | 饭卡 |
| 2 | 李四 | 3 | 3 | 农行卡 |
±-----±-----±-------±-----±-------+
–内联查询,其实就是两张表中的数据,通过某个字段相等,查询出相关记录数据。
–left join (左外连接)
select * from person left join card on person.cardId = card.id;
或者
select * from person left outer join card on person.cardId = card.id;
±-----±-----±-------±-----±-------+
| id | name | cardId | id | name |
±-----±-----±-------±-----±-------+
| 1 | 张三 | 1 | 1 | 饭卡 |
| 2 | 李四 | 3 | 3 | 农行卡 |
| 3 | 王五 | 6 | NULL | NULL |
±-----±-----±-------±-----±-------+
–左外连接,会把左边表里的所有数据取出来,而右边表中的数据,如果有相等的就显示出来,如果没有就会补NULL
–right join (右外连接)
select * from person right join card on person.cardId = card.id;
或者
select * from person right outer join card on person.cardId = card.id;
±-----±-----±-------±-----±-------+
| id | name | cardId | id | name |
±-----±-----±-------±-----±-------+
| 1 | 张三 | 1 | 1 | 饭卡 |
| NULL | NULL | NULL | 2 | 建行卡 |
| 2 | 李四 | 3 | 3 | 农行卡 |
| NULL | NULL | NULL | 4 | 工商卡 |
| NULL | NULL | NULL | 5 | 邮政卡 |
±-----±-----±-------±-----±-------+
–右外连接,会把右边表里的所有数据取出来,而左边表中的数据,如果有相等的就显示出来,如果没有就会补NULL
–full join(全外连接)mysql不支持
select * from person full join card on person.cardId = card.id;
相当于
select * from person left join card on person.cardId = card.id union select * from person right join card on person.cardId = card.id;
这样就可以用了
±-----±-----±-------±-----±-------+
| id | name | cardId | id | name |
±-----±-----±-------±-----±-------+
| 1 | 张三 | 1 | 1 | 饭卡 |
| 2 | 李四 | 3 | 3 | 农行卡 |
| 3 | 王五 | 6 | NULL | NULL |
| NULL | NULL | NULL | 2 | 建行卡 |
| NULL | NULL | NULL | 4 | 工商卡 |
| NULL | NULL | NULL | 5 | 邮政卡 |
±-----±-----±-------±-----±-------+
连接的好处:
不用创建外键,可以通过他们之间某个字段的相等来求他们直接各种集合之间的数据
以上是关于数据库-SQL的四种连接查询的主要内容,如果未能解决你的问题,请参考以下文章