SQL查询练习doc

合集下载

SQL查询练习

SQL查询练习

SQL查询练习SQL查询练习⼀、有三个关系,试⽤关系代数表达式表⽰下列查询语句:S(sno,sname,age,sex,sdept)C(cno,cname,cdept,tname) tname表⽰授课⽼师名SC(sno,cno,grade)(1) 检索年龄⼩于22岁的男学⽣的学号与姓名。

(2) 检索学号为S3学⽣所学课程的课程名与任课教师名。

(3) 检索王⽼师所授课程的课程号、课程名。

(4) 检索⾄少选修王⽼师所授课程中⼀门课的男学⽣姓名。

(5) 检索陈同学不学的课程的课程号。

(6) 检索全部学⽣都选修的课程的课程号、课程名。

(7) 检索选修课程包含王⽼师所授课程的学⽣学号。

(8) 检索⾄少选修两门课程的学⽣学号。

(9) 查询⾄少选修了2号课程和8号课程的学⽣姓名。

(10) 查询张红的年龄。

(11) 查询李明同学不及格的课程名称。

(12) 查询选修了“计算机⽹络”的学⽣姓名。

(13) 查询“计算机⽹络”成绩在90分以上的学⽣姓名。

⼆、设有下列四个关系模式:S (SNO, SNAME, CITY);P (PNO, PNAME, COLOR, WEIGHT);J (JNO, JNAME, CITY);SPJ(SNO, PNO, JNO, QTY)。

其中,供应商关系S由供应商号(SNO)、供应商姓名(SNAME)、供应商所在城市(CITY)组成。

零件关系P由零件号(PNO)、零件名称(PNAME)、零件颜⾊(COLOR)、零件重量(WEIGHT)组成,⽤于记录各种零件的情况。

项⽬关系J由项⽬号(JNO)、项⽬名称(JNAME)、项⽬所在城市(CITY) 组成。

供应情况关系SPJ由供应商号(SNO)、零件号(PNO)、项⽬号(JNO)、供应数量(QTY) 组成。

试⽤关系代数表达式完成以下操作:(1) 检索供应项⽬J2零件的供应商号(SNO)。

(2) 检索供应项⽬J2零件P2的供应商号(SNO)。

(3) 检索供应项⽬J2⿊⾊零件的供应商姓名(SNAME)。

sql查询练习

sql查询练习

1.查询全体学生的学号和姓名.select 学号,姓名from 学生2.查询全体学生的姓名,学号,所在系.select 学号,姓名,系from 学生3.查询全体学生的详细记录select * from 学生4.查询全体学生的姓名及其出生年份select 姓名,2006-年龄from 学生[意思是2008减年龄]5.查询选修了课程的学生学号select distinct学号from 选课6.查询2系全体学生的名单.select 姓名from 学生where 系=”2”7.查询所有年龄在20岁以下的学生姓名及年龄.select 姓名,年龄from 学生where 年龄<=208.查询考试成绩有不及格的学生的学号.select distinct 学号from 选课where 成绩<609.查询年龄在20~~23岁(包括20和23岁)之间的的学生的姓名,系别,年龄.select 姓名,系,年龄from 学生where 年龄between 20 and 2310.查询1系,2系,3系的学生的姓名和性别select 姓名,性别from 学生where 系别in (“1”,”2”,”3”) [in 实际上是多个or 运算符的缩写]。

我们也可以写成这样:select 姓名,性别from 学生where 系=’1’or 系=’2’or 系=’3’11.查询既不是1系,2系也不是3系的学生的姓名和性别.select 姓名,性别from 学生where 系not in (“1”,”2”,”3”)12.查询学号为s3的学生的详细情况.select * from 学生where 学号like “s3”)或者(select * from 学生where 学号=”s3”13.查询所有的姓刘的学生的姓名,学号和性别.select 姓名,学号,性别from 学生where 姓名like ‘刘%’14.查询姓”欧阳”且全名为三个字的学生的姓名.select 姓名from 学生where 姓名like “欧阳_ ”15.查询名字中第二个字为”阳”字的学生的姓名和学号.select 姓名,学号from 学生where 姓名like “ _阳%”16.某些学生选修课程后没有参加考试,所以有选课记录,但是没有考试成绩.查询缺少成绩的学生的学号和相应的课程号select 学号,课程号from 选课where 成绩is null17.查询所有有成绩的学生学号和课程号.select 学号,课程号from 选课where 成绩is not null18.(多重条件查询)查询1系年龄在20岁以下的学生姓名.select 姓名from 学生where 系=’1’and 年龄<2019.(对查询结果进行排序)查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列.select 学号,成绩,from 选课where 课程号=’3’ order by 成绩desc20.查询全体学生情况,查询结果按所在系的系号升序排列,同一个系的学生按年龄降序排列.select * from 学生order by 系, 年龄desc21.(使用集函数)查询学生总人数.select count(*) from 学生[count的功能是计数]22.查询选修了课程的学生的总人数.select count (distinct 学号) from 选课23.计算1号课程的学生的平均成绩.select avg(成绩) from 选课where 课程号=’1’24.查询选修1号课程的学生最高分数.select max(成绩) from 选课where 课程号=’1’25.求各个课程号及相应的选课人数.select 课程号,count(学号) from 选课group by 课程号26. 查询选修了3门以上课程的学生的学号.select 学号from 选课group by 学号having count(*)>3[这里先用group by 子句按学号分组,再用集函数count 对每一组计数.having 短语指定选择组的条件,只有满足条件(即元组的个数>3,表示此学生选修的课程超过3门)的组才会被选出来.where 子句与having 短语的区别在于作用的对象不同.where子句作用于基本表或视图,从中选择满足条件的元组.having 短语作用于组,从中选择满足条件的组.]27. 查询每个学生及其选修课程的情况。

SQL查询练习

SQL查询练习

下面以学生——课程数据库(XS_KC)为例介绍。

该数据库中有学生情况表(XSQK)、课程表(XSKC)、学生成绩表(XSCJ)。

Xsqk:学号、姓名、出生年月、系别、专业、班级Xskc:课程号课程名学分Xscj:学号课程号成绩1、查询学生情况表中全体学生的信息。

Select* from xsqk2、查询课程表中所有课程信息。

Select * from xsqk3、查询全体学生的学号与姓名。

Select 学号,姓名from xsqk4、查询全体学生的姓名及其年龄。

Select 姓名,year(getdata())-year(出生年月)fromxsqk6、查询全体学生的系别。

Select系别from xsqk7、查询学生信息表中前10个学生的信息Select top 10 *From xsqk8、查询计算机系全体学生的姓名。

Select 姓名 fromxsqkWhere系别 =’计算机’9、在学生情况表中,查询所有在…1982-01-01‟前出生的学生信息。

Select*fromxsqkWhere出生年月< ‘1982-01-01’10、在学生情况表中,查询出生年月在…1981-01-01‟与…1982-01-01‟之间的学生信息(包括…1981-01-01‟与…1982-01-01‟)。

Select*fromxsqkWhere 出生年月Between ‘1981-01-01’and ’1982-01-01’11、查询信息系、数学系和计算机系学生的信息。

Select*fromxsqkWhere 系别 in('信息’,’数学’,’计算机’)12、查询既不是信息系、数学系,也不是计算机系的学生的信息。

Select*fromxsqkWhere 系别 innot('信息’,’数学’,’计算机’)13、查询所有姓刘的学生信息。

Select*fromxsqkWhere姓名 like ‘刘%’14、查询姓张的,并且姓名为两个汉字的学生信息。

sql查询测试题

sql查询测试题

当然,我可以提供一些 SQL 查询测试题供您练习。

1. 请查询出表格 "students" 中所有的学生信息。

```sqlSELECT * FROM students;```2. 请查询出表格 "students" 中年龄大于等于 18 岁的学生信息。

```sqlSELECT * FROM students WHERE age >= 18;```3. 请查询出表格 "students" 中名字以 "张" 开头的学生信息。

```sqlSELECT * FROM students WHERE name LIKE '张%';```4. 请查询出表格 "students" 中成绩在 80 到 90 之间的学生信息。

```sqlSELECT * FROM students WHERE score BETWEEN 80 AND 90;```5. 请查询出表格 "students" 中按成绩从高到低排列的学生信息。

```sqlSELECT * FROM students ORDER BY score DESC;```6. 请查询出表格 "students" 中男生和女生的人数。

```sqlSELECT gender, COUNT(*) AS count FROM students GROUP BY gender;```这些问题可以帮助您熟悉 SQL 查询语句的使用。

根据您的具体数据库结构和需求,可能需要进行适当调整。

祝您练习愉快!。

SQL语句练习题(包含有多表查询)-答案

SQL语句练习题(包含有多表查询)-答案

SQL语句练习题1、请从表EMP中查找工种是职员CLERK或经理MANAGER的雇员姓名、工资。

select ename,sal from emp where job='CLERK' or job='MANAGER';2、请在EMP表中查找部门号在10-30之间的雇员的姓名、部门号、工资、工作。

select ename,deptno,sal,job from emp where deptno between 10 and 30;3、请从表EMP中查找姓名以J开头所有雇员的姓名、工资、职位。

select ename,sal,job from emp where ename like 'J%';4、请从表EMP中查找工资低于2000的雇员的姓名、工作、工资,并按工资降序排列。

select ename,job,sal from emp where sal<=2000 order by sal desc;5、请从表中查询工作是CLERK的所有人的姓名、工资、部门号、部门名称以及部门地址的信息。

select ename,sal,emp.deptno,dname,loc from emp,dept where emp.deptno=dept.deptno and job=’CLERK’;6、查询表EMP中所有的工资大于等于2000的雇员姓名和他的经理的名字。

select a.ename,b.ename from emp a,emp b where a.mgr=b.empno(+) and a.sal>=2000;7、查询所有雇员的姓名、SAL与COMM之和。

select ename,sal+nvl(comm,0) “sal-and-comm” from emp;8、查询所有81年7月1日以前来的员工姓名、工资、所属部门的名字select ename,sal,dname from emp,dept where emp.deptno=dept.deptno and hiredate<=to_date(‘1981-07-01’,’yyyy-mm-dd’);9、查询列出来公司就职时间超过24年的员工名单select ename from emp where hiredate<=add_months(sysdate,-288);10、查询于81年来公司所有员工的总收入(SAL和COMM)select sum(sal+nvl(comm,0)) from emp where to_char(hiredate,’yyyy’)=’1981’;11、查询显示每个雇员加入公司的准确时间,按××××年××月××日时分秒显示。

sql查询练习题含答案

sql查询练习题含答案

--(1)查询20号部门的所有员工信息。

select * from emp e where e.deptno=20;--(2)查询奖金(COMM)高于工资(SAL)的员工信息。

select * from emp where comm>sal;--(3)查询奖金高于工资的20%的员工信息。

select * from emp where comm>sal*0.2;--(4)查询10号部门中工种为MANAGER和20号部门中工种为CLERK的员工的信息。

select * from emp ewhere (e.deptno=10 and e.job='MANAGER')or (e.deptno=20 and e.job='CLERK')--(5)查询所有工种不是MANAGER和CLERK,--且工资大于或等于2000的员工的详细信息。

select * from empwhere job not in('MANAGER','CLERK') and sal>=2000;--(6)查询有奖金的员工的不同工种。

select * from emp where comm is not null;--(7)查询所有员工工资和奖金的和。

select (e.sal+nvl(m,0)) from emp e;--(8)查询没有奖金或奖金低于100的员工信息。

select * from emp where comm is null or comm<100;--(9)查询员工工龄大于或等于10年的员工信息。

select * from emp where (sysdate-hiredate)/365>=10;--(10)查询员工信息,要求以首字母大写的方式显示所有员工的姓名。

select initcap(ename) from emp;select upper(substr(ename,1,1))||lower(substr(ename,2)) from emp;--(11)显示所有员工的姓名、入职的年份和月份,按入职日期所在的月份排序,--若月份相同则按入职的年份排序。

SQL查询习题

SQL查询习题

SQL查询习题一、单表查询练习1、查询<学生信息表>,查询学生"张三"的全部基本信息select *from xsbwhere xm='张三'2、查询<学生信息表>,查询学生"张三"和”张四”的基本信息select *from xsbwhere xm='张三'or xm='张四'3、查询<学生信息表>,查询姓"张"学生的基本信息select *from xsbwhere xm like '张%'4、查询<学生信息表>,查询姓名中含有"四"字的学生的基本信息select *from xsbwhere xm like '%四%'5、查询<学生信息表>,查询姓名长度为三个字,姓“李”,且最后一个字是“强”的全部学生信息。

select *from xsbwhere xm like '李_强'6、查询<学生信息表>,查询姓"张"或者姓”李”的学生的基本信息。

select *from xsbwhere xm like '张%'or xm='李%'7、查询<学生信息表>,查询姓"张"并且"所属省份"是"北京"的学生信息select *from xsbwhere xm like '张%'and jg='北京'8、查询<学生信息表>,查询"所属省份"是"北京"、”新疆”、”山东”或者"上海"的学生的信息select *from xsbwhere jg='北京'or jg='上海'or jg='山东'or jg='新疆' orselect *from xsbwhere jg in ('北京','上海','山东','新疆')9、查询<学生信息表>,查询姓"张",但是"所属省份"不是"北京"的学生信息select *from xsbwhere xm like '张%'and jg!='北京'orselect *from xsbwhere xm like '张%'and jg<>'北京'orselect *from xsbwhere xm like '张%'and jg not like '%北京%'10、查询<学生信息表>,查询全部学生信息,并按照“性别”排序,性别相同的情况下按照“所属省份”排序,所属省份相同的情况下再按照“班级”排序select *from xsborder by xb,jg,bj11、查询<学生信息表>,查询现有学生都来自于哪些不同的省份select distinct jgfrom xsb12、查询<学生选修信息表>,查询没有填写成绩的学生的学号、课程号和成绩select xh,kch,cjfrom cjbwhere cj is null13、查询<学生选修信息表>,查询全部填写了成绩的学生的选修信息,并按照“成绩”从高到低进行排序select *from cjbwhere cj is not nullorder by cj desc14、找出两个姓张的同学信息,只显示对应学生的姓名,性别和班级Select top 2 xm,xb,bjFrom xsbWhere xm like '张%'二、聚合函数练习1、统计<学生信息表>,统计共有多少个学生select count (*)from xsb2、统计<学生信息表>,统计年龄大于20岁的学生有多少个select count (*)from xsbwhere nl>='20'orselect count (*)from xsbwhere year(getdate())-year(csrq)>203、统计<学生信息表>,统计入学时间在1998年至2000年的学生人数select count (*)from xsbwhere rxrq>='1998-1-1' and rxrq<='2000-12-31'where rxrq between ‘1998-1-1’ and ‘2000-12-31’4、统计<学生选修信息表>,统计学号为"S001"的学生的平均成绩select AVG(cj)from cjbwhere xh='1'ORselect CONVERT(DECIMAL(18,2),AVG(cj)) ||保留小数点两位from cjbwhere xh='1'5、统计<学生选修信息表>,统计学号为"S001"的学生的总成绩select sum(cj)from cjbwhere xh='1'6、统计<学生选修信息表>,查询课程号为”C001”的课程的最高成绩select max(cj)from cjbwhere kch='23'7、统计<学生信息表>,查询所有学生中的最大年龄是多少select max(nl)from xsb三、分组查询练习1、统计<学生选修信息表>,统计每个课程的选修人数select kch,count(*)from cjbgroup by kch2、统计<学生选修信息表>,统计每个同学的总成绩select sum(cj)from cjbgroup by xh3、统计<学生信息表>,统计每个班级中每种性别的学生人数,并按照班级排序select bj,xb,count(*)from xsbgroup by bj,xb4、统计<学生选修信息表>,统计每门课程的平均成绩,并按照平均成绩降序排序select kch,AVG(cj)from cjbgroup by kchorder by AVG(cj) desc5、统计<学生选修信息表>,显示有两门以上课程不及格的学生的学号select xhfrom cjbwhere cj<'60'group by xhhaving count(*)>='2' 分组后的条件判断6、统计<学生信息表>,统计每个班级中的最大年龄是多少select bj,SUM(nl)from xsbgroup by bj四、嵌套查询练习1、用子查询实现,查询选修“高等数学”课的全部学生的总成绩1.课程表查课程号2.查所有高数成绩Select Sum( cj)from cjbwhere kch=( Select kchfrom kcbwhere kcm='高等数学')2、用子查询实现,统计<学生选修信息表>,显示学号为"S001"的学生在其各科成绩中,最高分成绩所对应的课程思考:如果该学号学生有两个课程分数都为最高的100分,查询会有什么结果学号一最高分最高分对应的课程号课程号对应课程名Select max(cj)From cjbWhere xh='1'Select kchFrom kcbWhere cj= (select max(cj ) from cjb ) and xh=’1’Select kcmFrom kcbWhere kch in ( Select kchFrom kcbWhere cj= (select max(cj ) from cjb ) and xh=’1’)3、用子查询实现,查询2班选修"数据库技术"课的所有学生的成绩之和1.班级二班学生Select xhFrom xsbWhere bj=’2’2.课程表里查课程号Select kchFrom kcbWhere kcm=’数据库技术’Select sum(cj)From cjbWhere xh in( Select xhFrom xsbWhere bj=’2’) and kch=( Select kchFrom kcbWhere kcm=’数据库技术’)4、用子查询实现,查询3班"张三"同学的"测试管理"成绩1.测试管理的课程号2.张三的学号Select xhFrom xsbWhere xm=’张三’and bj=’3’Select kchFrom kcbWhere kcm=’测试管理’Select cjFrom cjbWhere xh in ( Select xh ||in 可能有重名的多个‘张三’From xsbWhere xm=’张三’) and kcm=( Select kchFrom kcbWhere kcm=’测试管理’)五、联接查询练习1、查询"张三"的各科考试成绩,要求显示姓名、课程号和成绩查张三学号Select xhFrom xsbWhere xm=’张三’查学号对应成绩Select cj,kchFrom cjbWhere xh in(Select xhFrom xsbWhere xm=’张三’)Orselect xm, kch,cjfrom xsb,cjbwhere xsb.xh=cjb.xhand xm='张三'2、查询"张三"的各科考试成绩中,哪科没有记录考试成绩,要求显示姓名、课程号和成绩查张三学号Select xhFrom xsbWhere xm=’张三’学号对应的没有成绩的Select cj,kchFrom cjbWhere cj is nullSelect kchFrom cjbWhere cj=( Select cjFrom cjbWhere cj is null) and xh in (Select xhFrom xsbWhere xm=’张三’)Orselect xm, kch,cjfrom xsb,cjbwhere xsb.xh=cjb.xhand xm='张三'and cj is null3、查询"张三"的各门课程成绩,要求显示姓名、课程名称和成绩查张三学号学号对应成绩select xm,kcm,cjfrom xsb,cjb,kcbwhere xsb.xh=cjb.xhand cjb.kch=kcb.kchand xm='张三'4、查询3班"张三"的"测试管理"成绩,要求显示姓名、成绩查3班张三的学号查测试管理的课程号根据学号和课程号查成绩select xm,cjfrom xsb,cjb,kcbwhere xsb.xh=cjb.xhand cjb.kch=kcb.kchand xm='张三'and kcm='测试管理'and bj=’3’5、查询所有2000年以前入学的,各班男生的各科考试平均成绩select AVG(cj),bj,kchfrom xsb,cjbwhere xsb.xh=cjb.xhand rxrq<'2000 'and xb='男'group by bj,kch六、外联接查询查询”李坚强”所有课程的成绩,并显示学号、姓名、课程号和成绩,没有成绩记录的学号包括:('S009','S010','S011')1、使用左联接2、使用右联接3、对比等值连接七、补充提高1、查询“张三”比“王三”入学早几年2、查询所在班级和该班内学生的年龄之和,其中每个人的年龄都大于20岁,每个班的年龄之和大于60岁3、计算每种产品的剩余库存量表1,为产品进货表,产品名称name[char(10)],产品数量amount[int]表2,为产品出货表,产品名称name[char(10)],产品数量amount[int]业务逻辑:表1存储产品的总进货量,表2存储每种产品每次的出货量,如产品A进货为100,出货了3次,每次分别为10、20、30,那么A产品的库存就为40表A1 | 表A2-------------------|--------------------------- name amount | name amountA 100 | A 10B 100 | A 20| A 30| B 10| B 40。

sql查询练习题含答案

sql查询练习题含答案

--(1)查询20号部门的所有员工信息。

select * from emp e where =20;--(2)查询奖金(COMM)高于工资(SAL)的员工信息。

select * from emp where comm>sal;--(3)查询奖金高于工资的20%的员工信息。

select * from emp where comm>sal*;--(4)查询10号部门中工种为MANAGER和20号部门中工种为CLERK的员工的信息。

select * from emp ewhere =10 and ='MANAGER')or =20 and ='CLERK')--(5)查询所有工种不是MANAGER和CLERK,--且工资大于或等于2000的员工的详细信息。

select * from empwhere job not in('MANAGER','CLERK') and sal>=2000;--(6)查询有奖金的员工的不同工种。

select * from emp where comm is not null;--(7)查询所有员工工资和奖金的和。

select +nvl,0)) from emp e;--(8)查询没有奖金或奖金低于100的员工信息。

select * from emp where comm is null or comm<100;--(9)查询员工工龄大于或等于10年的员工信息。

select * from emp where (sysdate-hiredate)/365>=10;--(10)查询员工信息,要求以首字母大写的方式显示所有员工的姓名。

select initcap(ename) from emp;select upper(substr(ename,1,1))||lower(substr(ename,2)) from emp;--(11)显示所有员工的姓名、入职的年份和月份,按入职日期所在的月份排序,--若月份相同则按入职的年份排序。

sql50题查询大全

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、统计每门课程的学生选修人数(超过人的课程才统计)。

sql 查询 练习题

sql 查询 练习题

sql 查询练习题SQL查询练习题1. 查询员工表中所有员工的姓名和职位。

SELECT 姓名, 职位 FROM 员工表;2. 查询销售表中销售金额大于5000的销售记录。

SELECT * FROM 销售表 WHERE 销售金额 > 5000;3. 查询客户表中客户所在城市为北京或上海的客户信息。

SELECT * FROM 客户表 WHERE 所在城市 IN ('北京', '上海');4. 查询订单表中订单金额最大的订单信息。

SELECT * FROM 订单表 ORDER BY 订单金额 DESC LIMIT 1;5. 查询商品表中销售数量排名前三的商品信息。

SELECT * FROM 商品表 ORDER BY 销售数量 DESC LIMIT 3;6. 查询员工表中平均年龄大于30岁的部门名称和平均年龄。

SELECT 部门名称, AVG(年龄) AS 平均年龄 FROM 员工表 GROUP BY 部门名称 HAVING AVG(年龄) > 30;7. 查询客户表中注册时间在2020年之后的客户姓名和注册时间。

SELECT 姓名, 注册时间 FROM 客户表 WHERE 注册时间 > '2020-01-01';8. 查询订单表中订单状态为已完成的订单数量。

SELECT COUNT(*) FROM 订单表 WHERE 订单状态 = '已完成';9. 查询商品表中商品名称以手机开头且价格大于2000的商品信息。

SELECT * FROM 商品表 WHERE 商品名称 LIKE '手机%' AND 价格 > 2000;10. 查询员工表中工资最高的员工姓名和工资。

SELECT 姓名, MAX(工资) AS 最高工资 FROM 员工表;以上是SQL查询的练习题,通过这些题目的训练,可以提高对SQL查询语句的理解和运用能力。

数据库sql查询语句练习

数据库sql查询语句练习

查询语句1、查询“001”课程比“002”课程成绩高的所有学生的学号;select a.S# from (select s#,score from SC where C#='001') as a,(selects#,score from SC where C#='002') as bwhere a.score>b.score and a.s#=b.s#2、查询平均成绩大于60分的同学的学号和平均成绩;select S#,avg(score)from scgroup by S# having avg(score) >603、查询所有同学的学号、姓名、选课数、总成绩;select Student.S#,Student.Sname,count(SC.C#),sum(score)from Student left join SC on Student.S#=SC.S#group by Student.S#,Sname4、查询姓“李”的老师的个数;select count(distinct(Tname))from Teacherwhere Tname like '李%'5、查询没学过“张三”老师课的同学的学号、姓名;select Student.S#,Student.Snamefrom Studentwhere S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# andTeacher.Tname='张三')6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;select Student.S#,Student.Snamefrom Student,SCwhere Student.S#=SC.S#and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# andSC_2.C#='002')7、查询学过“张三”老师所教的所有课的同学的学号、姓名;select S#,Snamefrom Studentwhere S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C#and Teacher.T#=Course.T# and Teacher.Tname='张三' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher whereTeacher.T#=Course.T# and Tname='张三'))8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;Select S#,Snamefrom (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') as score2from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2<score9、查询所有课程成绩小于60分的同学的学号、姓名;select S#,Snamefrom Studentwhere S# not in (select Student.S# from Student,SC where S.S#=SC.S# andscore>60)10、查询没有学全所有课的同学的学号、姓名;select Student.S#,Student.Snamefrom Student,SCwhere Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course)11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;select S#,Snamefrom Student,SCwhere Student.S#=SC.S# and C# in (select C# from SC where S#='1001')12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;select distinct SC.S#,Snamefrom Student,SCwhere Student.S#=SC.S# and C# in (select C# from SC whereS#='001')13、把“SC”表中“张三”老师教的课的成绩都更改为此课程的平均成绩;update SC set score=(select avg(SC_2.score)from SC SC_2where SC_2.C#=SC.C# )from Course,Teacherwhere Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='张三'14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;select S# from SC where C# in (select C# from SC whereS#='1002')group by S# having count(*)=(select count(*) from SC whereS#='1002')15、删除学习“张三”老师课的SC表记录;Delect SCfrom course ,Teacherwhere Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='张三'16、向SC表中插入一些记录,这些记录要求符合以下条件:学号是没有上过编号“002”课程的同学学号课程号是002成绩是002号课的平均成绩;Insert into SCvalues(select S# from Student where S# not in (Select S# from SC where C#='002'),'002',(Select avg(score)from SC where C#='002'))17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,数据库,企业管理,英语,有效课程数,有效平均分select S# as 学生ID,(select score from SC where SC.S#=t.S# and C#='004') as 数据库,(select score from SC where SC.S#=t.S# and C#='001') as 企业管理,(select score from SC where SC.S#=t.S# and C#='006') as 英语,count(*) as 有效课程数, avg(t.score) as 平均成绩from SC as tgroup by S#order by avg(t.score)18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分select L.C# As 课程ID,L.score as 最高分,R.score as 最低分from SC L ,SC as Rwhere L.C# = R.C# and L.score = (select max(IL.score)from SC as IL,Student as IMwhere L.C# = IL.C# and IM.S#=IL.S# group by IL.C#)and R.Score = (SELECT MIN(IR.score) from SC as IRwhere R.C# = IR.C# group by IR.C# )19、按各科平均成绩从低到高和及格率的百分数从高到低顺序SELECT t.C# 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 SC T,Coursewhere t.C#=course.C#group by t.C#order by 100 * SUM(case when isnull(score,0)>=60 then 1 else 0 end)/count(*) DESC20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分,100 * SUM(CASE WHEN C# = '001' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END)AS 企业管理及格百分数,SUM(CASE WHEN C# = '002' THEN scoreELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分,100 * SUM(CASE WHEN C# = '002' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END)AS 马克思及格百分数,SUM(CASE WHEN C# = '003' THEN scoreELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分,100 * SUM(CASE WHEN C# = '003' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END)AS UML及格百分数,SUM(CASE WHEN C# = '004' THEN scoreELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分,100 * SUM(CASE WHEN C# = '004' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END)AS 数据库及格百分数FROM SC21、查询不同老师所教不同课程平均分从高到低显示SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(ame) AS 课程名称,AVG(Score) AS 平均成绩FROM SC AS T,Course AS C ,Teacher AS Zwhere T.C#=C.C# and C.T#=Z.T#GROUP BY C.C#ORDER BY AVG(Score) DESC22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩SELECT DISTINCT top 3SC.S# As 学生学号,Student.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 Student,SC LEFT JOIN SC AS T1ON SC.S# = T1.S# AND T1.C# = '001'LEFT JOIN SCAS T2ON SC.S# = T2.S# AND T2.C# = '002'LEFT JOIN SCAS T3ON SC.S# = T3.S# AND T3.C# = '003'LEFT JOIN SCAS T4ON SC.S# = T4.S# AND T4.C# = '004'WHERE student.S#=SC.S# andISNULL(T1.score,0) + ISNULL(T2.score,0) +ISNULL(T3.score,0) + ISNULL(T4.score,0)NOT IN(SELECTDISTINCTTOP 15 WITHTIESISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) +ISNULL(T4.score,0)FROM scLEFT JOIN scAS T1ON sc.S# = T1.S# AND T1.C# = 'k1'LEFT JOIN scAS T2ON sc.S# = T2.S# AND T2.C# = 'k2'LEFT JOIN scAS T3ON sc.S# = T3.S# AND T3.C# = 'k3'LEFT JOIN scAS T4ON sc.S# = T4.S# AND T4.C# = 'k4'ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0)+ ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC)23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]SELECT SC.C# as 课程ID, Cname as 课程名称,SUM(CASE WHEN score BETWEEN 85 AND100 THEN 1 ELSE 0 END) AS [100 - 85] ,SUM(CASE WHEN score BETWEEN 70 AND85 THEN 1 ELSE 0 END) AS [85 - 70] ,SUM(CASE WHEN score BETWEEN 60 AND70 THEN 1 ELSE 0 END) AS [70 - 60] ,SUM(CASE WHEN score < 60 THEN 1ELSE 0 END) AS [60 -]FROM SC,Coursewhere SC.C#=Course.C#GROUP BY SC.C#,Cname24、查询学生平均成绩及其名次25、查询各科成绩前三名的记录:(不考虑成绩并列情况)26、查询每门课程被选修的学生数select c#,count(S#) from sc group by C#27、查询出只选修了一门课程的全部学生的学号和姓名select SC.S#,Student.Sname,count(C#) AS 选课数from SC ,Studentwhere SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=128、查询男生、女生人数Select count(Ssex) as 男生人数 fromStudent group by Ssex having Ssex='男' Select count(Ssex) as 女生人数 fromStudent group by Ssex having Ssex='女'29、查询姓“张”的学生名单SELECT Sname FROM Student WHERE Sname like '张%'30、查询同名同姓学生名单,并统计同名人数select Sname,count(*) from Student group by Sname having count(*)>131、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)select Snamefrom studentwhere year(Sage)='1981'32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩select Sname,SC.S# ,avg(score)from Student,SCwhere Student.S#=SC.S# group by SC.S#,Sname having avg(score)>8534、查询课程名称为“数据库”,且分数低于60的学生姓名和分数Select Sname,isnull(score,0)from Student,SC,Coursewhere SC.S#=Student.S# and SC.C#=Course.C# and ame='数据库'and score <6035、查询所有学生的选课情况;SELECT SC.S#,SC.C#,Sname,CnameFROM SC,Student,Coursewhere SC.S#=Student.S# and SC.C#=Course.C#36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;SELECT distinct student.S#,student.Sname,SC.C#,SC.scoreFROM student,ScWHERE SC.score>=70 AND SC.S#=student.S#37、查询不及格的课程,并按课程号从大到小排列select c# from sc where scor e <60 order by C#38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;select SC.S#,Student.Snamefrom SC,StudentwhereSC.S#=Student.S# and Score>80 and C#='003'39、求选了课程的学生人数select count(*) from sc40、查询选修“张三”老师所授课程的学生中,成绩最高的学生姓名及其成绩select Student.Sname,scorefrom Student,SC,Course C,Teacherwhere Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T#and Teacher.Tname='张三' andSC.score=(select max(score) from SC where C#=C.C# )41、查询各个课程及相应的选修人数select count(*) from sc group by C#42、查询不同课程成绩相同的学生的学号、课程号、学生成绩43、查询每门功成绩最好的前两名SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 2 score FROM SC WHERE t1.C#= C# ORDER BYscore DESC ) ORDER BY t1.C#44、统计每门课程的学生选修人数(超过10人的课程才统计)。

sql 查询 练习题

sql 查询 练习题

sql 查询练习题SQL查询练习题SQL是一种用于管理和操作关系型数据库的语言,它可以让我们轻松地从数据库中提取所需的数据。

在实际应用中,熟练掌握SQL查询语句的编写是非常重要的。

为了帮助大家提高SQL查询的能力,下面将给出一些SQL查询练习题。

1. 查询所有员工的姓名和工资。

```sqlSELECT 姓名, 工资 FROM 员工表;```2. 查询所有部门的名称和员工数量。

```sqlSELECT 部门名称, COUNT(*) AS 员工数量 FROM 员工表 GROUP BY 部门名称; ```3. 查询所有工资高于平均工资的员工信息。

```sqlSELECT * FROM 员工表 WHERE 工资 > (SELECT AVG(工资) FROM 员工表);```4. 查询每个部门工资最高的员工信息。

```sqlSELECT * FROM 员工表 WHERE (部门名称, 工资) IN (SELECT 部门名称, MAX(工资) FROM 员工表 GROUP BY 部门名称);```5. 查询没有分配部门的员工信息。

```sqlSELECT * FROM 员工表 WHERE 部门名称 IS NULL;```6. 查询每个部门的平均工资,并按照平均工资降序排列。

```sqlSELECT 部门名称, AVG(工资) AS 平均工资 FROM 员工表 GROUP BY 部门名称ORDER BY 平均工资 DESC;```7. 查询每个部门的员工数量,并按照员工数量升序排列。

```sqlSELECT 部门名称, COUNT(*) AS 员工数量 FROM 员工表 GROUP BY 部门名称ORDER BY 员工数量 ASC;```8. 查询员工表中工资排名前10的员工信息。

```sqlSELECT * FROM 员工表 ORDER BY 工资 DESC LIMIT 10;```9. 查询每个部门的员工工资排名前3的员工信息。

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 *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查询练习题

更新操作
(1)往关系C中插入一个课程元组(‘C8’,‘VC++’, ‘BAO’) INSERT INTO C VALUES(‘C8’,’VC++’,’BAO’) (2)在SC中删除尚无成绩的选课元组。 DELETE FROM SC WHERE GRADE IN NULL (3)把选修LIU老师课程的女同学选课元组全部删去。 DELETE FROM SC WHERE S# IN(SELECT S# FROM S WHERE SEX=‘F’) AND C# IN(SELECT C# FROM C WHERE TEACHER=‘LIU’)
(10)求选修C4课程的女学生的平均年龄。 SELECT AVG(AGE) FROM S WHERE SEX=‘女’ AND S# IN (SELECT S# FROM SC WHERE C#=‘C4’)
设教学数据库中有三个关系: 学生关系 S(S#,SNAME,AGE,SEX) 选课关系 SC(S#,C#,GRADE) 课程关系 C(C#,CNAME,TEACHER)
(11)求刘老师所授课程的每门课程的平均成绩。 SELECT C.C#,AVG(GRADE) FROM C,SC WHERE C.C#=SC.C# AND TEACHER=‘LIU’ GROUP BY C.C# 或SELCT C#,AVG(GRADE) FROM SC WHERE C# IN(SELECT C# FROM C WHERE TEACHER=‘LIU’) GROUP BY C#
设教学数据库中有三个关系: 学生关系 S(S#,SNAME,AGE,SEX) 选课关系 SC(S#,C#,GRADE) 课程关系 C(C#,CNAME,TEACHER) (16)求年龄大于女同学平均年龄的男学生姓名和年龄。 SELECT SNAME,AGE FROM S WHERE SEX=‘男’ AND AGE>(SELECT AVG(AGE) FROM S WHERE SEX=‘女’)

sql测试题和答案.docx

sql测试题和答案.docx

sql测试题和答案# SQL测试题1. 基础查询题- 题目:编写一个SQL查询,从`employees`表中选择所有员工的姓名和员工ID。

- 答案:`SELECT name, employee_id FROM employees;`2. 条件查询题- 题目:从`orders`表中选择所有订单金额超过1000的订单。

- 答案:`SELECT * FROM orders WHERE order_amount > 1000;`3. 排序题- 题目:从`products`表中选择所有产品的名称和价格,并按价格降序排列。

- 答案:`SELECT name, price FROM products ORDER BY price DESC;`4. 聚合函数题- 题目:计算`sales`表中所有销售额的总和。

- 答案:`SELECT SUM(sales_amount) AS total_sales FROM sales;`5. 分组查询题- 题目:从`sales`表中按产品ID分组,并计算每个产品的总销售额。

- 答案:`SELECT product_id, SUM(sales_amount) AStotal_sales_per_product FROM sales GROUP BY product_id;`6. 连接查询题- 题目:查询`customers`表和`orders`表,找出所有客户的姓名和他们下过的订单数量。

- 答案:`SELECT , COUNT(o.order_id) AS order_count FROM customers c JOIN orders o ON c.customer_id =o.customer_id GROUP BY ;`7. 子查询题- 题目:找出`employees`表中工资高于平均工资的员工的姓名和工资。

- 答案:`SELECT name, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);`8. 多表连接查询题- 题目:查询`employees`表和`departments`表,找出所有员工的姓名、部门名称和部门ID。

sql测试题

sql测试题

sql测试题SQL(Structured Query Language)是一种用于管理和处理关系型数据库的编程语言。

在使用SQL进行数据查询、插入、更新和删除等操作时,正确的语法和优化的查询语句对于保证数据库的稳定性和性能至关重要。

下面是一些常见的SQL测试题,帮助您巩固和提升SQL技能。

题目一:查询语句练习1. 查询所有学生的姓名和年龄:```sqlSELECT 姓名, 年龄 FROM 学生表;```2. 查询2019年的所有订单信息,包括订单号、客户姓名和订单日期:```sqlSELECT 订单号, 客户姓名, 订单日期 FROM 订单表 WHERE 订单日期 >= '2019-01-01' AND 订单日期 <= '2019-12-31';```3. 查询已交付的订单总数和总金额:```sqlSELECT COUNT(*) AS 订单总数, SUM(订单金额) AS 总金额FROM 订单表 WHERE 状态 = '已交付';```题目二:数据过滤和排序1. 查询年龄在20岁以下的学生的姓名和年龄,并按年龄升序排序:```sqlSELECT 姓名, 年龄 FROM 学生表 WHERE 年龄 < 20 ORDER BY年龄 ASC;```2. 查询性别为女性且籍贯为北京的学生的姓名、性别和籍贯:```sqlSELECT 姓名, 性别, 籍贯 FROM 学生表 WHERE 性别 = '女' AND籍贯 = '北京';```3. 查询商品订单数量最多的前5名客户的姓名和订单数量:```sqlSELECT 客户姓名, COUNT(*) AS 订单数量 FROM 订单表 GROUP BY 客户姓名 ORDER BY 订单数量 DESC LIMIT 5;```题目三:数据更新和删除1. 将学生表中年龄大于25岁的学生的籍贯设置为上海:```sqlUPDATE 学生表 SET 籍贯 = '上海' WHERE 年龄 > 25;```2. 删除订单表中状态为取消的订单:```sqlDELETE FROM 订单表 WHERE 状态 = '取消';```3. 将学生表中姓名为"张三"的学生的年龄增加1岁:```sqlUPDATE 学生表 SET 年龄 = 年龄 + 1 WHERE 姓名 = '张三';```题目四:表关联和数据统计1. 查询订单表中每个客户的订单总金额:```sqlSELECT 客户姓名, SUM(订单金额) AS 总金额 FROM 订单表GROUP BY 客户姓名;```2. 查询每个商品分类下订单数量最多的商品的名称和订单数量:```sqlSELECT 分类, 商品名称, COUNT(*) AS 订单数量 FROM 商品表JOIN 订单表 ON 商品表.商品编号 = 订单表.商品编号 GROUP BY 分类, 商品名称 ORDER BY 订单数量 DESC;```3. 查询每个学生的姓名和所报课程的数量:```sqlSELECT 学生表.姓名, COUNT(*) AS 课程数量 FROM 学生表 LEFT JOIN 课程表 ON 学生表.学号 = 课程表.学号 GROUP BY 学生表.学号;```以上是一些SQL测试题,通过练习这些题目,您可以加深对于SQL语法和操作的理解,提升您的SQL技能。

SQL-server-查询语句-练习试题.doc

SQL-server-查询语句-练习试题.doc

SQL server查询语句练习题用SQL语句创建四个表:create database tongjigouse tongjigocreate table student(Sno varchar(20) not null primary key 厂■学号Sname varchar(20) not null,—学生姓名Ssex varchar(20) not null,—学生性别Sbirthday datetime,--学生出生年月Class varchar(20)—学生所在班级)gocreate table teacher一老0帀(Tno varchar(20) not null primary key,一教工编号(主码)Tname varchar(20) not null,—教工姓名Tsex varchar(20) not null,―教工性别Tbirthday datetime,—教工出生年月Prof varchar(20)z--职称Depart varchar(20) not null—教工所在部门)gocreate table Course—课程(Cno varchar(20) not null primary key,一课程号Cname varchar(20) not null,--课程名称Tno varchar(20) not null references teacher(Tno), 一教工编号(外码))gocreate table Score—分数(Sno varchar(20) not null references student(Sno), ■■学号(外码)Cno varchar(20) not null references Course(Cno), 一课程号(外码) primary key(Sno,Cno), Degree Decimal(4z l)z—成绩)表中数据如下:表(_) Student表(二)Course表(三)Score表(四)Teacherselect Sname,Ssex,Class from student2、査询教师所有的单位即不重复的Depart列。

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

SQL查询练习
设有学生表student,课程表course和修课表SC,其表结构如下所示:
SC表结构
请根据下列语义写出SQL查询命令
1.分别查询学生表和学生修课表中的全部数据。

2.查询计算机系的学生的姓名、年龄。

3.查询选修了c01号课程的学生的学号和成绩。

4.查询成绩在70到80分之间的学生的学号、课程号和成绩。

5·查询计算机系年龄在18到20之间且性别为“男”的学生的姓名、年龄。

6.查询9512101号学生的修课情况。

7.查询c01号课程成绩最高的分数。

8.查询学生都选修了哪些课程,要求列出课程号。

9·查询Northwind数据库中orders表的OrderlD、CustomerID和OrderDate,并将最新的定购日期(OrderDate)列在前边。

D
10·查询Northwind数据库中orders表的ShipCountry列以B,C,D,F开始且第三个字,符为“a”的OrderlD、CustomerID和ShipCountry的信息。

11·查询Northwind数据库中orders表的ShipCountry列不以A,B,C,D,E,F开始且最
后一个字母是“a”的OrderlD、CustomerlD和ShipCountry的信息。

12.查询学生数据库中学生的最大年龄和最小年龄。

13·查询修了c02号课程的所有学生的平均成绩、最高成绩和最低成绩。

14.统计每个系的学生人数。

15.统计每门课程的修课人数和最高分
16.统计每个学生的选课门数,并按选课门数的递增顺序显示结果。

17.统计各系的修课的学生总数和考试的平均成绩。

18.查询选课门数超过2门的学生的平均成绩和选课门数。

19.列出总成绩超过200分的学生,要求列出学号、总成绩。

+
20·查询pubs数据库的titles表中每类图书的平均价格超过12.O元的书的类型(Type)、平均价格和最高价格,要求只计算有确定价格的图书的情况。

21·查询pubs数据库的titles表中版税(royalty)为10的每类书的平均价格。

22·查询pubs数据库的titles表中每类图书中图书的数目超过3本的图书的总价格。

23.查询选修了c02号课程的学生的姓名和所在系。


24·查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩的降序排列结果。

25.查询计算机系男生修了“数据库基础”的学生的姓名、性别、成绩。

26·查询学生的选课情况,要求列出每位学生的选课情况(包括未选课的学生),并列出学生的学号、姓名、修课号、修课成绩。

27.列出“数据库基础”课程考试成绩前三名的学生的学号、姓名、所在系和考试成绩。

2 8.查询哪些学生合选了一门课程,要求列出合选课程的学生的学号和课程号。

29.查询哪些学生的年龄相同,要求列出年龄相同的学生的姓名和年龄。

30.查询哪些课程没有人选,要求列出课程号和课程名。

31.查询有考试成绩的所有学生的姓名、修课名称及考试成绩,要求将查询结果放在一张新的永久表(假设新表名为new sc)中,新表的列名分别为:Student_Name,Course_ Name,Grade。

32.分别查询信息系和计算机系的学生的姓名、性别、修课名称、修课成绩,并要求将这两个查询结果合并成一个结果集,并以系名、姓名、性别、修课名称、修课成绩的顺序显示各列。

33.用子查询实现如下查询:.
(1)查询选修了c01号课程的学生的姓名和所在系。

(2)查询数学系成绩80分以上的学生的学号、姓名。

(3)查询计算机系学生所选的课程名。

(4)查询"VB”课程考试成绩前三名的学生的学号、姓名、所在系。

34.创建一个新表teSt_t,其结构为:(COLl,COL 2,COL 3),其中:
COLl:整型,允许空值,
COL2:字符型,长度为10,不允许空值,
C.OL3:字符型,长度为10,允许空值,
试写出按行插入如下数据的语句(空白处表示不提供值),并观察插入后表中的记。

相关文档
最新文档