四、數據庫及SQL部分:(共4題:基礎3道,中等難度1道)
106、有3個表(15分鐘):【基礎】
Student 學生表 (學號,姓名,性別,年齡,組織部門)
Course 課程表 (編號,課程名稱)
Sc 選課表 (學號,課程編號,成績)
表結構如下:
1)寫一個SQL語句,查詢選修了’計算機原理’的學生學號和姓名(3分鐘)
2)寫一個SQL語句,查詢’周星馳’同學選修了的課程名字(3分鐘)
3)寫一個SQL語句,查詢選修了5門課程的學生學號和姓名(9分鐘)
答:1)SQL語句如下:
select stu.sno, stu.sname from Student stu
where (select count(*) from sc where sno=stu.sno and cno =
(select cno from Course where cname='計算機原理')) != 0;
2)SQL語句如下:
select cname from Course
where cno in ( select cno from sc where sno =
(select sno from Student where sname='周星馳'));
3)SQL語句如下:
select stu.sno, stu.sname from student stu
where (select count(*) from sc where sno=stu.sno) = 5;
107、有三張表,學生表S,課程C,學生課程表SC,學生可以選修多門課程,一門課程可以被多個學生選修,通過SC表關聯。【基礎】
1)寫出建表語句;
2)寫出SQL語句,查詢選修了所有選修課程的學生;
3)寫出SQL語句,查詢選修了至少5門以上的課程的學生。
答:1)建表語句如下(mysql數據庫):
create table s(id integer primary key, name varchar(20));
create table c(id integer primary key, name varchar(20));
create table sc(
sid integer references s(id),
cid integer references c(id),
primary key(sid,cid)
);
2)SQL語句如下:
select stu.id, stu.name from s stu
where (select count(*) from sc where sid=stu.id)
= (select count(*) from c);
3)SQL語句如下:
select stu.id, stu.name from s stu
where (select count(*) from sc where sid=stu.id)>=5;
108、數據庫表(Test)結構如下:【基礎】
ID NAME AGE MANAGER(所屬主管人ID)
106 A 30 104
109 B 19 104
104 C 20 111
107 D 35 109
112 E 25 120
119 F 45 NULL
要求:列出所有年齡比所屬主管年齡大的人的ID和名字?
答:SQL語句如下:
select employee.name from test employee
where employee.age > (select manager.age from test manager
where manager.id=employee.manager);
109、有如下兩張表:【中等難度】
表city: 表state:
CityNo |
CityName |
StateNo |
BJ |
北京 |
(Null) |
SH |
上海 |
(Null) |
GZ |
廣州 |
GD |
DL |
大連 |
LN |
State No |
State Name |
GD |
廣東 |
LN |
遼寧 |
SD |
山東 |
NMG |
內蒙古 |
欲得到如下結果:
City No City Name State No State Name
BJ 北京 (Null) (Null)
DL 大連 LN 遼寧
GZ 廣州 GD 廣東
SH 上海 (Null) (Null)
寫相應的SQL語句。
答:SQL語句爲:
SELECT C.CITYNO, C.CITYNAME, C.STATENO, S.STATENAME
FROM CITY C, STATE S
WHERE C.STATENO=S.STATENO(+)
ORDER BY(C.CITYNO);