码迷,mamicode.com
首页 > 其他好文 > 详细

连接查询和集合查询

时间:2015-05-12 22:35:33      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:



 在对数据库查询过程中,有些时候一张表中的数据不能满足我们的需求,这时候就须要把多张表连接起来,如以下的两张表所看到的,一张表涵盖了学生的信息,一张表表示学院的信息,假设我想知道某个学生是哪个学院的话,那么就须要把这两张表连接起来。

StuID

deptID

stuName

Age

sex

11090241032

001

王小虎

22

11090241032

002

张三

23

11090241033

003

王五

22

 

 

 

deptID

deptName

001

管理学院

002

教育学院

004

文学院

 

内连接查询

  等值连接

  是将指定的连接条件通过使用等号运算符(=)连接起来,并返回符合连接条件的记录

语法格式:

Select表名1.字段,表名2.字段...

From表名1,表名2 where表名1.字段1=表名2.字段

 

注意:在运行连接查询时,假设要查询的字段同一时候存在的两张表中,而且假设这两张表中的字段名同样的话,须要在select语句中加上该表名作为前缀

演示样例

select stuName,deptname from T_student ,t_dept  where t_student.deptid=t_dept.deptid

(通过系别号字段来等值查询符合条件的记录)

(使用表别名的方式不仅能够简化连接查询的操作,并且还能够提高查询的性能)

 

非等值连接

是指除使用等号外其它运算符的操作

演示样例:

(查询年龄大于15的学生的学院)

ON子句建立相等连接

使用方法与where同样

语法规则:

Select表名1.字段,表名2.字段

From表名1 join表名2

On表名1.字段=表名2.字段

演示样例:

select stuName,deptname from T_student a join t_dept b on a.deptid=b.deptid where a.age>15

注意:尽管ON子句也能够用ANDkeyword指定其它查询条件,可是在使用ON子句建立相等连接时,其它的限制条件都写到WHERE子句中

自连接查询

连接查询中,还能够与自己本身表进行查询,这样的方式叫做自连接

语法规则

Select A.字段,A.字段

From表名1 A,表名2 B

Where A.字段=B.字段

注意:因为是对同一张表查询,所以要为表指定不同的名称

(如查询年龄最大的学生的姓名和年龄)

 

外连接查询

 

 左外连接

不仅显示满足连接条件的记录,并且还包含左側表中不满足条件的记录。

语法规则:

Select表名1.字段,表名2.字段

From表名1 left join表名2

On表名1.字段=表名2.字段2

 

演示样例:

select r.stuName,r.age,c.deptName 
from T_student r left join t_dept c
on r.deptid=c.deptid

技术分享

(由于第一张表中查询的字段在第二张表中未找到,所以置空值)

 

右外连接

与左外连接相似

语法规则:

 Select表名1.字段,表名2.字段

From表名1 right join表名2

On表名1.字段=表名2.字段2

 

全外连接

 不仅显示左側表中满足连接条件的记录,并且还会显示右側表中不满足查询条件的记录,能够觉得是左外连接和右外连接的合集

语法规则:

 Select表名1.字段,表名2.字段

From表名1 full join表名2

On表名1.字段=表名2.字段2

 

结果例如以下:

select r.stuName,r.age,c.deptName 
from T_student r FULL join t_dept c
on r.deptid=c.deptid

技术分享

 

 

集合查询

并操作

使用keywordUNION,并操作返回的结果是包括了查询出来的全部不同的行

语法规则:

Select语法1

UNION

Select语法2

演示样例:

select r.stuName,r.age,c.deptName 
from T_student r LEFT join t_dept c
on r.deptid=c.deptid
UNION
select r.stuName,r.age,c.deptName 
from T_student r RIGHT join t_dept c
on r.deptid=c.deptid

(相当于全外连接查询)

注意:在进行并操作时,两个SELECT语句张红要查询的列相应的属性的个数和数据类型必须是同样的。

交操作

使用keyword是INTERSECT,交操作返回的结果集中包括了结果的公工行,交操作中不会出现反复行

语法规则:

Select语法1

INTERSECT

Select语法2

演示样例:    

结果例如以下:

select r.stuName,r.age,c.deptName 
from T_student r LEFT join t_dept c
on r.deptid=c.deptid
insertct
select r.stuName,r.age,c.deptName 
from T_student r RIGHT join t_dept c
on r.deptid=c.deptid

技术分享

 

差操作

运行差操作的keyword是EXCEPT,顾名思义,就是查询第一个表中的数据排除第二个表中数据的结果

语法规则:

Select语法1

EXCEPT

Select语法2

演示样例:

select r.stuName,r.age,c.deptName 
from T_student r FULL join t_dept c
on r.deptid=c.deptid
EXCEPT
select r.stuName,r.age,c.deptName 
from T_student r RIGHT join t_dept c
on r.deptid=c.deptid

结果例如以下:

技术分享

 

小结:

在连接查询中,常常使用到外连接和内连接,所以我们应该掌握这些连接的语法,以方便我们以后的使用。

连接查询和集合查询

标签:

原文地址:http://www.cnblogs.com/hrhguanli/p/4498727.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!