数据库面试sql
问题一:、有三张表,学生表S,课程表C,学生课程表SC
	01:写出建表语句
		答: 
			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)
			)
		
	02:写出SQL语句,查询选修了所以选修课程的学生
		答:
			select stu.id,stu.name from s stu
			where(
				select COUNT(*) from sc 
				where sc.sid=stu.id
				)=(
					select COUNT(*) from c
					)
			
	03:写出SQL语句,查询选修了至少5门以上的课程的学生
		答:
			select stu.id,stu.name from s stu
			where (
				select COUNT(*) from sc 
				where sid=stu.id
				)>=5
问题二:有三张表、Student学生表(学号、姓名、性别、组织部门)、
				  Course课程表(编号、课程名称)、
				  Sc选课表(学号、课程编号、成绩)
				  
	01、写一个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
			
	02、写一个SQL语句,查询'周星驰'同学选修的课程名称
		答:
			select cname from Course
			where cno in(
				select cno from sc where sno=(
					select sno from Student 
					where sname='周星驰'
				)
			)
	03、写一个SQL语句,查询选修了5门课程的学生学号和姓名
		答:
			select stu.sno,stu.sname from Student stu	
			where (
				select COUNT(*) from sc where sno=stu.sno
			)	=5
			
	04、查询两门以上(包括两门)课程不及格的学生名称以及平均成绩
		答:
			select s.sno,s,sname,AVG(sc.score) 
				from Student s,sc
			where s.sno=sc.sno
			group by s.sno,s.sname
			having COUNT(
				case when sc.score<60 then 1 end 
			)>2
			
		
问题三:数据库表Test结构如下:
		ID NAME AGE MANAGER(所属主管人ID)
		106  A    30	104
		107  B    20	108
		108  C    19	104
		109  D    25	109
		116  E    40	120
		119  F    45	null
	要求:列出所有年龄比所属主管年龄大的人的id和姓名?
		答:
			select employee.name from test employee
			where employee.age>(
				select manager.age from test manager
				where manager.id=employee.manager
			)
问题四:有如下两张表
	表city:				
	CityNo	CityName	StateNo	
	bj		北京		null
	sh		上海		null
	gz		广州		gd
	dl		大连		ln
	
	表state:
	StateNo		StateName
	gd			广东
	ln			辽宁
	sd			山东
	nmg			内蒙古
	
欲得到结果如下:
	CityNo	 CityName	StateNo	  StateName
	bj			北京	 null		null
	dl			大连	 ln			辽宁
	gz			广州	 gd			广东
	sh			上海	 null		null
	
	答:
		select c.cityno,c.cityname,c.stateno,s.statename 
		from city c,state s
		where c.stateno=s.stateno
		order by c.cityno
问题五:有三张表
	S(SNO,SNAME)学生关系。学号、姓名
	C(CNO,CNAME,CTEACHER)课程关系。课程号、课程名称、任课老师
	SC(SNO,CNO,SCGRADE)选课关系。SCGRADE成绩
	
	01、找出没有选修过'张三'老师讲授的所有学生姓名
		答:
			select sname from s
			where sno not in(
				select sno from sc
				where cno in(
					select cno from c
					where cname='张三'
				)
			)
	02、列出有二门以上(含二门)不及格课程的学生姓名和学号
		答:
			select sname,(
				select AVG(scgrade) from sc where sno=s.sno
				) from s
			where (select COUNT(*) from sc where sno=s.sno and
					scgrade<60	
				)>=2
				
	03、列出既学过'1'号课程,又学过'2'号课程的所有学生学号和姓名
		答:
			select sname from s
			where sno in(select sno from where cno=1 or cno=2)
	
	04、列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号及姓名
		答:
			select sname from s
			where sno in(
				select sno from sc where cno=1 and scgrade>(
					select scgrade from sc
					where sno=2 and cno=1
				)
			)
			
			
	05、列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩
		答:
			select sname from s 
			where (select scgrade from sc 
					where sno=s.no and cno=1
			)>(select scgrade from sc 
				where sno=s.sno and cno=2
			)
 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号