大学数据库创建与查询实战——查询

这篇具有很好参考价值的文章主要介绍了大学数据库创建与查询实战——查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

查询表中指定的字段 

 查询表中的某一个字段的语法格式为:

(一)

(二)

 GROUP BY 子句

(三)

ORDER BY :对查询结果进行排序:

头歌实验

(四)

(五) 


查询表中指定的字段 

 查询表中的某一个字段的语法格式为:

SELECT < 列名 > FROM < 表名 >;

不同字段名称之间用逗号“,”分隔开,最后一个字段后面不需要加逗号,语法格式如下:

 SELECT <字段名1>,<字段名2>,…,<字段名n> FROM <表名>;

(一)

学生表(student)

其中 dept_name 是系表(department)的外键。

ID name dept_name tot_cred
00128 Zhang Comp. Sci. 102
12345 Shankar Comp. Sci. 32
19991 Brandt History 80
23121 Chavez Finance 110
44553 Peltier Physics 56
45678 Levy Physics 46
54321 Williams Comp. Sci. 54
55739 Sanchez Music 38
70557 Snow Physics 0
76543 Brown Comp. Sci. 58
76653 Aoi Elec. Eng. 60
98765 Bourikas Elec. Eng. 98
98988 Tanaka Biology 120

选课信息表(takes)

其中 course_id,sec_id,semester,year 为开课信息表(section)的外键,ID 为学生表(student)的外键。

ID course_id sec_id semester year grade
00128 CS-101 1 Fall 2009 A
00128 CS-347 1 Fall 2009 A-
12345 CS-101 1 Fall 2009 C
12345 CS-190 2 Spring 2009 A
12345 CS-315 1 Spring 2010 A
12345 CS-347 1 Fall 2009 A
19991 HIS-351 1 Spring 2010 B
23121 FIN-201 1 Spring 2010 C+
44553 PHY-101 1 Fall 2009 B-
45678 CS-101 1 Fall 2009 F
45678 CS-101 1 Spring 2010 B+
45678 CS-319 1 Spring 2010 B
54321 CS-101 1 Fall 2009 A-
54321 CS-190 2 Spring 2009 B+
55739 MU-199 1 Spring 2010 A-
76543 CS-101 1 Fall 2009 A
76543 CS-319 2 Spring 2010 A
76653 EE-181 1 Spring 2009 C
98765 CS-101 1 Fall 2009 C-
98765 CS-315 1 Spring 2010 B
98988 BIO-101 1 Summer 2009 A
98988 BIO-301 1 Summer 2010 null

课程表(course)

course_id title dept_name credits
BIO-101 Intro. to Biology Biology 4
BIO-301 Genetics Biology 4
BIO-399 Computational Biology Biology 3
CS-101 Intro. to Computer Science Comp. Sci. 4
CS-190 Game Design Comp. Sci. 4
CS-315 Robotics Comp. Sci. 3
CS-319 Image Processing Comp. Sci. 3
CS-347 Database System Concepts Comp. Sci. 3
EE-181 Intro. to Digital Systems Elec. Eng. 3
FIN-201 Investment Banking Finance 3
HIS-351 World History History 3
MU-199 Music Video Production Music 3
PHY-101 Physical Principles Physics 4

教师信息表(instructor)

其中 dept_name 字段为系表(department)的外键。

ID name dept_name salary
10101 Srinivasan Comp. Sci. 68250
12121 Wu Finance 94500
15151 Mozart Music 42000
22222 Einstein Physics 99750
32343 El Said History 63000
33456 Gold Physics 91350
45565 Katz Comp. Sci. 78750
58583 Califieri History 65100
76543 Singh Finance 84000
76766 Crick Biology 75600
83821 Brandt Comp. Sci. 96600
98345 Kim Elec. Eng. 84000

系表(department)

dept_name building budget
Biology Watson 90000
Comp. Sci. Taylor 100000
Elec. Eng. Taylor 85000
Finance Painter 120000
History Painter 50000
Music Packard 80000
Physics Watson 70000

编程要求

补充代码,完成下列查询:

  1. 查询修了‘ Biology ’所有课程的学生姓名;

  2. 查询满足工资至少比‘ Biology ’系某一个教师的工资高的所有教师的姓名;

  3. 查询所有教师的姓名,以及他们所在系的名称和系所在建筑的名称;

  4. 查询在包含‘ Watson ’字段的大楼开课的所有系名。

#********* Begin *********#
echo "
select name
from student
where  ID in
     (  select ID
        from takes,course
        where dept_name='Biology'
            and  takes.course_id=course.course_id
     );

select name
from instructor
where salary >
(  
    select salary
    from  instructor
    where dept_name='Biology'
);

select name, instructor.dept_name,building
from  instructor,department
where  instructor.dept_name= department.dept_name
;

select dept_name
from  department
where building='Watson';


"
#********* End *********#

(二)

 GROUP BY 子句

GROUP BY 子句提供了对数据进行分组的功能,使用GROUP BY 子句可将统计控制在组这一级。分组的目的是细化聚合函数的作用对象,可以一次用多个列进行分组。

教学信息表(teaches)

其中 course_id,sec_id,semester,year 字段为开课信息表(section)的外键,ID 为教师信息表(instructor)的外键。

ID course_id sec_id semester year
76766 BIO-101 1 Summer 2009
76766 BIO-301 1 Summer 2010
10101 CS-101 1 Fall 2009
45565 CS-101 1 Spring 2010
83821 CS-190 1 Spring 2009
83821 CS-190 2 Spring 2009
10101 CS-315 1 Spring 2010
45565 CS-319 1 Spring 2010
83821 CS-319 2 Spring 2010
10101 CS-347 1 Fall 2009
98345 EE-181 1 Spring 2009
12121 FIN-201 1 Spring 2010
32343 HIS-351 1 Spring 2010
15151 MU-199 1 Spring 2010
22222 PHY-101 1 Fall 2009

教师信息表(instructor)

其中 dept_name 字段为系表(department)的外键。

ID name dept_name salary
10101 Srinivasan Comp. Sci. 68250
12121 Wu Finance 94500
15151 Mozart Music 42000
22222 Einstein Physics 99750
32343 El Said History 63000
33456 Gold Physics 91350
45565 Katz Comp. Sci. 78750
58583 Califieri History 65100
76543 Singh Finance 84000
76766 Crick Biology 75600
83821 Brandt Comp. Sci. 96600
98345 Kim Elec. Eng. 84000

编程要求

补充代码,完成下列查询:

  1. 查询2010年春季学期教课的教师数;

  2. 查询2009年秋季学期讲授2门课程的教师信息;

  3. 查询每个系在2010年春季学期讲授至少一门课的教师人数。

#********* Begin *********#
echo "
SELECT count(distinct ID)
FROM teaches
WHERE semester = 'spring' AND year ='2010';

SELECT instructor.ID ,instructor.name,instructor.dept_name
FROM instructor
WHERE ID in(select ID from teaches where semester='Fall' and year='2009'
GROUP BY ID having count(ID)>=2);

SELECT dept_name,count(distinct instructor.ID) as instr_count
FROM instructor  join teaches on instructor.ID = teaches.ID
WHERE semester = 'spring' and year = '2010'
GROUP BY dept_name;



"
#********* End *********#

(三)

ORDER BY :对查询结果进行排序:

语法格式如下:

ORDER BY {<列名> | <表达式> | <位置>} [ASC|DESC]

语法说明如下。

1) 列名

指定用于排序的列。可以指定多个列,列名之间用逗号分隔。

2) 表达式

指定用于排序的表达式。

3) 位置

指定用于排序的列在 SELECT 语句结果集中的位置,通常是一个正整数。

4) ASC|DESC

关键字 ASC 表示按升序分组,关键字 DESC 表示按降序分组,其中 ASC 为默认值。这两个关键字必须位于对应的列名、表达式、列的位置之后。

 【实例】根据工资将教师信息表(instructor)关系按工资的降序、姓名的升序排列;

SELECT instructor.* 
FROM instructor
ORDER BY salary desc, name asc;

头歌实验

教师信息表(instructor)

其中 dept_name 字段为系表(department)的外键。

ID name dept_name salary
10101 Srinivasan Comp. Sci. 68250
12121 Wu Finance 94500
15151 Mozart Music 42000
22222 Einstein Physics 99750
32343 El Said History 63000
33456 Gold Physics 91350
45565 Katz Comp. Sci. 78750
58583 Califieri History 65100
76543 Singh Finance 84000
76766 Crick Biology 75600
83821 Brandt Comp. Sci. 96600
98345 Kim Elec. Eng. 84000

编程要求

补充代码,完成下列查询:

  1. 根据工资将教师信息表(instructor)关系按工资的降序、姓名的升序排列;

  2. 查询大学里的最高工资;

  3. 找出平均工资最高的系;

  4. 查询教师平均工资超过50000的系,并按系名升序和平均工资降序排序。

注意:编写查询语句时,需要查询列表所有信息时,请使用表名.*(由于评测原因指定这样书写,实际自己使用可以直接*的)。文章来源地址https://www.toymoban.com/news/detail-495921.html

#********* Begin *********#
echo "
select instructor.* 
from instructor order by salary desc, name asc;

select max(salary) 
from instructor;

select dept_name 
from instructor group by dept_name having avg(salary) >= all
(select avg(salary) from instructor group by dept_name);

select dept_name,avg(salary) as avg_salary 
from instructor group by dept_name
having avg(salary)>50000 order by dept_name asc, avg_salary desc;


"
#********* End *********#

(四)

开课信息表(section)

其中 course_id 为课程表(course)的外键,building,room_number 为教室表(classroom)的外键。

course_id sec_id semester year building room_number time_slot_id
BIO-101 1 Summer 2009 Painter 514 B
BIO-301 1 Summer 2010 Painter 514 A
CS-101 1 Fall 2009 Packard 101 H
CS-101 1 Spring 2010 Packard 101 F
CS-190 1 Spring 2009 Taylor 3128 E
CS-190 2 Spring 2009 Taylor 3128 A
CS-315 1 Spring 2010 Watson 120 D
CS-319 1 Spring 2010 Watson 100 B
CS-319 2 Spring 2010 Taylor 3128 C
CS-347 1 Fall 2009 Taylor 3128 A
EE-181 1 Spring 2009 Taylor 3128 C
FIN-201 1 Spring 2010 Packard 101 B
HIS-351 1 Spring 2010 Painter 514 C
MU-199 1 Spring 2010 Packard 101 D
PHY-101 1 Fall 2009 Watson 100 A

选课信息表(takes)

其中 course_id,sec_id,semester,year 为开课信息表(section)的外键,ID 为学生表(student)的外键。

ID course_id sec_id semester year grade
00128 CS-101 1 Fall 2009 A
00128 CS-347 1 Fall 2009 A-
12345 CS-101 1 Fall 2009 C
12345 CS-190 2 Spring 2009 A
12345 CS-315 1 Spring 2010 A
12345 CS-347 1 Fall 2009 A
19991 HIS-351 1 Spring 2010 B
23121 FIN-201 1 Spring 2010 C+
44553 PHY-101 1 Fall 2009 B-
45678 CS-101 1 Fall 2009 F
45678 CS-101 1 Spring 2010 B+
45678 CS-319 1 Spring 2010 B
54321 CS-101 1 Fall 2009 A-
54321 CS-190 2 Spring 2009 B+
55739 MU-199 1 Spring 2010 A-
76543 CS-101 1 Fall 2009 A
76543 CS-319 2 Spring 2010 A
76653 EE-181 1 Spring 2009 C
98765 CS-101 1 Fall 2009 C-
98765 CS-315 1 Spring 2010 B
98988 BIO-101 1 Summer 2009 A
98988 BIO-301 1 Summer 2010 null

学生表(student)

其中 dept_name 是系表(department)的外键。

ID name dept_name tot_cred
00128 Zhang Comp. Sci. 102
12345 Shankar Comp. Sci. 32
19991 Brandt History 80
23121 Chavez Finance 110
44553 Peltier Physics 56
45678 Levy Physics 46
54321 Williams Comp. Sci. 54
55739 Sanchez Music 38
70557 Snow Physics 0
76543 Brown Comp. Sci. 58
76653 Aoi Elec. Eng. 60
98765 Bourikas Elec. Eng. 98
98988 Tanaka Biology 120

编程要求

补充代码,完成下列查询:

  1. 查询在2009年秋季学期开课,但不在2010年春季学期开课的课程名称;

  2. 查询2009年秋季和2010年春季都开设的所有课程号;

  3. 查询2009年秋季学期和2010年春季学期开设的所有课程;

  4. 对于在2009年讲授的每个课程段,如果该课程段至少有两名学生选课,查询该课程段信息和选修该课程段的所有学生的总分数( tot_cred )的平均值。

注意:编写查询语句时,需要查询列表所有信息时,请使用表名.*(由于评测原因指定这样书写,实际自己使用可以直接*的)。

#********* Begin *********#
echo "
select distinct course_id 
from section 
where semester='Fall' and year=2009 and
course_id not in (select course_id from section where semester='Spring' and
year=2010);

select course_id 
from section as S 
where year=2009 and semester='Fall' and exists
(select section.* from section as T where year=2010 and semester='Spring' and
S.course_id=T.course_id);

select course_id 
from section 
where year=2009 and semester='Fall' union all select
course_id from section where year=2010 and semester='Spring';

select course_id,semester,year,sec_id,avg(tot_cred) 
from takes join student join department on takes.ID = student.ID 
where year=2009 group by course_id,semester,year,sec_id having count(takes.ID)>=13;
 

"
#********* End *********#

(五) 

教师信息表(instructor)

其中 dept_name 字段为系表(department)的外键。

ID name dept_name salary
10101 Srinivasan Comp. Sci. 68250
12121 Wu Finance 94500
15151 Mozart Music 42000
22222 Einstein Physics 99750
32343 El Said History 63000
33456 Gold Physics 91350
45565 Katz Comp. Sci. 78750
58583 Califieri History 65100
76543 Singh Finance 84000
76766 Crick Biology 75600
83821 Brandt Comp. Sci. 96600
98345 Kim Elec. Eng. 84000

教学信息表(teaches)

其中 course_id,sec_id,semester,year 字段为开课信息表(section)的外键,ID 为教师信息表(instructor)的外键。

ID course_id sec_id semester year
76766 BIO-101 1 Summer 2009
76766 BIO-301 1 Summer 2010
10101 CS-101 1 Fall 2009
45565 CS-101 1 Spring 2010
83821 CS-190 1 Spring 2009
83821 CS-190 2 Spring 2009
10101 CS-315 1 Spring 2010
45565 CS-319 1 Spring 2010
83821 CS-319 2 Spring 2010
10101 CS-347 1 Fall 2009
98345 EE-181 1 Spring 2009
12121 FIN-201 1 Spring 2010
32343 HIS-351 1 Spring 2010
15151 MU-199 1 Spring 2010
22222 PHY-101 1 Fall 2009

课程表(course)

course_id title dept_name credits
BIO-101 Intro. to Biology Biology 4
BIO-301 Genetics Biology 4
BIO-399 Computational Biology Biology 3
CS-101 Intro. to Computer Science Comp. Sci. 4
CS-190 Game Design Comp. Sci. 4
CS-315 Robotics Comp. Sci. 3
CS-319 Image Processing Comp. Sci. 3
CS-347 Database System Concepts Comp. Sci. 3
EE-181 Intro. to Digital Systems Elec. Eng. 3
FIN-201 Investment Banking Finance 3
HIS-351 World History History 3
MU-199 Music Video Production Music 3
PHY-101 Physical Principles Physics 4

开课信息表(section)

其中 course_id 为课程表(course)的外键,building,room_number 为教室表(classroom)的外键。

course_id sec_id semester year building room_number time_slot_id
BIO-101 1 Summer 2009 Painter 514 B
BIO-301 1 Summer 2010 Painter 514 A
CS-101 1 Fall 2009 Packard 101 H
CS-101 1 Spring 2010 Packard 101 F
CS-190 1 Spring 2009 Taylor 3128 E
CS-190 2 Spring 2009 Taylor 3128 A
CS-315 1 Spring 2010 Watson 120 D
CS-319 1 Spring 2010 Watson 100 B
CS-319 2 Spring 2010 Taylor 3128 C
CS-347 1 Fall 2009 Taylor 3128 A
EE-181 1 Spring 2009 Taylor 3128 C
FIN-201 1 Spring 2010 Packard 101 B
HIS-351 1 Spring 2010 Painter 514 C
MU-199 1 Spring 2010 Packard 101 D
PHY-101 1 Fall 2009 Watson 100 A

编程要求

在右侧编辑器中的Begin-End之间补充代码,完成下列查询:

  1. 查询‘ Physics ’系的所有教师姓名及其课程号;

  2. 查询所有在‘ Physics ’系并且工资大于80000的教师姓名;

  3. 年度工资增长,请你更新各教室的工资,要求10万元以上的教师涨3%,10万元及以下的教师涨5%(注意要先更新工资大于10万的,再更新小于10万的,否则先更新小于10万的,可能更新后大于10万了);

  4. 创建视图,列出‘ Physics ’系在2009年秋季学期开设的所有课程段,以及课程段在哪栋建筑的哪个房间授课,视图名称为Physics_fall_2009

注意:编写查询语句时,需要查询列表所有信息时,请使用表名.*(由于评测原因指定这样书写,实际自己使用可以直接*的)。

#********* Begin *********#
echo "
select instructor.name,teaches.course_id 
from instructor,teaches 
where instructor.ID=teaches.ID and dept_name='Physics';

select name 
from instructor 
where dept_name='Physics' and salary>80000;
update instructor set salary = case when salary <= 100000 then salary*1.05 else salary*1.03 end;
create view Physics_fall_2009 as select course.course_id,building,room_number from course,section where course.course_id = section.course_id and course.dept_name='Physics' and section.semester='Fall' and section.year='2009';


"
#********* End *********#

到了这里,关于大学数据库创建与查询实战——查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包