SQL数据查询——单表查询(二)
集合查询+单表查询相关实例
- 集合查询
- 1.UNION
- 2.INTERSECT
- 3.EXCEPT
- 相关实例
- 实例1
- 实例2
集合查询
SQL SERVER集合操作主要包括
并操作 UNION
交操作 INERSECT
差操作 EXCEPT
1.UNION
使用UNION能实现多个查询结果的合并,并形成一个完整的查询结果,系统会自动去掉重复的元组
#例:查询年龄不大于19岁的学生以及CS系的学生
SELECT *
FROM Student
WHERE Sage<=19 OR Sdept='CS'; --OR表示取并集#若用UNION并操作,同样可以处理上述问题
SELECT *
FROM Student
WHERE Sage<=19
UNION --UNION实现多个查询结果的合并
SELECT *
FROM Student
WHERE Sdept='CS';
2.INTERSECT
INTERSECT可以将两个查询结果集合实现集合交操作即返回两个查询结果集合中都返回的所有非重复行
#例:查询年龄不大于19岁且为CS系的学生
SELECT *
FROM Student
WHERE Sage<=19 AND Sdept='CS'; --AND表示取交集#若用INTERSECT交操作,同样可以处理上述问题
SELECT *
FROM Student
WHERE Sage<=19
INTERSECT
SELECT *
FROM Student
WHERE Sdept='CS'
3.EXCEPT
EXCEPT实现两个查询结果集的集合差操作即从左查询中返回右查询没有找到的所有非重复行
相关实例
实例1
实验中要使用包括如下三个表的“教学管理”数据库JXGL:
(1)学生表Student,由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在系(Sdept)五个属性组成记作:Student(Sno,Sname,Ssex,Sage,Sdept),其中主码为Sno;
(2)课程表Course,由课程号(Cno)、课程名(Cname)、先修课号(Cpno)、学分(Ccredit)四个属性组成记作:Course(Cno,Cname,Cpno,Ccredit),其中主码为Cno;
(3)学生选课SC,由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成记作:SC(Sno,Cno,Grade),其中主码为(Sno,Cno)。
基于“教学管理”数据库JXGL,试用SQL的查询语句表达下列查询:
(1)检索年龄大于23岁的男学生的学号和姓名
SELECT Sno,Sname
FROM Student
WHERE Sage>23 AND Ssex = '男'//上述也可以用交操作进行查询
SELECT Sno,Sname
FROM Student
WHERE Sage>23
INTERSECT
SELECT Sno,Sname
FROM Student
WHERE Ssex = '男'
(2)检索至少选修两门课程的学生学号
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(Cno)>=2
(3)统计有学生选修的课程门数
SELECT COUNT(DISTINCT Cno)
FROM SC
(4)统计每门课程的学生选修人数,超过3人的课程才统计。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
SELECT Cno,COUNT(*)
FROM SC
GROUP BY Cno
HAVING COUNT(*)>3
ORDER BY COUNT(*) DESC,Cno ASC//Sno在一个组内也可以具有标识作用,因此COUNT(Sno)也可以
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno
HAVING COUNT(Sno)>3
ORDER BY COUNT(Sno) DESC,Cno ASC
(5)检索姓名以王打头的所有学生的姓名和年龄
SELECT Sname,Sage
FROM Student
WHERE Sname LIKE '王%'
(6)在SC中检索成绩为空值的学生学号和课程号
SELECT Sno,Cno
FROM SC
WHERE Grade IS NULL
(7)检索选修2号课程的学生中成绩最高的学生的学号
SELECT TOP (1) WITH TIES Sno
FROM SC
WHERE Cno='2'
ORDER BY Grade DESC
(8)检索学生姓名及其所选修课程的课程号和成绩
SELECT Sname,Cno,Grade
FROM Student,SC
WHERE Student.Sno=SC.Sno --此处用到了连接
(9)检索选修及格的4门以上课程的学生总成绩(不统计不及格的课程),并要求按总成绩的降序排列出来
SELECT Sno,SUM(Grade)
FROM SC
WHERE Grade>=60
GROUP BY Sno
HAVING COUNT(*)>=4
ORDER BY SUM(Grade) DESC
实例2
设有如下4个基本表:
(1)学生表STUDENT,由学号(SNO)、姓名(SNAME)、性别(SEX)、年龄(AGE)、所在班级(CLASS)五个属性组成记作:STUDENT(SNO,SNAME,SEX,AGE,CLASS),其中主码为SNO;
(3)教师表TEACHER,由教师号(TNO)、姓名(TNAME)、性别(SEX)、年龄(AGE)、职称(PROF)、所在系(DEPT)六个属性组成记作:TEACHER(TNO,TNAME,SEX,AGE,PROF,DEPT),其中主码为TNO;
(2)课程表COURSE,由课程号(CNO)、课程名(CNAME)、教授教师号(TNO)三个属性组成记作:COURSE(CNO,CNAME,TNO),其中主码为CNO;
(3)学生选课SC,由学号(SNO)、课程号(CNO)、成绩(GRADE)三个属性组成记作:SC(SNO,CNO,GRADE),其中主码为(SNO,CNO)。
根据表结构实践以下SQL命令操作:
(1)查询选修课程’8105’且成绩在80到90之间的所有记录
SELECT *
FROM SC
WHERE CNO = '8105' AND GRADE BETWEEN 80 AND 90//上述也可以用交操作实现查询
SELECT *
FROM SC
WHERE CNO = '8105'
INTERSECT
SELECT *
FROM SC
WHERE GRADE BETWEEN 80 AND 90
(2)查询成绩为79、89或99的记录
SELECT *
FROM SC
WHERE GRADE IN(79,89,99)
(3)查询9803班的学生人数
SELECT COUNT(SNO)
FROM STUDENT
WHERE CLASS='9803'
(4)查询至少有20名学生选修的并以8开头的课程的平均成绩
SELECT CNO,AVG(GRADE)
FROM SC
WHERE CNO LIKE '8%'
GROUP BY CNO
HAVING COUNT(SNO)>=20
(5)查询最低分大于80,最高分小于95的SNO与平均分
SELECT SNO,AVG(GRADE)
FROM SC
GROUP BY SNO
HAVING MIN(GRADE)>80 AND MAX(GRADE)<95
(6)查询9803班学生所选各课程的课程号及其平均成绩
SELECT SC.CNO,AVG(GRADE)
FROM STUDENT,SC
WHERE STUDENT.CLASS = '9803' AND SC.SNO = STUDENT.SNO
GROUP BY SC.CNO
(7)列出所有教师和同学的姓名、SEX、AGE
SELECT SNAME,SEX,AGE
FROM STUDENT
UNION
SELECT TNAME,SEX,AGE
FROM TEACHER
(8)列出所有任课教师的TNAME和DEPT
SELECT TNAME,DEPT
FROM TEACHER INNER JOIN COURSE ON TEACHER.TNO=COURSE.TNO
(9)列出至少有4名男生的班号
SELECT CLASS
FROM STUDENT
WHERE SEX='男'
GROUP BY CLASS
HAVING COUNT(SEX)>=4
(10)查询不姓“张”的学生记录
SELECT *
FROM STUDENT
WHERE SNAME LIKE '[^张]%'//也可以用NOT关键字实现上述查询
SELECT *
FROM STUDENT
WHERE SNAME NOT LIKE '[张]%'
本文到此结束,如有错误,欢迎大家批评指正。
SQL数据查询——单表查询(二)相关推荐
- [亲测]Oracle查询--单表查询,连接查询(一)
ORACLE查询(单表查询,连接查询) 一.单表查询 (一)简单条件查询 1. 查询水表编号为 30408 的业主记录 ( 精确查询 ) select * from t_owners where wa ...
- 数据库——数据操作——单表查询(9)
单表查询 1.语法 SELECT 字段1,字段2... FROM 表名WHERE 条件GROUP BY fieldHAVING 筛选ORDER BY fieldLIMIT 限制条数 2.关键字的执行优 ...
- mysql查询子表的语句_MySQL基本SQL语句之单表查询、多表查询和子查询
一.简单查询: 1.基本语法: SELECT * FROM tb_name;//查询全部 SELECT field1,field2 FROM tb_name; //投影 SELECT [DISTINC ...
- mysql多表查询sql语句怎么写_MySQL基本SQL语句之单表查询、多表查询和子查询
一.简单查询: 基本语法: SELECT * FROM tb_name;查询全部 SELECT field1,field2 FROM tb_name; 投影 SELECT [DISTINCT] * F ...
- mysql 单表 子查询_MySQL基本SQL语句之单表查询、多表查询和子查询 | 旺旺知识库...
一.简单查询: 基本语法: SELECT * FROM tb_name;查询全部 SELECT field1,field2 FROM tb_name; 投影 SELECT [DISTINCT] * F ...
- mysql 子表 关联查询语句_MySQL基本SQL语句之单表查询、多表查询和子查询
一.简单查询: 基本语法:SELECT * FROM tb_name;查询全部 SELECT field1,field2 FROM tb_name; 投影 SELECT [DISTINCT] * FR ...
- 数据库的简单查询——单表查询
本篇文章主要是数据库的一些简单查询,包括条件查询,模糊查询,分组查询等 准备工作:三张数据表 学生表(student): 课程表(course): 学生选课表(sc): 1.基本查询 (1)查询学生表 ...
- Mysql查询数据(单表查询)
一.查询所有字段 1,SELECT 字段1,字段2,字段3...FROM 表名: 2,SELECT * FROM 表名: 二.查询指定字段 1,SELECT 字段1,字段2,字段3...FROM 表名 ...
- mysql 数据操作 单表查询 where约束 between and or
WHERE约束 where字句中可以使用: 比较运算符:>< >= <= != between 80 and 100 值在80到100之间 >=80 <= ...
最新文章
- npm安装less报错 rollbackFailedOptional: verb npm-session
- javascript的输入与输出
- SQL server判断字符串是否包含某个字符串
- Android官方文章翻译之管理设备苏醒状态(Managing Device Awake State)(二)
- Selenium IDE安装和检查获取的控件路径技巧
- Java 8 Optional不仅用于替换空值
- 钉钉调岗申请单怎么写 钉钉申请调岗的教程
- 今日头条的 ByteSpider,怎么就成了小网站的“噩梦”?
- 最长递增字串的三种做法
- 安卓一步一步搭建组件化
- java中main函数的值是_java基础-main方法
- [转载]jQuery1.6.1源码分析系列
- Paint方法总结(二):着色渲染器Shader
- UDP与TCP报文格式,字段意义
- 武汉大学计算机学院周维,2016—2017 学年度武汉大学 优秀学生干部和社会活动积极分.PDF...
- html 下拉框 value值,HTML Select value用法及代码示例
- 11 wifi6速率_WiFi 6是什么?现在是更换WiFi 6路由器的时候吗?
- 鸿蒙造化塔之秘,鸿蒙之始,天地之秘;生生不息,亘古不易;天为之天,地为之地;生为之续,死为之继;玲珑九转,造化之意;的作者、出处以及相似句子__句子大全...
- Android ImageView: resolveUri failed on bad bitmap uri
- 计算机组成原理 — CPU — 多核处理器体系结构