50个经典SQL查询语句题目
sql 五十题
sql 五十题以下是一些SQL练习题,共50题:1. 什么是SQL?2. 什么是关系型数据库?3. 什么是主键?4. 什么是外键?5. 什么是索引?6. 什么是查询?7. 什么是插入操作?8. 什么是更新操作?9. 什么是删除操作?10. 什么是聚合函数?11. 什么是分组操作?12. 什么是排序操作?13. 什么是联接操作?14. 什么是子查询?15. 什么是视图?16. 什么是存储过程?17. 什么是触发器?18. 如何使用WHERE子句进行过滤?19. 如何使用ORDER BY子句进行排序?20. 如何使用GROUP BY子句进行分组?21. 如何使用HAVING子句进行分组过滤?22. 如何使用JOIN操作联接表?23. 如何使用聚合函数SUM、AVG、MIN、MAX?24. 如何使用聚合函数COUNT、COUNT()和COUNT(列名)的区别?25. 如何使用子查询嵌套查询?26. 如何创建视图并查询视图数据?27. 如何创建存储过程并调用存储过程?28. 如何创建触发器并触发触发器?29. 如何使用INSERT INTO语句插入数据?30. 如何使用UPDATE语句更新数据?31. 如何使用DELETE语句删除数据?32. 如何使用TRUNCATE TABLE语句清空表数据?33. 如何使用UNION操作符合并多个查询结果?34. 如何使用UNION ALL操作符合并多个查询结果(包括重复行)?35. 如何使用IN操作符筛选符合条件的多个值?36. 如何使用LIKE操作符进行模糊查询?37. 如何使用NOT操作符进行否定筛选?38. 如何使用BETWEEN操作符筛选范围值?39. 如何使用EXISTS操作符检查子查询结果是否存在?40. 如何使用NOT EXISTS操作符检查子查询结果是否存在(否定筛选)?41. 如何使用CASE语句进行条件判断和值转换?42. 如何使用DISTINCT关键字去除查询结果的重复行?43. 如何使用LIMIT关键字限制查询结果的行数?44. 如何使用JOIN操作连接多个表并筛选数据?45. 如何使用INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN的区别和用法?46. 如何使用视图提高查询效率和维护数据安全性?47. 如何使用存储过程存储复杂的业务逻辑和重复使用的查询语句?48. 如何使用触发器自动执行特定事件或数据修改操作?49. 如何优化SQL查询性能,提高数据库的响应速度?50. 如何安全地管理和维护数据库,确保数据的完整性和可靠性?。
MySql语句练习50题
MySql语句练习50题-- 1、查询"01"课程⽐"02"课程成绩⾼的学⽣的信息及课程分数select st.*,sc.s_score as '语⽂' ,sc2.s_score '数学'from student stleft join score sc on sc.s_id=st.s_id and sc.c_id='01'left join score sc2 on sc2.s_id=st.s_id and sc2.c_id='02'where sc.s_score>sc2.s_score-- 2、查询"01"课程⽐"02"课程成绩低的学⽣的信息及课程分数select st.*,sc.s_score '语⽂',sc2.s_score '数学' from student stleft join score sc on sc.s_id=st.s_id and sc.c_id='01'left join score sc2 on sc2.s_id=st.s_id and sc2.c_id='02'where sc.s_score<sc2.s_score-- 3、查询平均成绩⼤于等于60分的同学的学⽣编号和学⽣姓名和平均成绩select st.s_id,st.s_name,ROUND(AVG(sc.s_score),2) cjScore from student stleft join score sc on sc.s_id=st.s_idgroup by st.s_id having AVG(sc.s_score)>=60SELECT s.s_id,st.s_name,s.`平均成绩` from student st INNER JOIN(SELECT AVG(sc.s_score) as '平均成绩',sc.s_id from score sc GROUP BY sc.s_id HAVING AVG(sc.s_score) >60) son s.s_id=st.s_id-- 4、查询平均成绩⼩于60分的同学的学⽣编号和学⽣姓名和平均成绩-- (包括有成绩的和⽆成绩的)select st.s_id,st.s_name,(case when ROUND(AVG(sc.s_score),2) is null then 0 else ROUND(AVG(sc.s_score)) end ) cjScore from student stleft join score sc on sc.s_id=st.s_idgroup by st.s_id having AVG(sc.s_score)<60 or AVG(sc.s_score) is NULL-- 5、查询所有同学的学⽣编号、学⽣姓名、选课总数、所有课程的总成绩select st.s_id,st.s_name,count(c.c_id),( case when SUM(sc.s_score) is null or sum(sc.s_score)="" then 0 else SUM(sc.s_score) end) from student stleft join score sc on sc.s_id =st.s_idleft join course c on c.c_id=sc.c_idgroup by st.s_id-- 6、查询"李"姓⽼师的数量select t.t_name,count(t.t_id) from teacher tgroup by t.t_id having t.t_name like "李%";-- 7、查询学过"张三"⽼师授课的同学的信息select st.* from student stleft join score sc on sc.s_id=st.s_idleft join course c on c.c_id=sc.c_idleft join teacher t on t.t_id=c.t_idwhere t.t_name="张三"-- 8、查询没学过"张三"⽼师授课的同学的信息-- 张三⽼师教的课select c.* from course c left join teacher t on t.t_id=c.t_id where t.t_name="张三"-- 有张三⽼师课成绩的st.s_idselect sc.s_id from score sc where sc.c_id in (select c.c_id from course c left join teacher t on t.t_id=c.t_id where t.t_name="张三")-- 不在上⾯查到的st.s_id的学⽣信息,即没学过张三⽼师授课的同学信息select st.* from student st where st.s_id not in(select sc.s_id from score sc where sc.c_id in (select c.c_id from course c left join teacher t on t.t_id=c.t_id where t.t_name="张三"))-- 9、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息select st.* from student stinner join score sc on sc.s_id = st.s_idinner join course c on c.c_id=sc.c_id and c.c_id="01"where st.s_id in (select st2.s_id from student st2inner join score sc2 on sc2.s_id = st2.s_idinner join course c2 on c2.c_id=sc2.c_id and c2.c_id="02"⽹友提供的思路(厉害呦~):SELECT st.*FROM student stINNER JOIN score sc ON sc.`s_id`=st.`s_id`GROUP BY st.`s_id`HAVING SUM(IF(sc.`c_id`="01" OR sc.`c_id`="02" ,1,0))>1-- 10、查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息select st.* from student stinner join score sc on sc.s_id = st.s_idinner join course c on c.c_id=sc.c_id and c.c_id="01"where st.s_id not in (select st2.s_id from student st2inner join score sc2 on sc2.s_id = st2.s_idinner join course c2 on c2.c_id=sc2.c_id and c2.c_id="02")-- 11、查询没有学全所有课程的同学的信息-- 太复杂,下次换⼀种思路,看有没有简单点⽅法-- 此处思路为查学全所有课程的学⽣id,再内联取反⾯select * from student where s_id not in (select st.s_id from student stinner join score sc on sc.s_id = st.s_id and sc.c_id="01"where st.s_id in (select st2.s_id from student st2inner join score sc2 on sc2.s_id = st2.s_id and sc2.c_id="02") and st.s_id in (select st2.s_id from student st2inner join score sc2 on sc2.s_id = st2.s_id and sc2.c_id="03"))-- 来⾃⼀楼⽹友的思路,左连接,根据学⽣id分组过滤掉数量⼩于课程表中总课程数量的结果(show me his code),简洁不少。
数据库常用SQL语句练习(含答案)
Emp(员工表)和Dept(部门表)简单题1. 案例:查询没有上级领导的员工的编号,姓名,工资select empno,ename,sal from emp where mgr is null;2. 案例:查询emp表中没有奖金的员工的姓名,职位,工资,以及奖金select ename,job,sal,comm from emp where comm is null or comm=0;既可以是null,也可以是03. 案例:查询emp表中含有奖金的员工的编号,姓名,职位,以及奖金select ename,job,sal,comm from emp where comm>0;4. 案例:查询含有上级领导的员工的姓名,工资以及上级领导的编号select ename,sal,mgr from emp where mgr is not null;5. 案例:查询emp表中名字以‘S’开头的所有员工的姓名select ename from emp where ename like 's%'6. 案例:查询emp表中名字的最后一个字符是'S'的员工的姓名select ename from emp where ename like '%s'7. 案例:查询倒数的第2个字符是‘E’的员工的姓名select ename from emp where ename like '%e_'8. 案例:查询emp表中员工的倒数第3个字符是‘N’的员工姓名select ename from emp where ename like '%n__'9. 案例:查询emp表中员工的名字中包含‘A’的员工的姓名select ename from emp where ename like '%a%'10. 案例:查询emp表中名字不是以'K'开头的员工的所有信息select * from emp where ename not like 'k%';11. 案例:查询emp表中名字中不包含‘A’的所有员工的信息select * from emp where ename not like '%a%'12. 案例:做文员的员工人数(job= CLERK 的)select count(*) from emp where job='clerk';13. 案例:销售人员job: SALESMAN 的最高薪水select max(sal) from emp where job='salesman';14. 案例:最早和最晚入职时间select min(hiredate),max(hiredate) from emp;15. 案例:查询emp表中员工的编号,姓名,职位,工资,并且工资在1000~2000之间。
面试经典50题sql解析
面试经典50题sql解析在数据库领域中,SQL是一种常用的查询语言,也是面试中经常被问到的重要知识点。
下面将解析面试中经典的50个SQL问题。
1. 什么是SQL?SQL(Structured Query Language)是一种用于管理关系型数据库的语言,用于查询、插入、更新和删除数据。
2. 什么是关系型数据库?关系型数据库是一种以表格形式存储数据的数据库,其中数据之间存在关系。
3. 什么是主键?主键是一列或一组列,用于唯一标识表中的每一行数据。
4. 什么是外键?外键是一列或一组列,用于建立表与表之间的关系。
5. 什么是索引?索引是一种数据结构,用于加快数据库查询的速度。
6. 什么是事务?事务是一组数据库操作,要么全部执行成功,要么全部回滚。
7. 什么是ACID属性?ACID是指数据库事务应具备的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
8. 什么是视图?视图是一种虚拟表,由查询语句定义,可以简化复杂的查询操作。
9. 什么是触发器?触发器是一种特殊的存储过程,当满足特定条件时自动执行。
10. 什么是存储过程?存储过程是一组预编译的SQL语句,可以在数据库中存储和重复使用。
11. 什么是游标?游标是一种用于遍历查询结果集的数据库对象。
12. 什么是连接?连接是将两个或多个表中的数据关联起来的操作。
13. 什么是内连接?内连接是根据两个表之间的共同值将数据连接起来。
14. 什么是外连接?外连接是根据两个表之间的共同值将数据连接起来,并包括没有匹配的数据。
15. 什么是子查询?子查询是嵌套在其他查询语句中的查询语句。
16. 什么是联合查询?联合查询是将多个查询结果合并成一个结果集的操作。
17. 什么是交叉连接?交叉连接是将一个表的每一行与另一个表的每一行进行组合的操作。
18. 什么是聚合函数?聚合函数是对一组数据进行计算并返回单个值的函数,如SUM、AVG、COUNT等。
sql50经典题
sql50经典题SQL(Structured Query Language)是用于管理关系数据库的标准编程语言。
以下是一些经典的 SQL 题目,可以帮助你提高 SQL 编程技能:1. 选择题:* 什么是 SQL?* SQL 中哪些关键字可以用于选择所有行?* SQL 中哪些关键字可以用于过滤数据?2. 查询题:* 请编写一个 SQL 查询,从 `employees` 表中选取所有员工的姓名和工资。
* 请编写一个 SQL 查询,从 `orders` 表中选取所有订单的编号、客户姓名和订单日期。
3. 插入题:* 请编写一个 SQL 插入语句,将一条新员工记录插入到 `employees` 表中。
* 请编写一个 SQL 插入语句,将一条新订单记录插入到 `orders` 表中。
4. 更新题:* 请编写一个 SQL 更新语句,将 `employees` 表中某个员工的工资增加 10%。
* 请编写一个 SQL 更新语句,将 `orders` 表中某个订单的状态更新为"Shipped"。
5. 删除题:* 请编写一个 SQL 删除语句,从 `employees` 表中删除某个员工的记录。
* 请编写一个 SQL 删除语句,从 `orders` 表中删除某个订单的记录。
6. 排序和聚合题:* 请编写一个 SQL 查询,按工资从高到低排列 `employees` 表中的员工记录。
* 请编写一个 SQL 查询,计算 `employees` 表中的平均工资。
7. 联接题:* 请编写一个 SQL 查询,联接 `orders` 表和 `customers` 表,选取所有订单的编号、客户姓名和订单日期。
* 请编写一个 SQL 查询,联接 `orders` 表和 `employees` 表,选取所有订单的编号、员工姓名和订单日期。
8. 子查询和内连接题:* 请编写一个 SQL 子查询,找出平均工资最高的员工姓名。
50条数据库sql语句及答案
select teaid from tblTeacher where teaname = '叶平')))
--练习
select stuid from tblScore where courseid in (
--11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;
------运用连接查询
SELECT DISTINCT ST.* FROM tblStudent ST, tblScore SC WHERE ST.STUID = SC.STUID
AND SC.COURSEID IN
select stuid from tblScore GROUP BY STUID HAVING max(SCORE)<60)
--10、查询没有学全所有课的同学的学号、姓名;
--练习
SELECT TS.STUID,TS.STUNAME,COUNT(TSC.SCORE) FROM tblStudent TS
TC.COURSEID INNER JOIN tblTeacher TT ON TC.TEAID = TT.TEAID
WHERE TT.TEANAME ='叶平')
--对
SELECT STUID, STUNAME FROM tblStudent WHERE STUID NOT IN(
where A.SCORE > B.SCORE
--老师讲的方法
SELECT T.* FROM tblScore T WHERE T.COURSEID = 1 AND
SQL经典50题练习
创建表及插⼊数据学⽣表Studentcreate table SC(SId varchar(10),CId varchar(10),score decimal(18,1));insert into SC values('01' , '01' , 80);insert into SC values('01' , '02' , 90);insert into SC values('01' , '03' , 99);insert into SC values('02' , '01' , 70);insert into SC values('02' , '02' , 60);insert into SC values('02' , '03' , 80);insert into SC values('03' , '01' , 80);insert into SC values('03' , '02' , 80);insert into SC values('03' , '03' , 80);insert into SC values('04' , '01' , 50);insert into SC values('04' , '02' , 30);insert into SC values('04' , '03' , 20);insert into SC values('05' , '01' , 76);insert into SC values('05' , '02' , 87);insert into SC values('06' , '01' , 31);insert into SC values('06' , '03' , 34);insert into SC values('07' , '02' , 89);insert into SC values('07' , '03' , 98);练习题⽬1. 查询" 01 "课程⽐" 02 "课程成绩⾼的学⽣的信息及课程分数1.1 查询同时存在" 01 "课程和" 02 "课程的情况1.2 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显⽰为 null )1.3 查询不存在" 01 "课程但存在" 02 "课程的情况2. 查询平均成绩⼤于等于 60 分的同学的学⽣编号和学⽣姓名和平均成绩3. 查询在 SC 表存在成绩的学⽣信息4. 查询所有同学的学⽣编号、学⽣姓名、选课总数、所有课程的总成绩(没成绩的显⽰为 null )4.1 查有成绩的学⽣信息5. 查询「李」姓⽼师的数量6. 查询学过「张三」⽼师授课的同学的信息7. 查询没有学全所有课程的同学的信息8. 查询⾄少有⼀门课与学号为" 01 "的同学所学相同的同学的信息9. 查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息10. 查询没学过"张三"⽼师讲授的任⼀门课程的学⽣姓名11. 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩12. 检索" 01 "课程分数⼩于 60,按分数降序排列的学⽣信息13. 按平均成绩从⾼到低显⽰所有学⽣的所有课程的成绩以及平均成绩14. 查询各科成绩最⾼分、最低分和平均分:以如下形式显⽰:课程 ID,课程 name,最⾼分,最低分,平均分,及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90要求输出课程号和选修⼈数,查询结果按⼈数降序排列,若⼈数相同,按课程号升序排列15. 按各科成绩进⾏排序,并显⽰排名, Score 重复时保留名次空缺15. 按各科成绩进⾏排序,并显⽰排名, Score 重复时保留名次空缺15.1 按各科成绩进⾏排序,并显⽰排名, Score 重复时合并名次16. 查询学⽣的总成绩,并进⾏排名,总分重复时保留名次空缺16.1 查询学⽣的总成绩,并进⾏排名,总分重复时不保留名次空缺17. 统计各科成绩各分数段⼈数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 及所占百分⽐18. 查询各科成绩前三名的记录19. 查询每门课程被选修的学⽣数20. 查询出只选修两门课程的学⽣学号和姓名21. 查询男⽣、⼥⽣⼈数22. 查询名字中含有「风」字的学⽣信息23. 查询同名同性学⽣名单,并统计同名⼈数24. 查询 1990 年出⽣的学⽣名单25. 查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列26. 查询平均成绩⼤于等于 85 的所有学⽣的学号、姓名和平均成绩27. 查询课程名称为「数学」,且分数低于 60 的学⽣姓名和分数28. 查询所有学⽣的课程及分数情况(存在学⽣没成绩,没选课的情况)29. 查询任何⼀门课程成绩在 70 分以上的姓名、课程名称和分数30. 查询不及格的课程31. 查询课程编号为 01 且课程成绩在 80 分以上的学⽣的学号和姓名32. 求每门课程的学⽣⼈数33. 成绩不重复,查询选修「张三」⽼师所授课程的学⽣中,成绩最⾼的学⽣信息及其成绩34. 成绩有重复的情况下,查询选修「张三」⽼师所授课程的学⽣中,成绩最⾼的学⽣信息及其成 绩35. 查询不同课程成绩相同的学⽣的学⽣编号、课程编号、学⽣成绩36. 查询每门功成绩最好的前两名37. 统计每门课程的学⽣选修⼈数(超过 5 ⼈的课程才统计)。
sql语句练习50题
sql语句练习50题Student(Sid,Sname,Sage,Ssex) 学⽣表Course(Cid,Cname,Tid) 课程表SC(Sid,Cid,score) 成绩表Teacher(Tid,Tname) 教师表练习内容:1.查询“某1”课程⽐“某2”课程成绩⾼的所有学⽣的学号;SELECT a.sid FROM (SELECT sid,score FROM SC WHERE cid=1) a,(SELECT sid,score FROM SC WHERE cid=3) b WHEREa.score>b.score AND a.sid=b.sid;此题知识点,嵌套查询和给查出来的表起别名2.查询平均成绩⼤于60分的同学的学号和平均成绩;SELECT sid,avg(score) FROM sc GROUP BY sid having avg(score) >60;此题知识点,GROUP BY 语句⽤于结合合计函数,根据⼀个或多个列对结果集进⾏分组。
group by后⾯不能接where,having代替了where3.查询所有同学的学号、姓名、选课数、总成绩SELECT Student.sid,Student.Sname,count(SC.cid),sum(score)FROM Student left Outer JOIN SC on Student.sid=SC.cid GROUP BY Student.sid,Sname4.查询姓“李”的⽼师的个数;select count(teacher.tid)from teacher where teacher.tname like'李%'5.查询没学过“叶平”⽼师课的同学的学号、姓名;SELECT Student.sid,Student.Sname FROM Student WHERE sid not in (SELECT distinct( SC.sid) FROM SC,Course,Teacher WHERE SC.cid=Course.cid AND Teacher.id=Course.tid AND Teacher.Tname='叶平');此题知识点,distinct是去重的作⽤6.查询学过“```”并且也学过编号“```”课程的同学的学号、姓名;select a.SID,a.SNAME from (select student.SNAME,student.SID from student,course,sc where cname='c++'and sc.sid=student.sid and sc.cid=course.cid) a,(select student.SNAME,student.SID from student,course,sc where cname='english'and sc.sid=student.sid and sc.cid=course.cid) b where a.sid=b.sid;标准答案(但是好像不好使)SELECT Student.S#,Student.Sname FROM Student,SC WHERE Student.S#=SC.S# ANDSC.C#='001'and exists( SELECT * FROM SC as SC_2 WHERE SC_2.S#=SC.S# AND SC_2.C#='002');此题知识点,exists是在集合⾥找数据,as就是起别名7.查询学过“叶平”⽼师所教的所有课的同学的学号、姓名;select a.sid,a.sname from (select student.sid,student.sname from student,teacher,course,scwhere teacher.TNAME='杨巍巍' and teacher.tid=course.tid and course.cid=sc.cid and student.sid=sc.sid) a标准答案:SELECT sid,Sname FROM Student WHERE sid in (SELECT sid FROM SC ,Course ,Teacher WHERE SC.cid=Course.cid AND Teacher.tid=Course.tid AND Teacher.Tname='杨巍巍' GROUP BY sid having count(SC.cid)=(SELECT count(cid) FROM Course,Teacher WHERE Teacher.tid=Course.tid AND Tname='杨巍巍'))8.查询课程编号“”的成绩⽐课程编号“”课程低的所有同学的学号、姓名;select a.sid,a.sname from(select student.SID,student.sname,sc.SCORE from student,sc where student.sid=sc.sid and sc.cid=1) a, (select student.SID,student.sname,sc.score from student,sc where student.sid=sc.sid and sc.cid=2) b where a.score<b.score anda.sid=b.sid标准答案:SELECT sid,Sname FROM (SELECT Student.sid,Student.Sname,score ,(SELECT score FROM SC SC_2 WHERE SC_2.sid=Student.sid AND SC_2.cid=1) score2 FROM Student,SCWHERE Student.sid=SC.sid AND cid=1) S_2 WHERE score2 <score;9.查询所有课程成绩⼩于分的同学的学号、姓名;SELECT sid,Sname FROM Student WHERE sid not in (SELECT Student.sid FROM Student,SC WHERE Student.sid=SC.sid AND score>60);此题知识点,先查出⼤于60分的,然后not in 就是⼩于60分的了10.查询没有学全所有课的同学的学号、姓名;SELECT Student.sid,Student.Sname FROM Student,SCWHERE Student.sid=SC.sid GROUP BY Student.sid,Student.Sname having count(cid) <(SELECT count(cid) FROM Course);11.查询⾄少有⼀门课与学号为“”的同学所学相同的同学的学号和姓名;12.查询⾄少学过学号为“”同学所有⼀门课的其他同学学号和姓名;SELECT student.sid,student.Sname FROM Student,SC WHERE Student.sid=SC.sid AND cid in (SELECT cid FROM SC WHERE sid=1)此题知识点,SELECT sid,Sname FROM Student,SC WHERE Student.sid=SC.sid AND cid in (SELECT cid FROM SC WHEREsid=1)这样写是错误的,因为from后⾯是两个表,不能明确是哪个表⾥⾯的sid和sname所以错误提⽰是“未明确定义列”13.把“SC”表中“叶平”⽼师教的课的成绩都更改为此课程的平均成绩;update sc set score=(select avg(score) from sc,course,teacher where course.cid=sc.cid and course.tid=teacher.tid andteacher.tname='杨巍巍')14.查询和“”号的同学学习的课程完全相同的其他同学学号和姓名;SELECT sid FROM SC WHERE cid in (SELECT cid FROM SC WHERE sid=6) GROUP BY sid having count(*)=(SELECT count(*) FROM SC WHERE sid=6);此题知识点,⽤数量来判断15.删除学习“叶平”⽼师课的SC表记录;delete from sc s where s.cid in (select c.cid from teacher t,course c where t.tid = c.tid and tname='李⼦')此题知识点,嵌套查询可以分布考虑,先查出李⼦⽼师都交了什么课的id,然后再删除那些id的值16.向SC表中插⼊⼀些记录,这些记录要求符合以下条件:没有上过编号“”课程的同学学号、课程的平均成绩;Insert into SC SELECT sid,2,(SELECT avg(score) FROM SC WHERE cid=2) FROM Student WHERE sid not in (SELECT sid FROM SC WHERE cid=2);17.按平均成绩从⾼到低显⽰所有学⽣的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显⽰:学⽣ID,,数据库,企业管理,英语,有效课程数,有效平均分;(没做出来)18.查询各科成绩最⾼和最低的分:以如下形式显⽰:课程ID,最⾼分,最低分;select cid as 课程号,max(score)as 最⾼分,min(score) as 最低分 from sc group by cid标准答案(但是运⾏不好使)SELECT L.cid As 课程ID,L.score AS 最⾼分,R.score AS 最低分FROM SC L ,SC AS RWHERE L.cid = R.cid ANDL.score = (SELECT MAX(IL.score)FROM SC AS IL,Student AS IMWHERE L.cid = IL.cid AND IM.sid=IL.sidGROUP BY IL.cid)AND R.Score = (SELECT MIN(IR.score) FROM SC AS IR WHERE R.cid = IR.cid GROUP BY IR.cid );19.按各科平均成绩从低到⾼和及格率的百分数从⾼到低顺序26.查询每门课程被选修的学⽣数select sc.cid,count(sc.sid) from sc,course where sc.cid=course.cid group by sc.cid27.查询出只选修了⼀门课程的全部学⽣的学号和姓名SELECT SC.sid,Student.Sname,count(cid) AS 选课数 FROM SC ,StudentWHERE SC.sid=Student.sid GROUP BY SC.sid ,Student.Sname having count(cid)=1;32.查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列SELECT Cid,Avg(score) FROM SC GROUP BY cid ORDER BY Avg(score),cid DESC ;37.查询不及格的课程,并按课程号从⼤到⼩排列SELECT cid,sid FROM sc WHERE score <60 ORDER BY cid38.查询课程编号为且课程成绩在分以上的学⽣的学号和姓名;select student.sid,student.sname from sc,student where sc.cid=1 and sc.score>60 and sc.sid=student.sid40.查询选修“叶平”⽼师所授课程的学⽣中,成绩最⾼的学⽣姓名及其成绩select student.sname,sc.score from sc,student,teacher,course c where teacher.tname='李⼦'and teacher.tid=c.tid and c.cid=sc.cid and sc.sid=student.sid and sc.score=(select max(score)from sc where sc.cid=c.cid)41.查询各个课程及相应的选修⼈数select sc.cid ,count(sc.sid)from sc,student where sc.sid=student.sid group by sc.cid43.查询每门功成绩最好的前两名44.统计每门课程的学⽣选修⼈数(超过⼈的课程才统计)。
sql查询50题
sql查询50题/*⼀个项⽬涉及到的50个Sql语句问题及描述:--1.学⽣表Student(S#,Sname,Sage,Ssex) --S# 学⽣编号,Sname 学⽣姓名,Sage 出⽣年⽉,Ssex 学⽣性别--2.课程表Course(C#,Cname,T#) --C# --课程编号,Cname 课程名称,T# 教师编号--3.教师表Teacher(T#,Tname) --T# 教师编号,Tname 教师姓名--4.成绩表SC(S#,C#,score) --S# 学⽣编号,C# 课程编号,score 分数select * from Studentselect * from Courseselect * from Teacherselect * from SC*/--创建测试数据create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10))insert into Student values('01' , N'赵雷' , '1990-01-01' , N'男')insert into Student values('02' , N'钱电' , '1990-12-21' , N'男')insert into Student values('03' , N'孙风' , '1990-05-20' , N'男')insert into Student values('04' , N'李云' , '1990-08-06' , N'男')insert into Student values('05' , N'周梅' , '1991-12-01' , N'⼥')insert into Student values('06' , N'吴兰' , '1992-03-01' , N'⼥')insert into Student values('07' , N'郑⽵' , '1989-07-01' , N'⼥')insert into Student values('08' , N'王菊' , '1990-01-20' , N'⼥')create table Course(C# varchar(10),Cname nvarchar(10),T# varchar(10))insert into Course values('01' , N'语⽂' , '02')insert into Course values('02' , N'数学' , '01')insert into Course values('03' , N'英语' , '03')create table Teacher(T# varchar(10),Tname nvarchar(10))insert into Teacher values('01' , N'张三')insert into Teacher values('02' , N'李四')insert into Teacher values('03' , N'王五')create table SC(S# varchar(10),C# varchar(10),score decimal(18,1))insert into SC values('01' , '01' , 80)insert into SC values('01' , '02' , 90)insert into SC values('01' , '03' , 99)insert into SC values('02' , '01' , 70)insert into SC values('02' , '02' , 60)insert into SC values('02' , '03' , 80)insert into SC values('03' , '01' , 80)insert into SC values('03' , '02' , 80)insert into SC values('03' , '03' , 80)insert into SC values('04' , '01' , 50)insert into SC values('04' , '02' , 30)insert into SC values('04' , '03' , 20)insert into SC values('05' , '01' , 76)insert into SC values('05' , '02' , 87)insert into SC values('06' , '01' , 31)insert into SC values('06' , '03' , 34)insert into SC values('07' , '02' , 89)insert into SC values('07' , '03' , 98)go--1、查询"01"课程⽐"02"课程成绩⾼的学⽣的信息及课程分数--1.1、查询同时存在"01"课程和"02"课程的情况--1.2、查询同时存在"01"课程和"02"课程的情况和存在"01"课程但可能不存在"02"课程的情况(不存在时显⽰为null)(以下存在相同内容时不再解释)--2、查询"01"课程⽐"02"课程成绩低的学⽣的信息及课程分数--2.1、查询同时存在"01"课程和"02"课程的情况--2.2、查询同时存在"01"课程和"02"课程的情况和不存在"01"课程但存在"02"课程的情况--3、查询平均成绩⼤于等于60分的同学的学⽣编号和学⽣姓名和平均成绩--4、查询平均成绩⼩于60分的同学的学⽣编号和学⽣姓名和平均成绩--4.1、查询在sc表存在成绩的学⽣信息的SQL语句。
sql50题查询大全
首先给出表结构,表结构需要大家去分析一下他们之间的逻辑关系。
tblStudent(SId,Sname,Sage,Ssex) 学生表 tblCourse(CId,Cname,TId) 课程表 tblScore(SId,CId,Score) 成绩表 tblTeacher(TId,Tname) 教师表tblStudent(SID,Sname,Sage,Ssex) 学生表tblCourse(CID,Cname,TID) 课程表tblScore(SID,CID,Score) 成绩表tblTeacher(TID,Tname) 教师表问题:1、查询“”课程比“”课程成绩高的所有学生的学号;SELECT a.SID FROM (SELECT SId,Score FROM tblScore WHERE CID='001') a, (SELECT SId,Score FROM tblScore WHERE CID='002') bWHERE a.Score>b.Score AND a.SId=b.SId;2、查询平均成绩大于分的同学的学号和平均成绩;SELECT SID,avg(Score)FROM scGROUP BY SID having avg(Score) >60;3、查询所有同学的学号、姓名、选课数、总成绩;SELECTtblStudent.SID,tblStudent.Sname,count(tblScore.CID),sum(Score)FROM tblStudent left Outer JOIN tblScore on tblStudent.SID=tblScore.SIDGROUP BY tblStudent.SID,Sname4、查询姓“李”的老师的个数;SELECT count(distinct(Tname))FROM tblTeacherWHERE Tname like '李%';5、查询没学过“叶平”老师课的同学的学号、姓名;SELECT tblStudent.SID,tblStudent.SnameFROM tblStudentWHERE SID not in (SELECT distinct( tblScore.SID) FROM tblScore,tblCourse,tblTeacher WHERE tblScore.CID=tblCourse.CID AND tblTeacher.TID=tblCourse.TID AND tblTeacher.Tname='叶平');6、查询学过“”并且也学过编号“”课程的同学的学号、姓名;SELECT tblStudent.SID,tblStudent.Sname FROM tblStudent,tblScore WHERE tblStudent.SID=tblScore.SID AND tblScore.CID='001'and exists( SELECT * FROM tblScore as tblScore_2 WHERE tblScore_2.SID=tblScore.SID AND tblScore_2.CID='002');7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;SELECT SID,SnameFROM tblStudentWHERE SID in (SELECT SID FROM tblScore ,tblCourse ,tblTeacher WHERE tblScore.CID=tblCourse.CID AND tblTeacher.TID=tblCourse.TID AND tblTeacher.Tname='叶平' GROUP BY SID having count(tblScore.CID)=(SELECT count(CID) FROM tblCourse,tblTeacher WHERE tblTeacher.TID=tblCourse.TID AND Tname='叶平'));8、查询课程编号“c001”的成绩比课程编号“”课程低的所有同学的学号、姓名;SELECT SID,Sname FROM (SELECT tblStudent.SID,tblStudent.Sname,Score ,(SELECT Score FROM tblScore tblScore_2 WHERE tblScore_2.SID=tblStudent.SID AND tblScore_2.CID='002') Score2FROM tblStudent,tblScore WHERE tblStudent.SID=tblScore.SID AND CID='001') S_2 WHERE Score2 <Score;9、查询所有课程成绩小于60分的同学的学号、姓名;SELECT SID,SnameFROM tblStudentWHERE SID not in (SELECT tblStudent.SID FROM tblStudent,tblScore WHERE tblStudent.SID=tblScore.SID AND Score>60);10、查询没有学全所有课的同学的学号、姓名;SELECT tblStudent.SID,tblStudent.SnameFROM tblStudent,tblScoreWHERE tblStudent.SID=tblScore.SID GROUP BY tblStudent.SID,tblStudent.Sname having count(CID) <(SELECT count(CID) FROM tblCourse);11、查询至少有一门课与学号为“”的同学所学相同的同学的学号和姓名;SELECT SID,Sname FROM tblStudent,tblScore WHERE tblStudent.SID=tblScore.SID AND CID in SELECT CID FROM tblScore WHERE SID='1001';12、查询至少学过学号为“”同学所有一门课的其他同学学号和姓名;SELECT distinct tblScore.SID,SnameFROM tblStudent,tblScoreWHERE tblStudent.SID=tblScore.SID AND CID in (SELECT CID FROM tblScore WHERE SID='001');13、把“tblScore”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;update tblScore set Score=(SELECT avg(tblScore_2.Score)FROM tblScore tblScore_2WHERE tblScore_2.CID=tblScore.CID ) FROM tblCourse,tblTeacher WHERE tblCourse.CID=tblScore.CID AND tblCourse.TID=tblTeacher.TID AND tblTeacher.Tname='叶平');14、查询和“”号的同学学习的课程完全相同的其他同学学号和姓名;SELECT SID FROM tblScore WHERE CID in (SELECT CID FROM tblScore WHERE SID='1002')GROUP BY SID having count(*)=(SELECT count(*) FROM tblScore WHERE SID='1002');15、删除学习“叶平”老师课的tblScore表记录;Delect tblScoreFROM tblCourse ,tblTeacherWHERE tblCourse.CID=tblScore.CID AND tblCourse.TID= tblTeacher.TID AND Tname='叶平';16、向tblScore表中插入一些记录,这些记录要求符合以下条件:没有上过编号“”课程的同学学号、、号课的平均成绩;Insert tblScore SELECT SID,'002',(SELECT avg(Score)FROM tblScore WHERE CID='002') FROM tblStudent WHERE SID not in (SELECT SID FROM tblScore WHERE CID='002');17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分SELECT SID as 学生ID,(SELECT Score FROM tblScore WHERE tblScore.SID=t.SID AND CID='004') AS 数据库,(SELECT Score FROM tblScore WHERE tblScore.SID=t.SID AND CID='001') AS 企业管理,(SELECT Score FROM tblScore WHERE tblScore.SID=t.SID AND CID='006') AS 英语,COUNT(*) AS 有效课程数, AVG(t.Score) AS 平均成绩FROM tblScore AS tGROUP BY SIDORDER BY avg(t.Score)18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分SELECT L.CID As 课程ID,L.Score AS 最高分,R.Score AS 最低分FROM tblScore L ,tblScore AS RWHERE L.CID = R.CID ANDL.Score = (SELECT MAX(IL.Score)FROM tblScore AS IL,tblStudent AS IMWHERE L.CID = IL.CID AND IM.SID=IL.SIDGROUP BY IL.CID)ANDR.Score = (SELECT MIN(IR.Score)FROM tblScore AS IRWHERE R.CID = IR.CIDGROUP BY IR.CID);19、按各科平均成绩从低到高和及格率的百分数从高到低顺序SELECT t.CID AS 课程号,max(ame)AS 课程名,isnull(AVG(Score),0) AS 平均成绩,100 * SUM(CASE WHEN isnull(Score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数FROM tblScore T,tblCourseWHERE t.CID=tblCourse.CIDGROUP BY t.CIDORDER BY 100 * SUM(CASE WHEN isnull(Score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DEtblScore20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(),马克思(),OO&UML (),数据库()SELECT SUM(CASE WHEN CID ='001' THEN Score ELSE 0 END)/SUM(CASE CID WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分,100 * SUM(CASE WHEN CID = '001' AND Score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN CID = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数,SUM(CASE WHEN CID = '002' THEN Score ELSE 0 END)/SUM(CASE CID WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分,100 * SUM(CASE WHEN CID = '002' AND Score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN CID = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数,SUM(CASE WHEN CID = '003' THEN Score ELSE 0 END)/SUM(CASE CID WHEN '003' THEN 1 ELSE 0 END) AS UML平均分,100 * SUM(CASE WHEN CID = '003' AND Score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN CID = '003' THEN 1 ELSE 0 END) AS UML及格百分数,SUM(CASE WHEN CID = '004' THEN Score ELSE 0 END)/SUM(CASE CID WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分,100 * SUM(CASE WHEN CID = '004' AND Score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN CID = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数FROM tblScore21、查询不同老师所教不同课程平均分从高到低显示SELECT max(Z.TID) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.CID AS 课程ID,MAX(ame) AS 课程名称,AVG(Score) AS 平均成绩FROM tblScore AS T,tblCourse AS C ,tblTeacher AS ZWHERE T.CID=C.CID AND C.TID=Z.TIDGROUP BY C.CIDORDER BY AVG(Score) DEtblScore22、查询如下课程成绩第3 名到第6 名的学生成绩单:企业管理(),马克思(),UML (),数据库()[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩SELECT DISTINCT top 3tblScore.SID As 学生学号,tblStudent.Sname AS 学生姓名,T1.Score AS 企业管理,T2.Score AS 马克思,T3.Score AS UML,T4.Score AS 数据库,ISNULL(T1.Score,0) + ISNULL(T2.Score,0) + ISNULL(T3.Score,0) + ISNULL(T4.Score,0) as 总分FROM tblStudent,tblScore LEFT JOIN tblScore AS T1ON tblScore.SID = T1.SID AND T1.CID = '001'LEFT JOIN tblScore AS T2ON tblScore.SID = T2.SID AND T2.CID = '002'LEFT JOIN tblScore AS T3ON tblScore.SID = T3.SID AND T3.CID = '003'LEFT JOIN tblScore AS T4ON tblScore.SID = T4.SID AND T4.CID = '004'WHERE tblStudent.SID=tblScore.SID ANDISNULL(T1.Score,0) + ISNULL(T2.Score,0) + ISNULL(T3.Score,0) + ISNULL(T4.Score,0)NOT IN(SELECTDISTINCTTOP 15 WITH TIESISNULL(T1.Score,0) + ISNULL(T2.Score,0) + ISNULL(T3.Score,0) + ISNULL(T4.Score,0)FROM scLEFT JOIN sc AS T1ON sc.SID = T1.SID AND T1.CID = 'k1'LEFT JOIN sc AS T2ON sc.SID = T2.SID AND T2.CID = 'k2'LEFT JOIN sc AS T3ON sc.SID = T3.SID AND T3.CID = 'k3'LEFT JOIN sc AS T4ON sc.SID = T4.SID AND T4.CID = 'k4'ORDER BY ISNULL(T1.Score,0) + ISNULL(T2.Score,0) + ISNULL(T3.Score,0) + ISNULL(T4.Score,0) DEtblScore);23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]SELECT tblScore.CID as 课程ID, Cname as 课程名称,SUM(CASE WHEN Score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85],SUM(CASE WHEN Score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70],SUM(CASE WHEN Score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60],SUM(CASE WHEN Score < 60 THEN 1 ELSE 0 END) AS [60 -]FROM tblScore,tblCourseWHERE tblScore.CID=tblCourse.CIDGROUP BY tblScore.CID,Cname;24、查询学生平均成绩及其名次SELECT 1+(SELECT COUNT( distinct 平均成绩)FROM (SELECT SID,AVG(Score) AS 平均成绩FROM tblScoreGROUP BY SID) AS T1WHERE 平均成绩> T2.平均成绩) as 名次,SID as 学生学号,平均成绩FROM (SELECT SID,AVG(Score) 平均成绩FROM tblScoreGROUP BY SID) AS T2ORDER BY 平均成绩desc;25、查询各科成绩前三名的记录:(不考虑成绩并列情况)SELECT t1.SID as 学生ID,t1.CID as 课程ID,Score as 分数FROM tblScore t1WHERE Score IN (SELECT TOP 3 ScoreFROM tblScoreWHERE t1.CID= CIDORDER BY Score DEtblScore)ORDER BY t1.CID;26、查询每门课程被选修的学生数SELECT CId,count(SID) FROM sc GROUP BY CID;27、查询出只选修了一门课程的全部学生的学号和姓名SELECT tblScore.SID,tblStudent.Sname,count(CID) AS 选课数FROM tblScore ,tblStudentWHERE tblScore.SID=tblStudent.SID GROUP BY tblScore.SID ,tblStudent.Sname having count(CID)=1;28、查询男生、女生人数SELECT count(Ssex) as 男生人数FROM tblStudent GROUP BY Ssex having Ssex='男';SELECT count(Ssex) as 女生人数FROM tblStudent GROUP BY Ssex having Ssex='女';29、查询姓“张”的学生名单SELECT Sname FROM tblStudent WHERE Sname like '张%';30、查询同名同性学生名单,并统计同名人数SELECT Sname,count(*) FROM tblStudent GROUP BY Sname having count(*)>1;;31、年出生的学生名单(注:tblStudent表中Sage列的类型是datetime)SELECT Sname, CONVERT(char (11),DATEPART(year,Sage)) as ageFROM tblStudentWHERE CONVERT(char(11),DATEPART(year,Sage))='1981';32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列SELECT CID,Avg(Score) FROM tblScore GROUP BY CID ORDER BY Avg(Score),CID DEtblScore ;33、查询平均成绩大于的所有学生的学号、姓名和平均成绩SELECT Sname,tblScore.SID ,avg(Score)FROM tblStudent,tblScoreWHERE tblStudent.SID=tblScore.SID GROUP BY tblScore.SID,Sname having avg(Score)>85;34、查询课程名称为“数据库”,且分数低于的学生姓名和分数SELECT Sname,isnull(Score,0)FROM tblStudent,tblScore,tblCourseWHERE tblScore.SID=tblStudent.SID AND tblScore.CID=tblCourse.CID AND ame='数据库'and Score <60;35、查询所有学生的选课情况;SELECT tblScore.SID,tblScore.CID,Sname,CnameFROM tblScore,tblStudent,tblCourseWHERE tblScore.SID=tblStudent.SID AND tblScore.CID=tblCourse.CID ;36、查询任何一门课程成绩在分以上的姓名、课程名称和分数;SELECT distinct tblStudent.SID,tblStudent.Sname,tblScore.CID,tblScore.ScoreFROM tblStudent,ScWHERE tblScore.Score>=70 AND tblScore.SID=tblStudent.SID;37、查询不及格的课程,并按课程号从大到小排列SELECT CId FROM sc WHERE scor e <60 ORDER BY CID ;38、查询课程编号为且课程成绩在分以上的学生的学号和姓名;SELECT tblScore.SID,tblStudent.Sname FROM tblScore,tblStudent WHERE tblScore.SID=tblStudent.SID AND Score>80 AND CID='003';39、求选了课程的学生人数SELECT count(*) FROM sc;40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩SELECT tblStudent.Sname,ScoreFROM tblStudent,tblScore,tblCourse C,tblTeacherWHERE tblStudent.SID=tblScore.SID AND tblScore.CID=C.CID AND C.TID=tblTeacher.TID AND tblTeacher.Tname='叶平' AND tblScore.Score=(SELECT max(Score)FROM tblScore WHERE CID=C.CID );41、查询各个课程及相应的选修人数SELECT count(*) FROM sc GROUP BY CID;42、查询不同课程成绩相同的学生的学号、课程号、学生成绩SELECT distinct A.SID,B.Score FROM tblScore A ,tblScore B WHERE A.Score=B.Score AND A.CID <>B.CID ;43、查询每门功成绩最好的前两名SELECT t1.SID as 学生ID,t1.CID as 课程ID,Score as 分数FROM tblScore t1WHERE Score IN (SELECT TOP 2 ScoreFROM tblScoreWHERE t1.CID= CIDORDER BY Score DEtblScore)ORDER BY t1.CID;44、统计每门课程的学生选修人数(超过人的课程才统计)。
mysql-50道经典sql题
mysql-50道经典sql题English.Q1: Find all customers who have placed orders with a total value of over $1000.sql.SELECT customer_id, SUM(order_total) AS total_value.FROM orders.GROUP BY customer_id.HAVING total_value > 1000;Q2: Find all products that have been ordered more than 10 times.sql.SELECT product_id, COUNT() AS order_count.FROM order_items.GROUP BY product_id.HAVING order_count > 10;Q3: Find all employees who have worked on more than 5 projects.sql.SELECT employee_id, COUNT() AS project_count.FROM project_assignments.GROUP BY employee_id.HAVING project_count > 5;Q4: Find all orders that were shipped within 2 days of being placed.sql.SELECT order_id, DATEDIFF(ship_date, order_date) AS shipping_time.FROM orders.WHERE shipping_time <= 2;Q5: Find all customers who have placed at least one order in the last year.sql.SELECT customer_id.FROM orders.WHERE order_date >= DATE_SUB(CURDATE(), INTERVAL 1YEAR);Chinese.Q1: 找出所有总订单价值超过 1000 美元的客户。
sql 50题
sql 50题1. 查询所有员工的姓名和薪水。
```sqlSELECT name, salary FROM employees;```2. 查找薪水超过50000 的员工。
```sqlSELECT * FROM employees WHERE salary > 50000;```3. 按薪水升序排序员工。
```sqlSELECT * FROM employees ORDER BY salary ASC;```4. 统计每个部门的员工数量。
```sqlSELECT department, COUNT(*) FROM employees GROUP BY department;```5. 查找最高薪水的员工。
```sqlSELECT * FROM employees WHERE salary = (SELECT MAX(salary) FROM employees);```6. 计算每个部门的平均薪水。
```sqlSELECT department, AVG(salary) FROM employees GROUP BY department;```7. 查找在'IT' 部门工作的员工。
```sqlSELECT * FROM employees WHERE department = 'IT';```8. 按照姓名的字母顺序对员工进行排序。
```sqlSELECT * FROM employees ORDER BY name ASC;```9. 查找在'IT' 部门工作且薪水在50000 到70000 之间的员工。
```sqlSELECT * FROM employees WHERE department = 'IT' AND salary BETWEEN 50000 AND 70000;```10. 计算所有员工的总薪水。
```sqlSELECT SUM(salary) FROM employees;```11. 查找没有分配部门的员工。
sql经典50题建表语句
sql经典50题建表语句1、题目:创建一个名为"employees"的表,包含"id"、"name"和"salary"三个字段。
sql:CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50),salary DECIMAL(10, 2));2、题目:创建一个名为"orders"的表,包含"order_id"、"customer_id"和"order_date"三个字段。
sql:CREATE TABLE orders (order_id INT PRIMARY KEY,customer_id INT,order_date DATE);3、题目:创建一个名为"products"的表,包含"product_id"、"product_name"和"price"三个字段。
sql:CREATE TABLE products (product_id INT PRIMARY KEY,product_name VARCHAR(50),price DECIMAL(10, 2));4、题目:创建一个名为"customers"的表,包含"customer_id"、"first_name"、"last_name"和"email"四个字段。
sql:CREATE TABLE customers (customer_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),email VARCHAR(100));5、题目:创建一个名为"addresses"的表,包含"address_id"、"street"、"city"和"state"四个字段。
sql语句的查询基本题(总结)
1.构造SQL语句,列出在1981年入职的员工的姓名、入职时间和月收入(薪水和奖金之和),并将入职时间显示为:”1981-10月-10”这种形式。
select ename ,to_char(hiredate,'yyyy')||'-'||to_char(hiredate,'mm')||'月-'||to_char(hiredate,'dd') ,(sal+nvl(comm,0)) from EMP t whereto_char(hiredate,'yyyy')='1981';2.列出职员表中员工的姓名、薪水、所属部门名称,并按照薪水由高到低排序。
select ename,sal,dname from emp e join dept d on e.deptno=d.deptno order by sal desc;3.列出每个员工的名字(别名为EMPLOYEE)及他们的直接领导的名字(别名为MANAGER), 如果直接领导的姓名为null,显示为Boss。
select ename EMPLOYEE,nvl((select ename from emp b where a.mgr=b.empno),'BOSS') MANAGER from emp a;4.查询哪些职位的薪水总和大于5000元,列出这些职位和其薪水总和,并按薪水总和升值排序。
select job,sum(sal) from emp a group by a.job having sum(sal)>5000order by sum(sal) asc;5.查询哪个部门的平均薪水比20部门的平均薪水低,列出这些部门的编号和平均薪水值。
select deptno,avg(sal) from emp a group by a.deptno having avg(sal)<(select avg(sal) from emp a group by a.deptno having deptno='20');6.查询机构中薪水最低的五名员工,列出员工姓名和薪水值。
sql面试题50题
sql面试题50题1. 查询表中所有数据:SELECT * FROM 表名;2. 查询表中某列的不重复数据:SELECT DISTINCT 列名 FROM 表名;3. 查询表中满足条件的数据:SELECT * FROM 表名 WHERE 条件;4. 查询表中前n条数据:SELECT * FROM 表名 LIMIT n;5. 查询表中按某列排序的数据:SELECT * FROM 表名 ORDER BY 列名;6. 查询表中某列的最大值和最小值:SELECT MAX(列名), MIN(列名) FROM 表名;7. 查询表中某列的求和值:SELECT SUM(列名) FROM 表名;8. 查询表中某列的平均值:SELECT AVG(列名) FROM 表名;9. 查询表中某列的记录数:SELECT COUNT(列名) FROM 表名;10. 查询表中满足条件的记录数:SELECT COUNT(*) FROM 表名 WHERE 条件;11. 查询表中满足条件的前n条数据:SELECT * FROM 表名 WHERE 条件 LIMIT n;12. 查询表中的数据并按某列分组:SELECT 列名 FROM 表名 GROUP BY 列名;13. 查询表中满足条件的数据并按某列分组:SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 列名;14. 查询表中满足条件的数据并计算某列的和:SELECT 列名, SUM(列名) FROM 表名 WHERE 条件 GROUP BY 列名;15. 查询表中数据满足多个条件的情况:SELECT * FROM 表名 WHERE 条件1 AND 条件2;16. 查询表中数据满足任意一个条件的情况:SELECT * FROM 表名 WHERE 条件1 OR 条件2;17. 查询表中数据满足某个范围的情况:SELECT * FROM 表名 WHERE 列名 BETWEEN 值1 AND 值2;18. 查询表中数据满足某个模式的情况:SELECT * FROM 表名 WHERE 列名 LIKE '模式';19. 查询表中数据满足某个模式的情况(不区分大小写):SELECT * FROM 表名 WHERE 列名 ILIKE '模式';20. 查询表中数据满足某个条件并按某列排序:SELECT * FROM 表名 WHERE 条件 ORDER BY 列名;21. 查询表中数据满足某个条件并按某列降序排序:SELECT * FROM 表名 WHERE 条件 ORDER BY 列名 DESC;22. 查询表中数据满足某个条件并限制结果集:SELECT * FROM 表名 WHERE 条件 LIMIT n;23. 查询表中数据满足某个条件并选择特定的列:SELECT 列名1, 列名2 FROM 表名 WHERE 条件;24. 查询表中数据满足某个条件并将结果分页显示:SELECT * FROM 表名 WHERE 条件 LIMIT 每页数量 OFFSET (页数-1) * 每页数量;25. 查询表中数据满足某个条件并按某列分组,并对某列进行排序:SELECT 列名1, SUM(列名2) FROM 表名 WHERE 条件 GROUP BY 列名1 ORDER BY 列名2;26. 查询表中数据满足某个条件,并按某列分组,并对某列进行排序,并限制结果集:SELECT 列名1, SUM(列名2) FROM 表名 WHERE 条件 GROUP BY 列名1 ORDER BY 列名2 LIMIT n;27. 查询表中数据满足某个条件,并根据某列分组,计算某列的平均值并按某列排序:SELECT 列名1, AVG(列名2) FROM 表名 WHERE 条件 GROUP BY 列名1 ORDER BY 列名2;28. 连接两个表并查询满足条件的数据:SELECT 表1.列名, 表2.列名 FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名 WHERE 条件;29. 连接两个表并查询满足条件的数据,并根据某列排序:SELECT 表1.列名, 表2.列名 FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名 WHERE 条件 ORDER BY 表1.列名;30. 连接两个表并查询满足条件的数据,并限制结果集:SELECT 表1.列名, 表2.列名 FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名 WHERE 条件 LIMIT n;31. 连接两个表并查询满足条件的数据,并选择特定的列:SELECT 表1.列名1, 表2.列名2 FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名 WHERE 条件;32. 连接两个表并查询满足条件的数据,并将结果分页显示:SELECT 表1.列名, 表2.列名 FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名 WHERE 条件 LIMIT 每页数量 OFFSET (页数-1) * 每页数量;33. 对表中的数据进行插入操作:INSERT INTO 表名 (列名1, 列名2) VALUES (值1, 值2);34. 对表中的数据进行更新操作:UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2 WHERE 条件;35. 对表中的数据进行删除操作:DELETE FROM 表名 WHERE 条件;36. 创建表:CREATE TABLE 表名 (列名1 数据类型,列名2 数据类型,...);37. 修改表结构:ALTER TABLE 表名 ADD 列名数据类型;38. 删除表:DROP TABLE 表名;39. 添加索引:CREATE INDEX 索引名 ON 表名 (列名);40. 删除索引:DROP INDEX 索引名;41. 统计表中每个值的出现次数:SELECT 列名, COUNT(列名) FROM 表名 GROUP BY 列名;42. 查询表中某列存在的不重复值:SELECT 列名 FROM 表名 WHERE 列名 IS NOT NULL GROUP BY 列名;43. 查询表中某列不存在的值:SELECT 列名 FROM 表名 WHERE 列名 IS NULL;44. 查询表中数据满足某个条件并进行分组,并统计每组的数量:SELECT 列名, COUNT(*) FROM 表名 WHERE 条件 GROUP BY 列名;45. 查询表中数据满足某个条件并进行分组,并统计每组中某列的最大值:SELECT 列名, MAX(列名2) FROM 表名 WHERE 条件 GROUP BY 列名;46. 查询表中数据满足某个条件并进行分组,并统计每组中某列的最小值:SELECT 列名, MIN(列名2) FROM 表名 WHERE 条件 GROUP BY 列名;47. 查询表中数据满足某个条件并进行分组,并统计每组中某列的平均值:SELECT 列名, AVG(列名2) FROM 表名 WHERE 条件 GROUP BY 列名;48. 查询表中数据满足某个条件并进行分组,并统计每组中某列的求和值:SELECT 列名, SUM(列名2) FROM 表名 WHERE 条件 GROUP BY 列名;49. 查询表中多个列的不重复组合:SELECT DISTINCT 列名1, 列名2, ... FROM 表名;50. 查询表中某列满足条件的前n个不重复值:SELECT DISTINCT 列名 FROM 表名 WHERE 条件 LIMIT n;这些SQL面试题可以帮助你在面试中更好地掌握SQL语言的使用。
SQL查询经典例题
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 *where 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 (2008-yearofbirth)>203、统计<学生信息表>,统计入学时间在1980年至1982年的学生人数select count(*) as学生数量from A_studentinfowhere enrollment between '1998-01-01' and '2003-12-30' 对比以下查询方式,看看有何不同,为什么?select count(*) as学生数量from A_studentinfowhere enrollment between '1998' and '2003'4、统计<学生选修信息表>,统计学号为"S001"的学生的平均成绩Select avg(score) as平均成绩from A_studentcoursewhere sno='S001'5、统计<学生选修信息表>,统计学号为"S001"的学生的总成绩select sum(score) as总成绩where sno ='S001'6、统计<学生选修信息表>,查询课程号为”C001”的课程的最高成绩select max(score) as最高成绩from A_studentcoursewhere cno='C001'7、统计<学生信息表>,查询所有学生中的最大年龄是多少select 2008-min(yearofbirth) as最大年龄from A_studentinfo三、分组查询练习1、统计<学生选修信息表>,统计每个课程的选修人数select cno,count(*) as学生数量from A_studentcoursegroup by cno2、统计<学生选修信息表>,统计每个同学的总成绩select sno,sum(score) as总成绩from A_studentcoursegroup by sno3、统计<学生信息表>,统计每个班级中每种性别的学生人数,并按照班级排序select class as班级,sex as性别, count(*) as人数from A_studentinfogroup by class,sexorder by class4、统计<学生选修信息表>,统计每门课程的平均成绩,并按照成绩降序排序Select cno,avg(score) as平均成绩from A_studentcoursegroup by cnoorder by avg(score) desc5、统计<学生选修信息表>,显示有两门以上课程不及格的学生的学号Select sno as不及格学生学号from A_studentcoursewhere score<60group by snohaving count(*)>16、统计<学生信息表>,统计每个班级中的最大年龄是多少select class as班级, 2008-min(yearofbirth) as最大年龄from A_studentinfogroup by class四、嵌套查询练习1、用子查询实现,查询选修“高等数学”课的全部学生的总成绩select sum(score) as高等数学总成绩from A_studentcoursewhere cno =(select cnofrom A_courseinfowhere subject='高等数学')2、用子查询实现,统计<学生选修信息表>,显示学号为"S001"的学生在其各科成绩中,最高分成绩所对应的课程号和成绩select score,cnofrom A_studentcoursewhere sno='S001'and score =(select max(score)from A_studentcoursewhere sno ='S001')思考:如果该学号学生有两个课程分数都为最高的100分,查询会有什么结果3、用子查询实现,查询2班选修"数据库技术"课的所有学生的成绩之和select sum(score) as数据库技术总成绩from A_studentcoursewhere cno =(select cnofrom A_courseinfowhere subject='数据库技术')and sno in(select snofrom A_studentinfowhere class='2')4、用子查询实现,查询3班"张三"同学的"测试管理"成绩select scorefrom A_studentcoursewhere cno=(select cnofrom A_courseinfowhere subject='测试管理')and sno in(select snofrom A_studentinfowhere class='3'and sname='张三')五、联接查询练习1、查询"张三"的各科考试成绩,要求显示姓名、课程号和成绩select sname as姓名,cno as课程号,score as成绩from A_studentinfo,A_studentcoursewhere A_studentinfo.sno=A_studentcourse.snoand sname='张三'2、查询"张三"的各科考试成绩中,哪科没有记录考试成绩,要求显示姓名、课程号和成绩select sname as姓名,cno as课程号,score as成绩from A_studentinfo,A_studentcoursewhere A_studentinfo.sno=A_studentcourse.snoand sname='张三'and score is null3、查询"张三"的各门课程成绩,要求显示姓名、课程名称和成绩select sname as姓名,subject as课程名称,score as成绩from A_studentinfo,A_courseinfo,A_studentcoursewhere A_studentcourse.sno=A_studentinfo.snoandA_/doc/4a1283234.html,o=A_http://www. /doc/4a1283234.html,oand A_studentinfo.sname='张三'4、查询3班"张三"的"测试管理"成绩,要求显示姓名、成绩select sname as姓名,score as成绩from A_studentcourse,A_courseinfo,A_studentinfowhereA_/doc/4a1283234.html,o=A_http://www. /doc/4a1283234.html,oand A_studentcourse.sno=A_studentinfo.snoand subject='测试管理'and class='3' and sname='张三'。
mysql sql语句面试经典50题
mysql sql语句面试经典50题1. 查询所有列的数据:```sqlSELECT * FROM table_name;```2. 条件查询:```sqlSELECT * FROM table_name WHERE condition;```3. 排序查询:```sqlSELECT * FROM table_name ORDER BY column_name ASC/DESC;```4. 去重查询:```sqlSELECT DISTINCT column_name FROM table_name;```5. 统计行数:```sqlSELECT COUNT(*) FROM table_name;```6. 条件统计:```sqlSELECT COUNT(*) FROM table_name WHERE condition;```7. 分组统计:```sqlSELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;```8. 连接查询-内连接:```sqlSELECT * FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;```9. 连接查询-左连接:```sqlSELECT * FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;```10. 连接查询-右连接:```sqlSELECT * FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;```11. 子查询:```sqlSELECT column_name FROM table_name WHERE column_name = (SELECT column_name FROM another_table WHERE condition);```12. 更新数据:```sqlUPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;```13. 插入数据:```sqlINSERT INTO table_name (column1, column2) VALUES (value1, value2);```14. 删除数据:```sqlDELETE FROM table_name WHERE condition;```15. 模糊查询:```sqlSELECT * FROM table_name WHERE column_name LIKE 'pattern';```16. 使用通配符的模糊查询:```sqlSELECT * FROM table_name WHERE column_name LIKE '%pattern%';```17. 使用正则表达式的模糊查询:```sqlSELECT * FROM table_name WHERE column_name REGEXP 'pattern';```18. 限制结果集的行数:```sqlSELECT * FROM table_name LIMIT 10;```19. 跳过前N行:```sqlSELECT * FROM table_name LIMIT offset, count;```20. 计算平均值:```sqlSELECT AVG(column_name) FROM table_name;```21. 计算总和:```sqlSELECT SUM(column_name) FROM table_name;```22. 计算最大值和最小值:```sqlSELECT MAX(column_name), MIN(column_name) FROM table_name;```23. 使用CASE语句进行条件查询:```sqlSELECT column_name, CASE WHEN condition THEN 'value1' ELSE 'value2' END FROM table_name;```24. 使用GROUP BY和HAVING进行分组过滤:```sqlSELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > 1;```25. 多表更新:```sqlUPDATE table1 SET column1 = value1 WHERE column_name IN (SELECT column_name FROM table2 WHERE condition);```26. 多表删除:```sqlDELETE FROM table1 WHERE column_name IN (SELECT column_name FROM table2 WHERE condition);```27. 创建表:```sqlCREATE TABLE table_name (column1 datatype,column2 datatype,...);```28. 修改表结构-添加列:```sqlALTER TABLE table_name ADD column_name datatype;```29. 修改表结构-修改列数据类型:```sqlALTER TABLE table_name MODIFY column_name new_datatype;```30. 修改表结构-删除列:```sqlALTER TABLE table_name DROP COLUMN column_name;```31. 创建索引:```sqlCREATE INDEX index_name ON table_name (column_name);```32. 删除索引:```sqlDROP INDEX index_name ON table_name;```33. 使用LIMIT和OFFSET进行分页查询:```sqlSELECT * FROM table_name LIMIT page_size OFFSET (page_number - 1) * page_size;```34. 使用IFNULL处理空值:```sqlSELECT column1, IFNULL(column2, 'default_value') FROM table_name;```35. 使用COALESCE处理空值:```sqlSELECT column1, COALESCE(column2, 'default_value') FROM table_name;```36. 计算日期差:```sqlSELECT DATEDIFF(date1, date2) FROM table_name;```37. 获取当前日期和时间:```sqlSELECT NOW();```38. 获取唯一标识符:```sqlSELECT UUID();```39. 使用INNER JOIN和GROUP BY计算每个组的总数:```sqlSELECT table1.column_name, COUNT(*) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name GROUP BY table1.column_name;```40. 使用CASE语句进行多条件查询:```sqlSELECT column_name, CASE WHEN condition1 THEN 'value1' WHEN condition2 THEN 'value2' ELSE 'value3' END FROM table_name;```41. 使用CONCAT连接字符串:```sqlSELECT CONCAT(column1, ' ', column2) AS concatenated_string FROM table_name;```42. 使用TRIM去除字符串两端的空格:```sqlSELECT TRIM(column_name) FROM table_name;```43. 使用LEFT和RIGHT截取字符串:```sqlSELECT LEFT(column_name, length) FROM table_name;SELECT RIGHT(column_name, length) FROM table_name;```44. 使用IN进行多值匹配:```sqlSELECT * FROM table_name WHERE column_name IN (value1, value2, value3);```45. 使用BETWEEN进行范围查询:```sqlSELECT * FROM table_name WHERE column_name BETWEEN value1 AND value2;```46. 使用COUNT和GROUP BY查找重复值:```sqlSELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > 1;```47. 使用DATE_FORMAT格式化日期:```sqlSELECT DATE_FORMAT(column_name, '%Y-%m-%d') FROM table_name;```48. 使用SUM和GROUP BY进行累计求和:```sqlSELECT column_name, SUM(column_name) OVER (ORDER BY column_name) AS running_total FROM table_name;```49. 使用CONVERT进行数据类型转换:```sqlSELECT column_name, CONVERT(column_name, new_datatype) FROM table_name;```50. 使用UPDATE和LIMIT进行分页更新:```sqlUPDATE table_name SET column1 = value1 LIMIT page_size OFFSET (page_number -1) * page_size;```。
sql题精选
sql题精选1. 查询指定表中所有数据SELECT*FROM table_name;2. 查询指定表中指定字段的数据SELECT column1, column2 FROM table_name;3. 查询指定表中满足条件的数据SELECT*FROM table_name WHERE condition;4. 查询指定表中满足多个条件的数据SELECT*FROM table_name WHERE condition1 AND condition2;5. 查询指定表中满足条件的数据,并按指定字段排序SELECT*FROM table_name WHERE condition ORDER BY column_name;6. 查询指定表中满足条件的数据,并按指定字段排序,并指定排序方式SELECT*FROM table_name WHERE condition ORDER BY column_name ASC/DESC; 7. 查询指定表中满足条件的数据,并分组SELECT column1, COUNT(*) FROM table_name WHERE condition GROUP BY column1;8. 查询指定表中满足条件的数据,并分组,并按分组字段排序SELECT column1, COUNT(*) FROM table_name WHERE condition GROUP BY column1 ORDER BY column1;9. 查询指定表中满足条件的数据,并分组,并按分组字段排序,并指定排序方式SELECT column1, COUNT(*) FROM table_name WHERE condition GROUP BY column1 ORDER BY column1 ASC/DESC;10. 查询指定表中满足条件的数据,并分组,并按分组字段排序,并指定排序方式,并限制返回结果的数量SELECT column1, COUNT(*) FROM table_name WHERE condition GROUP BY column1 ORDER BY column1 ASC/DESC LIMIT number;11. 查询指定表中满足条件的数据,并分组,并按分组字段排序,并指定排序方式,并限制返回结果的起始位置和数量SELECT column1, COUNT(*) FROM table_name WHERE condition GROUP BY column1 ORDER BY column1 ASC/DESC LIMIT offset, number;12. 查询指定表中满足条件的数据,并使用子查询SELECT*FROM table_name WHERE column1 IN (SELECT column1 FROM subquer y);13. 查询指定表中满足条件的数据,并使用联接SELECT*FROM table1 INNER JOIN table2 ON table1.column1 = table2.colum n2;14. 查询指定表中满足条件的数据,并使用左联接SELECT*FROM table1 LEFT JOIN table2 ON table1.column1 = table2.column 2;15. 查询指定表中满足条件的数据,并使用右联接SELECT*FROM table1 RIGHT JOIN table2 ON table1.column1 = table2.colum n2;16. 查询指定表中满足条件的数据,并使用全外联接SELECT*FROM table1 FULL OUTER JOIN table2 ON table1.column1 = table2. column2;17. 查询指定表中满足条件的数据,并使用交叉联接SELECT*FROM table1 CROSS JOIN table2;18. 查询指定表中满足条件的数据,并使用自然联接SELECT*FROM table1 NATURAL JOIN table2;19. 查询指定表中满足条件的数据,并使用联合SELECT*FROM table1 UNION SELECT*FROM table2;20. 查询指定表中满足条件的数据,并使用交集SELECT*FROM table1 INTERSECT SELECT*FROM table2;21. 查询指定表中满足条件的数据,并使用差集SELECT*FROM table1 EXCEPT SELECT*FROM table2;。
SQL查询语句练习(50题)
SQL查询语句练习(50题)Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表问题:1、查询“001”课程比“002”课程成绩高的所有学生的学号;2、查询平均成绩大于60分的同学的学号和平均成绩;3、查询所有同学的学号、姓名、选课数、总成绩;4、查询姓“李”的老师的个数;5、查询没学过“叶平”老师课的同学的学号、姓名;6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;9、查询所有课程成绩小于60分的同学的学号、姓名;10、查询没有学全所有课的同学的学号、姓名;11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;15、删除学习“叶平”老师课的SC表记录;16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、002号课的平均成绩;17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分19、按各科平均成绩从低到高和及格率的百分数从高到低顺序20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)21、查询不同老师所教不同课程平均分从高到低显示22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]24、查询学生平均成绩及其名次25、查询各科成绩前三名的记录:(不考虑成绩并列情况)26、查询每门课程被选修的学生数27、查询出只选修了一门课程的全部学生的学号和姓名28、查询男生、女生人数29、查询姓“张”的学生名单30、查询同名同性学生名单,并统计同名人数31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数35、查询所有学生的选课情况;36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;37、查询不及格的课程,并按课程号从大到小排列38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;39、求选了课程的学生人数40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩41、查询各个课程及相应的选修人数42、查询不同课程成绩相同的学生的学号、课程号、学生成绩43、查询每门功成绩最好的前两名44、统计每门课程的学生选修人数(超过10人的课程才统计)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
select '1010','康敏',17,'女' union
select '1011','萧峰',19,'男' union
select '1012','黄蓉',18,'女' union
select '1013','郭靖',19,'男' union
select '1006','006',46 union
select '1006','003',59 union
select '1006','004',70 union
select '1006','001',99 union
select '1007','011',85 union
select '1007','006',84 union
select '1004','小龙女',17,'女' union
select '1005','张三丰',18,'男' union
select '1006','令狐冲',19,'男' union
select '1007','任盈盈',20,'女' union
select '1008','岳灵珊',19,'女' union
select '1019','冯默风',17,'男' union
select '1020','王重阳',17,'男' union
select '1021','郭襄',18,'女'
go
insert into tblTeacher
select '001','姚明' union
select '002','叶平' union
)
create table tblCourse
(
CourseId varchar(3) primary key,
CourseName nvarchar(20) not null,
TeaId varchar(3) not null foreign key references tblTeacher(teaId)
select '1007','003',72 union
select '1007','002',87 union
select '1008','001',94 union
select '1008','012',85 union
select '1008','006',32 union
select '1009','003',90 union
--教师表tblTeacher(教师编号TeaId、姓名TeaName)
---------------------------------------------------------------------------------
/********************************* 建库建表建约束,插入测试数据 ******************************************/
select '1010','001',96 union
select '1011','009',24 union
select '1011','009',25 union
select '1012','003',30 union
select '1013','002',37 union
select '1013','001',16 union
select '1008','013',97
go
1、查询“001”课程比“002”课程成绩高的所有学生的学号;
select '1013','007',55 union
select '1013','006',42 union
select '1013','012',34 union
select '1000','004',16 union
select '1002','004',55 union
select '1004','004',42 union
--课程表tblCourse(课程编号CourseId、课程名称CourseName、教师编号TeaId)
--成绩表tblScore(学生编号StuId、课程编号CourseId、成绩Score)
--教师表tblTeacher(教师编号TeaId、姓名TeaName)
--------------------------------插入数据-------------------------------------------------
select '1001','003',90 union
select '1001','002',87 union
select '1001','001',96 union
select '1001','010',85 union
select '1002','003',70 union
select '1002','002',87 union
insert into tblStudent
select '1000','张无忌',18,'男' union
select '1001','周芷若',19,'女' union
select '1002','杨过',19,'男' union
select '1003','赵敏',18,'女' union
select '1002','001',42 union
select '1002','010',65 union
select '1003','006',78 union
select '1003','003',70 union
select '1003','005',70 union
select '1003','001',32 union
--一个题目涉及到的50个Sql语句
--(下面表的结构以给出,自己在数据库中建立表.并且添加相应的数据,数据要全面些. 其中Student表中,SId为学生的ID)
------------------------------------表结构--------------------------------------
select '1014','周伯通',19,'男' union
select '1015','瑛姑',20,'女' union
select '1016','李秋水',21,'女' union
select '1017','黄药师',18,'男' union
select '1018','李莫愁',18,'女' union
select '016','金不换' union
select '017','乔丹'
go
insert into tblCourse
select '001','企业管理','002' union
select '002','马克思','008' union