sql语句作业2-高级查询附答案
sql高级查询选择题
sql高级查询选择题SQL(Structured Query Language)是一种用于管理关系型数据库系统的编程语言。
在进行数据库查询时,使用高级查询可以更有效地得到所需结果。
下面是一些SQL高级查询选择题,帮助您巩固相关知识。
1. 以下哪个语句用于在表中创建一个新的索引?A. ALTER INDEXB. CREATE INDEXC. ADD INDEXD. UPDATE INDEX答案:B. CREATE INDEX2. 在表中查询特定字段时,使用以下哪个关键字?A. SELECTB. FROMC. WHERED. GROUP BY答案:A. SELECT3. 以下哪个关键字用于从表中获取独一无二的记录?A. UNIQUEB. DISTINCTC. SETD. UNIQUEKEY答案:B. DISTINCT4. 使用以下哪个关键词可以将查询结果按照字段进行排序?A. ORDER BYB. SORT BYC. GROUP BYD. ARRANGE BY答案:A. ORDER BY5. 如果需要从多个表中检索数据,需要使用下列哪个关键字?A. JOINB. UNIONC. TOGETHERD. COMBINE答案:A. JOIN6. 使用以下哪个运算符可以将两个查询结果集合并在一起?A. INTERSECTB. JOINC. MERGED. UNION答案:D. UNION7. 以下哪个关键字用于选择符合指定条件的记录?A. HAVINGB. WHEREC. FILTERD. SEARCH答案:B. WHERE8. 以下哪个运算符用于模糊搜索?A. LIKEB. WHEREC. EQUALSD. NOT答案:A. LIKE9. 使用以下哪个关键字可以在查询结果中分组数据?A. GROUP BYB. SORT BYC. ORDER BYD. DIVIDE BY答案:A. GROUP BY10. 如果需要在查询结果中筛选符合多个条件的记录,应该使用以下哪个关键字?A. ANDB. ORC. NOTD. ALL答案:A. AND这是一些SQL高级查询选择题的回答,希望对您的学习有所帮助。
SQL语句进阶练习(多表连接查询)-提供查询题目与解答
说明
第一眼看到表的结构可能心中会觉得题目比较简单,但是当我深入做题目的时候发现这题目可能有些变态,几乎费了我一天的时间才 把这些题目做出来(可能是因为我不怎么聪明的原因) 在我所做的题解中有一部分不是最优解,还有很多高效的查询方式,比如最后一题的解答,我有三种方式解答,但是最后的一种才是 最简单的行转列的方式。 在这些题目中使用最多的就是join多表连接查询
-方- 法二 SELECT st.s_id,st.s_name FROM ( SELECT *,COUNT(c_id) FROM score GROUP BY s_id ) one RIGHT JOIN student st ON one.s_id=st.s_id WHERE `COUNT(c_id)`<3 OR `COUNT(c_id)` IS NULL
--查5询. 两门以上不及格课程的同学的学号及其平均成绩 SELECT s_id,AVG(s_score) FROM score WHERE s_score<60 GROUP BY s_id HAVING COUNT(c_id)>=2
--查6询. 平均成绩大于85的所有学生的学号、姓名和平均成绩 SELECT st.s_id,s_name,`AVG(s_score)` avg_score FROM student st INNER JOIN ( SELECT s_id,AVG(s_score) FROM score GROUP BY s_id HAVING `AVG(s_score)`>85) sc ON st.s_id=sc.s_id
题目解答
稍微基础题目解答
--查1询. 平均成绩大于60分的学生的学号和平均成绩 -题- 目解析一 如果平均成绩为已选科目的平均分解答如下 SELECT s_id,AVG(s_score) FROM score GROUP BY s_id HAVING `AVG(s_score)`>60 -題- 目解析二 如果平均分是总科目分数除以总门数,没有考当0做分解答如下 SELECT s_id,(SUM(s_score)/3) avg_score FROM score GROUP BY s_id HAVING `avg_score`>60
sql语句作业2-高级查询附答案
sql语句作业2-高级查询附答案SQL 作业2:高级查询一、连接查询1 不同表之间的连接查询例 1.37 查询每个学生及其选修课程的情况。
SELECT Students.*,Reports.*FROM Students,ReportsWHERE Students.Sno=Reports.Sno;例1.38 查询每个学生的学号(Sno)、姓名(Sname)、选修的课程名(Cname)及成绩(Grade)。
SELECT Students.Sno, Sname, Cname, Grade FROM Students,Reports,CoursesWHERE Students.Sno=Reports.Sno AND /doc/0a15462539.html,o=/doc/0a15462539.html,o;补例子:查询选修了C01课程且成绩为70分以上的学生学号姓名和成绩。
select Students.Sno,Sname, Reports.Grade from Students,Reportswhere Students.Sno=Reports.Sno and /doc/0a15462539.html,o='C01' and Grade>702 自身连接例1.39 查`询每一门课的间接先修课(即先修课的先修课)。
SELECT /doc/0a15462539.html,ame , /doc/0a15462539.html,o, B.Pre_Cno FROM Courses A , Courses B WHERE A.Pre_Cno=/doc/0a15462539.html,o;3 外连接例 1.40把例 1.37中的等值连接改为左连接。
SELECT Students.*,/doc/0a15462539.html,o,REPORTS.G rade FROM Students,ReportsWHERE Students.Sno*=Reports.Sno;二、嵌套查询表1.1 关系StudentsSno Sname Ssex Sage Sdept S01S02S03S04S05S06王建平刘华范林军李伟黄河长江男女女男男男211918191820自动化自动化计算机数学数学数学表1.2 关系Courses Cno Cname Pre_CnoCredits C01C02C03C04C05C06C07英语数据结构数据库DB_设计C++网络原理操作系统C05C02C03C07C054223333表1.3 关系ReportsSnoCno Grade S01S01S02S02S02S03S03S04C01C03C01C02C03C01C02C0392849094827290751 带谓词IN的嵌套查询例1.41 查询选修了编号为“C02”的课程的学生姓名(Sname)和所在系(Sdept)。
SQL语句练习及答案
sql语句练习题1数据库有如下四个表格:student(sno,sname,sage,ssex,sdpt) 学生表系表(dptno,dname)course(cno,cname, gradet, tno) 课程表sc(sno,cno,score) 成绩表teacher(tno,tname) 教师表要求:完成以下操作1.查询姓"欧阳"且全名为三个汉字的学生的姓名。
selectsnamefromstudent wheresnamelike“欧阳__;2.查询名字中第2个字为"阳"字的学生的姓名和学号。
selectsname,snofromstudent wheresnamelike'_阳%';3.查询所有不姓刘的学生姓名。
selectsname,sno,ssexfromstudentwheresnamenotlike“刘%”;4.查询db_design课程的课程号和学分。
selectcno,ccredit fromcoursewherecnamelike'db_design'5.查询以"db_"开头,且倒数第3个字符为i的课程的详细情况。
select*fromcourse wherecnamelike'db%i__';6.某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
查询缺少成绩的学生的学号和相应的课程号。
selectsno,cnofromscwheregradeisnull;7.查所有有成绩的学生学号和课程号。
selectsno,cnofromscwheregradeisnotnull;8.查询计算机系年龄在20岁以下的学生姓名。
selectsnamefromstudent wheresdept='cs'andsage<20;9.查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。
高级SQL语句查询(含答案和截图)
C顾客cidcnamecity discntc001 李广天津10.00c002 王开基北京12.00c003 安利德北京8.00c004 曹士雄天津8.00c006 曹士雄广州0.00P商品pidpname city quantity pricep01 梳子天津111400 0.50p02 刷子成都203000 0.50p03 刀片西安150600 1.00p04 钢笔西安125300 1.00p05 铅笔天津221400 1.00p06 文件夹天津123100 2.00p07 盒子成都100500 1.00A代理aidanamecity percenta01 史可然北京 6a02 韩利利上海 6a03 杜不朗成都7a04 甘瑞北京 6a05 敖斯群武汉 5a06 史可然天津 5O订单ordnomonthcidaid pidqtydollars1011 01 c001 a01 p01 1000 450.00 1012 01 c001 a01 p01 1000 450.00 1019 02 c001 a02 p02 400 180.00 1017 02 c001 a06 p03 600 540.00 1018 02 c001 a03 p04 600 540.00 1023 03 c001 a04 p05 500 450.00 1022 03 c001 a05 p06 400 720.00 1025 04 c001 a05 p07 800 720.001013 01 c002 a03 p03 1000 880.001026 05 c002 a05 p03 800 704.001 查询所有定购了至少一个价值为0.50的商品的顾客的名字。
amefrom clientwherecid in (select cid from order1 where pid in(select pid from product where price='0.5'))2 找出全部没有在代理商a03处订购商品的顾客cid值。
sql查询题目及答案
sql查询题目及答案1、查询所有数学系学生的信息。
--select * from s where 系='数学系'2、查询李老师所教的课程号、课程名--select 课程号,课程名from c where 教师like '李%'3、查询年龄大于20岁的女同学的学号和姓名。
--select 学号,姓名from s where year(getdate())-year(出生日期)+1>20 and 性别='女'4、查询学号为‘H0301’所选修的全部课程成绩。
--select 成绩from sc where 学号= 'H0301'5、查询平均成绩都在80分以上的学生学号及平均成绩。
--select 学号,AVG(成绩) from sc group by 学号having AVG(成绩)>=806、查询至少有6人选修的课程号。
--select 课程号from sc group by 课程号having count(*)>67、查询C02号课程得最高分的学生的学号--select 学号from sc where 课程号='c02' and 成绩=(select max(成绩) from sc where 课程号='c02')8、查询学号为’J0101’的学生选修的课程号和课程名--select 课程号,课程名from c,sc where 学号='j0101' and c.课程号=sc.课程号9、‘李小波’所选修的全部课程名称。
--Select c.课程名from s,c,sc where s.学号=sc.学号and c.课程号=sc.课程号and 姓名='李小波'10、所有成绩都在70分以上的学生姓名及所在系。
--select 姓名,系from s,sc where s.学号=sc.学号group by 学号having min(成绩)>=7011、英语成绩比数学成绩好的学生--select sc2.学号from c c1,c c2,sc sc1,sc sc2 where c1.课程名='英语'--and c2.课程名='数学' and sc1.成绩>sc2.成绩and sc1.学号=sc2.学号--and c1.课程号=sc1.课程号and c2.课程号=sc2.课程号12、至少选修了两门课及以上的学生的姓名和性别select 姓名,性别from s,sc--where s.学号=sc.学号group by 学号having count(*)>=213、选修了李老师所讲课程的学生人数--select count(*) from C,sc where 教师like '李%' and c.课程号=sc.课程号group by sc.课程号14、‘操作系统’课程得最高分的学生的姓名、性别、所在系--select 姓名,性别,系from s,sc--where s.学号=sc.学号and 成绩=--(select max(成绩) from c,sc where sc.课程号=c.课程号and 课程名='操作系统')15、显示所有课程的选修情况。
sql查询举例(含答案)
查询练习一、简单查询(无条件查询):1、查询“学生档案”表中所有的记录SELECT * FORM 学生档案2、查询“学生档案”表中全体学生的姓名、学号、家庭地址SELECT 姓名, 学号, 家庭地址 FROM 学生档案二、有条件查询1、查询“成绩管理”表中语文成绩在80分以下的学生的学号。
SELECT 学号 FROM 成绩管理 WHERE 语文<802、查询“成绩管理”表中语文成绩在80分到90分之间的学生的学号,语文,数学,英语成绩。
SELECT 学号,语文,数学,英语FROM成绩管理WHERE 语文 >= 80 AND 语文<=90==(语文 BETWEEN 80 AND 90)3、查询“成绩管理”表中数学成绩不在75分到85分之间的学生的学号,语文,数学,英语成绩。
SELECT 学号,语文,数学,英语FROM 成绩管理WHERE 数学 NOT BETWEEN 75 AND 854、查询“学生档案”表中李成刚,刘艺梅,郑莉三名学生的信息。
SELECT *FROM 学生档案WHERE 姓名 IN (“李成刚”,“刘艺梅”,“郑莉”)==(姓名 =“李成刚” OR 姓名=“刘艺梅” OR 姓名=“郑莉”)5、查询“学生档案”表中所有姓张的学生的姓名、学号和性别SELECT 姓名,学号,性别 FROM学生档案WHERE 姓名 LIKE “张*”6、查询“学生档案”表中所有姓张且全名为三个汉字的学生的姓名SELECT 姓名FROM 学生档案WHERE姓名 LIKE “张??”7、查询“学生档案”表中第二个字符为“建”字的学生的学号和姓名SELECT 学号,姓名FROM 学生档案WHERE姓名 LIKE “?建*”8、查询“学生档案”表中家庭住址为“人民路”和“育才路”的学生学号,姓名,性别和家庭住址。
SELECT 学号,姓名,性别,家庭住址FROM 学生档案WHERE家庭住址 LIKE “人民路*” OR家庭住址 LIKE “育才路*”9、查询“学生档案”表中所有团员的学生班级和姓名。
sql习题及答案
sql习题及答案SQL习题及答案SQL(Structured Query Language)是一种用于管理和操作关系型数据库的语言。
它是许多软件开发人员和数据分析师必备的技能之一。
在学习SQL的过程中,练习是非常重要的,因为它可以帮助我们更好地理解和掌握这门语言。
以下是一些常见的SQL习题及答案,供大家练习和参考:1. 查询所有学生的信息```sqlSELECT * FROM students;```2. 查询所有学生的姓名和年龄```sqlSELECT name, age FROM students;```3. 查询所有学生的姓名和年龄,并按年龄从小到大排序```sqlSELECT name, age FROM students ORDER BY age;```4. 查询所有学生的平均年龄```sqlSELECT AVG(age) FROM students;```5. 查询所有学生的姓名和其所在班级的名称```sqlSELECT , c.class_nameFROM students sJOIN classes c ON s.class_id = c.class_id;```6. 查询所有学生的姓名和其所在班级的名称,如果没有班级则显示“未分配班级”```sqlSELECT , COALESCE(c.class_name, '未分配班级')FROM students sLEFT JOIN classes c ON s.class_id = c.class_id;```7. 查询每个班级的学生数量```sqlSELECT class_id, COUNT(*) AS student_countFROM studentsGROUP BY class_id;```以上是一些常见的SQL习题及答案,希望能够帮助大家更好地理解和掌握SQL 语言。
通过不断的练习和实践,相信大家一定能够成为SQL的高手!。
数据库中SQL查询语句习题含答案
数据库中SQL查询语句习题含答案查询问题:设教学数据库Education 有三个关系:学生关系S (SNO ,SNAME ,AGE ,SEX ,SDEPT );学习关系SC (SNO ,CNO ,GRADE );课程关系C (CNO ,CNAME ,CDEPT ,TNAME )(1)检索计算机系的全体学生的学号,姓名和性别;(2)检索学习课程号为C2的学生学号与姓名;(3)检索选修课程名为“DS ”的学生学号与姓名;(4)检索选修课程号为C2或C4的学生学号;(5)检索至少选修课程号为C2和C4的学生学号;(6)检索不学C2课的学生姓名和年龄;(7)检索学习全部课程的学生姓名;(8)查询所学课程包含学生S3所学课程的学生学号。
(1)检索计算机系的全体学生的学号,姓名和性别; SELECT Sno ,Sname ,Sex FROM SWHERE Sdept =’CS ’;(2)检索学习课程号为C2的学生学号与姓名;(3)检索选修课程名为“DS ”的学生学号与姓名本查询涉及到学号、姓名和课程名三个属性,分别存放在S 和C 表中,但S 和C 表没有直接联系,必须通过SC 表建立它们二者的联系。
C → SC → S 基本思路:(1)首先在C 表中找出“DS ”课程的课程号Cno ;(2)然后在SC 表中找出Cno 等于第一步给出的Cno 集合中的某个元素Cno ;(3)最后在S 关系中选出Sno 等于第二步中Sno 集合中某个元素的元组,取出Sno 和Sname 送入结果表列。
SELECT Sno ,Sname FROM SWHERE Sno IN (SELECT Sno FROM SCWHERE Cno IN (SELECT Cno FROM CWHERE Cname=‘DS ’));(4)检索选修课程号为C2或C4的学生学号; SELECT Sno FROM SCWHERE Cno=‘C2’ OR Cno=‘C4’;(5)检索至少选修课程号为C2和C4的学生学号; SELECT SnoFROM SC X ,SC YWHERE X.Sno=Y.Sno AND/doc/d33e82944b7302768e9951e79b89680202d86b33.html o=‘C2’ AND /doc/d33e82944b7302768e9951e79b89680202d86b33.html o=‘C4’;(6)检索不学C2课的学生姓名和年龄;(7)检索学习全部课程的学生姓名;在表S 中找学生,要求这个学生学了全部课程。
sql查询题目及答案
数据库中有如下三个表:学生表(学号id,姓名name,性别sex,系部depart,年龄age)8个学生记录选课表(学号id,课程号cid,成绩grade) 12门课程课程表(课程号cid,课程名cname,学分Ccredit) 6门课程学生-课程模式 S-T :学生表:Student(Sno,Sname,Ssex,Sage,Sdept)课程表:Course(Cno,Cname,Cpno,Ccredit)学生选课表:SC(Sno,Cno,Grade)1.从学生表中查询所有同学的所有信息select*from学生表2.从学生表中查询所有学生的信息,并分别赋予一个别名select学号as xuehao,姓名as xingming,性别as xingbie,系部as xibu,年龄as nianling from学生表3.从学生表中查询姓名是Allen的学生的信息select*from学生表where姓名='Allen'4.从学生表中查询学号在1101到1199之间的所有学生的信息select*from学生表where学号between 1101 and 11995.从学生表中查询年龄小于18和大于20的所有学生的学号和姓名select学号,姓名from学生表where年龄<18 or年龄>206.从学生表中查询计算机系年龄小于20的所有学生的信息select*from学生表where系部='computer'and年龄<207.从学生表中查询姓名以A开头的学生的信息select*from学生表where姓名LIKE'A%'8.从学生表中查询姓名的第三个字符是A的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'__A%'9.从学生表中查询姓名中包含“llen”的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'%llen%'10.从学生表中查询姓名中包含“llen”且姓名只有5个字符的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'%llen%'and len(姓名)=511.从学生表中查询有年龄信息的学生的学号和姓名select学号,姓名from学生表where年龄is not null12.从学生表中查询最大年龄和最小年龄select max(年龄)最大年龄,min(年龄)最小年龄from学生表13.从学生表中查询所有学生的平均年龄select avg(年龄)平均年龄from学生表14.从学生表中查询学校所有系的名字select distinct系部from学生表15.从学生表中查询学校共有多少个系select count(distinct系部)系部总和from学生表16.从选课表中查询所有学生的选课情况select distinct课程号from选课表17.从选课表中查询选修课程号为C01课程的学生的学号select学号from选课表where课程号='C01'18.从选课表中查询所有没有选C02课程的学生的学号select distinct学号from选课表where课程号!='C02'19.从选课表中查询有选修C01或C02课程的学生的学号select distinct学号from选课表where课程号='C01' or 课程号='C02'20.从选课表中查询学号为1101的学生的选课情况select课程号from选课表where学号='1101'21.从选课表中查询所有选课信息,即学号、课程号、成绩,并给成绩加8分select学号,课程号,成绩=成绩+8 from选课表22.从选课表中查询学号为1101的学生的所有选修课程成绩的总和select sum(成绩)成绩总和from选课表where学号='1101'23.从选课表中查询选修课程好为C02所有学生的成绩平均值并赋予“平均成绩24.”列名select avg(成绩)平均成绩from选课表where课程号='C02'25.从选课表中查询选修课程号C02且该门课程考试及格的学生的学号select学号from选课表where课程号='C02'and成绩>=6026.从选课表中查询所有无考试成绩的学生的学号和课程的课程号select学号,课程号from选课表where成绩is null27.从选课表中查询选修了课程号以C开头的学生的学号和所选课程的课程号select学号,课程号from选课表where课程号LIKE'C%'28.从选课表中查询选修了课程号以C、D或E开头学生的学号和所选课程的课程号select学号,课程号from选课表where课程号LIKE'[CDE]%'29.从选课表中查询选修了课程号中包含DB的学生的学号和课程号select学号,课程号from选课表where课程号LIKE'%DB%'30.从选课表中查询选修了课程的学生的学号select distinct学号from选课表where课程号is not null31.从选课表中查询选修了课程的学生的人数select count(distinct学号)总人数from选课表31.找出姓名以D开头的学生姓名和所有成绩select学生表.姓名,选课表.成绩from学生表join选课表on学生表.学号=选课表.学号where学生表.姓名LIKE'D%'32.查找的所有学生姓名与学号,结果按学号降序排序select 学号,姓名from学生表order BY学号DESC33.查找成绩介于80和90之间的学生姓名,结果按成绩和姓名升序排序select学生表.姓名from选课表join学生表on学生表.学号=选课表.学号where选课表.成绩between 80 and 90order BY选课表.成绩,学生表.姓名34.查找english系的所有学生姓名,结果按成绩和姓名升序排序select学生表.姓名,学生表.学号,选课表.成绩from选课表join学生表on学生表.学号=选课表.学号where学生表.系部='english'35.查找同时选修了C01及C02两门课程的学生姓名及学号select学生表.姓名,A.学号from选课表as A join选课表as B on A.学号=B.学号join学生表on学生表.学号=A.学号where A.课程号='C01'and B.课程号='C02'36.查找所有选修了课程的学生姓名及所在系别select distinct学生表.姓名,学生表.系部from学生表join选课表on学生表.学号=选课表.学号where选课表.课程号is not null37.查找成绩高于90分的学生姓名、学号及系别select学生表.姓名,学生表.学号,学生表.系部from学生表join选课表on学生表.学号=选课表.学号where选课表.成绩>=9038.找出选修了C01课程的学生姓名select学生表.姓名from学生表join选课表on学生表.学号=选课表.学号where选课表.课程号='C01'39.查询English系学生人数select count(*) English 系总人数from学生表where系部='English'40.分别查询各系的学生人数select系部,count(*)人数from学生表group by系部41.创建一个角色uus.CREATE ROLE uus;42.给uus授权SELECT,UPDATE,INSERT .GRANT SELECT,UPDATE,INSERTON StuTO uus43.增加一个登录,登录名为tp,密码为123,默认的数据库为stuEXEC sp_addlogin 'tp', '123', 'stu'44.将登录tp增加为test库的一个用户,并连接到test库。
SQL语句(有答案)
一. SQL语句【1】(C226)下列关于SQL语言特点的描述中,错误的是( )。
A)语言非常简洁B)是一种一体化语言C)是一种高度过程化的语D)可以直接以命令方式交互使用,也可以程序方式使用【2】1103(7)负责数据库中查询操作的数据库语言是A)数据定义语言B)数据管理语言C)数据操作语言D)数据控制语言【3】Y3(18)SQL语言的核心是( )。
A)数据操纵B)数据定义C)数据查询D)数据定义【4】Y1(24)VisualFoxPro在SQL方面,不支持的功能是( )。
A)数据控制B)数据操纵C)数据查询D)数据定义【5】Y4(30)下列选项中,不属于SQL特殊运算符的是( )。
A)GROUP B)ON C)ALL D)EMPTY二. SQL查询语句【1】0904(12)SQL语句的查询语句是A) INSERT B)UPDATE C) DELETE D) SELECT【2】(C126)标准的SQL基本查询语句的格式是( )。
A)SELECT…FROM…WHERE B)SELECT…WHERE…FROM C)SELECT…WHERE…GROUP BY D)SELECT…FROM…ORDER BY 【3】Y3 (25)SQL语句中,SELECT语句中的JOIN是用来建立表间的联系短语应放在下列哪个短语之后( )。
A)FROM B)WHERE C)ON D)GROUP BY【4】Y2(20)SQL语句中,SELECT命令中的JOIN是用来建立表间的联系短语,连接条件应出现在下列哪个短语中A)WHERE B)ON C)HAVING D)INNER【5】Y4(17)SQL SELECT语句中的WHERE用于说明( )。
A)查询数据B)查询条件C)查询分组D)查询排序【6】Y4(18)SQL语句可以进行多个查询的嵌套,但Visual FoxPro中只支持( )层嵌套。
A)1 B)2 C)3 D)无穷【7】(C128)在Visual FoxPro中,嵌套查询是基于( )的查询A)2个关系B)3个关系C)多个关系D)2个或3个关系【8】0704 (17)以下有关SELECT语句的叙述中错误的是A)SELECT语句中可以使用别名B)SELECT语句中只能包含表中的列及其构成的表达式C)SELECT语句规定了结果集中的顺序D)如果FROM短语引用的两个表有同名的列,则SELECT短语引用它们时必须使用表名前缀加以限定【9】0504 (31) 在Visual FoxPro中,以下有关SQL的SELECT语句的叙述中,错误的是 ( )。
结构化查询语言(SQL)高级应用测试
结构化查询语言(SQL)高级应用测试(答案见尾页)一、选择题1. SQL中用于数据查询的语句是:A. SELECTB. INSERTC. UPDATED. DELETE2. 在SQL中,用于修改表结构的语句是:A. ALTER TABLEB. CREATE TABLEC. DROP TABLED. Renames the table3. SQL中的聚合函数不包括:A. COUNT()B. SUM()C. AVG()D. MAX()4. 在SQL中,用于数据分组的语句是:A. GROUP BYB. ORDER BYC. HAVINGD. DISTINCT5. 在SQL中,用于从指定表中检索特定列的语句是:A. SELECT * FROM table_name;B. SELECT column1, column2 FROM table_name;C. INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);D. DELETE FROM table_name WHERE condition;6. 在SQL中,用于插入新数据到指定表中的语句是:A. INSERT INTOB. CREATE TABLEC. UPDATED. DELETE7. 在SQL中,用于删除表中所有数据的语句是:A. DELETE FROM table_name;B. DROP TABLE table_name;C. TRUNCATE table_name;D. DELETE table_name;8. 在SQL中,用于排序查询结果的语句是:A. ORDER BYB. GROUP BYC. HAVINGD. DISTINCT9. 在SQL中,用于连接两个或多个表的語句是:A. JOINB. UNIONC. SUBQUERYD. DELETE10. 在SQL中,用于返回查询结果的最大值和最小值的语句是:A. SELECT MAX(column_name) FROM table_name;B. SELECT MIN(column_name) FROM table_name;C. SELECT MAX(column_name), MIN(column_name) FROM table_name;D. None of the above11. SQL中用于数据查询的命令是?A. SELECTB. INSERTC. UPDATED. DELETE12. 在SQL中,哪种数据类型允许存储文本信息?A. INTB. VARCHARC. DATED. TIME13. SQL中的子查询是一种什么类型的查询?A. 选择特定的行B. 选择特定的列C. 嵌套在另一个查询中D. 对结果进行计算14. 在SQL中,用于排序查询结果的命令是什么?A. ORDER BYB. GROUP BYC. HAVINGD. DISTINCT15. SQL中的聚合函数有哪些?(多选)A. COUNTB. SUMC. AVGD. MAXE. MIN16. 在SQL中,如何修改表结构?A. 使用INSERT语句B. 使用UPDATE语句C. 使用ALTER TABLE语句D. 使用CREATE TABLE语句17. SQL中的事务是什么?A. 一段程序代码B. 一组SQL语句的集合C. 一个工作单元,确保数据的完整性和一致性D. 一种数据库管理机制18. 在SQL中,如何创建一个包含特定约束的表?A. 使用CREATE TABLE语句B. 使用ALTER TABLE语句C. 使用CREATE INDEX语句D. 使用INSERT语句19. SQL中的触发器是一种什么类型的对象?A. 存储过程B. 函数C. 对象D. 规则20. 在SQL中,如何执行复杂的查询?A. 使用简单的SELECT语句B. 使用多个SELECT语句和连接操作C. 使用存储过程D. 使用函数21. SQL中的事务隔离级别中,哪个级别可以防止脏读(Dirty Read)?A. 读未提交(Read Uncommitted)B. 读已提交(Read Committed)C. 可重复读(Repeatable Read)D.串行化(Serializable)22. 在SQL中,用于查询所有用户的权限的语句是:A. SELECT USERB. SELECT ALL PRIVILEGESC. SELECT PERMISSIOND. SHOW GRANTS23. SQL中,用于创建存储过程的语句是:A. CREATE PROCEDUREB. CREATE FUNCTIONC. CREATE TRIGGERD. CREATE VIEW24. 在SQL中,用于查看当前数据库名的命令是:A. SELECT DATABASE()B. SELECT USER()C. SELECT CURRENT_DATABASE()D. SHOW DATABASES25. SQL中,用于修改表数据的语句是:A. INSERTB. UPDATEC. DELETED. ALTER26. 在SQL中,用于备份数据库的语句是:A. BACKUP DATABASEB. CREATE BACKUPC. SAVEBACK DATABASED. TAKE BACKUP27. SQL中,用于从某个表的指定列中返回所有值的唯一约束是:A. UNIQUEB. PRIMARY KEYC. NOT NULLD. FOREIGN KEY28. 在SQL中,用于强制实行数据库一致性控制的命令是:A. ROLLBACKB. COMMITC. SAVEPOINTD. SET TRANSACTION29. 在SQL中,如果需要对某个表中的所有数据进行备份,应该使用哪个命令?A. SELECT * FROM table_name;B. CREATE TABLE table_name LIKE old_table_name;C. INSERT INTO table_name SELECT * FROM table_name;D. DROP TABLE table_name;30. SQL语言中的“结构化查询语言”缩写是什么?A. SASB. SQLC. DDLD. DML31. 在SQL中,用于修改表结构的命令是?A. ALTER TABLEB. CREATE TABLEC. DROP TABLED. TRUNCATE TABLE32. SQL中的“结构化”是指数据的组织方式是?A. 数据和数据库管理系统是分开的B. 数据和数据库管理系统是相互独立的C. 数据和数据库管理系统是相互关联的D. 数据和数据库管理系统是自包含的33. 在SQL中,如果需要对某个列的数据进行统计分析,应该使用哪个函数?A. COUNT()B. SUM()C. AVG()D. MAX()34. SQL中用于数据分组的命令是?A. GROUP BYB. ORDER BYC. HAVINGD. DISTINCT35. 在SQL中,如果需要对某个表进行复杂的查询,应该使用哪个命令?A. SELECT * FROM table_name WHERE condition;B. CREATE TABLE table_name AS SELECT * FROM another_table WHERE condition;C. INSERT INTO table_name (column1, column2, ...) SELECT column1, column2, ... FROM another_table WHERE condition;D. DELETE FROM table_name WHERE condition;36. SQL中的“结构化”是指数据的组织方式是有组织的,易于理解和处理,这是指什么?A. 数据和数据库管理系统是分开的B. 数据和数据库管理系统是相互独立的C. 数据和数据库管理系统是相互关联的D. 数据和数据库管理系统是自包含的37. 在SQL中,如果需要对某个表进行排序,应该使用哪个命令?A. ORDER BYB. GROUP BYC. DISTINCTD. LIMIT38. 在SQL中,哪种类型的约束可以确保字段值的唯一性?A. 主键约束B. 外键约束C. 唯一约束D. 非空约束39. SQL中的`CASE`语句用于执行什么操作?A. 条件判断B. 数据转换C. 控制流程D. 数据汇总40. 在SQL中,如何更新表中的数据?A. 使用UPDATE语句B. 使用DELETE语句C. 使用INSERT语句D. 使用CREATE语句41. SQL中的`GROUP BY`子句用于将查询结果按照哪个或多个列进行分组?A. 对查询结果进行排序B. 对查询结果进行分组C. 对查询结果进行过滤D. 对查询结果进行投影42. 如何在SQL中使用`JOIN`操作来结合两个或多个表的列?A. 使用INNER JOINB. 使用LEFT JOINC. 使用RIGHT JOIND. 使用FULL OUTER JOIN43. 在SQL中,如何删除表中的所有数据?A. 使用DELETE语句B. 使用TRUNCATE语句C. 使用DROP TABLE语句D. 使用DELETE FROM语句44. SQL中的`ORDER BY`子句用于对查询结果进行排序,如果指定为升序,那么关键字是什么?A. ASCB. DESCC. ASCENDD. DESCEND45. 如何在SQL中使用子查询来从一个表中筛选出满足某个条件的行?A. 将子查询作为条件直接放在SELECT语句中B. 将子查询作为另一个查询的结果集C. 将子查询作为表名放在SELECT语句中D. 将子查询作为表达式放在SELECT语句中46. 在SQL中,如何修改表的结构?A. 使用ALTER TABLE语句B. 使用CREATE TABLE语句C. 使用DELETE TABLE语句D. 使用TRUNCATE TABLE语句二、问答题1. 什么是SQL?请简述SQL的特点。
SQL查询语句学习答案
第一部分SQL查询语句的学习没有安装SQL Server,只有Access,所以就在Access中操作,Access中的SQL语句与SQL Server中有一点不一样,但是不影响总体的学习,触类旁通,共勉。
所使用的数据库数据是Northwind.mdb单表查询--查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、客户ID和雇员ID等字段的值SQL语句:select 订单ID, 客户ID, 雇员ID, 订购日期from 订单where 订购日期between #1996-07-01# and #1996-07-15#截图:--查询“Northwind”示例数据库中供应商的ID、公司名称、地区、城市和电话字段的值。
条件是“地区等于华北”并且“联系人头衔等于销售代表”。
SQL语句:select 供应商ID, 公司名称, 地区, 城市, 电话from 供应商where 地区='华北' and 联系人职务='销售代表'截图:--查询“Northwind”示例数据库中供应商的ID、公司名称、地区、城市和电话字段的值。
其中的一些供应商位于华东或华南地区,另外一些供应商所在的城市是天津SQL语句:select 供应商ID, 公司名称, 地区, 城市, 电话from 供应商where 地区in ('华北','华南') or 城市='天津'截图:--查询“Northwind”示例数据库中位于“华东”或“华南”地区的供应商的ID、公司名称、地区、城市和电话字段的值SQL语句:select 供应商ID, 公司名称, 地区, 城市, 电话from 供应商where 地区='华东' or 地区='华南'截图:多表查询--查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、相应订单的客户公司名称、负责订单的雇员的姓氏和名字等字段的值,并将查询结果按雇员的“姓氏”和“名字”字段的升序排列,“姓氏”和“名字”值相同的记录按“订单ID”的降序排列SQL语句:select 订购日期, 订单ID, 公司名称, 姓氏, 名字from 订单, 雇员, 客户where 订购日期between #1996-07-01# and #1996-07-15#and 订单.客户ID = 客户.客户IDand 订单.雇员ID = 雇员.雇员IDorder by 姓氏, 名字ASC, 订单ID DESC截图:--查询“10248”和“10254”号订单的订单ID、运货商的公司名称、订单上所订购的产品的名称SQL语句:select 订单.订单ID, 公司名称, 产品名称from 订单, 运货商, 产品, 订单明细where 订单.订单ID in (10248,10254)and 订单.运货商= 运货商.运货商IDand 订单.订单ID = 订单明细.订单IDand 订单明细.产品ID = 产品.产品ID截图:--查询“10248”和“10254”号订单的订单ID、订单上所订购的产品的名称、数量、单价和折扣SQL语句:select 订单.订单ID, 产品名称, 数量, 订单明细.单价, 折扣from 订单, 产品, 订单明细where 订单.订单ID in (10248, 10254)and 订单.订单ID = 订单明细.订单IDand 订单明细.产品ID = 产品.产品ID截图:--查询“10248”和“10254”号订单的订单ID、订单上所订购的产品的名称及其销售金额SQL语句:select 订单.订单ID, 产品名称, 数量*订单明细.单价*(1-折扣) as 销售金额from 订单, 订单明细, 产品where 订单.订单ID in (10248, 10254)and 订单.订单ID = 订单明细.订单IDand 订单明细.产品ID = 产品.产品ID截图:综合查询--查询所有运货商的公司名称和电话SQL语句:select 公司名称, 电话from 运货商截图:--查询所有客户的公司名称、电话、传真、地址、联系人姓名和联系人头衔SQL语句:select 公司名称, 电话, 传真, 地址, 联系人姓名, 联系人职务from 客户截图:--查询单价介于10至30元的所有产品的产品ID、产品名称和库存量SQL语句:select 产品ID, 产品名称, 库存量from 产品where 单价between 10 and 30截图:--查询单价大于20元的所有产品的产品名称、单价以及供应商的公司名称、电话SQL语句:select 产品名称, 单价, 公司名称, 电话from 产品, 供应商where 单价>20and 产品.供应商ID = 供应商.供应商ID截图:--查询上海和北京的客户在1996年订购的所有订单的订单ID、所订购的产品名称和数量SQL语句:Select 订单.订单ID, 产品名称, 数量From 订单, 客户, 产品, 订单明细Where 城市in (‘上海’, ‘北京’)And 订单.客户ID = 客户.客户IDAnd 订单.订单ID = 订单明细.订单IDAnd 订单明细.产品ID = 产品.产品ID截图:--查询华北客户的每份订单的订单ID、产品名称和销售金额SQL语句:Select 订单.订单ID, 产品名称, 产品.单价*(1-折扣)*数量as 销售金额From 订单, 产品, 订单明细, 客户Where 地区= '华北'And 订单.客户ID = 客户.客户IDAnd 订单.订单ID = 订单明细.订单IDAnd 订单明细.产品ID = 产品.产品ID截图:--按运货商公司名称,统计1997年由各个运货商承运的订单的总数量SQL语句:Select 公司名称, count(订单ID) as 订单总数量From 订单, 运货商Where year(发货日期) = 1997And 订单.运货商= 运货商.运货商IDGroup by 公司名称截图:--统计1997年上半年的每份订单上所订购的产品的总数量SQL语句:Select 订单.订单ID, sum(数量) as 总数量From 订单, 订单明细Where 订购日期between #1997-01-01# and #1997-06-30# And 订单.订单ID = 订单明细.订单IDGroup by 订单.订单ID截图:--统计各类产品的平均价格SQL语句:Select 类别名称, sum(单价*库存量)/sum(库存量) as 平均价格From 类别, 产品Where 类别.类别ID = 产品.类别IDGroup by 类别名称截图:--统计各地区客户的总数量SQL语句:Select 地区, count(客户ID) as 总数量From 客户Group by 地区截图:。
SQL查询-高级查询2 (1)
连接运算符:= >
连接运算符:IN 或: >ALL >SOME >ANY
※返回唯一值的子查询 示例:查询某同学(学号为110005)的那个班的女 同学的基本信息 SELECT *
FROM 学生信息表 WHERE 班级编号=(SELECT 班级编号 FROM 学生信息表 WHERE 学号='110005' ) AND 性别='女';
USE Library SELECT BookName, Author, Publish FROM Book A WHERE EXISTS (SELECT * FROM Lending WHERE LendDate = '2010-01-01' AND A.BookId =BookId )
连接查询和子查询的比较
注意:该子查询的返回值只有一个,用= 思考:如果是某姓名(李晶)的如何?
子查询--嵌套查询
思考练习:写出查询某同学(李红)的全部成 绩信息,要求输出:课程代码、学号、成绩, 按课程代码升序、学号排序升序。
问题:子查询的结果唯一吗?如果要同时 输出姓名,查询方式为多表查询 or 子查 询?
※返回一组值的子查询
select学号姓名select学号姓名from学生信息表where班级编号201003学号notinselect学号from成绩表where课程代码900011子查询嵌套查询and754使用all的子查询all的用法和any或some一样也是把列值与子查询结果进行比较但它不要求任意结果值的列值为真而是要求所有列的结果都为真否则就不返回行
USE Library SELECT * FROM UserTb WHERE UserId <> ALL ( SELECT UserId FROM Lending WHERE LendDate < '2009-01-02' )
SQL查询及答案
SQL查询及答案一、单表查询练习1、查询<学生信息表>,查询学生"张三"的全部基本信息Select *from A_studentinfowhere sname='张三'2、查询<学生信息表>,查询学生"张三"和”李四”的基本信息Select *from A_studentinfowhere sname='张三'or sname='李四'3、查询<学生信息表>,查询姓"张"学生的基本信息Select *from A_studentinfowhere sname like '张%'4、查询<学生信息表>,查询姓名中含有"四"字的学生的基本信息Select *from A_studentinfowhere sname like '%四%'5、查询<学生信息表>,查询姓名长度为三个字,姓“李”,且最后一个字是“强”的全部学生信息。
select *from A_studentinfowhere sname like '李_强'6、查询<学生信息表>,查询姓"张"或者姓”李”的学生的基本信息。
Select *from A_studentinfowhere sname like '张%'or sname like '李%'7、查询<学生信息表>,查询姓"张"并且"所属省份"是"北京"的学生信息Select *from A_studentinfowhere sname like '张%'and province='北京'8、查询<学生信息表>,查询"所属省份"是"北京"、”新疆”、”山东”或者"上海"的学生的信息Select *from A_studentinfowhere province in ('北京','上海','新疆','山东')9、查询<学生信息表>,查询姓"张",但是"所属省份"不是"北京"的学生信息Select *from A_studentinfowhere sname like '张%'and province !='北京'10、查询<学生信息表>,查询全部学生信息,并按照“性别”排序,性别相同的情况下按照“所属省份”排序,所属省份相同的情况下再按照“班级”排序select *from A_studentinfoorder by sex,province,class11、查询<学生信息表>,查询现有学生都来自于哪些不同的省份select distinct province as 省份from A_studentinfo12、查询<学生选修信息表>,查询没有填写成绩的学生的学号、课程号和成绩Select *from A_studentcoursewhere score is null13、查询<学生选修信息表>,查询全部填写了成绩的学生的选修信息,并按照“成绩”从高到低进行排序Select *from A_studentcoursewhere score is not nullorder by score desc二、聚合函数练习1、统计<学生信息表>,统计共有多少个学生Select count (*) as 学生数量from A_studentinfo2、统计<学生信息表>,统计年龄大于20岁的学生有多少个Select count(*) as 学生数量from A_studentinfowhere (2021-yearofbirth)>203、统计<学生信息表>,统计入学时间在1980年至1982年的学生人数select count(*) as 学生数量from A_studentinfowhere enrollment between '1998-01-01' and '2021-12-30'对比以下查询方式,看看有何不同,为什么?select count(*) as 学生数量from A_studentinfowhere enrollment between '1998' and '2021'。
sql高级查询选择题
SQL高级查询选择题以下是三个SQL高级查询选择题,请选择正确的答案:1.假设有一个名为"employees"的表,其中包含"id"、"name"和"salary"等列。
要查询工资高于平均工资的员工,可以使用以下哪个SQL语句?A. SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROMemployees);B. SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROMemployees)C. SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROMemployees);D. SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROMemployees)2.假设有一个名为"orders"的表,其中包含"order_id"、"customer_id"和"order_date"等列。
要查询在过去30天内下单的所有客户,可以使用以下哪个SQL语句?A. SELECT customer_id FROM orders WHERE order_date >= CURRENT_DATE -30;B. SELECT customer_id FROM orders WHERE order_date <= CURRENT_DATE -30;C. SELECT customer_id FROM orders WHERE order_date >= CURRENT_DATE -INTERVAL 30 DAY;D. SELECT customer_id FROM orders WHERE order_date <= CURRENT_DATE -INTERVAL 30 DAY;3.假设有一个名为"products"的表,其中包含"product_id"、"product_name"和"price"等列。
SQL查询练习参考答案
SQL查询练习参考答案1.分别查询学生表和学生修课表中的全部数据.select * from studentselect * from sc2.查询计算机系的学生的姓名、年龄。
select 姓名,年龄from student where 所在系='计算机系'3.查询选修了c01号课程的学生的学号和成绩。
select 学号,成绩from sc where 课程号='c01'4.查询成绩在70到80分之间的学生的学号,课程号和成绩.select 学号,课程号,成绩from sc where 成绩between 70 and 805.查询计算机系年龄在18到20之间且性别为"男"的学生的姓名和年龄.select 姓名,年龄from student where 所在系='计算机系' and 性别='男' and 年龄between 18 and 206.查询9512101号学生的修课情况.select * from sc where 学号='9512101'7.查询c01号课程成绩最高的分数.select max(成绩) 最高分from sc where 课程号='c01'select 学号,课程号,成绩最高分from sc where 成绩=(select max(成绩) from sc where 课程号='c01')8.查询学生都修了哪些课程,要求列出课程号select distinct 课程号from sc9.查询Northwind 数据库中orders表的OrderID,CustomerID和OrderDate,并奖最新的订购日期(OrderDate)列在前面.use Northwindselect OrderDate,OrderID,CustomerID from orders10.查询Northwind 数据库中orders表的ShipCountry列以B,C,D,F开始且第三个字符为"a"的OrderID,CustomerID和ShipCountry信息.select OrderID,CustomerID,ShipCountry from orders where ShipCountry like '[BCDF]_a%'11.查询Northwind 数据库中orders表的ShipCountry列不以A,B,C,D,E,F开始且最后一个字母是"a"的OrderID,CustomerID和ShipCountry信息.select OrderID,CustomerID,ShipCountry from orders where ShipCountry like '[^ABCDEF]%A' 12.查询学生数据库中学生的最大年龄和最小年龄.use sqllxselect max(年龄) 最大年龄,min(年龄) 最小年龄from student13.查询修了c02号课程的所有学生的平均成绩,最高成绩,最低成绩.select avg(成绩) 平均成绩,max(成绩) 最高成绩,min(成绩) 最低成绩from sc where 课程号='c02'14.统计每个系的学生人数.select 所在系, count(*) 人数from student group by 所在系15.统计每门课程的修课人数和考试最高分.select 课程号,count(*) 修课人数,max(成绩) 最高分from sc group by 课程号16.统计每个学生的选课门数,并按选课门数的递增顺序显示结果select 学号,count(课程号) 选课门数from sc group by 学号order by count(课程号)17.统计各系的修课的学生总数和考试的平均成绩.select 所在系,count(*) 学生总数,avg(成绩) 平均成绩from student st join sc on st.学号=sc.学号group by 所在系18.查询选课门数超过两门的学生的平均成绩和选课门数.select 学号,count(课程号) 选课门数,avg(成绩) 平均成绩from sc group by 学号having count(课程号)>219.列出总成绩超过200分的学生,要求列出学号,总成绩select 学号,sum(成绩) 总成绩from sc group by 学号having sum(成绩)>20020.平均价格超过12.0元的书的类型(type),平均价格,要求只计算有确定价格的图书的情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL 作业2:高级查询
一、连接查询
1 不同表之间的连接查询
例1.37 查询每个学生及其选修课程的情况。
SELECT Students.*,Reports.*FROM Students,Reports
WHERE Students.Sno=Reports.Sno;
例1.38 查询每个学生的学号(Sno)、姓名(Sname)、选修的课程名(Cname)及成绩(Grade)。
SELECT Students.Sno, Sname, Cname, Grade FROM Students,Reports,Courses
WHERE Students.Sno=Reports.Sno AND o= o;
补例子:查询选修了C01课程且成绩为70分以上的学生学号 姓名和成绩。
select Students.Sno,Sname, Reports.Grade from Students,Reports
where Students.Sno=Reports.Sno and o='C01' and Grade>702 自身连接
例1.39 查`询每一门课的间接先修课(即先修课的先修课)。
SELECT ame , o, B.Pre_Cno FROM Courses A , Courses B WHERE A.Pre_Cno=o;3 外连接
例1.40把例1.37中的等值连接改为左连接。
SELECT Students.*,o,REPORTS.Grade FROM Students,Reports
WHERE Students.Sno*=Reports.Sno;二、嵌套查询
表1.1 关系Students
Sno Sname Ssex Sage Sdept S01S02S03S04S05S06
王建平刘华范林军李伟黄河长江
男女女男男男
211918191820
自动化自动化计算机数学数学数学
表1.2 关系Courses Cno Cname Pre_Cno
Credits C01C02C03C04C05C06C07
英语数据结构数据库DB_设计C++网络原理操作系统
C05C02C03C07C05
4223333
表1.3 关系Reports
Sno
Cno Grade S01S01S02S02S02S03S03S04
C01C03C01C02C03C01C02C03
9284909482729075
1 带谓词IN的嵌套查询
例1.41 查询选修了编号为“C02”的课程的学生姓名(Sname)和所在系(Sdept)。
SELECT Students.Sno, Sname
FROM Students
where Students.Sno in (select Sno
from Reports
WHERE Cno in (select Cno
from Courses
where Cname='数据结构'))
例1.42查询与“李伟”在同一个系学习的学生学号(Sno)、姓名(Sname)和系名(Sdept)。
SELECT Sno, Sname, Sdept
FROM Students
WHERE Sdept IN ( SELECT Sdept
FROM Students
WHERE Sname=’李伟’);
例1.43查询选修了课程名为“数据结构”的学生学号(Sno)和姓名(Sname)。
SELECT Sno, Sname
FROM Students
WHERE Sno IN ( SELECT Sno
FROM Reports
WHERE Cno IN ( SELECT Cno
FROM Courses
WHERE Cname='数据结构'));
2 带有比较运算符的嵌套查询
例1.44将例1.42改为带有比较运算符的嵌套查询。
SELECT Sno, Sname, Sdept
FROM Students
WHERE Sdept= ( SELECT Sdept
FROM Students
WHERE Sname='李伟');
3 带谓词ANY或ALL的嵌套查询
例1.45查询非自动化系的不超过自动化系所有学生的年龄的学生姓名(Sname)和年龄(Sage)。
SELECT Sname, Sage
FROM Students
WHERE Sage<=ALL( SELECT Sage
FROM Students
WHERE Sdept='自动化') AND Sdept!='自动化';
或者用下面的方法
SELECT Sname, Sage
FROM Students
WHERE Sage<=ALL( SELECT Sage
FROM Students
WHERE Sdept='自动化') AND Sdept NOT IN ('自动化')
4 带谓词EXISTS的嵌套查询
例1.46查询所有选修了编号为“C01”课程的学生姓名(Sname)和所在系(Sdept)。
SELECT Sname,Sdept
FROM Students
WHERE EXISTS (SELECT Sno
FROM Reports
WHERE Students.Sno=Reports.Sno AND Cno='C01');
例1.47将例1.42改为带谓词EXISTS的查询,
SELECT Sno,Sname,Sdept
From Students
Where EXISTS ( SELECT *
From Students
Where Sname='李伟')
例1.48 查询选修了所有课程的学生姓名(Sname)和所在系。
SELECT Sname,Sdept
FROM Students
WHERE EXISTS (SELECT *
FROM Reports
WHERE Students.Sno=Reports.Sno );
三、集合查询
例1.49查询计算机科学系的学生或年龄不大于20岁的学生信息。
SELECT Students.*
FROM Students
WHERE Sdept='计算机'
UNION
SELECT Students.*
FROM Students
WHERE Sage<=20;
例1.50 查询数学系的学生且年龄不大于20岁的学生的交集,这实际上就是查询数学系中年龄不大于20岁的学生。
SELECT Students.*
FROM Students
WHERE Sdept='数学'
INTERSECT
SELECT Students.*
FROM Students
WHERE Sage<=20 ;
例1.51查询数学系的学生与年龄不大于20岁的学生的差集。
SELECT Students.*
FROM Students
WHERE Sdept='数学'
MINUS
SELECT Students.*
FROM Students
WHERE Sage<=20;。