【数据库】数据库查询之关键字except,having
数据库系列主要介绍工作和学习中遇到的一些问题,以下举例介绍:
假设有个学生成绩表 grade, 有4列:id 主键标识列,学生姓名 student, 课程course, 考试成绩 score, 表数据如下:
id | student | course | score |
1 | 张三 | 英语 | 70 |
2 | 李四 | 英语 | 81 |
3 | 王五 | 英语 | 60 |
4 | 赵六 | 英语 | 90 |
5 | 张三 | 测试 | 50 |
6 | 王五 | 测试 | 75 |
7 | 张三 | 开发 | 80 |
8 | 王五 | 开发 | 90 |
9 | 赵六 | 开发 | 85 |
10 | 张三 | 数学 | 85 |
11 | 王五 | 数学 | 70 |
1.如果我们想要查询所有课程成绩都大于80分的学生姓名,应该怎么查询?
2.如果我们想要查询选择课程数量大于或等于2的学生姓名,应该怎么查询?
解决思路:
一、创建表格
create table grade (
id int identity(1,1),
student varchar(20),
course varchar(20),
score int
);
二、插入数据
insert into grade values('张三','英语',70);
insert into grade values('李四','英语',81);
insert into grade values('王五','英语',60);
insert into grade values('赵六','英语',90);
insert into grade values('张三','测试',50);
insert into grade values('王五','测试',75);
insert into grade values('张三','开发',80);
insert into grade values('王五','开发',90);
insert into grade values('赵六','开发',85);
insert into grade values('张三','数学',85);
insert into grade values('王五','数学',70);
三、查询数据
问题1.分析:查询的是学生姓名student,条件是每科的考试分数都大于80分。
我们可以逆向考虑,查询分数小于等于80分的学生姓名
select distinct student from grade where score<=80
因为学生有多门课程,当学生多门课程的分数满足条件时,会出现重复数据,通过distinct关键词过滤重复数据
只要有一门课程的分数小于等于80,就是我们要排除的数据,所以我们可以通过联合查询方式差集except进行排除。
查询所有不重复学生记录:
select distinct student from grade;
差集查询:
select distinct student from grade
except
select distinct student from grade where score<=80;
其实except关键词已经有去除重复数据的功能,所以最终可以优化为:
select student from grade
except
select student from grade where score<=80;
如果我不想用差集去查询,是否还有其他方法呢?其实思路是一样的,先查询出分数小于等于80分的学生姓名,然后再排除:
select distinct student from grade where student not in (select student from grade where score<=80);
select student from grade group by student having student not in (select student from grade where score<=80);
select student from grade where student not in (select student from grade where score<=80) group by student;
第二条和第三条查询语句结果是一样的,但是having和where还是有区别,having是分组后筛选,而where是筛选后再分组。
问题2.分析:查询的是学生姓名student,条件是考试的课程大于等于2。
我们知道这里student和course组合是唯一的,所以可以通过对student进行分组,查询到每个学生的课程数量:
select student,COUNT(*) as 课程数量 from grade group by student;
然后可以对分组后的数据列表进行筛选,关键词having
select student from grade group by student having COUNT(*)>=2;
这篇文章主要学习了联合查询中的差集except(oracle数据库是minus),not in 排除方法以及分组group by和分组后筛选having.
【数据库】数据库查询之关键字except,having相关推荐
- mysql关键字使用顺序_MySQL数据库之单表查询中关键字的执行顺序
MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from where group by having order by limit 2 执行顺序 from ...
- mysql数据库查询关键字级别_MySQL数据库之单表查询中关键字的执行顺序
MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from where group by having order by limit 2 执行顺序 from ...
- MySQL 学习笔记(1)— 创建/连接/选择/显示数据库(表) 查询单列(多列/所有列)/查询返回特定的行数 各种排序(单列/多列/降序/组合排序) 过滤数据
本文是对之前学习 MySQL 的一个总结,使用思维导图的方式将涉及到的知识点罗列出来,一方面作为自己对于知识点的归纳,另一方面也便于日后查询. 在该篇文章中将对 MySQL 的基本使用.检索基本数据. ...
- Django模型之数据库操作-查询
六.数据库操作-查询 6.1基础条件查询 1 基本查询 get查询单一结果,如果不存在会抛出模型类.DoesNotExist异常. all查询多个结果.[返回的所有结果是列表] count查询结果数量 ...
- java查看sql视图_数据库的查询与视图
第4章 数据库的查询和视图 4.1.1 选择列 通过SELECT语句的项组成结果表的列. ::= SELECT [ ALL |DISTINCT ] [ TOP n [ PERCENT ] [ WITH ...
- 怎么把php查询到的值显示到下拉框中_RazorSQL for Mac(数据库工具查询) v8.5.0
RazorSQL Mac是一款专门为mac用户推出的数据库管理软件,允许您从一个数据库工具查询,更新,导航和管理所有主要数据库,RazorSQL Mac功能强大还支持SQL的编辑.数据库管理工具,支持 ...
- Linq to Sql: 集成数据库语言查询之一
Linq to Sql: 集成数据库语言查询之一 2007-09-11 11:30:28 来源:天极yesky 作者:随风流月 带您探索"CRUD "操作-创建,接收,更新与删除, ...
- 数据库优化查询的方法以及大访问量到数据库时的优化
一.数据库优化查询的方法 1.使用索引: 应尽量避免全表扫描,首先考虑在where 以及 order by ,group by 涉及的列上建立索引 2.优化SQL语句: 1>通过explai ...
- sql server跨服务器修改数据,SQL Server跨数据库服务器查询和跨表更新的详细操作...
SQL Server数据库跨数据库服务器查询和跨表更新的相关知识是本文我们主要要介绍的内容,接下来我们就通过一个实例来介绍这一过程.实例是这样的:想实现的功能很简单, 在我的本地一个表用来保存省的信息 ...
- 数据库SQL查询练习
--重点推荐使用natural join,inner join!!!,尽量避免使用广义的笛卡尔积 --重点推荐使用natural join,inner join!!!,尽量避免使用广义的笛卡尔积 -- ...
最新文章
- java连接mongodb_java连接mongodb源码解读
- 使用OpenCV执行图像算法(加法和减法)以提亮图像或者使图像变暗
- 模拟器抓取https方法
- 编译IGSTK5.2
- 彻底炸锅了!华为新天才少年出炉:武大94年博士生入选!任正非最新发声:江山代有才人出,不拘一格降人才!...
- Redis-06Redis数据结构--集合Set
- VTK:多重渲染窗口用法实战
- Linux Ftrace 使用
- 阿里mysql笔记_MySQL学习笔记(一)
- mysql并发量_高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!
- 案例33-用户退出功能
- 离散数学——自动生成真值表、主合取范式
- vbs如何调用c语言函数,VBS编程教程 (第6篇)
- 中考计算机考试不合格会怎么样,中考考试细节:信息技术不合格 可申请重考1次...
- 大数据技术方面需要哪些支持
- 手把手系列!大规模预训练语言模型
- 数据挖掘综合应用:贷款产品预测案例
- android编译报错(1)
- hive 复杂数据类型 在数仓中应用(array、map、struct、和其组合应用)
- 《你是我的荣耀》制片人张萌犯受贿罪:被判处有期徒刑三年
热门文章
- chimerge算法matlab实现,有监督的卡方分箱算法
- css 不规则边角_如何实现带有边角的CSS边框
- python增加工作日列_将工作日添加到日期字段
- c语言的数据类型复数型,C语言数据类型
- Java 的混合执行模式
- 选择座位html,影厅座位预览效果(css3)_html/css_WEB-ITnose
- php递归 返回数组,php 递归 无限级分类并返回数组的例子
- 二极管的结构、特性、参数、稳压管的特性和参数
- python 列表、元组、集合、字典、循环遍历数据结构
- sap运维要做哪些工作_患上腰椎间盘突出,适合做哪些工作?不适合做哪些工作?...