目录
查询表中指定的字段
查询表中的某一个字段的语法格式为:
(一)
(二)
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 |
编程要求
补充代码,完成下列查询:
-
查询修了‘ Biology ’所有课程的学生姓名;
-
查询满足工资至少比‘ Biology ’系某一个教师的工资高的所有教师的姓名;
-
查询所有教师的姓名,以及他们所在系的名称和系所在建筑的名称;
-
查询在包含‘ 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 |
编程要求
补充代码,完成下列查询:
-
查询2010年春季学期教课的教师数;
-
查询2009年秋季学期讲授2门课程的教师信息;
-
查询每个系在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 |
编程要求
补充代码,完成下列查询:
-
根据工资将教师信息表(instructor)关系按工资的降序、姓名的升序排列;
-
查询大学里的最高工资;
-
找出平均工资最高的系;
-
查询教师平均工资超过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 |
编程要求
补充代码,完成下列查询:
-
查询在2009年秋季学期开课,但不在2010年春季学期开课的课程名称;
-
查询2009年秋季和2010年春季都开设的所有课程号;
-
查询2009年秋季学期和2010年春季学期开设的所有课程;
-
对于在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
之间补充代码,完成下列查询:
-
查询‘ Physics ’系的所有教师姓名及其课程号;
-
查询所有在‘ Physics ’系并且工资大于80000的教师姓名;
-
年度工资增长,请你更新各教室的工资,要求10万元以上的教师涨3%,10万元及以下的教师涨5%(注意要先更新工资大于10万的,再更新小于10万的,否则先更新小于10万的,可能更新后大于10万了);
-
创建视图,列出‘ Physics ’系在2009年秋季学期开设的所有课程段,以及课程段在哪栋建筑的哪个房间授课,视图名称为
Physics_fall_2009
。文章来源:https://www.toymoban.com/news/detail-495921.html
注意:编写查询语句时,需要查询列表所有信息时,请使用
表名.*
(由于评测原因指定这样书写,实际自己使用可以直接*
的)。
#********* 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模板网!