美文网首页
sql学习笔记8—连接

sql学习笔记8—连接

作者: 风一样的我1 | 来源:发表于2021-03-23 17:37 被阅读0次

一、四种连接

  • 内连接: inner join & join(&表示或者)
  • 外连接:
    左连接:left join & left outer join
    右连接:right join & right outer join
    完全外连接:full outer join & full join
    1.创建数据
    数据库(testJoin)
    person表(id, name, cardId)
    card表(id, name)
create datebase testJoin;
create table person(id int, name varchar(20), cardId int);
create table card(id int, name varchar(20));

添加数据

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);

(1)内联查询(inner join)
内连接查询就是两张表中的数据,通过某个字段相等,查询出相关记录数据,用 on… 表示条件,其中的inner join 可以用 join代替。

select * from person join card on person.cardId = card.id;
-- result
+------+------+--------+------+--------+
| id   | name | cardId | id   | name   |
+------+------+--------+------+--------+
|    1 | 张三 |      1 |    1 | 饭卡   |
|    2 | 李四 |      3 |    3 | 农行卡 |
+------+------+--------+------+--------+
上述操作也可以使用下列语句代替:
```sql
select * from person,card where person.cardId = card.id;

(2)左外连接
左外连接,会把左边表里面的所有数据取出来,而右边表数据如果有相等的,就显示出来,如果没有,就补 NULL

select * from person left join card on person.cardId = card.id;
-- result
+------+------+--------+------+--------+
| id   | name | cardId | id   | name   |
+------+------+--------+------+--------+
|    1 | 张三 |      1 |    1 | 饭卡   |
|    2 | 李四 |      3 |    3 | 农行卡 |
|    3 | 王五 |      6 | NULL | NULL   |
+------+------+--------+------+--------+

(3)右连接
与left join相反,显示右边所有的数据,左边的数据如果没用就显示空。

select * from person right join card on person.cardId = card.id;
-- result
+------+------+--------+------+--------+
| id   | name | cardId | id   | name   |
+------+------+--------+------+--------+
|    1 | 张三 |      1 |    1 | 饭卡   |
| NULL | NULL |   NULL |    2 | 建行卡 |
|    2 | 李四 |      3 |    3 | 农行卡 |
| NULL | NULL |   NULL |    4 | 工商卡 |
| NULL | NULL |   NULL |    5 | 邮政卡 |
+------+------+--------+------+--------+

(4) full join(全外连接)

select * from person full join card on person.cardId = card.id;

报错,因为Mysql不支持full join
四种连接的示意图如下:


inner join.png
left join.png
right join.png
full join.png

可以看到,全连接相当于左右连接合并。因此,我们使用Union.

select * from person left join card on person.cardId = card.id
union 
select * from person right join card on person.cardId = card.id;
-- result
+------+------+--------+------+--------+
| 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学习笔记8—连接

    一、四种连接 内连接: inner join & join(&表示或者) 外连接:左连接:left join & ...

  • Mybatis动态SQL

    MyBatis Mybatis笔记连载上篇连接MyBatis缓存Mybatis笔记连载下篇连接 动态SQL 动态S...

  • sql语句,内外连接(学习笔记)

    source /home/laoli/t_user.sql // 执行sql文件 出自:https://blog....

  • Oracle表连接学习笔记

    @[toc] 一、表连接类型 表连接类型可以分为:内连接、外连接,在看《收获,不止sql优化》一书并做了笔记 1....

  • EF Core 备忘

    模糊查询sql linq 内连接查询sql linq 左连接查询sql linq 左连接查询(连接内带条件)sql...

  • 8 805 SQL0805N Package "KGDB.APP

    程序连接db2执行sql,新加了类文件,报错如下: 8 805 SQL0805N Pa...

  • MICK-SQL进阶教程

    学习笔记~ 目录 第一章 神奇的SQL 1.1 CASE表达式1.2 自连接的用法1.3 三值逻辑和NULL1.4...

  • Learn SQL| Codecademy第二节学习笔记

    1、Learn SQL| Codecademy第一节学习笔记 2、学习记录☞Learn SQL| Codecade...

  • mysql 操作的常用命令

    sql:SHOWVARIABLESLIKE'character%' mysql学习笔记-常用命令常用sql:SHO...

  • SQL语言之查询

    SQL语言之查询(二) 前言 本章我们将学习SQL查询中的高级部分,如内连接、外连接和子查询,通过这些查询技术我们...

网友评论

      本文标题:sql学习笔记8—连接

      本文链接:https://www.haomeiwen.com/subject/csbfhltx.html