数据库 复杂查询操作

编程入门 行业动态 更新时间:2024-10-11 23:19:27

数据库 复杂查询<a href=https://www.elefans.com/category/jswz/34/1770947.html style=操作"/>

数据库 复杂查询操作

(1)根据学生、课程和成绩表,输出“计算机”课程的成绩单,包括姓名和分数。

SELECT  姓名,分数  FROM 学生 A  JOIN 成绩 B ON(A.学号=B.学号) JOIN 课程 C ON(B.课程编号=C.课程编号) WHERE  C.课程名称='计算机’

(2)查询所开课程的选修情况,包括没有任何学生选修的课程。

​
SELECT  学号, 课程名称, 分数FROM 成绩 A  RIGHT OUTER JOIN 课程 B ON (A.课程编号=B.课程编号)​

(3)查询每位学生选修了课程的学生信息(显示:学号,姓名,课程号,课程名,成绩)。

SELECT  C.学号,C.姓名,A.课程编号,B.课程名称,A.分数FROM  成绩 A,课程 B,学生 CWHERE A.课程编号= B.课程编号 AND A.学号=C.学号

(4)查询没有选修一门课程的学生的基本信息。

SELECT  学号,姓名FROM 学生WHERE NOT EXISTS(SELECT *FROM 课程WHERE EXISTS(SELECT *FROM 成绩WHERE 学号=学生.学号 AND 课程编号=课程.课程编号));

(5)显示男学生的姓名和所在的系名称。

SELECT 姓名,系名称FROM 学生,系WHERE 学生.系编号=系.系编号 AND  性别='男'

(6)列出教工中比姜立伟工资低的老师姓名和工资。

SELECT  R.姓名,R.工资FROM   教工 R, 教工 SWHERE  R.工资<S.工资 AND  S.姓名='姜立伟'

(7)统计各科课程号、选课人数、平均分、最高分、最低分,并存入新表statscore.

CREATE TABLE statscore(课程编号 char(8),选课人数 NUMERIC(10,0),最高分 NUMERIC(4,1),最低分 NUMERIC(4,1),平均分 NUMERIC(4,1));INSERTINTO statscore(课程编号,选课人数,平均分,最高分,最低分)SELECT 课程编号,COUNT(学号)AS 选课人数,MAX(分数)AS 最高分,MIN(分数)AS 最低分,AVG(分数)AS 平均分FROM 成绩GROUP BY 课程编号ORDER BY 课程编号

2、假设有贷款关系如图1所示。

帐号

姓名

金额

G10020

关平之

20033.00

T20078

李连玉

K65743

姜海洋

30092.00

H89765

田平平

30200.60

H76890

方一华

19080.40

图1 贷款关系

(4)创建贷款关系。

create table  贷款
( 帐号 char(20),姓名  char(8),金额  char(10))
insert into 贷款 values('G10020','关平之', '20033.0' )
insert into 贷款(帐号,姓名) values('T20078','李连玉' )
insert into 贷款 values('T65743','姜海洋', '30092.00 ')
insert into 贷款 values('H89765','田平平', '30200.60')
insert into 贷款 values('H76890','方一华', '19080.40')

(5)找出贷款表中金额为空值的帐号和姓名。

SELECT  帐号,姓名
FROM 贷款
WHERE 金额 IS NULL

(6)找出贷款表中贷款金额非空的帐号和姓名。

SELECT  帐号,姓名
FROM 贷款
WHERE 金额 IS NOT NULL


  3、 假设有导师与研究生2个表,如图2所示。

图2 导师与研究生表

建立导师表:

CREATE TABLE 导师( 教工号  char(10),姓名  char(8),性别 char(2))insert into 导师 values('T001','江海', '男' )insert into 导师 values('T002','代宁', '女')insert into 导师 values('T005','潘涛', '男')insert into 导师 values('T008','田立', '女')

建立研究生表:

CREATE TABLE 研究生( 学号  char(10),姓名  char(8),导师号 char(10))insert into 研究生 values('99001','李南', 'T001' )insert into 研究生 values('99002','刘星', 'T002')insert into 研究生 values('99003','王海', 'T002')insert into 研究生 values('99004','张力', 'T001')insert into 研究生(学号,姓名) values('99006','郭天')

(7) 查询研究生与其导师的情况。

SELECT  *  
FROM  研究生 A INNER JOIN 导师 B ON A.导师号= B.教工号

(8)计算导师与研究生关系的笛卡儿乘积。

SELECT  *FROM 导师 CROSS JOIN 研究生

(9)查询教师指导研究生的情况,包括不指导研究生的教师。

SELECT  *
FROM  导师 A  LEFT OUTER JOIN 研究生 B  ON (A.教工号= B.导师号)

(10)查询研究生和教师的情况,包括没有导师的研究生和没有指导研究生的教师。

SELECT * 
FROM 研究生 A FULL OUTER JOIN 导师 B ON (A.导师号=B.教工号)

(11)查询研究生与其导师的情况。

SELECT  *  
FROM  研究生 A INNER JOIN 导师 B ON A.导师号= B.教工号

实验分析 

(1)常见错误:因为该列没有包含在聚合函数或 GROUP BY 子句中。这是因为即指定 GROUP BY 时,选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中,或者 GROUP BY 表达式必须与选择列表表达式完全匹配。

(2)注意:在各个表中插入数据的顺序,首先在父表中插入数据,然后在子表中插入数据。另外,由于表的定义中包含完整性约束的定义,所以,当主码重复,或者外码不是被参照表的有效值时,系统将拒绝插入的数据。

(3)查询的基本原则:①FROM子句应当出现所有的表名。 ②WHERE子句应定义一个条件表达式,限定查询只能返回满足条件的记录。 ③当列名为多个表共有时,列名必须被限制。

更多推荐

数据库 复杂查询操作

本文发布于:2024-03-13 06:14:31,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1733346.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:操作   数据库

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!