数据库的连接查询

W3Cschoolhttp://www.w3school.com.cn/sql/sql_join.asp

数据库中的表可以通过键将彼此连接起来,主键(primary key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的,这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

select语句可以方便的实现关系的连接查询,即实现从两个或多个关系中检索出所需要的数据。多个关系之间的连接类型有以下几种:

(1)交叉连接(cross join

(2)内部连接(inner join

(3)外部连接(outer join),它又分为左外连接(left join)、右外连接(right join)和全外连接(full join

(4)自身连接(self join

连接查询的类型可以在select语句的from子句中指定,也可以在where子句中指定。

1. 交叉连接

格式:SELECT [DISTINCT/ALL] <目标列表达式[别名]清单>

      FROM <关系名[别名]清单>

需要连接查询的关系名在from子句中指定,关系名之间用西文逗号隔开。

例:SELECT e.Employee, e.Title, e.Dno, d.Dno, d.Name

FROM Employee e, Department d;

若使用交叉连接,在from子句和where子句中没有指定任何连接条件,系统将A表中的每一个元组都与B中的每一个元组进行连接,若A中有4个元组,B中有8个元组,则连接之后的结果集中有4x8=32个新的元组,结果集由两表各部分属性组成。这样的连接一般都没有意义,所以很少使用。

2. 内连接

格式:SELECT [DISTINCT/ALL] <目标列表达式[别名]清单>

      FROM <关系名1[别名1]> INNER JOIN <关系名2[别名2]>

      ON <连接条件表达式>

或:SELECT [DISTINCT/ALL] <目标列表达式[别名]清单>

FROM <关系名[别名]清单>

WHERE <连接条件表达式>

需要连接查询的关系名在from子句中指定,连接类型和连接条件可以在from子句或where子句中指定。

例:select e.ename,e.title,e.dno,d.dno,d.name

from employee e inner join department d

on e.dno = d.dno;

或:select e.ename,e.title,e.dno,d.dno,d.name

from employee e,department d

where d.dno = e.dno;

内连接是使用最多的一种连接类型,在连接的两表中,只有满足条件的元组才能作为结果输出。

一般的,表和表之间的连接,是通过它们所具有的共同性质的属性实现的。连接的属性名不必相同,但数据类型要兼容。

3. 外连接

外连接又分左外连接、右外连接和全外连接。

左外连接:除了返回两表中满足条件的元组之外,还返回左侧表中不匹配的元组,右侧表中以空值(NULL)替代;

右外连接:除了返回两表中满足条件的元组之外,还返回右侧表中不匹配的元组,左侧表中以空值(NULL)代替;

全外连接:除了返回两表中满足条件的元组之外,还返回左侧表中不匹配的元组,右侧表中以空值(NULL)替代,以及右侧表中不匹配的元组,左侧表中以空值(NULL)代替。

外连接的格式与内连接格式相似,在使用from进行连接的语句中,将inner join改成left joinright joinfull join

4. 自身连接

有时一些特殊的查询需要对同一个关系进行连接查询,称为表的自身连接。为了把先后查询的同一关系区分开来,可使用关系的别名。

例:SELECT emp1.Eno, emp2.Emgr

FROM Employee emp1, Employee emp2

WHERE emp1.Emgr=emp2.Eno;

此时,在select子句和where子句中出现的属性名,必须指明是emp1关系的还是emp2关系的。

 

 

 

 

 

 

 

 

 


猜你喜欢

转载自blog.csdn.net/downton97/article/details/80503547