1、等值连接与非等值连接

当连接运算符为等号时为等值连接,当为其他运算符时为非等值连接。

等值连接:

    select studentno,sname                 --查询刘老师老师教过的学生的学号,姓名
    from student,teach_class,teacher
    where student.classno=teach_class.classno
    and teach_class.teacherno=teacher.teacherno
    and teacher.tname='刘老师'

非等值连接:

select *
from  bus_goods bg,bus_goods bg2 
where bg.price >bg2.price 

可以等值\非等值连接查询的结果理解为,将笛卡尔积的结果进行过滤,等到符合条件的

 

2、自身连接

连接操作发生在一个表以其自身进行连接。

select teacher.*--查询同时教授“c1”和“c2”号课程的教师信息
from teach_class t1,teach_class t2,teacher 
where  t1.teacherno=teacher.teacherno
and t2.teacherno=teacher.teacherno
and t1.courseno='c1'
and t2.courseno='c2'

 

3、外连接

左外连接:只保留左边关系的悬浮元组(在连接操作中被舍弃的元组称为“悬浮元组”)。如果进行等值连接查询,只要两个表进行连接的字段连接不成功,两个表中的数据就不会被查询出来,但是左外连接查询的时候,左边表的所有数据都会进行显示,即使不能与右边的表连接成功。

右外连接:只保留右边关系的悬浮元组。

select course.*--查询没有任何学生选修的课程编号和课程名称及学分
from course left outer join score on (course.courseno=score.courseno)
where score.studentno is null

在课程表与分数表的左外连接查询中,课程表的所有数据都会显示出来的,即使有些课程没有分数(没有学生选修)

添加左外连接语句:

SELECT *  
FROM course LEFT OUTER JOIN score ON (course.courseno=score.courseno)
courseno  cname         type    period  credit  studentno   courseno  usually  finall  
--------  ------------  ------  ------  ------  ----------  --------  -------  --------
201801    数据库           必修          64    2.00  2020043005  201801         77        78
201801    数据库           必修          64    2.00  2020043006  201801         79        78
201801    数据库           必修          64    2.00  2020043007  201801         89        78
201801    数据库           必修          64    2.00  2020043008  201801         93        89
201801    数据库           必修          64    2.00  2020043009  201801         78        60
201801    数据库           必修          64    2.00  2020043010  201801         78        60
201801    数据库           必修          64    2.00  2020043009  201801     (NULL)    (NULL)
201802    大数据           选修          32    2.00  2020043009  201802         73        70
201803    单片机           选修          32    2.00  2020043009  201803         99        89
201803    单片机           选修          32    2.00  2020043006  201803         90        89
201803    单片机           选修          32    2.00  2020043005  201803         87        89
201804    毛概            必修          64    4.00  2020043007  201804         69        70
201804    毛概            必修          64    4.00  2020043009  201804     (NULL)    (NULL)
201805    软件工程          选修          32    2.00  2020043005  201805         79        78
201805    软件工程          选修          32    2.00  2020043006  201805         87        89
201805    软件工程          选修          32    2.00  2020043007  201805         80        92
201806    人工智能          选修          32    2.00  (NULL)      (NULL)     (NULL)    (NULL)

不添加左外连接语句:

SELECT *
FROM course,score
WHERE course.courseno=score.courseno
courseno  cname         type    period  credit  studentno   courseno  usually  finall  
--------  ------------  ------  ------  ------  ----------  --------  -------  --------
201801    数据库           必修          64    2.00  2020043005  201801         77        78
201801    数据库           必修          64    2.00  2020043006  201801         79        78
201801    数据库           必修          64    2.00  2020043007  201801         89        78
201801    数据库           必修          64    2.00  2020043008  201801         93        89
201801    数据库           必修          64    2.00  2020043009  201801         78        60
201801    数据库           必修          64    2.00  2020043010  201801         78        60
201801    数据库           必修          64    2.00  2020043009  201801     (NULL)    (NULL)
201802    大数据           选修          32    2.00  2020043009  201802         73        70
201803    单片机           选修          32    2.00  2020043009  201803         99        89
201803    单片机           选修          32    2.00  2020043006  201803         90        89
201803    单片机           选修          32    2.00  2020043005  201803         87        89
201804    毛概            必修          64    4.00  2020043007  201804         69        70
201804    毛概            必修          64    4.00  2020043009  201804     (NULL)    (NULL)
201805    软件工程          选修          32    2.00  2020043005  201805         79        78
201805    软件工程          选修          32    2.00  2020043006  201805         87        89
201805    软件工程          选修          32    2.00  2020043007  201805         80        92

       在进行连接操作的时候,课程的表信息是存在的,但是在分数表里面找不到对应的课程的分数,如果不添加左外连接是不能显示出课程的表的信息的,添加了外连接语句后,即使连接失败依旧能够显示出相应的信息 

 

4、嵌套查询

ANY:某个值

ALL: 所有值

select studentno,sname,classno--查询入学成绩比本班平均入学成绩高的学生信息
from student s1
where point>(
select AVG(point)
from student s2
where s1.classno=s2.classno
)

 

5、内连接

隐式内连接:

select su.id ,sru.uid ,su.name 
from sys_user su ,sys_role_user sru 
where su.id = sru.uid 

显式内连接:

select su.id ,sru.uid ,su.name 
from sys_user su inner join  sys_role_user sru  on  (su.id = sru.uid )
select su.id ,sru.uid ,su.name 
from sys_user su  join  sys_role_user sru  on  (su.id = sru.uid )

隐式内连接与显式内连接的查询结果是一样的,但是隐式连接容易理解。显式连接可以减少字段的扫描,有更快的执行速度。

 

每个人都会有一段异常艰难的时光 。 生活的压力 , 工作的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。 ——杨绛