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

原创 2007年09月19日 09:49:00

表的连接查询

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

在一个查询中,当需要对两个或多个表连接时,可以指定连接列,在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

 

懒人摘抄(内容转自CSDN资源中教程)-数据查询00

数据查询数据库存在的意义在于将数据组织在一起,以方便查询。“查询”的含义就是用来描述从数据库中获取数据和操纵数据的过程。SQL语言中最主要、最核心的部分是它的查询功能。查询语言用来对己经存在于数据库中...
  • popkiler
  • popkiler
  • 2007年09月19日 09:44
  • 385

懒人摘抄(内容转自CSDN资源中教程)-修改表

修改表SQL语言提供了ALTER TABLE语句来修改表的结构。基本语法如下:ALTER TABLE table_name  ADD [column_name data_type]       [PR...
  • popkiler
  • popkiler
  • 2007年09月19日 09:42
  • 366

懒人摘抄(内容转自CSDN资源中教程)-删除表

删除关联和表使用SQL语言要比使用企业管理器删除表容易得多。删除表的语法如下:DROP TABLE table_name其中,“table_name”指出要删除表的名称。例如,要删除book表,可执行...
  • popkiler
  • popkiler
  • 2007年09月19日 09:43
  • 354

懒人摘抄(内容转自CSDN资源中教程)-建表

表的创建使用CREATE TABLE语句来建立表,其语法如下:CREATE TABLE table_name(    column_namel data_type [NULL | NOT NULL] ...
  • popkiler
  • popkiler
  • 2007年09月19日 09:41
  • 427

懒人摘抄(内容转自CSDN资源中教程)-数据查询08-带EXISTS测试的子查询

带EXISTS测试的子查询   在子查询中,还可以使用EXISTS,它一般用在WHERE子句中,其后紧跟一个SQL子查询,从而构成一个条件,当该子查询至少存在一个返回值时,这个条件为真(.T.),否则...
  • popkiler
  • popkiler
  • 2007年09月19日 09:51
  • 431

懒人摘抄(内容转自CSDN资源中教程)-数据查询02-选择查询

选择查询选择查询就是指定查询条件,只从表提取或显示满足该查询条件的记录。为了选择表中满足查询条件的某些行,可以使用SQL命令中的WHERE子句。WHERE子句的查询条件是一个逻辑表达式,它是由多个关系...
  • popkiler
  • popkiler
  • 2007年09月19日 09:46
  • 353

懒人摘抄(内容转自CSDN资源中教程)-数据查询04-使用聚合函数

使用聚合函数   聚合函数用于实现数据统计等功能,常月的聚合函数如表5.1所列。表5.1 聚合函数 函数名 ...
  • popkiler
  • popkiler
  • 2007年09月19日 09:48
  • 485

懒人摘抄(内容转自CSDN资源中教程)-数据查询07-子查询

相关子查询在前面的例子中,每个子查询仅执行一次,返回的值为主查询的WHERE子句所用。在有的查询中,子查询不只执行一次,例如,要显示其成绩比该课程平均成绩高的成绩表,其主查询为:SELECT sno,...
  • popkiler
  • popkiler
  • 2007年09月19日 09:50
  • 469

懒人摘抄(内容转自CSDN资源中教程)-数据查询01-投影查询

投影查询使用SELECT语句可以选择查询表中的任意列,其中,“列表名”指出要检索的列的名称,可以为一个或多个列。当为多个列时,中间要用“,”分隔。FROM子句指出从什么表中提取数据,如果从多个表中取数...
  • popkiler
  • popkiler
  • 2007年09月19日 09:45
  • 384

懒人摘抄(内容转自CSDN资源中教程)-数据查询06-子查询

子查询当一个查询是另一个查询的条件时,称之为子查询。子查询可以使用几个简单命令构造功能强大的复合命令。子查询最常用于SQL命令的WHERE子句中,我们按照子查询返回单个值还是一组值(此时子查询前应接关...
  • popkiler
  • popkiler
  • 2007年09月19日 09:49
  • 476
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:懒人摘抄(内容转自CSDN资源中教程)-数据查询05-表的连接查询
举报原因:
原因补充:

(最多只允许输入30个字)