DBMS-3.2 SQL(2)——DML的SELECT(含WHERE、聚集函数、GROUP BY、HAVING之间的关系)

本文章的素材与知识来自李国良老师和王珊老师。

  • 数据操纵语言DML(Data Manipulation Language)

  • SELECT

一.SELECT的语法与构成

1.语法

2.构成

二.投影

投影操作可以选择表中的若干列,主要体现在SELECT子句后的列表达式。

1.列表达式

2.列的重复行

(1)ALL(默认

(2)DISTINCT

 3.列的别名

(1)给列起的别名唯一作用是:在结果展示的时候将列名换为别名;即使给列起了别名,在SQL语句中也无法使用,只能用列的原名。(与给表起别名要区分开)

4.示例1——查询全部

5.示例2——广义投影

可以对列执行计算

三.选择

选择操作可以筛选满足条件的元组,主要体现在WHERE子句后的查询条件。

1.WHERE子句常用的查询条件

2.比较

(1)对于不等运算符 "!=" 和 "<>" ,两者作用相同。不过有极少数数据库只支持"<>"而不支持"!="

3.确定范围(BETWEEN AND)

(1)BETWEEN AND是包含首尾的

4.确定集合(IN)

5.空值(IS NULL)

(1)"IS"不能用"="代替。只能是"IS NULL"和"IS NOT NULL",不可以"= NULL"和"!= NULL"。

6.逻辑运算(AND、OR、NOT)

7.字符串运算

(1)_ :表示一个任意字符。例如"_a"表示:以a结尾,大小为2个字符的任意字符串。

(2)% :表示任意多个(包括0个和1个)任意字符。例如"%a"表示:以a结尾,大小至少为1个字符的任意字符串。

(3)ESCAPE:用于指定转义标识符,例如"ESCAPE /"则指定"/"为转义标识符,转义标识符后面跟着的任意一个字符就是普通字符,不具有任何含义。常用于匹配串本身就含有"_"或"%"的情况

(4)字符串类型数据在存储时需注意:

  • char类型在插入时会保留首部的空格,自动删除尾部的所有空格。
  • varchar类型在插入时会保留首部和尾部的所有空格。

(5)在字符串匹配上,"like"和"="的差异

  • "like"支持模糊匹配,而"="只支持完全匹配。
  • 对于字符串的完全匹配,使用"like"或"="都可以。

四.聚集

1.常见聚集函数

2.注意事项

(1)指定DISTINCT时,先消除重复取值的列,再用聚集函数作用。默认是ALL,即不去重

(2)SUM()和AVG()只能作用在数值列;MAX()和MIN()作用在非数值列时按字典序排序。

3.示例

五.分组

分组操作使用GROUP BY实现,配合HAVING可以完成分组后的再筛选。

1.定义

2.聚集函数与GROUP BY

(1)不使用GROUP BY进行分组,则聚集函数作用于整个查询结果

(2)使用GROUP BY进行分组,则聚集函数单独作用于每一个组

(3)示例

3.HAVING

(1)HAVING子句用来对GROUP BY分组后的每一个组进行再筛选

(2)示例

六.排序

1.定义

2.示例

七.连接

1.定义

(1)最常用的是等值连接和自然连接

(2)WHERE子句可以同时完成查询和连接

(3)连接查询一定要记得写连接条件

2.自身连接与表的重命名

(1)在一条SQL语句中给表起了别名,则在该条SQL语句中只能用表的别名,不能用原名

(2)在一条SQL语句中给列起了别名,在该条SQL语句中还是只能用列的原名,不能用别名

3.连接的三种写法

4.多种连接方式

八.嵌套查询

1.定义

(1)父查询与子查询

(2)子查询中不能使用ORDER BY子句:因为子查询的结果是用于父查询的,最终排序结果还是取决于父查询,因此子查询做ORDER BY是没有意义的。

(3)父查询对子查询的查询条件

2.不相关子查询

3.相关子查询

4.嵌套查询的类型1——带有IN谓词的子查询

(1)示例

(2)上述查询用连接查询也能实现,要记得把连接条件写全,三张表有两个连接条件

5.嵌套查询的类型2——带有比较运算符的子查询

6.嵌套查询的类型3——带有ANY或ALL谓词的子查询

(1)ANY

(2)上述例子也可以用聚集函数实现

(3)ALL

7.嵌套查询的类型4——带有EXISTS谓词的子查询

(1)定义

(2)示例

(3)用EXIST实现全称量词

(4)用EXIST实现逻辑蕴涵

8.嵌套查询与连接查询的关系

(1)使用嵌套查询能实现的,连接查询也能实现。

(2)嵌套查询的系统效率高于连接查询:因为连接查询一定会对连接的两个或多个表在内存中做笛卡尔积,占据系统内存;而嵌套查询是逐层进行的,每次只会对一个表进行操作,不会产生笛卡尔积。

九.集合操作

十.WHERE、聚集函数、GROUP BY、HAVING的关系

1.WHERE和聚集函数

(1)在WHERE子句中不能使用聚集函数:聚集函数是作用于WHERE子句的查询结果的,而WHERE子句在执行时还没有得到结果,因此不能使用聚集函数。

2.GROUP BY和HAVING

(1)有HAVING则一定要有GROUP BY:HAVING是对GROUP BY的分组结果进行筛选,若没有GROUP BY分组,则HAVING就没有作用对象。

(2)有GROUP BY不一定要有HAVING:可以只对结果进行GROUP BY分组,不对分组结果进行再筛选。

3.WHERE和GROUP BY

(1)WHERE和GROUP BY的使用并不冲突:WHERE是对查询做条件筛选,GROUP BY是对查询结果做分组。

4.WHERE和HAVING

WHERE和HAVING都是对查询结果做条件筛选,但两者作用不同:

(1)作用对象不同

  • WHERE子句作用于表或者视图,面对表或视图的所有元组。
  • HAVING子句作用于GROUP BY的分组结果,面向每一个分组的所有元组。

(2)执行顺序不同

  • WHERE是对查询做初次筛选,最先执行。
  • HAVING是对分组结果做二次筛选,在WHERE、GROUP BY之后执行。

(3)使用条件不同

  • WHERE没有使用条件。
  • HAVING必须要伴随GROUP BY使用。

(4)对于聚集函数的使用不同

  • WHERE子句不允许使用聚集函数。
  • HAVING子句允许使用聚集函数。
5.聚集函数和GROUP BY

(1)如果未对查询结果进行GROUP BY分组,则聚集函数作用于整个查询结果

(2)如果对查询结果进行GROUP BY分组,则聚集函数单独作用于每一个分组

6.聚集函数的出现位置及其对GROUP BY的依赖

(1)聚集函数允许出现的位置:SELECT子句、HAVING子句、ORDER BY子句

(2)如果SELECT子句中只有聚集函数,则可以不使用GROUP BY分组。

(3)如果SELECT子句中既有聚集函数,也有非聚集函数,则必须使用GROUP BY分组,且GROUP BY分组的列必须包含SELECT中的非聚集函数列。原因看第7点。

7.“对于使用了GROUP BY分组的查询语句,所有在SELECT子句中出现的列,要么出现在SELECT子句的聚集函数中,要么还必须同时出现在GROUP BY子句中;不能只在SELECT子句中单独出现”

(1)例子:

假设查询语句: SELECT sno,grade FROM sc GROUP BY sno;

该语句会查询sc表中的sno列和grade列,并将查询结果按sno值进行分组,sno值相同的元组会被合并到一组。

而sc表中会出现一个sno对应多个grade的情况,即有若干列都是sno相同但grade不同。

那些sno相同的列随着GROUP BY sno被合并到一个元组后,不同的grade也会被挤入一个单元格内,就违背了1NF。

(2)理解:

GROUP BY其实就是把多个元组合并为一个元组,随着合并必然会出现多个不同值挤入一个单元格的情况,为了不违背1NF,有三种解决方案

  • 不将这些违背1NF的列投影出来,即不出现在SELECT子句中。
  • 通过聚集函数将一个单元格的多个值合并为一个值,即出现在SELECT子句的聚集函数中。
  • 对这一列的每一个值分一个组,即出现在GROUP BY子句中。

(3)示例

8.执行顺序

WHERE > GROUP BY > 聚集函数 > HAVING > ORDER BY

十一.基于派生表的查询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1556038.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙开发(NEXT/API 12)【穿戴设备模板化通知】手机侧应用开发

手机侧应用向穿戴设备发送通知&#xff0c;并在穿戴设备上按模板显示&#xff0c;支持穿戴设备收到通知后同步振动或响铃&#xff08;跟随穿戴设备系统设置&#xff09;。执行成功后&#xff0c;穿戴设备上会显示下图所示通知界面。 该接口无需用户授权&#xff0c;仅需要确保…

视频转文字免费的软件有哪些?6款工具一键把视频转成文字!又快又方便!

视频转文字免费的软件有哪些&#xff1f;在视频制作剪辑过程中&#xff0c;我们经常进行视频语音识别成字幕&#xff0c;帮助我们更好地呈现视频内容的观看和宣传&#xff0c;市场上有许多免费的视频转文字软件&#xff0c;可以快速导入视频&#xff0c;进行视频内音频的文字转…

Vueron引领未来出行:2026年ADAS激光雷达解决方案上市路线图深度剖析

Vueron ADAS激光雷达解决方案路线图分析&#xff1a;2026年上市展望 Vueron近期发布的ADAS激光雷达解决方案路线图&#xff0c;标志着该公司在自动驾驶技术领域迈出了重要一步。该路线图以2026年上市为目标&#xff0c;彰显了Vueron对未来市场趋势的精准把握和对技术创新的坚定…

【Mybatis篇】Mybatis的注解开发

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】&#xff0c;【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 文章目录 &#x1f3af; Select注解 …

Gridview配置数据源--信任服务器证书

目录 背景过程Gridview配置数据源GridView与数据源&#xff1a;数据库连接与安全&#xff1a;信任服务器证书&#xff1a;配置信任服务器证书&#xff1a;注意事项&#xff1a; 生成连接字符串程序运行报错问题解决 总结 背景 Gridview配置数据源之后&#xff0c;程序报错 过…

一篇文章教会你DHT11读取温湿度,附STM32代码示例

目录 一、DHT11说明&#xff1a; 1.典型电路&#xff1a; 2.串行通信说明&#xff08;单线双向&#xff09;&#xff1a; 单总线说明&#xff1a; 单总线传送数据位定义&#xff1a; 校验位数据定义&#xff1a; 二、DHT11读取时为啥要切换模式&#xff1a; 1. 通信时序…

【Linux】进程第三弹(虚拟地址空间)

目录 现象 底层原因 数据不发生修改 数据修改 小总结 地址空间本质 为什么要有地址空间 现象 来看代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <sys/types.h>int val 50;int main() {printf("father process is running…

【springboot】简易模块化开发项目整合Redis

接上一项目&#xff0c;继续拓展项目 1.整合Redis 添加Redis依赖至fast-demo-config模块的pom.xml文件中 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependenc…

九、3 串口发送+printf函数移植+打印汉字

1、接线图 TX与RX交叉连接&#xff0c;TXD接STM32的PA10&#xff0c;RXD接STM32的PA9 VCC与3.3V用跳线帽连接 2、函数介绍 3、代码部分 &#xff08;1&#xff09;发送字节的函数&#xff08;Byte&#xff09; 可直接发送十六进制数 如0x41&#xff0c;也可直接发送字符 如A …

关于函数模板的一些不为人知的用法

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 引言 关于函数模板&#xff0c;大家都不陌生。但是如下的函数模板&#xff0c;大家肯定没有见过 没有提供任何特例化的模板 不管我们传入的是什么类型的参数&#xff0c;都可以匹配到这个模板【所以又被称为…

基于Springboot+Vue的在线问诊系统的设计与实现(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

动手学大模型应用开发之大模型简介

动手学大模型应用开发之大模型简介 主要学习目标什么是大语言模型大模型的能力和特点涌现能力作为基座模型支持多元应用的能力支持对话作为统一入口的能力大模型特点 常见大模型ChatGpt通义千问 LangChainLangChain的核心模块 总结相关学习链接 主要学习目标 学习如何进行大模…

Alignment与Correspondence,用于量化衡量MLLM中视觉特征的视觉语义对齐与视觉结构程度的方法

Alignment与Correspondence&#xff0c;用于量化衡量MLLM中视觉特征的视觉语义对齐与视觉结构程度的方法 FesianXu 20241006 at Wechat Search Team 前言 在多模态大模型&#xff08;Multimodal Large Language Model&#xff0c; MLLM&#xff09;中&#xff0c;视觉特征就像…

ai智能论文生成系统有用吗?分享5款ai文献综述自动生成器

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术在学术写作领域的应用越来越广泛&#xff0c;尤其是在文献综述的自动生成方面。AI智能论文生成系统通过深度学习和自然语言处理技术&#xff0c;能够帮助研究人员快速生成高质量的文献综述&#xff0c;从而提高写作效…

安可数据库产品目录

‌国家安可数据库产品目录包括以下主要产品‌&#xff1a; ‌华为GaussDB、openguass&#xff1a; 由华为云计算技术有限公司提供。‌金仓数据库管理系统&#xff1a;由中电科金仓&#xff08;北京&#xff09;科技股份有限公司提供。‌神通数据库管理系统&#xff1a;由天津神…

【Python】Python知识总结浅析

Python是一种高级编程语言&#xff0c;由Guido van Rossum于1991年首次发布。它以简洁的语法和强大的功能著称&#xff0c;适用于多种应用场景&#xff0c;包括Web开发、数据分析、人工智能、自动化脚本等。 易于学习和使用&#xff1a;Python的语法简洁明了&#xff0c;适合初…

AEye激光雷达公司的战略调整与成本控制分析

AEye激光雷达公司的战略调整与成本控制分析 当地时间9月3日,美国激光雷达领域的知名上市公司AEye在其向美国证券交易委员会(SEC)提交的8-K报告中披露了一项重大战略调整措施。报告指出,作为公司全面成本控制计划的一部分,AEye已对员工总数进行了大幅缩减,减少比例约达三分…

容器领航者:Kubernetes集群部署秘籍

目录 前言 一、ubernetes简介 1.1 应用部署方式演变 1.2 容器编排应用 1.3 kubenetes简介 二、Kubernetes核心概念 2.1 K8S各个组件用途 2.2 K8S 各组件之间的调用关系 2.3 K8S 的常用名词感念 2.4 k8S的分层架构​编辑 三、部署前的准备 3.1 k8s中容器的管理方式 3…

Java体系中的异常

1. 异常 1.1 异常的概念 在Java中&#xff0c;我们将程序执行过程中发生的不正常行为称为异常。异常是在程序运行过程中发生的错误或意外情况&#xff0c;它打破了程序的正常执行流程。在Java中通过面向对象的编程思想&#xff0c;我们也将这些扰乱程序正常执行的行为用类组织…

LeetCode Hot100 | Day1 | 二叉树:二叉树的直径

LeetCode Hot100 | Day1 | 二叉树&#xff1a;二叉树的直径 主要学习内容&#xff1a; 二叉树深度求法 深度的 leftright1 得到的是从根结点到叶子结点的节点数量 543.二叉树的直径 [543. 二叉树的直径 - 力扣&#xff08;LeetCode&#xff09;](https://leetcode.cn/prob…