SQL查询语句巩固及练习结果
- 格式:doc
- 大小:2.41 MB
- 文档页数:17
1 单表查询1.1 查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、客户ID和雇员ID等字段的值查询语句:select 订单ID客户ID雇员ID订购日期from 订单WHERE 订购日期BETWEEN '1996-7-1' AND '1996-7-15';1.2 查询供应商的ID、公司名称、地区、城市和电话字段的值。
条件是“地区等于华北”并且“联系人头衔等于销售代表”。
查询语句:select 供应商ID公司名称地区城市电话from `供应商`WHERE 地区 = '华北'AND 联系人职务 = '销售代表';1.3 查询供应商的ID、公司名称、地区、城市和电话字段的值。
其中的一些供应商位于华东或华南地区,另外一些供应商所在的城市是天津查询语句:select 供应商ID公司名称地区城市电话from `供应商`WHERE 地区 in('华东''华南') or 城市 = '天津';1.4 查询位于“华东”或“华南”地区的供应商的ID、公司名称、地区、城市和电话字段的值查询语句:select 供应商ID公司名称地区城市电话 from `供应商` WHERE 地区 in('华东''华南');2 多表查询2.1查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、相应订单的客户公司名称、负责订单的雇员的姓氏和名字等字段的值,并将查询结果按雇员的“姓氏”和“名字”字段的升序排列,“姓氏”和“名字”值相同的记录按“订单ID”的降序排列查询语句:select 订购日期订单ID公司名称姓氏名字from 订单 aleft join 客户 b on a.客户ID = b.客户IDleft join 雇员 c on a.雇员ID = c.雇员IDWHERE 订购日期 BETWEEN '1996-7-1' AND '1996-7-15'order by 姓氏名字订单ID2.2 查询“10248”和“10254”号订单的订单ID、运货商的公司名称、订单上所订购的产品的名称查询语句:select 订购日期订单ID公司名称姓氏名字from 订单 aleft join 客户 b on a.客户ID = b.客户IDleft join 雇员 c on a.雇员ID = c.雇员IDWHERE 订购日期 BETWEEN '1996-7-1' AND '1996-7-15'order by 姓氏名字订单ID2.3 查询“10248”和“10254”号订单的订单ID、订单上所订购的产品的名称、数量、单价和折扣查询语句:select a.订单IDc.产品名称b.单价b.数量b.折扣from 订单 aleft join 订单明细 b on a.订单ID = b.订单IDleft join 产品 c on c.产品ID = b.产品IDwhere a.订单ID in('10248''10254')2.4 查询“10248”和“10254”号订单的订单ID、订单上所订购的产品的名称及其销售金额销售金额=单价*数量*(1-折扣)查询语句:select a.订单IDc.产品名称 round(b.单价*b.数量*(1-b.折扣)2) as 销售金额from 订单 aleft join 订单明细 b on a.订单ID = b.订单IDleft join 产品 c on c.产品ID = b.产品IDwhere a.订单ID in('10248''10254')3 综合查询3.1 查询所有运货商的公司名称和电话查询语句:select 公司名称电话 from 运货商3.2 查询所有客户的公司名称、电话、传真、地址、联系人姓名和联系人头衔查询语句:select 公司名称电话传真地址联系人姓名联系人职务from 客户3.3 查询单价介于10至30元的所有产品的产品ID、产品名称和库存量查询语句:select 产品ID产品名称库存量from 产品where 单价 BETWEEN 10 and 303.4 查询单价大于20元的所有产品的产品名称、单价以及供应商的公司名称、电话查询语句:select a.产品名称a.单价b.公司名称b.电话from 产品 aleft join 供应商 b on a.供应商ID = b.供应商IDwhere 单价 > 203.5 查询上海和北京的客户在1996年订购的所有订单的订单ID、所订购的产品名称和数量查询语句:select a.订单IDd.产品名称c.数量from 订单 aleft join 客户 b on a.客户ID = b.客户IDleft join 订单明细 c on a.订单ID = c.订单IDleft join 产品 d on c.产品ID =d.产品IDwhere b.城市 in('上海''北京')3.6 查询华北客户的每份订单的订单ID、产品名称和销售金额查询语句:select a.订单IDd.产品名称 round(c.单价*c.数量*(1-c.折扣)2) as 销售金额from 订单 aleft join 客户 b on a.客户ID = b.客户IDleft join 订单明细 c on a.订单ID = c.订单IDleft join 产品 d on c.产品ID =d.产品IDwhere b.地区 = '华北'3.7 按运货商公司名称,统计1997年由各个运货商承运的订单的总数量查询语句:select b.公司名称count(a.订单ID) as 订单总数量from 订单 aleft join 运货商 b on a.运货商 = b.运货商IDwhere year(a.订购日期) = 1997group by b. 公司名称3.8 统计1997年上半年的每份订单上所订购的产品的总数量查询语句:select b.公司名称sum(c.数量) as 产品总数量from 订单 aleft join 运货商 b on a.运货商 = b.运货商IDleft join 订单明细 c on a.订单ID = c.订单IDwhere 订购日期 between '1997-01-01' and '1997-06-30'group by b.公司名称3.9 统计各类产品的平均价格查询语句:select 类别名称round(sum(a.单价*a.数量*(1-a.折扣))/sum(a.数量)2) as 平均价格from 订单明细 aleft join 产品 b on a.产品ID = b.产品IDleft join 类别 c on b.类别ID = c.类别IDgroup by c.类别名称3.10 统计各地区客户的总数量查询语句:select 地区count(客户ID) as 客户总数from 客户group by 地区。
sqlyyog语句补全1. 查询表中的所有数据SELECT * FROM 表名;2. 查询表中指定列的数据SELECT 列名1, 列名2, 列名3 FROM 表名;3. 查询表中符合条件的数据SELECT * FROM 表名 WHERE 条件;4. 查询表中数据并按照指定列进行排序SELECT * FROM 表名 ORDER BY 列名 ASC/DESC; 5. 查询表中数据并限制返回的行数SELECT * FROM 表名 LIMIT 数量;6. 查询表中数据并进行分组统计SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名;7. 查询表中数据并进行求和、平均值等运算SELECT SUM(列名) FROM 表名;SELECT AVG(列名) FROM 表名;8. 查询表中数据并进行连表操作SELECT 表1.列名, 表2.列名 FROM 表1 JOIN 表2 ON 表1.关联列 = 表2.关联列;9. 查询表中数据并进行条件判断SELECT 列名 FROM 表名 WHERE 列名 > 数值;10. 查询表中数据并使用函数进行处理SELECT 函数名(列名) FROM 表名;11. 查询表中数据并使用通配符进行模糊匹配SELECT * FROM 表名 WHERE 列名 LIKE '关键字%';12. 查询表中数据并进行日期时间处理SELECT DATE_FORMAT(日期列, '格式') FROM 表名;13. 查询表中数据并进行分页处理SELECT * FROM 表名 LIMIT 起始行, 每页数量;14. 查询表中数据并进行条件判断SELECT 列名 FROM 表名 WHERE 列名 BETWEEN 数值1 AND 数值2;15. 查询表中数据并进行空值判断SELECT * FROM 表名 WHERE 列名 IS NULL;以上是一些常用的SQL语句补全,可以根据具体需求进行组合和扩展,希望能对你有帮助。
(完整版)sql语句练习题及答案⼀在数据库 school 中建⽴student , sc, course 表。
学⽣表、课程表、选课表属于数据库School ,其各⾃的数据结构如下:学⽣Student (Sno,Sname,Ssex,Sage,Sdept)课程表course(Cno,Cname,Cpno,Ccredit)学⽣选课SC(Sno,Cno,Grade)⼆设定主码1 Student表的主码:sno2 Course表的主码:cno3 Sc表的主码:sno,cno1写出使⽤ Create Table 语句创建表 student , sc, course 的SQL语句23 删除student表中的元组4在数据库school中删除关系student5在student表添加属性sbirthdate 类型datetimeDelete1 删除所有JSJ 系的男⽣delete from Student where Sdept=’JSJ’ and Ssex=’男’;2 删除“数据库原理”的课的选课纪录delete from SC where Cno in (select Cno fromCourse where Cname=’数据库原理’);Update1 修改0001 学⽣的系科为: JSJ2 把陈⼩明的年龄加1岁,性别改为⼥。
2 修改李⽂庆的1001课程的成绩为93 分3 把“数据库原理”课的成绩减去1分Select 查询语句⼀单表1查询年龄在19⾄21岁之间的⼥⽣的学号,姓名,年龄,按年龄从⼤到⼩排列。
2查询姓名中第2个字为“明”字的学⽣学号、性别。
3查询 1001课程没有成绩的学⽣学号、课程号4查询JSJ 、SX、WL 系的年龄⼤于25岁的学⽣学号,姓名,结果按系排列5按10分制查询学⽣的sno,cno,10分制成绩(1-10分为1 ,11-20分为2 ,30-39分为3,。
90-100为10)6查询 student 表中的学⽣共分布在那⼏个系中。
SQL基础复习03--数据查询SQL语句(单表查询)参考教材《数据库系统:原理、设计与编程(MOOC版)》,陆鑫张凤荔陈安龙终于到查询这⼀块了。
3.4 数据查询SQL语句3.4.1 查询语句基本结构SELECT [ALL/DISTINCT] <⽬标列>[,<⽬标列>...][INTO <新表>]FROM <表名>[,<表名>...][WHERE <条件表达式>][GROUP BY <列名> [HAVING <条件表达式>]ORDER BY <列名> [ASC/DESC]];SELECT语句由多种字句组成:1. SELECT⼦句,⽤来指明从数据库表中需要查询的⽬标列。
ALL是默认操作,获取所有满⾜条件的数据⾏;DISTINCT⽤来去掉结果集中的重复数据⾏;<⽬标列>为被查询表的指定列名,可以有多个。
2. INTO⼦句,⽤来将被查询的结果集数据插⼊新表。
3. FROM⼦句,⽤来指定被查询的数据来⾃哪个表或哪些表。
多表⽤逗号分隔。
4. WHERE⼦句,⽤来给出查询的检索条件,多个条件之间可以⽤AND、OR进⾏连接。
5. GROUP BY⼦句,⽤来对查询结果进⾏分组,并进⾏分组统计等处理,在分组中,还可以使⽤HAVING关键词定义分组条件。
6. ORDER BY⼦句,⽤来对查询结果集进⾏排序。
ASC当然是升序,DESC是降序。
默认为ASC。
从SELECT语句的操作结果看,<⽬标列>实现对关系表的投影操作,WHERE <条件表达式>实现对关系表的元组选择操作。
当前Student表的全部数据:下⾯将会对该表进⾏⼀系列查询操作3.4.2 从单表读取指定列SELECT <⽬标列>[,<⽬标列>...]FROM <表名>;例3-191. 从Student表中读取学⽣的学号、姓名、专业三列数据:SELECT StudentID, StudentName, MajorFROM Student;GO2. 从Student表中查询所有列数据:SELECT *FROM Student;GO3. 只查Major数据:SELECT MajorFROM Student;GO倘若只想查出不同的专业名称,可以消除重复⾏,⽤DISTINCT:SELECT DISTINCT MajorFROM Student;GO3.4.3 从单表读取指定⾏SELECT *FROM <表名>WHERE <条件表达式>;例3-20从Student表中读取专业为“软件⼯程”,性别为“男”的学⽣数据:SELECT *FROM StudentWHERE Major='软件⼯程' AND StudentGender='男';GO3.4.4 从单表读取指定⾏和列SELECT <⽬标列> [,<⽬标列>...]FROM <表名>WHERE <条件表达式>;例3-21从Student表中读取专业为“软件⼯程”,性别为“男”的学⽣的学号、姓名、性别、专业四列的数据:SELECT StudentID, StudentName, StudentGender, MajorFROM StudentWHERE Major='软件⼯程' AND StudentGender='男';GO3.4.5 WHERE⼦句条件在WHERE⼦句条件中,可以⽤BETWEEN...AND关键词来限定列值范围,还可以⽤关键字LIKE与通配符来限定查询范围,NOT LIKE⽤于给出不在范围的条件。
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语句练习练习5. 1. 2: 基于不断滚动的电影数据库的实例:Movie( 电影名title,拍摄年代year ,长度length, inColor ,制片厂名studioName, 制片人证书号producerC# )StarsIn(电影名movieTitle,拍摄年份movieYear ,影星名starName) MovieStar (姓名name,地址address,性别gender ,生日birthdate) MovieExec( 姓名name,地址address ,证书号cert # ,净资产netWorth ) Studio(姓名name, 地址address,总裁证书号presC# )请写出下列SQL 查询语句:* ( a) 找出米高梅制片公司(MGM studios)的地址。
SELECT address AS Studio_AddressFROM Studio WHERE name = 'MGM';( b) 找出桑德拉·布洛克( Sandra Bullock ) 的出生日期( birthdate) 。
SELECT birthdate AS Star_BirthdateFROM MovieStar WHERE name = 'Sandra Bullock';* ( c) 找出在1980 年拍摄过电影的所有影星, 或者拍摄过电影名中含有“Love”的电影的所有影星。
SELECT starName FROM StarsInWHERE movieYear = 1980 OR movieTitle LIKE '%Love%';( d) 找出净资产至少1 000 万美元的所有行政长官。
SELECT name AS Exec_NameFROM MovieExec WHERE netWorth >= 10000000;( e) 找出所有的男影星或者是住址中含有Malibu 的影星。
SQL语句练习及参考答案SQL 语句练习1.设学⽣选课数据库有关系S (sno,sname,age,sex )、SC (sno,cno,grade )和C(cno,cname,teacher ),分别表⽰学⽣、选课和课程,sno 代表学号,sname 代表学⽣姓名,age 代表年龄,sex 代表性别,grade 代表成绩,cno 代表课程号,teacher 代表任课教师。
试完成表⽰下列查询。
(1)检索年龄⼤于21的男学⽣学号(sno)和姓名(sname)。
(2)建⽴性别只能为“男”、“⼥”的约束。
(3)创建⼀个视图v1,该视图⽤来查询学⽣的选课情况,要求包含:学⽣姓名(sname),课程名(cname),任课教师teacher 和成绩grade 。
(4)检索选修课程号为k1和k5的学⽣学号(sno)。
(5)检索全部学⽣都选修的课程的课程号(cno)和课程名(cname)。
(6)删除所有男同学的选课记录。
1.(1)select sno,snae from s where sex=’男’ and age>21 (2)alter table s add constraint c1 check sex in (‘男’,’⼥’)(3)create view v1 as select sname,cname,teacher,grade from s,sc,c where s.sno=sc.sno and/doc/62176c89fe4733687e21aaca.html o=/doc/62176c89fe4733687e21aaca.html o (4)select sno fromsc sc1 where cno=’k1’ and exists (se lect * fromsc sc2 where sc1.sno =sc2.sno and/doc/62176c89fe4733687e21aaca.html o=’k5’)(5)select cno,cnam from c where not exists (select * from s where not exists (select * from sc where/doc/62176c89fe4733687e21aaca.html o=/doc/62176c89fe4733687e21aaca.html o and s.sno=sc.sno)(6)delete from sc where sno in (select sno from s where sex=’男’)或delete sc from sc,s where s.sno=sc.sno and sex=’男’2.设图书借阅数据库有关系图书(图书编号,书名,作者,出版社,出版时间,图书类别)、读者(读者编号,姓名,读者类别)和借阅(读者编号, 图书编号, 借阅⽇期,还期)。
数据库sql查询语句练习4_习题_结果(单世民)图书_习题现有图书管理数据库的三个关系模式:图书(总编号, 分类号, 书名, 作者, 出版单位, 单价)读者(借书证号, 单位, 姓名, 性别, 职称, 地址)借阅(借书证号, 总编号, 借书⽇期)具体数据为:读者:根据以上描述,请完成:DDL1.写出创建上述表的语句命令:create table图书(总编号varchar(7)primary key,分类号varchar(8),书名varchar(18),作者varchar(8),出版单位varchar(18),单价float)create table读者(借书证号varchar(4)primary key,单位varchar(7),姓名varchar(8),性别varchar(2),职称varchar(8),地址varchar(18))create table借阅(借书证号varchar(3),总编号varchar(6),借书⽇期date,primary key(借书证号,总编号,借书⽇期))DML2.给出插⼊上述数据的insert语句命令:insert into图书values('445501','TP3/12','数据库导论','王强','科学出版社', insert into图书values('445502','TP3/12','数据库导论','王强','科学出版社', insert into图书values('445503','TP3/12','数据库导论','王强','科学出版社', insert into图书values('332211','TP5/10','计算机基础','李伟','⾼等教育出版社', insert into图书values('112266','TP3/12','FoxBASE','张三','电⼦⼯业出版社', insert into图书values('665544','TS7/21','⾼等数学','刘明','⾼等教育出版社', insert into图书values('114455','TR9/12','线性代数','孙业','北京⼤学出版社', insert into图书values('113388','TR7/90','⼤学英语','胡玲','清华⼤学出版社', insert into图书values('446601','TP4/13','数据库基础','马凌云','⼈民邮电出版社',insert into图书values('446602','TP4/13','数据库基础','马凌云','⼈民邮电出版社',insert into图书values('446603','TP4/13','数据库基础','马凌云','⼈民邮电出版社',insert into图书values('449901','TP4/14','FoxPro⼤全','周虹','科学出版社', insert into图书values('449902','TP4/14','FoxPro⼤全','周虹','科学出版社', insert into图书values('118801','TP4/15','计算机⽹络','黄⼒钧','⾼等教育出版社',insert into图书values('118802','TP4/15','计算机⽹络','黄⼒钧','⾼等教育出版社',insert into读者values('111','信息系','王维利','⼥','教授','1号楼')insert into读者values('112','财会系','李⽴','男','副教授','2号楼')insert into读者values('113','经济系','张三','男','讲师','3号楼')insert into读者values('114','信息系','周华发','男','讲师','1号楼')insert into读者values('115','信息系','赵正义','男','⼯程师','1号楼')insert into读者values('116','信息系','李明','男','副教授','1号楼')insert into读者values('117','计算机系','李⼩峰','男','助教','1号楼')insert into读者values('118','计算机系','许鹏飞','男','教授','1号楼')insert into读者values('119','计算机系','刘⼤龙','男','副教授','4号楼') insert into读者values('120','国际贸易','李雪','男','副教授','4号楼') insert into读者values('121','国际贸易','李爽','⼥','讲师','4号楼') insert into读者values('122','国际贸易','王纯','⼥','讲师','4号楼') insert into读者values('123','财会系','沈⼩霞','⼥','助教','2号楼') insert into读者values('124','财会系','朱海','男','讲师','2号楼')insert into读者values('125','财会系','马英明','男','副教授','2号楼')insert into借阅values('112','445501','1997-3-19')insert into借阅values('125','332211','1997-2-12')insert into借阅values('111','445503','1997-8-21')insert into借阅values('112','112266','1997-3-14')insert into借阅values('114','665544','1997-10-21')insert into借阅values('120','114455','1997-11-2')insert into借阅values('120','118801','1997-10-18')insert into借阅values('119','446603','1997-12-12')insert into借阅values('112','449901','1997-10-23')insert into借阅values('115','449902','1997-8-21')insert into借阅values('118','118801','1997-9-10')单表查询3.找出姓李的读者姓名和所在单位命令:select姓名,单位from读者where姓名like'李%'结果:4.列出图书库中所有藏书的书名以及出版单位命令:select distinct书名,出版单位from图书结果:5.查找出⾼等教育出版社的所有图书及单价,结果按单价降序排列命令:select distinct书名,单价from图书where出版单位='⾼等教育出版社' order by单价desc结果:6.查找出价格位于10元和20元之间的图书种类,结果按出版单位和单价升序排序命令:select*from图书where单价between 10 and 20 order by出版单位,单价结果:7.找出书名以“计算机”打头的所有图书和作者命令:select distinct书名,作者from图书where书名like'计算机%'结果:8.检索同时接借阅了总编号为112266和449901两本书的借书证号命令:select借书证号from借阅where总编号='112266'intersect select借书证号from借阅where总编号='449901'结果:9.求科学出版社图书的最⾼单价、最低单价和平均单价命令:select MAX(单价)最⾼单价,MIN(单价)最低单价,AVG(单价)平均单价from 图书where出版单位='科学出版社'结果:聚合查询10.找出藏书中各个出版社的册数、价值总额命令:select出版单位,COUNT(*)册数,SUM(单价)价值总额from图书group by 出版单位结果:11.求出各个出版社图书的最⾼价格、最低价格和册数命令:select出版单位,COUNT(*)册数,max(单价)最⾼价格,MIN(单价)最低价格from图书group by出版单位结果:多表查询12.查找所有借了书的读者的姓名以及所在单位命令:select distinct姓名,单位from读者join借阅on读者.借书证号=借阅.借书证号结果:13.找出李某所借图书的所有图书的书名及借书⽇期命令:select姓名,书名,借书⽇期from读者join借阅on读者.借书证号=借阅.借书证号join图书on借阅.总编号=图书.总编号where 姓名like'李%'结果:14.查询1997年10⽉以后借书的读者借书证号、姓名和单位命令:select distinct读者.借书证号,姓名,单位from借阅join读者on借阅.借书证号=读者.借书证号whereDATEDIFF(MONTH,'1977-10-1',借书⽇期)>=0结果:15.找出借阅了FoxPro⼤全⼀书的借书证号命令:select借书证号from借阅join图书on借阅.总编号=图书.总编号where 书名='FoxPro⼤全'结果:16.分别找出借书⼈次超过1⼈次的单位及⼈次数命令:select单位,COUNT(*)⼈次数from借阅join读者on借阅.借书证号=读者.借书证号group by单位having COUNT(*)>1结果:⼦查询17.找出与赵正义在同⼀天借书的读者姓名、所在单位以及借书⽇期命令:select姓名,单位,借书⽇期from读者join借阅on读者.借书证号=借阅.借书证号where借书⽇期=(select借书⽇期from借阅join读者on借阅.借书证号=读者.借书证号where姓名='赵正义')结果:18.查询1997年7⽉以后没有借书的读者借书证号、姓名以及单位命令:select借书证号,姓名,单位from读者except select借阅.借书证号,姓名,单位from借阅join读者on借阅.借书证号=读者.借书证号where DATEDIFF(DAY,'1997-7-1',借书⽇期)>=0结果:19.求信息系当前借阅图书的读者⼈次数命令:select COUNT(*)⼈次数from借阅join读者on借阅.借书证号=读者.借书证号where单位='信息系'结果:20.找出当前⾄少借阅了2本书的读者及所在单位命令:select姓名,单位from借阅join读者on借阅.借书证号=读者.借书证号group by读者.姓名,单位having COUNT(*)>=2结果:21.查询经济系是否还清所有图书。
一、聚合函数练习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 总成绩from A_studentcoursewhere sno ='S001'6、统计<学生选修信息表>,查询课程号为”C001”的课程的最高成绩select max(score) as 最高成绩from A_studentcoursewhere cno='C001'7、统计<学生信息表>,查询所有学生中的最大年龄是多少select 2008-min(yearofbirth) as 最大年龄from A_studentinfo二、单表查询练习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、查询<学生信息表>,查询姓名长度为三个字,姓“李”,且最后一个字是“强”的全部学生信息。
数据库中SQL查询语句习题含答案查询问题:设教学数据库Education 有三个关系:学生关系S (SNO ,SNAME ,AGE ,SEX ,SDEPT );学习关系SC (SNO ,CNO ,GRADE );课程关系C (CNO ,CNAME ,CDEPT ,TNAME )(1)检索计算机系的全体学生的学号,姓名和性别;(2)检索学习课程号为C2的学生学号与姓名;(3)检索选修课程名为“DS ”的学生学号与姓名;(4)检索选修课程号为C2或C4的学生学号;(5)检索至少选修课程号为C2和C4的学生学号;(6)检索不学C2课的学生姓名和年龄;(7)检索学习全部课程的学生姓名;(8)查询所学课程包含学生S3所学课程的学生学号。
(1)检索计算机系的全体学生的学号,姓名和性别; SELECT Sno ,Sname ,Sex FROM SWHERE Sdept =’CS ’;(2)检索学习课程号为C2的学生学号与姓名;(3)检索选修课程名为“DS ”的学生学号与姓名本查询涉及到学号、姓名和课程名三个属性,分别存放在S 和C 表中,但S 和C 表没有直接联系,必须通过SC 表建立它们二者的联系。
C → SC → S 基本思路:(1)首先在C 表中找出“DS ”课程的课程号Cno ;(2)然后在SC 表中找出Cno 等于第一步给出的Cno 集合中的某个元素Cno ;(3)最后在S 关系中选出Sno 等于第二步中Sno 集合中某个元素的元组,取出Sno 和Sname 送入结果表列。
SELECT Sno ,Sname FROM SWHERE Sno IN (SELECT Sno FROM SCWHERE Cno IN (SELECT Cno FROM CWHERE Cname=‘DS ’));(4)检索选修课程号为C2或C4的学生学号; SELECT Sno FROM SCWHERE Cno=‘C2’ OR Cno=‘C4’;(5)检索至少选修课程号为C2和C4的学生学号; SELECT SnoFROM SC X ,SC YWHERE X.Sno=Y.Sno AND/doc/d33e82944b7302768e9951e79b89680202d86b33.html o=‘C2’ AND /doc/d33e82944b7302768e9951e79b89680202d86b33.html o=‘C4’;(6)检索不学C2课的学生姓名和年龄;(7)检索学习全部课程的学生姓名;在表S 中找学生,要求这个学生学了全部课程。
实验一 SQL语言的使用一相关知识SQL语言由4部分组成:数据定义语言DDL、数据操纵语言DML、数据控制语言DCL 和其他,其功能如下:(1)数据定义语言DDL:主要用于定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引等,扩展的DDL还包括存储过程、函数、对象、触发器等的定义。
(2)数据操纵语言DML:主要用于对数据库中的数据进行检索和更新两大类操作,其中更新操作包括插入、删除和更新数据。
(3)数据控制语言DCL:主要用于对数据库中的对象进行授权、用户维护(包括创建、修改和删除)、完整性规则定义和事务定义等。
(4)其他:主要是嵌入式SQL语言和动态SQL语言的定义,规定了SQL语言在宿主语言中使用的规则。
扩展的SQL还包括数据库数据的重新组织、备份和回复等。
二数据操纵语言练习2.1 订单管理数据库订单管理数据库由5张表组成,分别为员工表、客户表、商品表、订单主表和订单明细表。
员工表中记录当前销售公司所有的员工详细信息,客户表中记录与当前销售公司有业务往来的客户单位信息,商品表中记录当前销售公司可销售的商品,客户每次的购买活动形成一条订单记录,并指定一名销售公司员工对其进行负责,一个订单可能同时购买多种商品,所以订单主表中只记录以订单为单位的相关信息,而订单明细中再记录具体商品的销售情况。
2.2 实验内容2.2.1 查询操作2.2.1.1 单表查询(1)查询全部职工的基本信息(2)查询所有职工的部门、职工号、姓名和薪水(3)查询全体职工的姓名、年龄、所属部门,并用汉语显示表头信息(4)查询1973年出生且为职员的员工信息(5)查询业务科或财务科的职工姓名、性别和所在部门,仅显示前面5位职工(6)查询薪水为2000或4000的职工编号、姓名、所在部门和薪水(7)查询薪水在3000~4000的职工姓名和薪水(8)查询薪水不在3000~4000的职工姓名和薪水(9)查询所有姓张的职工姓名、所属部门和性别(10)查询所有姓张且全名为三个汉字的职工姓名(11)查询既不在业务科也不在财务科的职工姓名、性别和所在部门(12)查询1991年被雇佣的职工号、姓名、性别、电话号码、出生日期以及年龄(13)查询6月出生的员工编码、姓名、出生日期,并按出生日期的降序输出(14)查询职工工资最高的前10%的职工编号、职工姓名和工资(15)查询每个业务员的订单数量(16)统计在业务科工作且在1973年或1967年出生的员工人数和平均工资(17)统计每种商品的销售数量和金额,并按销售金额的升序排序输出(18)查询订单中至少包含3种(含3种)以上商品的订单编号及订购次数,且订购的商品数量在3件(含3件)以上。
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)。
一、创建名为“student”的表,结构见表1,内容见表2表1 student表结构字段名类型宽度学号字符型10姓名字符型10性别字符型 4出生日期日期型8专业字符型20年级数值型10表2 student表二、练习SQL查询语句——基础的select格式: select 字段名 from 表名1、写出查找student表中所有字段的语句,并在命令窗口测试2、写出查找student表中学号的语句,并在命令窗口测试3、写出查找student表中姓名的语句,并在命令窗口测试4、写出查找student表中性别的语句,并在命令窗口测试5、写出查找student表中出生日期的语句,并在命令窗口测试6、写出查找student表中专业的语句,并在命令窗口测试7、写出查找student表中年级的语句,并在命令窗口测试8、写出查找student表中学号和姓名的语句,并在命令窗口测试(注意逗号是英文状态)9、写出查找student表中学号、姓名和性别的语句,并在命令窗口测试10、写出查找student表中学号、姓名、性别和出生日期的语句,并在命令窗口测试11、写出查找student表中学号、姓名、性别、出生日期和专业的语句,并在命令窗口测试12、写出查找student表中学号、姓名、性别、出生日期、专业和年级的语句,并在命令窗口测试三、练习SQL查询语句——where条件查询格式: select 字段名 from 表名 where 条件1、查找student表中学号是101001的学生,写出语句,并在命令窗口测试2、查找student表中李玲的个人信息,写出语句,并在命令窗口测试3、查找student表中所有的男学生,写出语句,并在命令窗口测试4、查找student表中的在1992年3月1日(含)之后出生的学生,写出语句,并在命令窗口测试5、查找student表中信息管理专业的学生,写出语句,并在命令窗口测试6、查找student表中2012级的学生,写出语句,并在命令窗口测试四、练习SQL查询语句——where条件查询AND OR格式: select 字段名 from 表名 where 条件1 and/or 条件21、查找student表中学号为121001和131005的学生信息,写出语句,并在命令窗口测试2、查找student表中李泽田和王海东的个人信息,写出语句,并在命令窗口测试3、查找student表中工商管理专业的男生信息,写出语句,并在命令窗口测试4、查找student表中在1992年和1993年出生的学生,写出语句,并在命令窗口测试5、查找student表中信息管理专业和工商管理专业的女学生,写出语句,并在命令窗口测试6、查找student表中2012级和2013级中1993年出生的学生,写出语句,并在命令窗口测试五、练习SQL查询语句——where条件查询like格式: select 字段名 from 表名 where 字段名like 套式1、查找student表中姓王的学生信息,写出语句,并在命令窗口测试2、查找student表中姓王和姓贾的学生信息,写出语句,并在命令窗口测试3、查找student表中姓王、姓贾和姓李的学生信息,写出语句,并在命令窗口测试4、查找student表中姓名中含“泽”的学生信息,写出语句,并在命令窗口测试5、查找student表中姓名中含“文”的学生信息,写出语句,并在命令窗口测试6、查找student表中姓名中最后1个字是“玲”的学生信息,写出语句,并在命令窗口测试7、查找student表中姓名中最后1个字是“文”的学生信息,写出语句,并在命令窗口测试8、查找student表中姓名有3个字,中间的字是“文”的学生,写出语句,并在命令窗口测试9、查找student表中姓王的男生信息,写出语句,并在命令窗口测试10、查找student表中姓王和姓李的女生信息,写出语句,并在命令窗口测试11、查找student表中姓名中含“文”的女生信息,写出语句,并在命令窗口测试六、练习SQL查询语句——where条件查询between格式: select 字段名 from 表名 where 字段名between 值1 and 值2 1、查找student表中在1992年出生的学生,写出语句,并在命令窗口测试2、查找student表中在1992年和1993年出生的学生,写出语句,并在命令窗口测试3、查找student表中在2010级、2011级、2012级的学生,写出语句,并在命令窗口测试七、练习SQL查询语句——where条件查询order by格式: select 字段名 from 表名 where 条件 order by 字段名 asc/desc 1、把student表中的学生信息按学号降序排列显示,写出语句,并在命令窗口测试2、把student表中的学生信息按姓名降序排列显示,写出语句,并在命令窗口测试3、把student表中的学生信息按姓名升序排列显示,写出语句,并在命令窗口测试4、把student表中的学生信息按年龄升序排列显示,写出语句,并在命令窗口测试5、把student表中的学生信息按年龄降序排列显示,写出语句,并在命令窗口测试6、查找student表中所有的男生,并按学号降序排列,写出语句,并在命令窗口测试6、查找student表中所有的女生,并按姓名升序排列,写出语句,并在命令窗口测试7、查找student表中的在1992年出生的学生,并按年龄降序排列,写出语句,并在命令窗口测试8、查找student表中信息管理专业的学生,并按照姓名降序排列,写出语句,并在命令窗口测试9、把student表中的学生信息按性别分类显示,男生在前,女生在后,男生和女生,各自按照姓名升序排列,写出语句,并在命令窗口测试八、练习SQL查询语句——where条件查询count格式: select count(*) from 表名 where 条件1、统计student表中的学生总人数,写出语句,并在命令窗口测试2、统计student表中男生人数,写出语句,并在命令窗口测试3、统计student表中姓王的人数,写出语句,并在命令窗口测试。
查询语句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查询语句大全及实例1.提取查询(SELECT)SELECT 语句用于从数据库表中提取数据:实例:从"Persons"表中提取数据:SELECT * FROM Persons3.排序(ORDER BY)ORDER BY 语句用于在查询结果中对取出的数据排序:实例:依据金额(Amount)和日期(OrderDate)字段,对"Orders"表中的记录进行从高到低(desc)排序:SELECT * FROM Orders ORDER BY Amount DESC, OrderDate4.过滤(WHERE)WHERE 子句通常用于在 SELECT、UPDATE 和 DELETE 语句中来过滤选择的数据:5.上下文过滤(HAVING)HAVING 子句仅对聚合函数(AVG,COUNT,SUM 等)出现的结果进行过滤:实例:从"Orders"表中选择超过 5000 的订单:SELECT * FROM OrdersHAVING SUM(Amount) > 50006.插入(INSERT)INSERT 语句用于向数据库插入新记录:实例:向"Persons"表中插入一条新记录:INSERT INTO Persons (firstname, lastname, age, address, city)VALUES ('Glenn', 'Quagmire', 33, 'Coolsville', 'Anchorage');7.更新(UPDATE)UPDATE 语句用于更新数据库中的记录:9.创建数据库(CREATE DATABASE)CREATE DATABASE 语句用于创建新的数据库:实例:创建新的数据库“MyDataBase”:CREATE DATABASE MyDataBase实例:在“MyDataBase”中创建一个新表“Persons”:CREATE TABLE Persons(PersonID int,LastName varchar(255),FirstName varchar(255),Address varchar(255),City varchar(255))。
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(Structured Query Language)是一种用于管理关系数据库系统的标准化语言。
它被广泛应用于数据管理和数据操作,是开发和维护数据库的重要工具。
为了提高对SQL语句的熟练程度,下面将提供一些SQL语句练习题,帮助读者巩固和扩展SQL的应用能力。
练习题一:查询学生表中所有学生的姓名和年龄。
```sqlSELECT 姓名, 年龄 FROM 学生表;```练习题二:查询学生表中年龄大于等于18岁的学生的姓名和年龄。
```sqlSELECT 姓名, 年龄 FROM 学生表 WHERE 年龄 >= 18;```练习题三:查询学生表中姓“张”的学生的姓名和年龄。
```sqlSELECT 姓名, 年龄 FROM 学生表 WHERE 姓名 LIKE '张%';```练习题四:查询学生表中年龄在18到20岁之间的学生的姓名和年龄。
```sqlSELECT 姓名, 年龄 FROM 学生表 WHERE 年龄 BETWEEN 18 AND 20;```练习题五:查询学生表中年龄最大的学生的姓名和年龄。
```sqlSELECT 姓名, 年龄 FROM 学生表 ORDER BY 年龄 DESC LIMIT 1;```练习题六:查询学生表中每个班级的学生人数。
```sqlSELECT 班级, COUNT(*) AS 人数 FROM 学生表 GROUP BY 班级;```练习题七:查询学生表中每个班级的平均年龄。
```sqlSELECT 班级, AVG(年龄) AS 平均年龄 FROM 学生表 GROUP BY 班级;```练习题八:查询学生表中每个班级的男生人数和女生人数。
```sqlSELECT 班级, SUM(CASE WHEN 性别 = '男' THEN 1 ELSE 0 END) AS 男生人数, SUM(CASE WHEN 性别 = '女' THEN 1 ELSE 0 END) AS 女生人数FROM 学生表GROUP BY 班级;```练习题九:查询学生表中没有选修任何课程的学生的姓名。
SQL巩固测试题1.找出供应商名称,所在城市select 公司名称,城市from 供应商2.找出华北地区能够供应海鲜的所有供应商列表。
select 公司名称from 供应商aleft join 产品b on a.供应商ID = b.供应商IDleft join 类别c on b.类别ID = c.类别IDwhere a.地区= '华北' and c.类别名称= '海鲜'3.找出订单销售额前五的订单是经由哪家运货商运送的。
select c.订单ID,a.公司名称,round(c.单价*c.数量*(1-c.折扣),2) as 销售额from 运货商a left join 订单b on a.运货商ID = b.运货商left join 订单明细c on b.订单ID = c.订单IDorder by 销售额desc limit 54.找出按箱包装的产品名称。
select 产品名称from 产品where 单位数量like'%箱%'5.找出重庆的供应商能够供应的所有产品列表。
select 产品名称from 产品where 供应商ID in(select 供应商ID from 供应商where 城市= '重庆')6.找出雇员郑建杰所有的订单并根据订单销售额排序。
select a.订单ID,round(sum(a.单价*a.数量*(1-a.折扣)),2) as 销售额from 订单明细a left join 订单b on a.订单ID = b.订单IDleft join 雇员c on b.雇员ID = c.雇员IDwhere c.姓氏= '郑' and c.名字= '建杰'group by 订单IDorder by 销售额desc7.找出订单10284的所有产品以及订单金额,运货商。
select b.订单ID,产品名称,round(a.单价*a.数量*(1-a.折扣),2) as 订单金额,c.公司名称from 订单明细a,订单b,运货商c,产品dwhere a.订单ID = b.订单IDand b.运货商= c.运货商IDand a.产品ID = d.产品IDand a.订单ID = 102488.建立产品与订单的关联。
select * from 产品a,订单b,订单明细cwhere a.产品ID = c.产品IDand b.订单ID = c.订单ID9.计算销量前10位的订单明细,结果集返回订单ID,订单日期,公司名称,发货日期,销售额,并排序select distinct a.订单ID,b.订购日期,c.公司名称,b.发货日期,round(a.单价*a.数量*(1-a.折扣),2) as 订单金额from 订单明细a,订单b,客户c,产品dwhere a.订单ID = b.订单IDand c.客户ID = b.客户IDand a.产品ID = d.产品IDorder by a.数量desclimit 1010.按年度统计销售额select year(b.订购日期) as 年份,round(sum(a.单价*a.数量*(1-a.折扣)),2) as 销售额from 订单明细a,订单bwhere a.订单ID = b.订单IDgroup by year(b.订购日期)------以上开始时间一个半小时11.查询供应商中能够供应的产品样数最多的供应商。
select a.公司名称,count(b.产品名称) as 供应产品数量from 供应商a,产品bwhere a.供应商ID = b.供应商IDgroup by a.公司名称order by 供应产品数量desclimit 112.查询产品类别中包含的产品数量最多的类别。
select 类别名称,count(b.产品ID) as 产品数量from 类别a,产品bwhere a.类别ID = b.类别IDgroup by 类别名称order by 产品数量desclimit 113.找出所有的订单中经由哪家运货商运货次数最多。
select a.公司名称,count(b.运货商) as 运货商运货次数from 运货商a,订单bwhere a.运货商ID = b.运货商group by a.公司名称order by 运货商运货次数desclimit 114.按类别,产品分组,统计销售额。
select a.类别名称,b.产品名称,round(sum(d.单价*d.数量*(1-d.折扣)),2) as 销售额from 类别a,产品b,订单c,订单明细dwhere a.类别ID = b.类别IDand b.产品ID = d.产品IDand c.订单ID = d.订单IDgroup by a.类别名称,b.产品名称15.查询海鲜类别最大的一笔订单。
select d.类别名称,a.产品名称,b.订单ID,round(c.单价*c.数量*(1-c.折扣),2) as 销售额from 产品a,订单b,订单明细c,类别dwhere a.产品ID = c.产品IDand b.订单ID = c.订单IDand a.类别ID = d.类别IDand d.类别名称= '海鲜'order by 销售额desclimit 116.按季度统计销售量select year(b.订购日期) as 年份,QUARTER(b.订购日期) as 季度,round(sum(a.数量),2) as 销量from 订单明细a,订单bwhere a.订单ID = b.订单IDgroup by 年份,季度order by 年份,季度17.查出订单总额超出5000的所有订单,客户名称,客户所在地区。
select b.订单ID,c.公司名称,c.地区,round(sum(a.单价*a.数量*(1-a.折扣)),2) as 订单总额from 订单明细a,订单b,客户cwhere a.订单ID = b.订单IDand b.客户ID = c.客户IDgroup by b.订单ID,c.公司名称,c.地区having 订单总额> 500018.查询哪些产品的年度销售额低于2000select year(订购日期) as 年份,c.产品名称,round(sum(a.单价*a.数量*(1-a.折扣)),2) as 年度销售额from 订单明细a,订单b,产品cwhere a.订单ID = b.订单IDand a.产品ID = c.产品IDgroup by year(订购日期),c.产品名称having 年度销售额< 200019.查询所有订单ID开头为102的订单select * from 订单where 订单ID like'102%'20.查询所有“中硕贸易”,“学仁贸易”,“正人资源”,“中通”客户的订单,(要求使用in函数)select * from 订单aleft join 客户b on a.客户ID = b.客户IDwhere b.公司名称in('中硕贸易','学仁贸易','正人资源','中通')-----以上考试时间一个班销售21.查询所有订单中月份不是单数的订单。
select * from 订单where month(订购日期)%2 = 122.分别各写一个查询,得到订单中折扣为15%,20%的所有订单,并将两个查询再组成一个。
select a.* from 订单a,订单明细bwhere a.订单ID = b.订单IDand cast(b.折扣as char) in('0.15','0.2')23.找出在入职时已超过30岁的所有员工信息SELECT 雇员.* from 雇员where YEAR(雇用日期)-YEAR(出生日期)> 3024.找出所有单价大于30的产品(附加要求,产品类别,供应商作为参数,当产品类别和供应商都为空的时候,nofilter)select b.产品名称,c.类别名称,d.公司名称,b.单价from 产品b,类别c, 供应商dwhere b.类别ID = c.类别IDand b.供应商ID = d.供应商IDand b.单价> 3025.查询所有库存产品的总额,并按照总额排序select *,产品.单价*产品.库存量as 库存总额from 产品order by 库存总额desc26.检索出职务为销售代表的所有订单中,每笔订单总额低于2000的订单明细,以及相关供应商名称。
select a.*,e.公司名称,round(a.单价*a.数量*(1-a.折扣),2) as 订单总额from 订单明细a,订单b,雇员c,产品d,供应商ewhere a.订单ID = b.订单IDand b.雇员ID = c.雇员IDand a.产品ID = d.产品IDand d.供应商ID = e.供应商IDand c.职务in('销售代表')GROUP BY e.公司名称having 订单总额< 200027.检索出向艾德高科技提供产品的供应商所在的城市。
select c.公司名称as 客户名称,e.公司名称as 供应商名称,e.城市from 订单明细a,订单b,客户c,产品d,供应商ewhere a.订单ID = b.订单IDand b.客户ID = c.客户IDand a.产品ID = d.产品IDand d.供应商ID = e.供应商IDand c.公司名称= '艾德高科技'28.计算每一笔订单的发货期(从订购到发货),运货期(从发货到到货)的时长,并按照发货期从长到短的顺序进行排序。
select 订单ID,DATEDIFF(发货日期,订购日期) as发货期,DATEDIFF(到货日期,发货日期) as 运货期from 订单order by 发货期desc29.将产品表和运货商两个无关的表整合为一个表select d.*,c.*from 订单明细a,订单b,运货商c,产品dwhere a.订单ID = b.订单IDand b.运货商= c.运货商IDand a.产品ID = d.产品ID30.获取在北京工作并向福星制衣厂股份有限公司发送过订单的职工名称。
select distinct b.姓氏,b.名字,concat(b.姓氏,b.名字) as 姓名from 订单a,雇员b,客户cwhere a.雇员ID = b.雇员IDand a.客户ID = c.客户IDand b.城市= '北京'and c.公司名称= '福星制衣厂股份有限公司'。