Mysql基础篇之DQL语言
Mysql基础篇之DQL语言
- 1. 基础查询
- 特点
- 语法格式
- 闲言碎语
- 2. 条件查询
- 语法格式
- 条件表达式
- 逻辑表达式
- 模糊查询
- 3. 排序查询
- 4. 常见函数
- 单行函数
- 1. 字符函数
- 2. 数学函数
- 3. 日期函数
- 4. 流程控制函数
- 5. 其他函数
- 分组函数
- 5. 分组查询
- 分组函数
- 语法格式
- 特点
- 6. 多表连接查询
- 分类
- SQL 七种连接示意图
- SQL92语法
- 等值连接
- 非等值连接
- 自连接
- SQL99语法
- 简述
- 语法格式
- 内连接
- 外连接
- 交叉连接
- SQL92和SQL99对比
- 7. 子查询
- 特点、分类
- 示例
- 标量子查询 (单行子查询)
- 列子查询 (多行子查询)
- 行子查询 [ 结果集一行多列或多行多列(用的较少)]
- 子查询位置示例
- EXISTS 用法
- 8. 分页查询limit
- 语法
- 9. 联合查询
- 10. 执行顺序
1. 基础查询
特点
① 通过
select查询完的结果 ,是一个虚拟的表格,不是真实存在
② 要 查询的东西 可以是常量值、表达式、字段、函数
示例:
AS:起别名,可以省略DISTINCT:去重, 放在 字段前面CONCAT(str1,str2,...):MySQL中用于字符串拼接IFNULL(expr1,expr2):判断某 字段 或 表达式 的值是否为null
- 如果
expr1的值不为null,返回expr1的值- 如果为
null,返回expr2的值
ISNULL(expr):判断expr的值是否为null
- 如果
expr的值不为null,返回0- 如果为
null,返回1
NULLIF(expr1,expr2):判断某 字段 或 表达式 的值是否为null
- 如果
expr1=expr2成立,那么返回值为null,否则返回值为expr1的值
IF(expr1,expr2,expr3):判断某 字段 或 表达式 的值是否为null
- 如果
expr1的值为true,则返回expr2的值,否则返回expr3的值
语法格式
SELECT 要查询的东西【FROM 表名】;
闲言碎语
SQL语言大小写不敏感SQL可以写在一行或者多行关键字不能被缩写也不能分行各子句一般要分行写使用缩进提高语句的可读性
2. 条件查询
语法格式
select要查询的字段|表达式|常量值|函数from表where条件;
条件表达式
示例:
age > 18
条件运算符(示例):
> < >= <= = != <>
逻辑表达式
示例:
age > 18 && age < 60
条件运算符(示例):and(
&&):两个条件如果同时成立,结果为true,否则为false
or(||):两个条件只要有一个成立,结果为true,否则为false
not(!):如果条件成立,则not后为false,否则为true
模糊查询
示例:
like【%任意0个或多个字符;_表示任意单个字符 】
between ... and ...【注意:包含临界值,等同于>=和<=】
in【列表中类型必须一致】
is null、is not null【可以判断null值】
<=>【表示安全等于,判断值是否相等,既可以和数值搭配,也可以和null搭配】
ESCAPE用法:
案例:查询员工名称中 第二个字符为_的员工名字;【注意_为 通配字符,所以需要转义,如果是普通字母就不需要了】
方式一:可以使用\转义 字符, 如:name like "_\_%"
方式二:ESCAPE任意 字符,如:name like "_$_%" ESCAPE '$'【
ESCAPE '$'只是强调说明一下$在这里被当作是转义字符使用,并不一定非要使用$,也可以使用a b c......只不过使用$可读性强 些】
is null和<=>的区别
is null:仅仅判断null值,可读性较高
<=>:既可以判断null值,又可以判断普通的数值,但是可读性较差,很少用
3. 排序查询
默认
asc升序排序
语法格式
select要查询的东西
from表
where条件
order by排序的字段|表达式|函数|别名 【asc|desc】多个字段排序中间用
英文逗号隔开,不能用and连接
4. 常见函数
MySql中索引是从1开始的
单行函数
1. 字符函数
示例
concat拼接字符串
substr截取子串
upper转换成大写
lower转换成小写
trim去前后指定的空格和字符
ltrim去左边空格
rtrim去右边空格
replace替换
lpad左填充
rpad右填充
instr返回子串第一次出现的索引
length获取字节个数
示例
2. 数学函数
示例
round四舍五入
rand随机数
floor向下取整:返回小于等于该参数的最小整数
ceil向上取整:返回大于等于该参数的最小整数
mod取余:
mod(a,b)运算过程为a-a/b*b运算结果的符号和a保持一致- 例如:
mod(-10,3)运算过程:
(-10)-(-10)/3*3 = (-10)-(-3)*3 = (-10)-(-9)= -1
truncate截断
示例
3. 日期函数
示例
now当前系统日期+时间
DATEDIFF(expr1,expr2):可以统计两日期之间相差的天数
curdate当前系统日期
curtime当前系统时间
str_to_date将字符转换成日期
date_format将日期转换成字符
示例
SELECTNOW() `now`, -- 当前系统日期+时间CURDATE() `curdate`, -- 当前系统日期 CURTIME() `curtime`, -- 当前系统时间DATEDIFF('2024-12-15', '2024-12-10') `DATEDIFF`,-- 统计两日期之间相差的天数 STR_TO_DATE('8-11-2024', '%m-%d-%Y') `strToDate`,-- 将字符转换成日期DATE_FORMAT( '2024/08/12', '%Y年%m月%d日' ) dateToStr-- 将日期转换成字符
FROMDUAL;
4. 流程控制函数
百度百科
IF(expr1,expr2,expr3)函数处理双分支:if else的效果函数用法说明: 如果
expr1是TRUE (expr1 <> 0 and expr1 <> NULL),则IF()的返回值为expr2; 否则返回值则为expr3。IF()的返回值为数字值或字符串值,具体情况视其所在语境而定
CASE WHEN THEN 函数
case要判断的字段或表达式
when常量1then要显示的值1
when常量2then要显示的值2
...
else要显示的值n
end
或
case要判断的字段或表达式
when条件1then要显示的值1
when条件2then要显示的值2
...
else要显示的值n
end
5. 其他函数
示例:主要是一些数据库系统相关的函数
SELECT VERSION();查看MySQL版本号
SELECT DATABASE();查看当前库
SELECT USER();查看当前连接用户
分组函数
分组函数 用作
统计使用,又称聚合函数或统计函数或组函数
分类
sum:求和
avg:平均值
max:最大值
min:最小值
count:计数
特点:
- 以上五个分组函数都
忽略 null值,除了count(*)sum和avg一般用于处理数值型max、min、count可以处理任何数据类型- 都可以搭配
distinct使用,用于统计去重后的结果count的参数可以支持:字段、*、常量值,一般放1,建议使用count(*)- 和
分组函数一同查询的字段要求是group by 后的字段
5. 分组查询
分组函数
分组函数 用作
统计使用,又称聚合函数或统计函数或组函数
分类
sum:求和
avg:平均值
max:最大值
min:最小值
count:计数
语法格式
语法格式
select分组函数, 列(必须出现在group by后面的列)
from表
where筛选条件
group by分组的列表
order by子句查询的字段要求是
分组函数和group by后出现的字段
特点
特点:
group by支持单个字段分组、多个字段分组(逗号隔开,无顺序要求)、表达式或函数(用 较少)- 和分组函数一起查询的字段必须是
group by后出现的字段- 可以
支持排序(排序放在整个分组函数的最后)- having后可以
支持别名,只是 不常用- 分组筛选 ,筛选条件位置(
参考下述对比图表)① 能用 分组前 筛选的,优先考虑 分组前 筛选
②分组函数做条件 肯定在having子句中
| 特点 5 说明 | 针对的表 | 位置 | 关键字 |
|---|---|---|---|
分组前筛选 | 原始表 | group by的 前 面 | where |
分组后筛选 | 分组后的结果集 | group by的 后 面 | having |
6. 多表连接查询
分类
按
年代分
SQL92标准:【MySQL中 仅仅支持内连接】
SQL99标准【推荐使用】:【MySQL中仅仅支内连接+外连接(左外和右外,MySQL中不支持全外链接) +交叉连接】
按功能分
内连接:
等值连接非等值连接自连接
外连接:
左外连接右外连接全外连接
交叉连接
SQL 七种连接示意图

SQL92语法
【
MySQL中 仅仅支持内连接】
等值连接
语法
select查询列表
from表1 别名,表2 别名
where表1.key = 表2.key
【and筛选条件】
【group by分组字段】
【having分组后的筛选】
【order by排序字段】
注意事项
- 等值连接的结果 = 多个表的交集
n表连接,至少需要n-1个连接条件多个表不分主次,无顺序要求- 一般为表
起别名,提高阅读性和性能
非等值连接
语法和
等值连接相同,where后变为非等值连接条件
示例:
自连接
和
等值连接一样
示例:
SQL99语法
简述
通过
join关键字实现连接
【MySQL中 仅仅支持内连接+外连接(左外和右外,不支持全外连接) +交叉连接】
含义:1999年推出的
sql语法
支持:
内连接(★): inner外连接左外(
★) :left【outer】
右外(★) :right【outer】
全外 :full【outer】
交叉连接:cross
语法格式
语法
select字段,...
from表1
【inner|left outer|right outer|cross】join表2on连接条件
【inner|left outer|right outer|cross】join表3on连接条件
【where筛选 条件】
【group by分组 字段】
【having分组 后 的 筛选 条件】
【order by排序 的字段或表达式】
内连接
语法:
select查询列表
from表1 别名
inner join表2 别名
on连接条件;
分类:
等值连接非等值连接自连接
特点:①添加排序、分组、筛选
②inner可以省略
③ 筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
④inner join连接和sql92语法中的 等值连接 效果是一样的,都是查询多表的交集
示例:
等值连接
非等值连接
自连接
外连接
应用场景:用于查询一个表中
有,另一个表没有的记录
特点:1、外连接的查询结果为
主表中的所有记录;
如果从表中有和它匹配的,则显示匹配的值
如果从表中没有和它匹配的,则显示null
外连接查询结果=内连接结果+主表中有而从表没有的记录2、
左外连接,left join 左边的是主表
右外连接,right join 右边的是主表
3、左外和右外交换两个表的顺序,可以实现同样的效果
4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
MySQL不支持全外连接- 可以参考上述 SQL 七种连接示意图 理解
示例:
左外连接
右外连接
全外连接
百度百科
交叉连接

SQL92和SQL99对比
功能:
sql99支持的较多
可读性:sql99实现连接条件和筛选条件的分离,可读性较高
7. 子查询
特点、分类
特点:
- 子查询
都放在小括号内
- 子查询可以放在
from后面、select后面、where或having后面、exists后面,但一般放在条件的右侧
子查询优先于主查询执行,主查询使用了子查询 的执行结果
- 子查询根据
查询结果的行数不同分为以下两类
① 单行子查询
- 结果集
只有一行- 一般搭配
单行操作符使用:> < = <> >= <=- 非法使用子查询 的情况:
- a、子查询的
结果为一组值- b、子查询的
结果为空
② 多行子查询
- 结果集
有多行- 一般搭配
多行操作符使用:any/some、all、in、not in
in:属于子查询结果中的任意一个就行any和all往往可以用其他查询 如: min 和 max代替
示例
示例:

标量子查询 (单行子查询)
标量子查询(单行子查询)
列子查询 (多行子查询)
列子查询(多行子查询)
行子查询 [ 结果集一行多列或多行多列(用的较少)]
**
行子查询[ 结果集一行多列或多行多列(用的较少)]**了解即可
子查询位置示例



EXISTS 用法
where后使用 带有exists或not exists的子查询作为条件时,子查询不返回任何记录的数据,而是返回逻辑值true或false
注意: 执行顺序是先执行外查询再执行内查询,根据外查询的每条执行结果执行内查询
exists: 子查询有结果 ,返回true,保留外查询 的这条数据;否则返回false,不保留外查询 的这条数据not exists:子查询无结果 ,返回true,保留外查询 的这条数据;否则返回false,不保留外查询 的这条数据
因为
子查询只是返回逻辑值true或false,所以子查询中的select后跟什么字段不重要,可以是任何内容,但是为了执行效率,建议写1
8. 分页查询limit
语法
语法
select字段|表达式,...
from表
【where筛选 条件】
【group by分组 字段】
【having分组 后 的 筛选 条件】
【order by排序 的字段或表达式】
limit【起始的条目索引】,条目数;
特点:
- 起始条目索引 从
0开始
limit子句放在 查询语句的最后
- 规律公式:
select * from 表 limit (page-1)*size, size
size每页显示条目数page要显示的页数
举例理解:
假定:limit A,B(size)
B(size) = 10
page A
10
210
320
430
...
B(size)(page-1)*size
示例:
limit A, B理解:
跳过 A 条数据,取 B 条数据
9. 联合查询
语法
select字段|常量|表达式|函数 【from表】 【where条件】
union【all】
select字段|常量|表达式|函数 【from表】 【where条件】
union【all】
...
select字段|常量|表达式|函数 【from表】 【where条件】
特点:
- 多条查询语句的
查询的列数必须是一致的- 多条查询语句
每一列的类型和顺序最好一致union代表去重,union all代表不去重
应用场景:要查询的结果
来自于多个表,且它们之间没有直接的连接关系,但查询结果一致时
10. 执行顺序
| MySQL书写顺序 | 执行顺序 |
|---|---|
select 查询列表 | 7 |
from 表1 | 1 |
join 表2 | 2 |
on 连接条件 | 3 |
where 筛选条件 | 4 |
group by分组列表 | 5 |
having 分组后的筛选 | 6 |
order by排序列表 | 8 |
limit 偏移数,展示条目数 | 9 |
相关文章:
Mysql基础篇之DQL语言
Mysql基础篇之DQL语言 1. 基础查询特点语法格式闲言碎语 2. 条件查询语法格式条件表达式逻辑表达式模糊查询 3. 排序查询4. 常见函数单行函数1. 字符函数2. 数学函数3. 日期函数4. 流程控制函数5. 其他函数 分组函数 5. 分组查询分组函数语法格式特点 6. 多表连接查询分类SQL 七…...
python async
要使用 Python 的 async 特性编写一个代码,以交替使用两个 AI API 处理数据,您可以按照以下步骤进行。假设这两个 AI API 的调用是异步的,并且我们需要在两个 API 之间轮流处理一组数据。 import asyncio import aiohttp async def call_ap…...
利用QT和FFmpeg实现一个简单的视频播放器
在当今的多媒体世界中,视频播放已成为不可或缺的一部分。从简单的媒体播放器到复杂的视频编辑软件,视频解码和显示技术无处不在。本示例使用Qt和FFmpeg构建一个简单的视频播放器。利用ffmpeg解码视频,通过QWidget渲染解码后的图像,…...
怎么用云手机进行TikTok矩阵运营
TikTok作为炙手可热的社交媒体巨头,已经吸引了亿万用户的目光。随着科技的飞速发展,云手机的出现为TikTok矩阵运营注入了新的活力。本文将深入探讨云手机在TikTok矩阵运营中的实际应用,并分享一系列高效策略与技巧。 (1࿰…...
TCP/IP 协议及其协议号
协议号十六进制协议号协议介绍10x1ICMP (Internet Control Message Protocol)20x2IGMP (Internet Group Management Protocol) 30x3GGP (Gateway-to-Gateway Protocol) 40x4IPv4 (encapsulation) 50x5ST (Stream Protocol) 60x6TCP (Transm…...
【传知代码】机器情绪及抑郁症算法 四(论文复现)
在现代心理健康研究中,抑郁症一直是一个备受关注的课题。随着科学的进步,研究人员逐渐认识到,抑郁症的成因远不止单一因素,而是由复杂的生物学、心理学和社会环境因素交织而成的。最近,MSA(综合性综合性模型…...
C#开启和关闭UAC功能
在开发软件或制作安装包时,有时会需要管理员权限 ,但是又不想弹出UAC对话框。 可以编写一个小工具,检测UAC是否关闭。如果没有关闭,就自动关闭UAC。 实现比较简单, 找到注册表 计算机\HKEY_LOCAL_MACHINE\SOFTWARE…...
LVS的简单配置及对Mysql主从复制的补充
Day 22 LVS的配置 环境准备 DSN() 用来解析各主机的域名和ip地址,配置域名解析huajuan,负责管理其他主机 web1--->web1.tangpin.huajuan web2--->web2.tangpin.huajuan dns--->dns.tangpin.huajuan web1(192.168.2.200) 用nginx…...
七夕情人节特辑:程序员的浪漫惊喜,9个表白源码,甜蜜编程陪你过节
大家好呀👋,今天是中国的七夕情人节,一个充满浪漫与爱的日子。为了庆祝这个特别的节日,我为大家精心准备了9个表白专用的前端小项目。这些项目涵盖了“我爱你”网站、爱情表白网站和心形动画等,通过HTML、CSS和一点点J…...
Mask-Rcnn
一 、FPN层 FPN层的基本作用 基本网络架构 基本思想 将多个阶段特征图融合在一起,这就相当于既有了高层的语义特征,也有了低层的轮廓特征 二、RPN层 三、ROI Align层...
Python图像背景去除
目录 🎁库的导入 🎀库的安装 🎁rembg库去除背景 🎁效果 🎁文末彩蛋 今天来介绍一个特别有趣的python库,rembg库,全称是“Remove Background”的缩写,意为“去除背景”ÿ…...
【C语言篇】C语言常考及易错题整理DAY1
文章目录 C语言常考及易错题整理选择题全局、局部和静态变量#define与typedef转义字符操作符循环其他 编程题计算日期到天数转换柯尼希定理旋转数组的最小数字描述错误的集合整数转换密码检查 C语言常考及易错题整理 选择题 全局、局部和静态变量 执行下面程序,正…...
MySQL5.7之源码安装
文章目录 下载编译&打包初始化数据目录启动服务器更改/设置root密码 下载 下载地址:https://downloads.mysql.com/archives/community/ 推荐下载 All Operating Systems (Generic) (Architecture Independent), Compressed TAR ArchiveIncludes Boost Headers …...
【Linux学习 | 第3篇】Linux系统安装 jdk+Tomcat+MySQL+lrzsz
文章目录 Linux—day31. 软件安装方式2. 安装jdk3. 安装Tomcat3.1 安装步骤:3.2 防火墙操作3.3 停止Tomcat服务的方式 4. 安装MySQL5. 安装lrzsz5.1 操作步骤 Linux—day3 Linux系统中软件安装 1. 软件安装方式 二进制发布包安装:软件已经针对具体平台…...
python语言day5 MD5 json
md5: python提供了内置的md5加密功能,使用md5模拟一个小项目: 注册: 启动py程序,在控制台界面提示用户输入用户名及密码; 使用md5加密 密码; 创建txt文件记录输入的用户名 和密文。 登录&…...
【Python学习手册(第四版)】学习笔记19-函数的高级话题
个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文主要介绍函数相关的高级概念:递归函数、函数注解、lambda表达式函数,常用函数工具如map、filter、reduce,以及通用的函数设…...
Selenium + Python 自动化测试11(unittest组织用例)
我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。 上一篇我们讨论了unittest基本使用方法。 本篇文章我们接着讲。一些概念和一些常用的构造测试集的方法。 1、基本概念 1)Test Case 一个Test Case的实例就是一个测…...
【唐氏题目 nt题】与众不同
# 与众不同 ## 题目描述 A是某公司的CEO,每个月都会有员工把公司的盈利数据送给A,A是个与众不同的怪人,A不注重盈利还是亏本,而是喜欢研究「完美序列」:一段连续的序列满足序列中的数互不相同。 A想知道区间[L,R]之…...
2000块的活嫌低?这个 6 位数的项目,你可不能错过哟!
2000块钱嫌低?这个6位数的项目,你可不能错过,关注有好礼。 最近写了一篇“接了一个2000块钱的活,大家看看值不值”的文章,发现流量和大家互动的热情出奇的高,可能是跟有钱有关的缘故,大家不是奔…...
【Postman工具】
一.接口扫盲 1.什么是接口? 接口是系统之间数据交互的通道。拿小红到沙县点餐为例:小红想吃鸭腿饭。她要用什么语言来表达?跟谁表达?通过什么表达?按照生活习惯应该是:小红根据菜单对服务员用中文表达她想要…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...




































