当前位置: 首页 > news >正文

MySQL教程 - DQL操作

更新记录
转载请注明出处。
2022年9月2日 发布。
2022年9月2日 从笔记迁移到博客。

基本查询

SELECT 属性列表
FROM   表或视图
WHERE  筛选条件1
GROUP BY 属性  [HAVING 筛选条件2] [WITH ROLLUP]
ORDER BY 属性  [ASC |DESC] ……….;
LIMIT 条件

注意:
GROUP BY 表示按该属性进行分组,满足HAVING 条件的才输出
ORDER BY 表示按该属性进行排序 ASC 表示升序 DESC表示降序
ORDER BY支持多个列
WITH ROLLUP 显示每个分组的汇总信息

查询结果排除重复

SELECT DISTINCT 属性名

别名

支持 表别名 和 字段别名

SELECT 字段 AS 字段别名
FROM 表 AS 表别名;

连接

连接示意图

imageimage

内连接

SELECT 字段
FROM 表1,表2,表3,...
WHERE 连接条件;

左外连接

SELECT 字段
FROM 表1 LEFT JOIN 表2
ON连接条件
WHERE 条件;

右外连接

SELECT 字段
FROM 表1 RIGHT JOIN 表2
ON连接条件
WHERE 条件;

合并查询

UNION
UNION ALL

限定条件where

比较大小相等

比较:
= != < <= > >= <! >! <>
EG:

WHERE Property > 666666;

指定范围内

范围:
BETWEEN 边界1 AND 边界2
NOT BETWEEN 边界1 AND 边界2
注意:BETWEEN包括边界值
注意:NOT BETWEEN不包括边界值

EG:

SELECT * FROM test1
WHERE id NOT BETWEEN 1 AND 2;  -- 注意:包括1,2

指定集合内

指定集合:

IN(value1,value2,……) 
NOT IN(value1,value2,…..)

EG:

SELECT * FROM test1
WHERE id IN(1,2);

匹配字符

匹配字符:

LIKE '字符串'
NOT LIKE '字符串'

匹配符号:
% 任意长度字符串(包括0)
_ 单个字符

EG:

SELECT * FROM test1
WHERE name like 'panda%';

是否为空

是否为空:

IS NULL
IS NOT NULL

EG:

SELECT * FROM test1
WHERE id IS NOT NULL;

多个条件组合

组合条件:

条件1 AND 条件2 …….
条件1 OR 条件2 …….

EG:

SELECT * FROM test1
WHERE id>2 AND name like 'panda%';

否定条件

否定:

NOT

对结构进行排序

ORDER BY 条件 [ASC |DESC] …………….

ORDER BY语句一般放在最后面,除了LIMIT语句
这里的条件可以是:单个字段、多个字段、表达式、别名、函数

实例:

ORDER BY <字段名称>  DESC 							   //单个字段排序
ORDER BY <字段名称>  DESC, <字段名称>  DESC 			 //多个字段排序
ORDER BY LNGTH(<字段名称>)  DESC 						//使用函数
ORDER BY (<字段名称>+1)/2  DESC 			   			//使用表达式
ORDER BY <SELECT语句中的别名>  DESC 			   		   //使用别名

对结果进行分组

单独使用GROUP BY

语法:

GROUP BY 表达式

注意:将只显示每个分组的一条记录

根据多个表示进行分组

GROUP BY 表达式, 表达式

显示汇总信息

USE panda_database;
SELECT name,COUNT(Gender) as 'count'
FROM panda_table3
GROUP BY Gender
WITH ROLLUP;

与GROUP_CONCAT()一起使用

语法:

GROUP_CONCAT(属性名1)

作用:将把所有属性名的值列出来

EG:

SELECT name,GROUP_CONCAT(id) FROM test1
GROUP BY name;

image

与聚合函数一起使用

聚合函数有:
MAX()
MIN()
AVG()
SUM()
COUNT()

与HAVING一起使用

HAVING与WHERE区别在于:
​ HAVING作用在组上或者说作用在分组属性上,用于筛查组内数据
​ WHERE作用在表或视图,用于筛查全部数据

限制结果条数

语法:

LIMIT 条数
LIMIT 起始位置, 条数

注意:起始位置从0开始

子查询

子查询概念

将查询结果嵌套在另一个查询中

子查询分类(按 结 果 集 的 行 列 数 不 同 )

  • 标量子查询。返回一个值,本质是单行单列。
  • 表子查询。返回一个包含多行多列的表。
  • 列子查询。返回一列多行的数据。
  • 行子查询。返回一行多列的数据。

不同位置支持的子查询类型:

  • select后面,仅支持标量子查询。
  • from后面,支持表子查询。
  • where或having后面,支持标量子查询、列子查询、行子查询。
  • exists后面,支持表子查询。

子查询的特点

  • 子查询放在小括号内。

  • 子查询一般放在条件的右侧。

  • 标量子查询,一般搭配着单行操作符使用,比如:> <> = < == <>。

  • 列子查询,一般搭配着多行操作符使用,比如:in、any/some、all。

  • 子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果。

子查询可用的操作符有

SOME
ALL
IN
NOT IN
EXISTS  //如果返回行数大于1,返回TRUE,否则返回FALSE
NOT EXISTS
<
>
<=
>=
=
!=

IN / NOT IN 子查询

SELECT * 
FROM users
WHERE users.uids IN 
(SELECT buids FROM buy);

EXISTS / NOT EXISTS 子查询

SELECT * 
FROM users
WHERE NOT EXISTS
(SELECT buids FROM buy WHERE buids = 1);

比较运算符子查询

SELECT * 
FROM users
WHERE users.uids = 
(SELECT buids FROM buy);

SOME ALL 子查询

SOME表示只要满足内层查询的任何一个条件都可以执行外部查询
ALL表示外部查询必须满足内层查询的每一个结果
SOME和ALL通常配合比较运算符使用
SOME实例:

SELECT * 
FROM users
WHERE users.uids > SOME
(SELECT buids FROM buy);

ALL实例:

SELECT * 
FROM users
WHERE users.uids <= ALL
(SELECT buids FROM buy);

合并查询结果

UNION
UNION ALL

UNION 合并查询结果并去除重复,UNION ALL合并查询结果但保留重复。

注意:确保列的类型兼容。

适合场景:

  • 比较复杂的查询拆分成多个查询,然后合并。

  • 合并多个查询的结果。

表和属性的别名语法

表别名语法:

表名 [AS] 别名

字段别名

字段 [AS] 别名

分页查询

应用场景

当要显示的数据,一页显示不全,需要分页提交sql请求。

limit [offset] size;

offset 要显示条目的起始索引(起始索引从0开始),size 要显示的条目个数。

注意:limit语句放在查询语句的最后。

实例:

SELECT * FROM employees LIMIT 0,5;
SELECT * FROM employees LIMIT 5;

分页计算公式:

limit (page-1) * size,size;

正则表达查询

正则表达查询

属性 REGEXP '正则表达式'

正则表达式模式字符表

imageimage

实例:查询特定字符开头的记录

SELECT * FROM users 
WHERE unames REGEXP '^panda';

实例:查询特定字符结尾的记录

SELECT * FROM users
WHERE unames REGEXP '666666$';

实例:用.来代替一个字符

SELECT * FROM users
WHERE unames REGEXP 'pa..a......';

实例:匹配指定字符的任意一个

SELECT * FROM users
WHERE unames REGEXP '[p|m]';

备注:还可以使用[0-9] [A-Z] [a-z]

实例:匹配指定字符外的任意一个

SELECT * FROM users
WHERE unames REGEXP '[^panda]';

实例:匹配指定字符

SELECT * FROM users
WHERE unames REGEXP 'panda';

实例:使用*和+匹配多个字符

\*  匹配任意个字符(包括0个)
\+  匹配任意个字符(至少一个)

EG:

SELECT * FROM users 
WHERE unames REGEXP 'panda*';

EG:

SELECT * FROM users 
WHERE unames REGEXP 'panda+';

实例:使用{m} {m,n}匹配字符连续出现的次数

SELECT * FROM users 
WHERE unames REGEXP 'panda6{6}';

EG2:

SELECT * FROM users 
WHERE unames REGEXP 'panda6{6,6}';

实例:大小写问题

默认正则匹配不区分大小写,使用BINARY区分大小写

SELECT * FROM users 
WHERE unames REGEXP BINARY 'panda6{6,6}';

实例:匹配以p开头的字符串

SELECT * 
FROM panda_table3 
WHERE name REGEXP '[p]{1,100}'

实例:匹配panda或cat

SELECT *
FROM panda_table3
WHERE name REGEXP 'panda|cat{1,100}';

实例:匹配特定符号问题

使用\符号,进行转义

SELECT * FROM users 
WHERE unames REGEXP BINARY '\\(panda\\)';

相关文章:

  • Vue:基础语法指令
  • CentOS 7 双网卡bond 网卡mac 相同的处理
  • C# 用泛型和反射实现对象管理
  • 剑指offer32-42字符串数组的应用
  • SSM+文达学院贫困生认定系统 毕业设计-附源码261621
  • 单片机上的操作系统
  • Linux-10-线程
  • BP神经网络算法基本原理,bp神经网络算法的优点
  • 模块加载机制(require)--内置、第三方、自定义、文件夹
  • js分组匹配、遍历结果
  • shell脚本学习笔记2
  • STM32-串口通信波特率计算以及寄存器的配置详解
  • 物联网开发笔记(5)- 使用Wokwi仿真树莓派Pico实现LED灯交替闪烁(续)
  • 洛谷 P7302 [NOI1998] 免费的馅饼
  • Docker基础-2.常用命令与Docker镜像
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [deviceone开发]-do_Webview的基本示例
  • __proto__ 和 prototype的关系
  • co.js - 让异步代码同步化
  • extjs4学习之配置
  • Fastjson的基本使用方法大全
  • Java的Interrupt与线程中断
  • Python十分钟制作属于你自己的个性logo
  • SQLServer之索引简介
  • vue.js框架原理浅析
  • vuex 学习笔记 01
  • win10下安装mysql5.7
  • 从输入URL到页面加载发生了什么
  • 机器学习学习笔记一
  • 基于web的全景—— Pannellum小试
  • 记一次删除Git记录中的大文件的过程
  • 提醒我喝水chrome插件开发指南
  • 小程序开发之路(一)
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • #在 README.md 中生成项目目录结构
  • $.ajax()方法详解
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (八)Spring源码解析:Spring MVC
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (接口封装)
  • (三)docker:Dockerfile构建容器运行jar包
  • (转)Linq学习笔记
  • (转)视频码率,帧率和分辨率的联系与区别
  • ****Linux下Mysql的安装和配置
  • ***详解账号泄露:全球约1亿用户已泄露
  • . Flume面试题
  • .Net MVC + EF搭建学生管理系统
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET的微型Web框架 Nancy
  • .NET分布式缓存Memcached从入门到实战
  • .Net中wcf服务生成及调用
  • :=
  • @RequestMapping用法详解