关闭

懒人摘抄(内容转自CSDN资源中教程)-数据查询05-表的连接查询

484人阅读 评论(0) 收藏 举报

表的连接查询

    在数据查询中,经常涉及到提取两个或多个表的数据,这就需要使用表的连接来实现若干个表数据的联合查询。

在一个查询中,当需要对两个或多个表连接时,可以指定连接列,在WHERE子句中给出连接条件,在FROM子句中指定要连接的表,其格式如下:

SELECT 列名1,列名2

FROM 1,表2

WHERE 连接条件

对于连接的多个表通常存在公共列,为了区别是哪个表中的列,在连接条件中通过表名前缀指定连接列,例如,teacher.tno表示teacher表的tno列,student.sno表示student表的sno列,由此来区别连接列所在的表。

5.14查询所有学生的snamecnodegree列。

SELECT student.sname,score.cno,score.degree

FROM student,score

WHERE student.sno=score.sno

本例执行结果如下:

sname    cno        degree              

-------- ---------- -----------

陆君       3-245      86

匡明       3-245      75

王芳       3-245      68

陆君       3-105      92

匡明       3-105      88

王芳       3-105      76

李军       3-105      64

王丽       3-105      91

曾华       3-105      78

李军       6-166      85

王丽       6-166      79

曾华       6-166      81

SQL为了简化输入,允许在查询中使用表的别名,以缩写表名,我们可以在FROM子句中为表定义一个临时别名,然后在查询中引用。

    根据连接条件分为等值连接和非等值连接。所谓等值连接,是指表之间通过“等于”关系连接起来,产生一个连接临时表,然后对该临时表进行处理后生成最终结果。

5.15查询所有学生的snocnamedegree列。

SELECT x.sno,y.cname,x.degree

FROM score x,course y

WHERE x.cno=y.cno

本例执行结果如下:

sno   cname               degree  

----- ---------------- --------

103   操作系统             86

105   操作系统             75

109   操作系统             68

103   计算机导论           92

105   计算机导论           88

109   计算机导论           76

101   计算机导论           64

107   计算机导论           91

108   计算机导论           78

101   数字电路             85

107   数字电路             79

108   数字电路             81

5.16查询95033”班所选课程的平均分。

SELECT y.cno,avg(y.degree)AS '平均分'

FROM student x,score y

WHERE x.sno=y.sno and x.class='95033'

GROUP BY y.cno

本例执行结果如下:

cno        平均分                                     

---------- --------------

3-105      77.666666

6-166      81.666666

所谓非等值连接,是指表之间的连接关系不是“等于”,而是其他关系。通过指定的非等值关系将两个表连接起来的,产生一个连接临时表,然后对该临时表进行处理后生成最终结果。

5.17假设使用如下命令建立了一个grade的表:

CREATE TABLE grade(low int,upp int,rank char(1))

INSERT INTO grade VALUES(90,100,'A')

INSERT INTO grade VALUES(80,89,'B')

INSERT INTO grade VALUES(70,79,'C')

INSERT INTO grade VALUES(60,69,'D')

INSERT INTO grade VALUES(0,59,'E')

查询所有学生的nocnorank列:

SELECT sno,cno,rank

FROM score,grade

WHERE degree between low and upp

ORDER BY rank

本例执行结果如下:

sno   cno        rank

----- ---------- ----

103   3-105      A

107   3-105      A

103   3-245      B

105   3-105      B

101   6-166      B

108   6-166      B

105   3-245      C

109   3-105      C

108   3-105      C

107   6-166      C

109   3-245      D

101   3-105      D

在数据查询中有时需要将同一个表进行连接,这种连接称之为自连接,进行自连接就如同两个分开的表一样,可以把一个表的某行与同一表中的另一行连接起来。

5.18查询选学“3-105”课程的成绩高于“109”号学生成绩的所有学生记录,并按成绩从高到低排列。

SELECT x.cno,x.sno,x.degree

FROM score x,score y

WHERE x.cno='3-105' and x.degree>y.degree and y.sno='109' and y.cno='3-105'

ORDER BY x.degree DESC

本例执行结果如下:

cno        sno   degree        

---------- ----- -----------

3-105      103   92

3-105      107   91

3-105      105   88

3-105      108   78

5.19查询成绩高于学号“109”的课程号“3-105”的成绩的所有记录,并按成绩从低到高排列。

SELECT x.cno,x.sno,x.degree

FROM score x,score y

WHERE x.degree>y.degree and y.sno='109' and y.cno='3-105'

ORDER BY x.degree

本例执行结果如下:

cno        sno   degree              

---------- ----- -----------

3-105      108   78

6-166      107   79

6-166      108   81

6-166      101   85

3-245      103   86

3-105      105   88

3-105      107   91

3-105      103   92

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:433991次
    • 积分:6963
    • 等级:
    • 排名:第3290名
    • 原创:250篇
    • 转载:100篇
    • 译文:0篇
    • 评论:42条
    最新评论