数据库SQL查询语句练习题【VIP专享】
- 格式:pdf
- 大小:180.30 KB
- 文档页数:5
数据库的sql语句练习题数据库的SQL语句练习题数据库是计算机领域中非常重要的一部分,它用于存储和管理大量的数据。
而SQL(Structured Query Language)则是用于操作数据库的标准语言。
掌握SQL 语句的使用对于数据库的管理和查询至关重要。
下面将给出一些SQL语句的练习题,帮助读者巩固和提升SQL的应用能力。
1. 创建表格假设我们需要创建一个学生表格,其中包含学生的学号、姓名、年龄和性别等字段。
请写出创建该表格的SQL语句。
```CREATE TABLE students (student_id INT PRIMARY KEY,name VARCHAR(50),age INT,gender VARCHAR(10));```2. 插入数据现在我们已经创建了学生表格,接下来需要往表格中插入一些数据。
请写出插入两条学生记录的SQL语句。
```INSERT INTO students (student_id, name, age, gender)VALUES (1, '张三', 20, '男');INSERT INTO students (student_id, name, age, gender)VALUES (2, '李四', 22, '女');```3. 更新数据假设学生张三的年龄发生了变化,需要将其年龄更新为21岁。
请写出更新该学生记录的SQL语句。
```UPDATE studentsSET age = 21WHERE student_id = 1;```4. 删除数据假设学生李四已经毕业离校,需要从学生表格中删除其记录。
请写出删除该学生记录的SQL语句。
```DELETE FROM studentsWHERE student_id = 2;```5. 查询数据现在我们已经创建了学生表格并插入了一些数据,接下来需要进行一些查询操作。
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之间。
2023 SQL 数据库查询练习题及答案数据库查询是数据管理和处理的重要环节,熟练的SQL查询技巧对于数据库工程师和数据分析师来说至关重要。
为了提升大家的SQL 查询能力,以下是一些2023年的SQL数据库查询练习题及答案,希望能够对大家的学习和实践有所帮助。
练习题1:学生成绩表考虑一个学生成绩表(Students)和课程信息表(Courses),请使用SQL查询语句完成以下操作。
1. 查询所有学生的姓名和学号;2. 查询所有参加了"C3"课程的学生的姓名和学号;3. 查询所有选择了至少两门课程的学生的姓名和学号;答案1:SELECT 学号, 姓名FROM 学生成绩表;答案2:SELECT 学生成绩表.学号, 学生成绩表.姓名FROM 学生成绩表, 课程信息表WHERE 学生成绩表.课程编号 = 课程信息表.课程编号AND 课程信息表.课程名称 = "C3";答案3:SELECT 学号, 姓名FROM 学生成绩表GROUP BY 学号, 姓名HAVING COUNT(*) >= 2;练习题2:库存管理考虑一个库存管理系统的数据库,包含了商品表(Products)、仓库表(Warehouses)和库存表(Inventory)。
请使用SQL查询语句完成以下操作。
1. 查询商品表中单价不低于100元的商品的名称和单价;2. 查询所有位于“北京”仓库中的商品的名称和库存量;3. 查询库存量最多的商品的名称和库存量;答案1:SELECT 名称, 单价FROM 商品表WHERE 单价 >= 100;答案2:SELECT 商品表.名称, 库存表.库存量FROM 商品表, 仓库表, 库存表WHERE 商品表.商品ID = 库存表.商品IDAND 仓库表.仓库ID = 库存表.仓库IDAND 仓库表.所在地 = "北京";答案3:SELECT 商品表.名称, 库存表.库存量FROM 商品表, 库存表WHERE 商品表.商品ID = 库存表.商品IDORDER BY 库存表.库存量 DESCLIMIT 1;练习题3:订单管理考虑一个订单管理系统的数据库,包含了客户表(Customers)、订单表(Orders)和订单详情表(OrderDetails)。
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练习题在现代信息化社会中,数据的处理和管理变得愈发重要。
而SQL(Structured Query Language)作为一种用于管理和处理关系型数据库的语言,也成为了各行各业从事数据分析和管理的必备技能之一。
为了提高自己的SQL技能,我们可以通过练习题来不断巩固和提升。
练习题一:查询商品信息假设有一个商品表(Product)和一个供应商表(Supplier),其中商品表包含了商品的ID、名称、价格和供应商ID等信息,供应商表包含了供应商的ID和名称等信息。
请写出一条SQL语句,查询出所有商品的名称、价格和供应商名称。
解答一:```sqlSELECT , Product.Price, FROM ProductJOIN Supplier ON Product.SupplierID = Supplier.ID;```练习题二:统计销售额假设有一个订单表(Orders)和一个订单详情表(OrderDetails),其中订单表包含了订单的ID、日期和客户ID等信息,订单详情表包含了订单详情的ID、订单ID、商品ID和数量等信息。
请写出一条SQL语句,统计每个客户的总销售额,并按销售额降序排序。
解答二:```sqlSELECT Orders.CustomerID, SUM(Product.Price * OrderDetails.Quantity) AS TotalSalesFROM OrdersJOIN OrderDetails ON Orders.ID = OrderDetails.OrderIDJOIN Product ON OrderDetails.ProductID = Product.IDGROUP BY Orders.CustomerIDORDER BY TotalSales DESC;```练习题三:查询员工信息假设有一个员工表(Employee)和一个部门表(Department),其中员工表包含了员工的ID、姓名和部门ID等信息,部门表包含了部门的ID和名称等信息。
SQL查询语句习题1.检索“商品信息”类别名称=玩具并且零售价在100和300之间的商品的平均零售价,最⼤零售价,最⼩零售价,以及零售价之和Select 类别名称,零售价, min(零售价)最⼩零售价, max(零售价)最⼤零售价,avg(零售价)平均零售价,sum(零售价)零售价之和from 商品信息 a inner join 商品类别b ona.类别ID=b.类别ID where 类别名称='玩具' group by 类别名称,零售价2.检索“商品⼊出库”中审核⽇期⼤于2009年3⽉1⽇,并且⼊库类型编号为“采购⼊库”的商品的总⾦额(⼊出库数量*进价)返回数据:⼊出库编号、总⾦额(商品⼊出库.⼊库类型编号=⼊出库类型.⼊库类型编号)select a.⼊出库编号,类型名称,总⾦额=⼊出库数量*进价from 商品⼊出库a inner join ⼊出库类型b on a.⼊出库类型编号=b.⼊出库类型编号inner join ⼊出库明细c on c.⼊出库编号= a.⼊出库编号where 审核⽇期>'2009-03-01' and 类型名称='采购⼊库'3. 统计每个仓库中库存的除去⾷品之外的总⾦额(【仓库】.仓库ID=【库存.仓库IDselect 仓库名称,类别名称, sum(数量*零售价)总⾦额from 仓库a inner join 库存b on a.仓库ID=b.仓库IDinner join 商品信息c on b.商品ID=c.商品ID inner join 商品类别d on c.类别ID=d.类别ID where 类别名称not like '⾷品' group by 仓库名称,类别名称4、统计“商品信息”中商品名称相同的信息,要求商品名称的重复次数⼤于3,返回数据商品名称,次数select 商品名称,count(商品名称)次数from 商品信息group by 商品名称having count(商品名称)>35、统计“库存”中汇总库存数量⼩于100的商品编码、商品名称、汇总库存数量select 商品编码,商品名称,count (数量)汇总库存数量from 库存a inner join 商品信息bon a.商品ID=b.商品ID group by 商品编码,商品名称having count (数量)<100实验11 SQL Server 2000的存储过程实验⽬的掌握使⽤向导创建存储过程并更新相应数据掌握使⽤T-SQL编程的⽅法掌握使⽤T-SQL语句创建⼀个存储过程并验证掌握创建和执⾏带参数的存储过程熟练使⽤系统存储过程、系统函数掌握⽤在企业管理器中管理存储过程实验要求创建⼀个不带参数的存储过程。
数据库的sql语句练习题1. 练习题一:查询语句基础在学生表(students)中,包含以下字段:学号(id)、姓名(name)、年龄(age)、性别(gender)、班级(class)、成绩(score)。
请编写SQL语句实现以下需求:a) 查询学生表中所有学生的信息。
b) 查询学生表中的男性学生信息。
c) 查询学生表中年龄为18岁的学生信息。
d) 查询学生表中成绩大于等于90分的学生信息。
e) 查询学生表中姓“张”的学生信息。
2. 练习题二:修改语句练习在学生表(students)中,某个学生的学号为1001,需要将该学生的年龄修改为20岁,请编写相应的SQL语句实现此操作。
3. 练习题三:插入语句练习在学生表(students)中添加一条新纪录,学号为1002,姓名为李明,年龄为19岁,性别为男,班级为三年级,成绩为87分,请编写相应的SQL语句实现此操作。
4. 练习题四:删除语句练习在学生表(students)中,某个学生的学号为1003,需要将该学生的信息从表中删除,请编写相应的SQL语句实现此操作。
5. 练习题五:使用多表查询存在两张表,学生表(students)和课程表(courses)。
学生表包含字段:学号(id)、姓名(name)、班级(class);课程表包含字段:课程编号(course_id)、课程名称(course_name)。
已知约德尔学院中,学号为1001的学生参加了编号为1的课程,请编写SQL语句查询学号为1001的学生所选的课程及课程名称。
6. 练习题六:排序查询练习在学生表(students)中,查询所有学生的信息,并按照成绩从高到低进行排序。
以上是数据库的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查询语句的理解和运用能力。
查询问题:设教学数据库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 SC WHERE Cno=‘C2’ OR Cno=‘C4’;(5)检索至少选修课程号为C2与C4的学生学号; SELECT SnoFROM SC X,SC Y WHERE X 、Sno=Y 、Sno AND X 、Cno=‘C2’ AND Y 、Cno=‘C4’ ; (6)检索不学C2课的学生姓名与年龄;(7)检索学习全部课程的学生姓名; 在表S 中找学生,要求这个学生学了全部课程。
查询语句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查询练习题。
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的员工信息。
数据库中有如下三个表:学生表(学号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查询语句习题含答案查询问题:设教学数据库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)检索计算机系的全体学⽣的学号,姓名与性别; SELECTSno,Sname,Sex FROM SWHERE Sdept =’CS ’;(2)检索学习课程号为C2的学⽣学号与姓名;分别(1)⾸先在C 表中找出“DS ”课程的课程号Cno;(2)然后在SC 表中找出Cno 等于第⼀步给出的Cno 集合中的某个元素Cno;(3)最后在S 关系中选出Sno 等于第⼆步中Sno 集合中某个元素的元组,取出Sno 与Sname 送⼊结果表列。
SELECTSno,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 X 、Cno=‘C2’ AND Y 、Cno=‘C4’ ;(6)检索不学C2课的学⽣姓名与年龄; ,学。
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技能。
设教学数据库Education有三个关系:学生关系S(SNO,SNAME,AGE,SEX,SDEPT);学习关系SC(SNO,CNO,GRADE);课程关系C(CNO,CNAME,CDEPT,TNAME)查询问题:1:查所有年龄在20岁以下的学生姓名及年龄。
2:查考试成绩有不及格的学生的学号3:查所年龄在20至23岁之间的学生姓名、系别及年龄。
4:查计算机系、数学系、信息系的学生姓名、性别。
5:查既不是计算机系、数学系、又不是信息系的学生姓名、性别6:查所有姓“刘”的学生的姓名、学号和性别。
7:查姓“上官”且全名为3个汉字的学生姓名。
8:查所有不姓“张”的学生的姓名。
9:查DB_Design课程的课程号。
10:查缺考的学生的学号和课程号。
11:查年龄为空值的学生的学号和姓名。
12:查计算机系20岁以下的学生的学号和姓名。
13:查计算机系、数学系、信息系的学生姓名、性别。
14:查询选修了C3课程的学生的学号和成绩,其结果按分数的降序排列。
15:查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。
16:查询学生总人数。
17:查询选修了课程的学生人数。
18:计算选修了C1课程的学生平均成绩。
19:查询学习C3课程的学生最高分数。
20:查询各个课程号与相应的选课人数。
21:查询计算机系选修了3门以上课程的学生的学号。
22:求基本表S中男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。
23:查询每个学生及其选修课程的情况。
24:查询选修了C2课程且成绩在90分以上的所有学生。
25:查询每个学生选修的课程名及其成绩。
26:统计每一年龄选修课程的学生人数。
27:查询选修了C2课程的学生姓名。
28:查询与“张三”在同一个系学习的学生学号、姓名和系别。
29:查询选修课程名为“数据库”的学生学号和姓名。
30:查询与“张三”在同一个系学习的学生学号、姓名和系别。
31:查询选修课程名为“数据库”的学生学号和姓名。
32:查询选修了C2课程的学生姓名。
33:查询所有未选修C2课程的学生姓名。
34:查询与“张三”在同一个系学习的学生学号、姓名和系别。
35:查询选修了全部课程的学生姓名。
36:查询所学课程包含学生S3所学课程的学生学号(1)比较例1:查所有年龄在20岁以下的学生姓名及年龄。
SELECT Sname,SageFROM SWHERE Sage<20; (NOT age>=20)例2:查考试成绩有不及格的学生的学号SELECT DISTINCT SnoFROM SCWHERE grade<60;(2)确定范围例3:查所年龄在20至23岁之间的学生姓名、系别及年龄。
SELECT Sname,Sdept,SageFROM SWHERE Sage BETWEEN 20 AND 23;(3)确定集合例4:查计算机系、数学系、信息系的学生姓名、性别。
SELECT Sname,SsexFROM SWHERE Sdept IN (’CS’, ‘IS’, ‘MATH’);例5:查既不是计算机系、数学系、又不是信息系的学生姓名、性别SELECT Sname,SsexFROM SWHERE Sdept NOT IN (’CS’, ‘IS’, ‘MATH’);(4)字符匹配例6:查所有姓“刘”的学生的姓名、学号和性别。
SELECT Sname,Sno,SsexFROM SWHERE Sname LIKE ‘刘%’;例7:查姓“上官”且全名为3个汉字的学生姓名。
SELECT SnameFROM SWHERE Sname LIKE ‘上官_ _’;例8:查所有不姓“张”的学生的姓名。
SELECT Sname,Sno,SsexFROM SWHERE Sname NOT LIKE ‘张%’;例9:查DB_Design课程的课程号。
SELECT CnoFROM CWHERE Cname LIKE ‘DB\_Design’ ESCAPE ‘\’;(5)涉及空值的查询例10:查缺考的学生的学号和课程号。
SELECT Sno,CnoFROM SCWHERE Grade IS NULL;(不能用=代替){ 有成绩的 WHERE Grade IS NOT NULLL;}例11:查年龄为空值的学生的学号和姓名。
SELECT Sno,SnameFROM SWHERE Sage IS NULL;(6)多重条件查询例12:查计算机系20岁以下的学生的学号和姓名。
SELECT Sno,SnameFROM SWHERE Sdept=‘CS’ AND Sage<20;例13:查计算机系、数学系、信息系的学生姓名、性别。
SELECT Sname,SsexFROM SWHERE Sdept =’CS’ OR Sdept =‘IS’ OR Sdept =’MATH’);3、对查询结果排序例14:查询选修了C3课程的学生的学号和成绩,其结果按分数的降序排列。
SELECT Sno,GradeFROM SCWHERE Cno=‘C3’ORDER BY Grade DESC;例15:查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。
SELECT *FROM SORDER BY Sdep,Sage DESC;4.聚合函数的使用例16:查询学生总人数。
SELECT COUNT(*)FROM S例17:查询选修了课程的学生人数。
SELECT COUNT(DISTINCT Sno)FROM SC例18:计算选修了C1课程的学生平均成绩。
SELECT AVG(Grade)FROM SCWHERE Cno=‘C1’;例19:查询学习C3课程的学生最高分数。
SELECT MAX(Grade)FROM SC WHERE Cno=‘C3’;5、对查询结果分组例20:查询各个课程号与相应的选课人数。
SELECT Cno,COUNT(Sno)FROM SCGROUP BY Cno;该SELECT语句对SC表按Cno的取值进行分组,所有具有相同Cno值的元组为一组,然后对每一组作用聚合函数COUNT以求得该组的学生人数。
如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件组,则可以使用HAVING短语指定筛选条件。
例21:查询计算机系选修了3门以上课程的学生的学号。
SELECT SnoFROM SCWHERE Sdept=‘CS’GROUP BY SnoHAVING COUNT(*)>3;WHERE子句与HAVING短语的根本区别在于作用对象不同。
WHERE子句作用于基本表或视图,从中选择满足条件的元组。
HAVING短语作用于组,从中选择满足条件的组。
例22:求基本表S中男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。
SELECT Sage,COUNT(Sno)FROM SWHERE Ssex='M'GROUP BY SageHAVING COUNT(*)> 50ORDER BY 2,Sage DESC;二、多表查询1、联接查询例23:查询每个学生及其选修课程的情况。
SELECT S.Sno,Sname,Sage,Ssex,Sdept,Cno,GradeFROM S, SCWHERE S.Sno=SC.Sno;例24:查询选修了C2课程且成绩在90分以上的所有学生。
SELECT S.Sno,SnameFROM S,SCWHERE S.Sno=SC.SnoAND o=‘C2’AND SC.Grade > 90;例25:查询每个学生选修的课程名及其成绩。
FROM SCWHERE SC.Sno=S.Sno AND Cno=‘C2’);例33:查询所有未选修C2课程的学生姓名。
SELECT SnameFROM SWHERE NOT EXISTS( SELECT *FROM SCWHERE SC.Sno=S.Sno AND Cno=‘C2’);[NOT]EXISTS 实际上是一种内、外层互相关的嵌套查询,只有当内层引用了外层的值,这种查询才有意义。
例34:查询与“张三”在同一个系学习的学生学号、姓名和系别。
SELECT Sno,Sname,SdeptFROM S AS S1WHERE EXISTS(SELECT *FROM S AS S2WHERE S2.Sdept=S1. Sdept AND S2.Sname=‘张三’);相关子查询例35:查询选修了全部课程的学生姓名。
在表S中找学生,要求这个学生学了全部课程。
换言之,在S表中找学生,在C中不存在一门课程,这个学生没有学。
SELECT SnameFROM SWHERE NOT EXISTS(SELECT *FROM CWHERE NOT EXISTS(SELECT *FROM SCWHERE SC.Sno=S.Sno AND o=o));例36:查询所学课程包含学生S3所学课程的学生学号分析:不存在这样的课程Y,学生S3选了Y,而其他学生没有选。
SELECT DISTINCT SnoFROM SC AS XWHERE NOT EXISTS(SELECT *FROM SC AS Y WHERE Y.Sno=‘S3’ AND NOT EXISTS(SELECT *FROM SC AS ZWHERE Z.Sno=X.Sno AND o=o));。