1、有3个表,表结构如下:
Student学生表(学号,姓名,性别,年龄,组织部门)
Course课程表(编号,课程名称)
Sc选课表(学号,课程编号,成绩)。
1)写一个SQL 语句,查询选修了’计算机原理’的学生学号和姓名。
select student.sno, student.sname from student
left join sc on student.sno=sc.sno
left join course on sc.cno=course.cno
where course.cname='计算机原理';
2)写一个SQL 语句,查询’王小明’同学选修了的课程名字。
select cname from Course
where cno in ( select cno from sc where sno=(select sno from Student where sname='王小明'));
3)写一个SQL 语句,查询选修了5 门课程的学生学号和姓名
select stu.sno, stu.sname from student stu
where (select count(*) from sc where sno=stu.sno) = 5;
2、有三张表,学生表S,课程C,学生课程表SC,学生可以选修多门课程,一门课程可以被多个学生选修,通过SC表关联。
1)写出建表语句;
select stu.sno, stu.sname from student stu
where (select count(*) from sc where sno=stu.sno) = 5;
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 语句,查询选修了至少5 门以上的课程的学生。
select stu.id, stu.name from s stu
where (select count(*) from sc where sid=stu.id)>=5;
3、数据库表(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);
4、有如下两张表:
表city:表state:
CityNo
CityName
StateNo
BJ
北京
Null
SH
上海
Null
GZ
广州
GD
DL
大连
LN
欲得到如下结果:
CityNo 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);