SQL数据库连接查询

连接查询
连接概述:

定义:根据各个数据库表之间的逻辑关系从二个或多个数据表中检索数据。
注 意:1、连接的两个字段必须数据类型和值域相同。
2、尽量在表的主键上的基础上,指定连接条件。
连接分类
连接查询分为以下几类:
内连接:基本内连接、多表连接、自连接
外连接:左外连接、右外连接、全外连接、交叉连接
内连接概述
内连接方式:

 1、在select语句的where子句中使用比较运算符给出连接条件对表进行连接.
 2、用表名1 inner join 表名2 on 连接条件 语句进行连接,join指定需要连接的数据表,on指定连接条件(inner可省略)。
语法:

select 字段1,字段2,……
from 表1 inner join 表2 on 连接条件

内连接— …inner join… on…
【例】查找学生数据库中每个学生的情况和选修的课程情况

select * from student inner join subject on student.学号=subject.学号

【例】查找选修了课程号为2且成绩在80分以上的学生姓名和成绩

select 姓名,成绩 from student inner join subject  
on student.学号=subject.学号 
where 课程号=2 and 成绩>=80

多表连接
功能:多表连接主要用于两个以上的表之间的查询。
语法:

select…from 表1 join 表2 on 条件1
join 表3 on 条件2 
join 表4 on 条件3 
……

多表内连接案例
【例】从数据库grade中查询学生的姓名、课程名和成绩

select  姓名,课程名,成绩    from student 
    join subject  on student.学号=subject.学号
join course    on course.课程号=subject.课程号

*自连接(特殊的内连接)
功能:
自连接查询一个表中各行之间的关系。主要用于比较一个表中  各个记录之间的值,规范化的数据库中很少使用自连接
【例】查找选修了不同课程成绩相同的学生的学号、课程号和成绩

select a.学号,a.课程号,a.成绩 
	from subject a join subject b   
  on a.成绩=b.成绩 and a.课程号<>b.课程号

外连接

left outer join

左外连接,结果集中除了包括满足连接条件的行外,还包括左表所有行。

right outer join

右外连接,结果集中除了包括满足连接条件的行外,还包括右表所有行。

full outer join

全外连接,结果集中除了包括满足连接条件的行外,还包括两个表的所有行。

select  字段名1,字段名2……字段n  from  
          表1 left outer join 表2 on 连接条件
     ----表1 right outer join 表2 on 
     ----表1 full outer join 表2 on

左/右/全外连接案例
【例】查找所有学生情况及他们选修的课程号,若学生未选修任何课程,也要包括其情况。

select student.*,课程号 from student left outer join subject           
on student.学号=subject.学号

查找被选修了的课程的选修情况和所有开设的课程名。

select subject.*,课程名 from subject right join course
on course.课程号=subject.课程号

cross join交叉连接(乘集)
功能:

  交叉连接将从被连接的表中返回所有可能的记录组合(如:一个表8条记录,另一个表9条记录,结果将返回72条 记录)。一般用于数据库创建测试数据,或为清单及企业模版创建所有可能的组合数据。
语法:

select 字段1,字段2,……
   from 表1 cross join 表2

【例】返回student表和course表所有可能记录的组合

select 学号,姓名,课程号,课程名
from student cross join course

--提示cross join可以基于两个以上的表,不能带where语句
内连接和外连接的区别
内连接必满足所有条件;
  外连接在满足条件同时,还要满足方向性中的所有行

posted @ 2017-10-31 14:53  CharmingDang  阅读(332)  评论(0编辑  收藏  举报