8.连接查询和集合查询

我这些学习笔记,记录的都是我自己认为的知识点,可能以后再看的时候还要翻书,但是可以用来定位到准确的书中示例的位置,减少翻书重找的时间,利于自身知识体系的搭建。                   self-transcendence

第8章 连接查询和集合查询

8.1 内连接查询

内连接包括等值连接和非等值连接。除了使用=,还可以使用onusing建立等值连接。

8.1.1 等值连接

Select * from 1,2,3  where 1.列名 = 2.列名 and 1.列名 = 3.列名

Mysql中使用inner join对两个表进行等值连接:

Select * from 1  inner join  2 on 1.列名 = 2.列名

在等值的链接查询中,如果where中使用了and指定了其他查询条件,那么两个表之间相互关联的列(即使用=号连接条件的列)应该放在where子句的前面,以便提供查询效率。

8.1.2 非等值连接

除了使用=号以外的其他运算符<>等等...包括between...and运算符。

但是非等值连接一般跟等值连接一起使用,例:Select * from 1,2  where 1.列名 = 2.列名 and 1.列名 > 2.列名

8.1.3 使用on建立相等连接

Select  *  from  a  jion  b  on  a.列名 = b.列名

8.1.4 使用using建立相等连接

Select  *  from  a  jion  b  using  (列名)             这个列名就是相等列的列名

8.2 交叉连接

交叉连接返回的结果是一个笛卡儿积。所谓笛卡儿积,就是两个集合相乘的结果。假设集合a中有n个元素,集合b中有m个元素,最后返回的结果就是m*n

这个目前不知道有什么用,等回头再来学习。

8.3 自连接查询

连接查询除了在不同表中进行,也可以在同一张表进行。

Select  *  from  a as b,a as c  where  a.列名 =c.列名

因为是自连接,所以from语句中要为表定义不同的别名

8.4 外连接查询

查询不满足连接条件的部分记录,或者一个表在另一个表中不匹配的记录。

8.4.1 左外连接

左外连接不仅显示满足连接条的数据,还包括左侧表中不满足查询条件的记录。

Oracle使用+标识左外连接:

Select  *  from  a ,b  where  a.列名 (+)= b.列名

如果where中有多个限制条件,则每一个条件都要加+,外连接不能用orin,子查询中也不能用

Mysqlsql server使用left[outer] join关键字实现,outer可选:

Select  *  from  a  left jion  b  on  a.列名 = b.列名

Select  *  from  a  left jion  b  using(列名)

两种都可以

8.4.2 右外连接

右外连接不仅显示满足连接条的数据,还包括右侧表中不满足查询条件的记录。

Select  *  from  a ,b  where  a.列名= b.列名(+)

Oracle使用+标识右外连接:

如果where中有多个限制条件,则每一个条件都要加+,外连接不能用orin,子查询中也不能用

Mysqlsql server使用right[outer] join关键字实现,outer可选:

Select  *  from  a  right jion  b  on  a.列名 = b.列名

Select  *  from  a  right jion  b  using(列名)

两种都可以

8.4.3 全外连接

全外连接会把左表和右表中不满足条件的数据都显示出来。使用full[outer] join关键字显示。不包括重复行,并且mysql不能用,mysql只能用union关联左右外连接,实现全外连接。

Select  *  from  a  full join  b  on  a.列名= b.列名

8.5 集合查询

集合查询包括:

并操作(union):两表数据相加自动去除重复数据,保留重复数据用union all。并且两个并的查询语句列数要相同。

交操作(intersect):取两表公共行,没有重复行,保留重复数据用intersect all,列数要相同,mysql不支持。

差操作(minus):明天看,今天看不进去这个


猜你喜欢

转载自blog.csdn.net/selftranscendence/article/details/79970029
今日推荐