sql联结表

  • 什么是联结表?
  • 什么时候使用联结?
  • 如何创建联结
  • 内联结
  • 外联结(左外联结、右外联结、全外联结)
  • 左外联结
  • 右外联结
  • 全外联结(full outer join),包含两个表的不关联的行


什么是联结表?

联结,用来在一条SELECT语句中关联表,因此称为联结。使用特殊语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行

什么时候使用联结?

当数据存储在多个表中,使用联结,用一条SELECT语句就检索出数据

如何创建联结

指定要联结所有表以及关联它们的方式:
a 表

id

name

1

pen

2

book

b 表

id

price

1

$20

2

$50

//创建联结
SELECT  name,price  FROM a,b  WHERE  a.id = b.id;

联结两个表,实际是将第一个表中的每一行与第二个表中的每一行配对,WHERE子句作为过滤条件,只包含那些匹配给定条件(联结条件)的行。
没有WHERE子句,第一个表中每一行与第二个表中每一行配对,不管它们逻辑上是否能配在一起

沒有WHERE子句,返回笛卡儿积联结,也称为叉联结
SELECT  name,price  FROM a,b;

笛卡儿积
由没有联结条件的表关系返回的结果为笛卡儿积,减少出的行的数目是第一个表中的行数乘以第二个表中的行数

内联结

内联结(inner join)称为等值联结
下面的SELECT语句返回与前面例子完全相同的数据,联结条件用特定ON子句而不是WHERE子句 。

SELECT  name,price   FROM  a   INNER   JOIN   b  on   a.id = b.id;

外联结(左外联结、右外联结、全外联结)

左外联结

左外联结就是保留左边表的所有数据,连接的表如果没有就是null

SELECT name,price FROM a  LEFT OUTER JOIN b  on   a.id =b.id;

实例图

sql server关联表的时候只显示第一个 sql语句关联表_sql

右外联结

右外联结就是保留左边表的所有数据,连接的表如果没有就是null

SELECT name,price FROM a  RIGHT OUTER JOIN b  on   a.id =b.id;

实例图

sql server关联表的时候只显示第一个 sql语句关联表_sql_02

全外联结(full outer join),包含两个表的不关联的行

SELECT name,price FROM a  FULL OUTER JOIN b  on   a.id =b.id;

实例图

sql server关联表的时候只显示第一个 sql语句关联表_笛卡儿积_03