oracle十个比较典型的表连接测试题

合集下载

Oracle经典练习题及标准答案

Oracle经典练习题及标准答案

oracle经典练习sql/*1、选择在部门30中员工的所有信息*/select * from scott.emp where deptno = '30'/*2、列出职位为(MANAGER)的员工的编号,姓名*/select empno, ename from scott.emp where job = 'MANAGER'/*3、找出奖金高于工资的员工*/select * from scott.emp where comm > sal/*4、找出每个员工奖金和工资的总和*/select ename, sal + nvl(comm, 0) from scott.emp/*5、找出部门10中的经理(MANAGER)和部门20中的普通员工(CLERK) */select *from scott.empwhere deptno = '10'and job = 'MANAGER'unionselect *from scott.empwhere job = 'CLERK'and deptno = '20'/*6、找出部门10中既不是经理也不是普通员工,而且工资大于等于2000的员工*/ select *from scott.empwhere job != 'MANAGER'and job != 'CLERK'and sal > 2000/*7、找出有奖金的员工的不同工作*/select distinct(job) from scott.emp where comm is not null/*8、找出没有奖金或者奖金低于500的员工*/select *from scott.empwhere comm is not nulland comm > 500/*9、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面*/select enamefrom scott.emporder by (months_between(sysdate, hiredate) / 12) descselect ename,hiredate from scott.emp order by hiredate/*10、找出每个月倒数第三天受雇的员工*/select * from scott.emp where hiredate = last_day(hiredate) - 2/*11、分别用case和decode函数列出员工所在的部门,deptno=10显示'部门10',deptno=20显示'部门20'deptno=30显示'部门30'deptno=40显示'部门40'否则为'其他部门'*/select ename,case deptnowhen 10 then'部门10'when 20 then'部门20'when 30 then'部门30'when 40 then'部门40'else'其他部门'end 工资情况from scott.empselect ename,decode(deptno,10,'部门10',20,'部门20',30,'部门30',40,'部门40','其他部门') 工资情况from scott.emp/*12、分组统计各部门下工资>500的员工的平均工资*/select avg(sal) from scott.emp where sal > 500 group by deptno/*13、统计各部门下平均工资大于500的部门*/select deptno from scott.emp group by deptno having avg(sal) > 500 /*14、算出部门30中得到最多奖金的员工奖金*/select max(comm) from scott.emp where deptno = 30/*15、算出部门30中得到最多奖金的员工姓名*/select enamefrom scott.empwhere deptno = 30and comm = (select max(comm) from scott.emp where deptno = 30) /*16、算出每个职位的员工数和最低工资*/select count(ename), min(sal), job from scott.emp group by job/*17、列出员工表中每个部门的员工数,和部门no */select count(ename), deptno from scott.emp group by deptno/*18、得到工资大于自己部门平均工资的员工信息*/select *from scott.emp ewhere sal > (select avg(sal) from scott.emp where e.deptno = deptno)select *from scott.emp e1,(select avg(sal) sals, deptno from scott.emp group by deptno) e2where sal > salsand e1.deptno = e2.deptno/*19、分组统计每个部门下,每种职位的平均奖金(也要算没奖金的人)和总工资(包括奖金) */select avg(nvl(comm,0)), sum(sal + nvl(comm, 0))from scott.empgroup by deptno,job/*20、笛卡尔集*/select * from scott.emp, scott.dept/*21、显示员工ID,名字,直属主管ID,名字*/select empno,ename,mgr,(select ename from scott.emp e1 where e1.empno = e2.mgr) 直属主管名字from scott.emp e2/*22、DEPT表按照部门跟EMP表左关联*/select *fromscott.dept, scott.empwherescott.dept.deptno = scott.emp.deptno(+)/*23、使用此语句重复的内容不再显示了*/select distinct (job) from scott.emp/*24、重复的内容依然显示*/select *from scott.empUNION ALLselect * from scott.emp/*23和24题和22题是一样的*//*25、只显示了两个表中彼此重复的记录。

史上最全Oracle数据库基本操作练习题(含答案)

史上最全Oracle数据库基本操作练习题(含答案)

史上最全Oracle数据库基本操作练习题(含答案)oracle基本操作练习题使用表格:员工表(emp):部:(deptnonumber(2)notnull,--部门编号dnamevarchar2(14),--部门名称locvarchar2(13)―部门地址)注:添加、删除和修改相对简单。

这些练习旨在进行数据查询。

查询主要使用函数、运算符、模糊查询、排序、分组、变量关联、子查询、分页查询等。

建表脚本(根据需要使用):创建表脚本1练习:2.找出部门10中所有经理(manager)和部门20中所有办事员(clerk)的详细资料。

从empwhere(job='manager'和deptno=10)或(job='clerk'和deptno=20)中选择*;3.统计各部门的薪水总和。

按deptno从empgroup中选择deptno,sum(sal);4.找出部门10中所有理(manager),部门20中所有办事员(clerk)以及既不是经理又不是办事员但其薪水大于或等2000的所有员工的详细资料。

从empwhere(job='manager'和deptno=10)或(job='clerk'和deptno=20)或(jobnotin('manager','clerk')和sal>2000)中选择*;5.列出各种工作的最低工资。

从empgroupbyjob中选择job,min(sal);26.列出每个部门经理的最低工资。

selectdeptno,min(sal)fromempwherejob='manager'groupbydeptno;7.了解领取奖金的员工的不同工作。

9.找出各月最后一天受雇的所有员工。

选择*fromempwherehiredate=最后一天(hiredate);10.显示所有员工的姓名,首字母大写。

oracle练习及答案

oracle练习及答案

oracle练习及答案测试⼀1.SQL*PLUS命令可以控制数据库(no)2.下⾯的语句是否可以执⾏成功(yes)select last_name , job_id , salary as salfrom employees;3.下⾯的语句是否可以执⾏成功(yes)select * from employees;4.找出下⾯语句中的错误select employee_id , last_namesal * 12 ANNUAL SALARYfrom employees;列于列之间未⽤逗号分隔别名应⽤引号括起来5.显⽰表departments的结构,并查询其中的全部数据desc departmentsselect * from departments;6.显⽰出表employees中的全部job_id(不能重复)select distinct job_idfrom employees;7.显⽰出表employees的全部列,各个列之间⽤逗号连接,列头显⽰成OUT_PUTselect EMPLOYEE_ID||','|| FIRST_NAME||','||LAST_NAME||','||EMAIL||','||PHONE_NUMBER||','||HIRE_DATE||','||JOB_ID||','||SALARY||','||COMMISSION_PCT||','||MANAGER_ID||','|| DEPARTMENT_ID as "OUT_PUT" from employees;测试⼆1.查询⼯资⼤于12000的员⼯姓名和⼯资SELECT FIRST_NAME, salaryFROM employeesWHERE salary > 12000;2.查询员⼯号为176的员⼯的姓名和部门号SELECT FIRST_NAME, department_idFROM employeesWHERE employee_id = 176;3.选择⼯资不在5000到12000的员⼯的姓名和⼯资SELECT FIRST_NAME, salaryFROM employeesWHERE salary NOT BETWEEN 5000 AND 12000;4.选择雇⽤时间在1998-02-01到1998-05-01之间的员⼯姓名,job_id和雇⽤时间SELECT FIRST_NAME, job_id, hire_dateFROM employeesWHERE hire_date BETWEEN '01-2⽉-98' AND '01-5⽉-98';5.选择在20和50号部门⼯作的员⼯姓名和部门号SELECT FIRST_NAME, department_idFROM employeesWHERE department_id IN (20, 50);6.选择在1994年雇⽤的员⼯的姓名和雇⽤时间SELECT FIRST_NAME, hire_dateFROM employeesWHERE hire_date LIKE '%94';7.选择公司中没有管理者的员⼯姓名及job_idSELECT FIRST_NAME, job_idFROM employeesWHERE manager_id IS NULL;8.选择公司中有奖⾦的员⼯姓名,⼯资和奖⾦SELECT FIRST_NAME, salary, commission_pctFROM employeesWHERE commission_pct IS NOT NULL;9.选择员⼯姓名的第三个字母是a的员⼯姓名SELECT FIRST_NAMEFROM employeesWHERE FIRST_NAME LIKE '__a%';10.选择姓名中有字母a和e的员⼯姓名SELECT FIRST_NAMEFROM employeesWHERE (FIRST_NAME LIKE '%e%a%' OR FIRST_NAME LIKE '%a%e%')测试三1.显⽰系统时间Select sysdate "Date" from dual2.查询员⼯号,姓名,⼯资,以及⼯资提⾼百分之20%后的结果(new salary)select empno,ename,sal, round(sal*1.20,0) as“new salary” from emp;3.将员⼯的姓名按⾸字母排序,并写出姓名的长度(length)select ename "Name" ,length(ename) "Length" from emp order by substr(ename,1,1);4.查询各员⼯的姓名,并显⽰出各员⼯在公司⼯作的⽉份数(worked_month)。

Oracle基础练习题及答案(表约束)

Oracle基础练习题及答案(表约束)

练习作业创建表emp1,字段如下eno char(3),ename char(6)sex char(2)age number(2)dno char(3)并插入如下数据1 ,TOM ,男,21 ,’001’2 ,JERRY ,男,21 ,’002’3 ,KATE ,女,21 ,’003’4 ,MARY ,女,21 ,’004’5 ,JACK ,男,21 ,’005’i.在eno字段上创建主键约束ii.在ename字段上创建非空约束iii.创建检查约束判断age在18到60岁之间的男性或者age在18到55岁之间的女性iv.在dno字段上创建唯一性约束create table emp1(eno char(3) primary key,ename char(6) not null,sex char(2),age number(2),dno char(3) unique,constraint sex_age check(((age between18and60) and sex='男') or((age between18and55) and sex='女')))insert into emp1 values('1','TOM','男',21,'001')insert into emp1 values('2','JERRY','男',21,'002');insert into emp1 values('3','KATE','女',21,'003');insert into emp1 values('4','MARY','女',21,'004');insert into emp1 values('5','JACK','男',21,'005');v.创建和emp1表字段相同的emp_bak表,将emp_bak表的eno字段与emp表的eno字段创建外键约束create table emp_bak as select * from emp1 where1=2alter table emp_bak add constraint v foreign key(eno) references emp1(eno);1、请创建一个表,表名为phone,表结构如下电话号码(PHONENUM VARCHAR2(8))电话费(PAY number(8,2))号码等级(NUMLEVEL VARCHAR2(4))费用日期(PAYDATE varchar2(12)create table phone (phonenum varchar2(8),pay number(8,2),numlevel varchar2(4),paydate varchar2(12))1)插入以下两条数据.123456, 600, pt04, 20051220888888, 900, pt05, 20051019.insert into phone values('123456',600,'pt04', '20051220');insert into phone values('888888',900,'pt05', '20050919');2)创建一个备份表结构名为phone_bak, 将phone中的数据插入phone_bak中.create table phone_bak as select * from phone;3)将电话号码为123456的电话费改为1000,执行回滚操作Update phone set pay=1000 where phonenum=123456;Rollback;1)在phone表中,如果PHONENUM字段中的数据为‘123456’,则返回‘Y’否则返回‘N’Select decode(phonenum,’123456’,’y’,’n’) from phone;2)将phone表中的电话号码为123456的记录的费用日期(PAYDATE)字段的日期转变成YYYY/MM/DD格式Update phone set paydate= to_date(paydate,'yyyy/mm/dd') where phonenum=123456;3)将电话号码为888888的号码等级改为pt04并提交Update phone set numlevel=’pt04’ where phonenum=888888commit;。

oracle数据库面试题目(3篇)

oracle数据库面试题目(3篇)

第1篇1. 请简述Oracle数据库的体系结构,并说明各层的作用。

2. 请解释什么是Oracle实例?实例与数据库之间的关系是什么?3. 请简述Oracle数据库的存储结构,包括数据文件、控制文件、日志文件等。

4. 请说明Oracle数据库的内存结构,包括SGA、PGA等。

5. 请解释Oracle数据库的备份策略,包括全备份、增量备份、差异备份等。

6. 请说明Oracle数据库的恢复策略,包括不完全恢复、完全恢复等。

7. 请解释Oracle数据库的事务管理,包括事务的ACID特性。

8. 请说明Oracle数据库的锁机制,包括共享锁、排他锁等。

9. 请解释Oracle数据库的并发控制,包括多版本并发控制(MVCC)。

10. 请说明Oracle数据库的安全机制,包括角色、权限、用户等。

二、SQL语言1. 请简述SQL语言的组成,包括数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)等。

2. 请说明如何创建一个简单的表,包括表结构、字段类型、约束等。

3. 请编写一个查询语句,查询某个表中所有年龄大于30岁的记录。

4. 请编写一个更新语句,将某个表中年龄大于40岁的记录的年龄加1。

5. 请编写一个删除语句,删除某个表中年龄小于20岁的记录。

6. 请编写一个插入语句,插入一条记录到某个表中。

7. 请说明如何使用SQL语句实现分页查询。

8. 请说明如何使用SQL语句实现多表查询。

9. 请说明如何使用SQL语句实现子查询。

10. 请说明如何使用SQL语句实现联合查询。

三、Oracle高级特性1. 请解释什么是视图?如何创建视图?2. 请解释什么是索引?有哪些常见的索引类型?3. 请解释什么是触发器?如何创建触发器?4. 请解释什么是存储过程?如何创建存储过程?5. 请解释什么是函数?如何创建函数?6. 请解释什么是包?如何创建包?7. 请解释什么是序列?如何创建序列?8. 请解释什么是同义词?如何创建同义词?9. 请解释什么是物化视图?如何创建物化视图?10. 请解释什么是分区表?如何创建分区表?四、Oracle性能优化1. 请说明如何查看Oracle数据库的性能统计信息。

Oracle基础练习题及答案(多表查询1)(共5篇)

Oracle基础练习题及答案(多表查询1)(共5篇)

Oracle基础练习题及答案(多表查询1)(共5篇)第一篇:Oracle基础练习题及答案(多表查询1)利用scott用户自带的四张表完成如下作业:1.列出至少有一个员工的所有部门select b.deptno,b.dname from emp a,dept b where a.deptno=b.deptno group by b.deptno,b.dname having count(*)>=1;2.列出薪金比SMITH高的所有员工select * from emp where sal>(select sal from emp where ename='SMITH');3.列出所有员工的姓名及其直接上级领导的姓名select a.ename,b.ename “leader” from emp a,emp b wherea.mgr=b.empno;4.列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称select a.empno,a.ename,a.hiredate,c.dname from emp a,emp b,dept c where a.mgr=b.empno and a.deptno=c.deptno anda.hiredate5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门select b.dname,a.* from emp a,dept b wherea.deptno(+)=b.deptno;6.列出所有CLERK(办事员)的姓名,及其部门名称,部门人数select aa.ename,aa.job,bb.dname,(select count(a.deptno)from emp a,dept b where a.deptno=b.deptno and b.dname=bb.dname group by a.deptno)from emp aa,dept bb where aa.deptno(+)=bb.deptno and aa.job='CLERK';7.列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数select a.job,min(sal),count(ename)from emp a,dept b wherea.deptno=b.deptno having min(sal)>1500 group by a.job;8.列出在部门SALES(销售部)工作的员工的姓名,假定不知道销售部的部门编号。

Oracle数据库笔试面试试题及答案

Oracle数据库笔试面试试题及答案

Oracle数据库笔试面试试题及答案一、基础概念1. 列举几种表连接方式Answer:等连接(内连接)、非等连接、自连接、外连接(左、右、全)Or hash join/merge join/nest loop(cluster join)/index join ??ORACLE 8i,9i 表连接方法。

一般的相等连接: select * from a, b where a.id = b.id; 这个就属于内连接。

对于外连接:Oracle中可以使用“(+) ”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOINLEFT OUTER JOIN:左外关联SELECT st_name, e.department_id, d.department_nameFROM employees eLEFT OUTER JOIN departments dON (e.department_id = d.department_id);等价于SELECT st_name, e.department_id, d.department_nameFROM employees e, departments dWHERE e.department_id=d.department_id(+)结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。

RIGHT OUTER JOIN:右外关联SELECT st_name, e.department_id, d.department_nameFROM employees eRIGHT OUTER JOIN departments dON (e.department_id = d.department_id);等价于SELECT st_name, e.department_id, d.department_nameFROM employees e, departments dWHERE e.department_id(+)=d.department_id结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。

Oracle测试题

Oracle测试题

Oracle测试题Oracle基础测试第一题. 60分1.建立如下4张表:5分*4=20分学生表student(sid,sname),教师表teacher(tid,tname),课程表course(cid,cname,ctype),选课表choose_course(ccid,sid,tid,cid)2. 分别在4张表中插入如下数据:5分*4=20分学生表(1,'小明');学生表(2,'小花');教师表(1,'陈红');教师表(2,'陈白');课程表(1,'语文','文科');课程表(2,'数学','理科');--小明选了陈红老师的语文--小明选了陈红老师的数学--小花选了陈红老师的数学--小明选了陈白老师的语文--小花选了陈红老师的语文3. 查出如下数据5分*4=20分a.查找陈红老师教的学生是那些?SELECT SNAME FROM(SELECT * FROM CHOOSE_COURSE_STU8899ED JOIN STUDENT_STU8899EDONCHOOSE_COURSE_STU8899ED.SID=STUDENT_STU8899ED.SID )EWHERE E.TID=1b.找学生小明所有的文科老师?SELECT TNAME FROM(SELECT * FROM(SELECT * FROM(SELECT * FROM CHOOSE_COURSE_STU8899ED CC JOIN STUDENT_STU8899ED S ON CC.SID=S.SID )T1 JOIN TEACHER_STU8899ED TON T.TID=T1.TID)T2 JOIN COURSE_STU8899ED CSON T2.CID=CS.CID)WHERE SNAME='小明' and CTYPE='文科'c.找出没有选修陈红老师的学生SELECT * FROM TEACHER_STU8899EDWHERE TID NOT IN(SELECT TEACHER_STU8899ED.TID FROM TEACHER_STU8899ED T,STUDENT_STU8899ED S,CHOOSE_COURSE_STU8899ED CCWHERE T.TID=CC.TID AND S.SID=CC.SID AND TNAME='陈红' )d.教的学生最少的老师?SELECT TNAME FROM TEACHER_STU8899EDWHERE TID=(SELECT TID FROM(SELECT TID,COUNT(*) C FROM CHOOSE_COURSE_STU8899ED EWHERE TID IN (SELECT TID FROM CHOOSE_COURSE_STU8899ED M WHERE E.TID=M.TID) GROUP BY TID)WHERE ROWNUM=1)第二题. 10分表一(AAA)商品名称mc 商品总量slA 100B 120表二(BBB)商品名称mc 出库数量slA 10A 20B 10B 20B 30用一条SQL语句算出商品A,B目前还剩多少?SELECT AAA.MC,(SL-E.SS) LEFT FROM AAAJOIN(SELECT MC,SUM(SL) SS FROM BBBGROUP BY MC)EON AAA.MC=E.MC第三题. 10分用一条SQL 语句查询出每门课都大于80分的学生姓名name kecheng fenshu张三语文81张三数学75李四语文76李四数学90王五语文81王五数学100王五英语90SELECT DISTINCT NAME FROM SSSSSS E WHERE (SELECT COUNT(*) FROM SSSSSS MWHERE FENSHU>80 AND /doc/b618950704.html,=http://www.doczj .com/doc/b618950704.html,)=3第四题. 10分一个表中的同一个ID可能有1条记录,也可能有多个记录,把所有重复的ID 查出来,并显示每个重复的ID有多少条记录数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

问题:
1,找出没选过“黎明”老师的所有学生姓名。

2,列出2门以上(含2门)不及格学生姓名及平均成绩。

3,既学过1号课程又学过2号课所有学生的姓名。

4, 查询每门功课成绩最好的前两名
5, 查询出只选修了一门课程的全部学生的学号和姓名
6, 查询课程编号“c002”的成绩比课程编号“c001”课程低的所有同学的学号、姓名
7, 查询和“s001”号的同学学习的课程完全相同的其他同学学号和姓名
8,查询选修‘张三’老师所授课程中成绩最好的学生姓名,课程编号和成绩。

9, 查询所有学生都选修的课程编号和课程名称(选作)
10, 查询学完所有课程的学生学号和姓名(选作)
自己的答案:
--1题找出没选过“黎明”老师的所有学生姓名
select s.sname from s where sno not in(select t1.sno from sc t1 join c t2 on o = o where t2.cteacher='黎明')
--2题列出2门以上(含2门)不及格学生姓名及平均成绩
select s.sname,t1.avgfen from s,(select sc.sno,avg(scgrade) as avgfen from sc where sc.sno in (select sno from sc where scgrade<60 group by sno having count(cno)>=2) group by sc.sno) t1 where t1.sno = s.sno
--3题既学过1号课程又学过2号课所有学生的姓名
--使用intersect关键字
selectsname from s,sc
where s.sno=sc.sno and o =(select cno from c where ame='高数')
intersect
selectsname from s,sc
where s.sno=sc.sno and o =(select cno from c where ame='化学');
--4题查询每门功课成绩最好的前两名
selects.sname,s.sno,o from (select sno,cno,scgrade,row_number() over(partition by cno order by scgradedesc) as rowno from sc) t ,s where t.sno = s.sno and rowno<3
--用over partition by 我就可以查询到每位员工本来的具体信息和它所在部门的总工资:
--select name,dept,salary,sum(salary) over (partition by dept) total_salary from salary;
--用goup by 就没办法做到这点,只能查询到每个部门的总工资:
--select dept,sum(salary) total_salary from salary group by dept
--第五题查询出只选修了一门课程的全部学生的学号和姓名
selects.sno,s.sname from s where s.sno in(select sc.sno from sc group by sc.sno having count(o)=1)
--第六题查询课程编号“c002”的成绩比课程编号“c001”课程低的所有同学的学号、姓名--感觉这一题有歧义,可能比的是一个学生的2001成绩比2002成绩高,也肯能比的是2001成绩比2002成绩高德学生
--同一学生的比较
selects.sno,s.sname
from s, (select s.sno,scgrade from s,sc where s.sno=sc.sno and o='2001') r1,(select s.sno,scgrade from s,sc where s.sno=sc.sno and o='2002') r2
where r1.sno=r2.sno and s.sno = r1.sno and s.sno = r2.sno and r1.scgrade > r2.scgrade
group by s.sno,s.sname;
--不同的学生
selectsno from sc where cno = 'c001' and sc.score>any (select score from sc where cno = 'c002');
--第七题查询和“s001”号的同学学习的课程完全相同的其他同学学号和姓名
--下面这个不对
select distinct s.sno,s.sname
fromsc,s
wheres.sno=sc.sno and cno in (select cno from sc where sno='1001');
--这个是正确的
--使用了自连接的思想
select s.sno,s.sname from s where s.sno in( SELECT a.sno FROM sca,sc b WHERE a.sno<> '1001' AND b.sno = '1001' AND o = o GROUP BY a.sno HAVING COUNT(*) = (SELECT COUNT(*) FROM sc c WHERE c.sno = '1001'))
--第八题查询选修‘张三’老师所授课程中成绩最好的学生姓名,课程编号和成绩
--这个语句中rownum这里出现问题
selects.sname,o,sc.scgrade
froms,c,sc
where s.sno=sc.sno and o=o and c.cteacher='黎明' and rownum =1
group by o,s.sname,sc.scgrade;
--自己写的
select t.sno,t.scgrade,o,s.sname from (select t1.*,rownumrowno from(select sc.sno,sc.scgrade,o from sc where o=(select o from c where c.cteacher = '黎明') order by sc.scgradedesc) t1) t ,s where s.sno = t.sno and rowno<2
--第九题
--查询所有学生都选修的课程编号和课程名称(选作)
--有歧义,一种意思是该课程所有学生都选了,另一种意思所有学生都选过的课,至少每门课都被选了一次。

select o,ame from c where o in (select o from sc group by o having count(*)>=1)--另一种意思所有学生都选过的课,至少每门课都被选了一次。

o,ame from c where o in(select cno from sc group by o having count(*)=(select count(*) from s))
--第十题
-- 查询学完所有课程的学生学号和姓名(选作)
selects.sno,s.sname from s where s.sno in (select sc.sno from sc group by sc.sno having count(*) = (select count(*) from c))。

相关文档
最新文档