oracle数据库的连接

连接是二元运算,可以对两个或多个表进行查询,结果通常是含有参加连接运算的两个或多个表的指点列的表

在SQL中,连接有两大类表示形式,一是符合SQL标准连接谓词(where)的表达形式,二是oracle扩展的使用关键字JION的表达形式。

 

1.连接谓词

可以在select语句的where子句中使用比较运算符给出连接条件对表进行连接,将这种表示形式称为连接谓词表示形式。

--查找数据库每个班的学生信息。
select 
* 
from 
school_students,school_class
where stu_class=class_id;

连接谓词中的两个列(字段)称为连接字段,它们必须是可比的,连接谓词的比较符可以是<,<=,=,>,>=,!=和<>,当比较符为=是就是等值连接,若在目标列中去除相同的字段名,则为自然连接。

--查找选修了100014课程且成绩在70分以上的学生姓名及成绩。
select
stu_name 姓名,
result_number 成绩 
from
school_students,
school_result
where 
result_stu=stu_id
and result_course='100014'
and result_number>=70;

连接和子查询可能都要涉及两个或多个表,区别是:连接可以合并两个或多个表,而带子查询的select语句的结果只能来自一个表。子查询的结果是用来作为选择结果数据时进行参照的。

--查找选修了“数据库技术及应用”课程且成绩在70分以上的学生学号、姓名、---课程名及成绩。
select
stu_id 学号,
stu_name 姓名,
course_name 课程名,
result_number 成绩
from
school_students,
school_course,
school_result
where
stu_id=result_stu
and course_id=result_course
and course_name='数据库技术及应用'
and result_number>=70;

 

2.以JOIN关键字指定的连接

oracle的PL/SQL语句扩展以jion关键字指定连接的表示方法,增强了表的连接运算能力。

内连接:按照On所指定的连接条件合并两个表,返回满足条件的行

--查找数据库每个班的学生信息。
 select
*
from
school_students
  join school_class
    on class_id=stu_class
;

内连接还可以用于连接多个表的连接

--查找选修了100014课程且成绩在70分以上的学生姓名及成绩。
 select
stu_name 姓名,
result_number 成绩
from
SCHOOL_STUDENTS
  join school_result
    on stu_id=result_stu
  where 
  result_course='100014'
  and result_number>=70;

外连接:外连接的结果表不但包含满足连接条件的行,还包括相应表中的所有行。

外连接包括三种:

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

--查找所有班级学生情况及,若班级没有学生,也要显示其情况。
select
class_name,stu_name
from
SCHOOL_CLASS
  left join  school_students
  on stu_class=class_id;

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

--查找所有班级学生情况及,学生没有班级,也要显示其情况。
select
class_name,stu_name
from
SCHOOL_CLASS
  right join  school_students
  on stu_class=class_id;

3 完全链接:结果表除了包括满足连接条件的行外,还包括两个表的所有行

4.交叉连接:交叉连接实际上是将两个表进行笛卡尔积运算,结果表是由第一个表的每行与第二个表的每一行拼接后形成的表,因此结果表的行数等于两个表行数之积。

--列出学生所有可能的选课情况。
select
class_name,stu_name
from
SCHOOL_CLASS
  cross join  school_students
;

注意:交叉连接也可以使用where子句进行条件限定

 

posted @ 2020-06-19 20:17  新来的一名小博客  阅读(451)  评论(0编辑  收藏  举报