美文网首页
十、外连接、自连接和联合

十、外连接、自连接和联合

作者: 天天阳光好 | 来源:发表于2017-04-21 00:04 被阅读0次

一、外连接

1.定义

外连接返回某张表(主表)的所有行,并带回另一张表(连接表)的条件相符的行,如无相符的行,则返回NULL;

2.和内连接的不同之处

① 使用内连接时,虽然会对比来自两张表的行,但是表的顺序并无影响;

② 外连接对比两张表里的行,如无相符的行,则返回NULL(VBA返回空),换句话点说外连接一定会提供数据行,无论此行是否能在另一个表中找出相匹配的;

③ 外连接的一起以左、右有关,确定用LEFT OUTER JOIN和RIGHT OUTER JOIN 确定主表。

3.左外连接(和右外连接

SELECT tb1.girl, tb2.toy FROM table_name1 tb1

LEFT OUTER JOIN table_name2 tb2 

ON tb1.toy_id = tb2.toy_id;

LFET OUTER JOIN 左边的表是主表 右边的是连接表

同理

RIGHT OUTER JOIN 右边的表是主表 左边的是连接表

二、自连接

1.自引用外键

同一张表中,若有一非主键列引用了主键的值,那么此列也是外键列,这样被称为自引用外键。

2.自连接示例

SELECT tb1.name,tb2.name AS leader FROM

table_name1 tb1 INNER JOIN table_name1 tb2

ON tb1.leaderID=tb2.id

自连接能把单一表当成两张具有完全相同的信息的表来进行查询。

改成子查询模式

SELECT tb1.name,

(SELECT name FROM table_name1 WHERE tb1.leaderID=id) AS leader

FROM table_name1 tb1

三、表的联合

1. UNION和UNION ALL把查询的结果联合起来

SELECT title FORM job_current

UNION

SELECT title FORM job_desired

UNION

SELECT title FORM job_listings

ORDER BY title;

① SELECT语句里列的数量必须一致

② SELECT语句里包含的表达式统计函数也必须相同

③ SQL会清除结果中的重复值

④ 若需查看重复值,可使用UNION ALL

⑤ 列的数据类型必须相同或可以互相转换

⑥ SELECT语句的顺序不重要,不会改变结果;

⑦ UNION只能接受一个ORDER BY 且必须位于语句末端。

注:UNION ALL 和 UNION的使用方法一致,不同点在于前者可以取重复值,后者会清除重复值。

2.创建联合表,CREATE TABLE AS

CREATE TABLE table_name AS

SELECT title FORM job_current UNION

SELECT title FORM job_desired UNION

SELECT title FORM job_listings

ORDER BY title;

3.INTERSECT(交集)和EXCEPT(差集)

① INTERSECT,交集

SELECT title FORM job_current

INTERSECT

SELECT title FORM job_desired;

INTERSECT只会返回同时出现在第一个和第二个查询中的列。

② EXCEPT,差集

SELECT title FORM job_current

EXCEPT

SELECT title FORM job_desired;

EXCEPT返回只出现在第一个查询中,而不在第二个查询中的列。

四、子查询和连接的优劣

1.子查询写法

SELECT tb1.column_name1,tb1.column_name2,tb2.column_name3 FROM

table_name1 AS tb1 NATURAL JOIN  table_name2 AS tb2

WHERE

tb2.column_name3 IN(SELECT column_name3 FROM table_name3)

2.连接写法

SELECT tb1.column_name1,tb1.column_name2,tb2.column_name3 FROM

table_name1 AS tb1 NATURAL JOIN  table_name2 AS tb2

INNER JOIN table_name3 tb3 on tb2.column_name3=tb3.column_name3

3.优劣

① 子查询可以使用统计函数,连接不行;

② 子函数可以与UPDATE、INSERT和DELETE一起使用,连接不行;

③ 连接的运算速度快于子查询。

相关文章

  • 十、外连接、自连接和联合

    一、外连接 1.定义 外连接返回某张表(主表)的所有行,并带回另一张表(连接表)的条件相符的行,如无相符的行,则返...

  • SQL联合查询

    1.联合查询分类 内连接(inner Join 或 Join)外连接(outer Join)左外连接(left o...

  • 数据库-联表查询

    SQL使用(一)——联合查询 1.联合查询分类 内连接(inner Join 或 Join) 外连接(outer ...

  • 多表查询和事务

    多表查询包括内连接和外连接内连接: 隐式内连接 显示内连接 外连接: 左外连接 右外连接 左外连接: 在内连接的基...

  • SQL联合查询

    SQL使用——联合查询 1.联合查询分类 内连接(inner Join 或 Join) 外连接(outer Joi...

  • MySQL中的多表连接查询

    多表连接分为交叉连接,内连接,外连接,自连接。连接条件分为等值连接,非等值连接(区别就是连接符号是否是“=”) 学...

  • 连接查询

    1.分类 内连接等值非等值自连接 外连接左外右外全外(mysql不支持) 2.语法 1、内连接 语法:select...

  • 黑猴子的家:mysql 连接查询(全外连接和自连接)

    1、全外连接 2、自连接 案例:查询员工名字和上级领导的名字

  • 2018-08-29-Oracle学习第三天

    1、-- 多表连接 -- 1)内连接 -- 2)外连接 -- 3)自连接 -- 笛卡尔集(了解)-- 开发中,需要...

  • mysql 连接查询

    在mysql中有外连接 内连接查询,其中外连接又分为左外连接和右外连接,下面是对这些连接查询进行演示. 在开始演示...

网友评论

      本文标题:十、外连接、自连接和联合

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