SQL中JOIN和UNION
来源:互联网 发布:中国海洋大学网络教育 编辑:程序博客网 时间:2024/05/21 17:44
union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集 。
JOIN用于按照ON条件联接两个表,主要有四种:
INNER JOIN:内部联接两个表中的记录,仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。我理解的是只要记录不符合ON条件,就不会显示在结果集内。
LEFT JOIN / LEFT OUTER JOIN:外部联接两个表中的记录,并包含左表中的全部记录。如果左表的某记录在右表中没有匹配记录,则在相关联的结果集中右表的所有选择列表列均为空值。理解为即使不符合ON条件,左表中的记录也全部显示出来,且结果集中该类记录的右表字段为空值。
RIGHT JOIN / RIGHT OUTER JOIN:外部联接两个表中的记录,并包含右表中的全部记录。简单说就是和LEFT JOIN反过来。
FULL JOIN / FULL OUTER JOIN: 完整外部联接返回左表和右表中的所有行。就是LEFT JOIN和RIGHT JOIN和合并,左右两表的数据都全部显示。
JOIN的基本语法:
Select table1.* FROM table1 JOIN table2 ON table1.id=table2.id
UNION运算符
将两个或更多查询的结果集组合为单个结果集,该结果集包含联合查询中的所有查询的全部行。UNION的结果集列名与UNION运算符中第一个Select语句的结果集的列名相同。另一个Select语句的结果集列名将被忽略。
其中两种不同的用法是UNION和UNION ALL,区别在于UNION从结果集中删除重复的行。如果使用UNION ALL 将包含所有行并且将不删除重复的行。
具体用法:
1.
a. 并集UNION
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2
b. 交集JOIN
SELECT * FROM table1 AS a JOIN table2 b ON a.name=b.name
c. 差集NOT IN
SELECT * FROM table1 WHERE name NOT IN(SELECT name FROM table2)
d. 笛卡尔积
SELECT * FROM table1 CROSS JOIN table2
与
SELECT * FROM table1,table2相同
2. SQL中的UNION
UNION与UNION ALL的区别是,前者会去除重复的条目,后者会仍旧保留。
a. UNION
SQL Statement1
UNION
SQL Statement2
b. UNION ALL
SQL Statement1
UNION ALL
SQL Statement2
3. SQL中的各种JOIN
SQL中的连接可以分为内连接,外连接,以及交叉连接
a. 交叉连接CROSS JOIN
如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积
举例
SELECT * FROM table1 CROSS JOIN table2
等同于
SELECT * FROM table1,table2
一般不建议使用该方法,因为如果有WHERE子句的话
因此,如果两个需要求交际的表太大,将会非常非常慢,不建议使用。
b. 内连接INNER JOIN
如果仅仅使用
SELECT * FROM table1 INNER JOIN table2
没有指定连接条件的话,和交叉连接的结果一样。
但是通常情况下,使用INNER JOIN需要指定连接条件。
-- 等值连接(=号应用于连接条件, 不会去除重复的列)
SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column=b.column
-- 不等连接(>,>=,<,<=,!>,!<,<>)
例如
SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column<>b.column
-- 自然连接(会去除重复的列)
c. 外连接OUTER JOIN
首先内连接和外连接的不同之处:
内连接如果没有指定连接条件的话,和笛卡尔积的交叉连接结果一样
指定条件的内连接,仅仅返回符合连接条件的条目。
外连接则不同,返回的结果不仅包含符合连接条件的行
1)左外连接LEFT [OUTER] JOIN
显示符合条件的数据行,同时显示左边数据表不符合条件的数据行
例如
SELECT * FROM table1 AS a LEFT [OUTER] JOIN ON a.column=b.column
2)右外连接RIGHT [OUTER] JOIN
显示符合条件的数据行,同时显示右边数据表不符合条件的数据行
例如
SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON a.column=b.column
3)全外连接
显示符合条件的数据行,同时显示左右不符合条件的数据行
- SQL中JOIN和UNION
- SQL中JOIN和UNION用法
- SQL的JOIN和UNION
- SQL中的UNION和JOIN
- SQL Left Join和Union Join
- SQL中JOIN和UNION区别、用法及示例
- SQL中JOIN和UNION区别、用法及示例
- SQL中JOIN和UNION区别、用法及示例
- SQL中JOIN和UNION區別、用法及示例
- SQL中JOIN和UNION区别、用法及示例介绍
- SQL中JOIN和UNION区别、用法及示例介绍
- SQL中JOIN和UNION区别、用法及示例介绍
- SQL中JOIN和UNION区别、用法及示例介绍
- SQL中JOIN和UNION区别、用法及示例介绍
- 关于SQL中Union和Join的用法
- SQL中JOIN和UNION区别、用法及示例
- SQL中JOIN和UNION区别、用法及示例介绍
- SQL 连接语句(union和join)
- UVa 11100 - The Trip, 2007
- axis2 webService服务搭建
- android中的数据库操作
- linux 内核修改开机logo
- 黑马程序员--银行调度系统
- SQL中JOIN和UNION
- 基类虚函数重写调用问题
- SQL——批量操作
- servlet过滤器的使用
- java 包路径
- Multiselect:操作多选列表框
- iframe截取网站的部分内容
- lua 笔记
- Android系列教程之五:Activity的生命周期