数据库SQL查询语句练习题【VIP专享】
数据库的sql语句练习题

数据库的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. 查询数据现在我们已经创建了学生表格并插入了一些数据,接下来需要进行一些查询操作。
数据库常用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之间。
2023 SQL 数据库查询练习题及答案

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

设教学数据库中有三个关系: 学生关系 S (S#,SNAME,AGE,SEX) 选课关系 SC(S#,C#,GRADE) 课程关系 (4)C查(C询#,选CN修A课M程E,号TE为ACC2H或ERC)4的学生学号。 SELECT S# FROM SC WHERE C#=‘C2’ OR C#=‘C4’
SQL查询练习题
It is applicable to work report, lecture and teaching
设教学数据库中有三个关系: 学生关系 S(S#,SNAME,AGE,SEX) 选课关系 SC(S#,C#,GRADE) 课程关系 C(C#,CNAME,TEACHER) 下面用SQL语句实现下面每个查询: (1)查询学习课程号为C2的学生学号与成绩。
设教学数据库中有三个关系: 学生关系 S(S#,SNAME,AGE,SEX) 选课关系 SC(S#,C#,GRADE) 课程关系 C(C#,CNAME,TEACHER)
(17)求年龄大于所有女同学年龄的男学生和年龄。 SELECT SNAME,AGE FROM S WHERE SEX=‘男’ AND AGE>ALL(SELECT AGE FROM S WHERE SEX=‘女’)
设教学数据库中有三个关系: 学生关系 S(S#,SNAME,AGE,SEX) 选课关系 SC(S#,C#,GRADE) 课程关系 C(C#,CNAME,TEACHER)
(13)在SC表中检索成绩为空值的学生学号和课程号。 SELECT S#,C# FROM SC WHERE GRADE IS NULL
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练习题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查询语句习题

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语句创建⼀个存储过程并验证掌握创建和执⾏带参数的存储过程熟练使⽤系统存储过程、系统函数掌握⽤在企业管理器中管理存储过程实验要求创建⼀个不带参数的存储过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设教学数据库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));。