MySQL (2) DQL

目录

操作须知

1 单表查询

1.1 范围查询

1.2 模糊查询

1.3 去重查询

1.4 正则查询

1.5 替换查询

1.6 排序查询

1.7 聚合+分组查询

1.7.1 聚合查询(只有1行)

1.7.2 分组查询(针对"聚合查询")

1.8 分页查询

1.9 拼接查询

2 多表查询

2.1 内连接

2.2 外连接

2.2.1 左外连接

2.2.2 右外连接

2.2.3 全外连接

2.3 子查询

2.3.1 一行一列(一个值)

2.3.2 多行一列(一个集合)

2.3.3 多行多列(一个虚拟表:虚拟表都要起别名)

2.4 叠加查询

3 SQL执行顺序


DQL(Data Query Language数据查询语言),查询数据

操作须知

         where条件要用字段名(不能用别名)去做限制

         ●运算符:sql语句中可以进行数学运算(+ - × ÷)    //如果非数值类型(可以是varchar类型的数字)参与运算,结果为null

            ●比较符:大于>    小于<    大于等于>=    小于等于<=    不等于<>

            ●逻辑符:与ANDORNOT

            ●判空:不能用=,要用IS NULLIS NOT NULL

         表达式:●NOW()当前日期时间    CURDATE()当前日期    CRUTIME()当前时间

                ●DATE_SUB/DATE_ADD('2020-10-20 16:30:30',INTERVL n DAY/MONTH/YEAR)得到指定日期时间前/后n天/月/年的日期时间

                ●IF(boolean结果,'值1','值2')true为'值1',false为'值2'    IFNULL(字段,'替换值')如果字段为null,会被"替换值"替换

                ●FLOOR('小数')去掉小数取整    RAND()生成一个0~1之间的小数    //FLOOR(RAND()*100)生成0~99的随机整数

1 单表查询

1.1 范围查询

SELECT*FROM 表名 WHERE 字段 BETWEEN 最小值 AND 最大值    //(包含"最小值"和"最大值")这种方式只能作用于"数值数据"    //范围查询(BETEEN,<,>)不走索引

SELECT*FROM 表名 WHERE 字段 IN (值1,值2...)    //可以作用于"非数值数据"

1.2 模糊查询

SELECT*FROM 表名 WHERE 字段 (NOT)LIKE '_字符串%'    //通配符:_表示一个字符,%表示0个或多个字符

SELECT*FROM 表名 WHERE CHAR_LENGTH(字段)<100    //找某个字段中长度小于100的数据

1.3 去重查询

SELECT DISTINCT * FROM 表名    //DISTINCT(放于所有字段最前面):去掉所查的完全相同的记录

1.4 正则查询

SELECT * FROM 表名 WHERE 字段 REGEXP '正则表达式   //只查询指定字段符合'正则表达式'的记录

1.5 替换查询

SELECT REPLACE(字段名,'值1','值2') FROM 表名    //部分替换,将指定字段的数据中包含所有'值1'替换为'值2'

 SELECT CASE 字段 WHEN 'aaa' THEN 'AAA' WHEN 'bbb' THEN 'BBB' END FROM 表名    //完全替换,如果字段的值是'aaa'就替换为'AAA',如果字段的值是'bbb'就替换为'BBB',不能完全匹配的显示Null

1.6 排序查询

SELECT * FROM 表名 ORDER BY 字段1 ASC,字段2 DESC    //查到的记录先按字段1升序(ASC(默认)),再按字段2降序 (DESC)

ORDER BY RAND()    //对查询的记录随机排序         

        SELECT * FROM 表名 ORDER BY RAND() LIMIT 2    //获取随机查询的前2条记录

1.7 聚合+分组查询

1.7.1 聚合查询(只有1行)

COUNT(字段)    //统计字段数据个数(不会统计null)          COUNT(*)    //统计记录数(会统计null)

SUM(字段)    //求和           AVG(字段)    //平均值(不统计null)          MAX()/MIN()最大/小值

1.7.2 分组查询(针对"聚合查询")

SELECT COUNT(*) FROM 表名 where 筛选条件 GROUP BY 分组字段1,分组字段2... HAVING 分组筛选条件    //WHERE在分组前执行(只能操作原始表字段),HAVING在分组后执行(可以操作聚合函数字段)

        GROUP BY DAY/WEEK/MONTH/YEAR(日期时间字段)    //按每日/周/月/年分组

1.8 分页查询

SELECT * FROM 表名 LIMIT A,B    //A:跳过的记录数(不写默认0),B:每页显示的记录数

1.9 拼接查询

CONCAT(A,B......)    //将多个字符串拼接成1个字符串    //A,B....可以是字段名,也可以是自定义的字符串    //A,B......只要有一个null,拼接结果就是null

CONCAT_WS(separator,A,B......)    //与CONCAT类似,但字符之间用separator(分隔符)分隔

GROUP_CONCAT(A,B......)    //作用于"聚合查询"或"分组查询",在CONCAT的基础上再进行拼接,多列合成一列(默认用","隔开)

# 聚合查询
SELECT count(*), group_concat( NAME, age ) FROM teacher;

 

# 分组查询
SELECT position, group_concat( NAME, age ) FROM teacher GROUP BY position;

SELECT position, group_concat(CONCAT_WS('_', NAME, age) ORDER BY age DESC SEPARATOR '&') FROM teacher GROUP BY position;

 

2 多表查询

        WHEREHAVING的区别:见"分组查询"

        WHEREON对于内连接没区别:

                对内连接来说:没区别

                对外连接来说:WHERE只会显示符合条件的记录,ON会将一张表中不符合条件的记录也显示(左/右外连接一点要用ON,否则会报错),当然WHERE可以再对外连接ON条件后生成的临时表进行进一步过滤

2.1 内连接

        只查询2张表之间有关联条件的数据

SELECT * FROM 表1,表2,表3... WHERE 关联条件 AND 筛选条件

2.2 外连接

        查一张表的全部数据和领一张表的关联数据

2.2.1 左外连接

SELECT * FROM 表1 LEFT JOIN 表2 ON 关联条件1 AND 关联条件2... WHERE 筛选条件

2.2.2 右外连接

SELECT * FROM 表1 RIGHT JOIN 表2......

2.2.3 全外连接

        全外连接,即求多张表的并集,但MySQL不支持全外连接的查询,但可以通过UNION语句实现

SELECT * FROM 表1 LEFT JOIN 表2 ON 关联条件 UNION SELECT * FROM 表1 RIGHT JOIN 表2 ON 关联条件

2.3 子查询

2.3.1 一行一列(一个值)

SELECT * FROM 表名 WHERE id = (SELECT MAX(id) FROM 表名)

2.3.2 多行一列(一个集合)

SELECT * FROM 表名 WHERE id IN (SELECT id FROM 表名 WHERE id<10)

2.3.3 多行多列(一个虚拟表:虚拟表都要起别名)

SELECT 表1.a , 表1.b , 表3.x , 表3.y FROM 表1 LEFT JOIN (SELECT * FROM 表2 WHERE id<10) 表3 ON 关联条件

2.4 叠加查询

SELECT 字段1,字段2 FROM 表1 UNION SELECT 字段3,字段4 FROM 表2    //UNION前表记录与UNION后表记录叠加(列数相同,字段名取前表的)    //UNION会将叠加后的记录去重,UNION ALL不会去重

3 SQL执行顺序

多表关联(ON)  >>  条件(WHERE)  >>  聚合  >>   分组(GROUP)  >>  分组过滤(HAVING)  >>  排序(ORDER BY)  >>  分页(LIMIT)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

npm介绍

npm介绍 npm&#xff08;Node Package Manager的缩写&#xff09;是一个软件包管理器&#xff0c;主要进行JavaScript的包管理。通过npm&#xff0c;我们可以很方便地进行JavaScript包的下载、升级&#xff0c;我们也可以把我们开发的JavaScript包共享给其他使用者。 在npm没…

CRC原理介绍及STM32 CRC外设的使用

1. CRC简介 循环冗余校验&#xff08;英语&#xff1a;Cyclic redundancy check&#xff0c;简称CRC&#xff09;&#xff0c;由 W. Wesley Peterson 于 1961 年首次提出的一种纠错码理论。 CRC是一种数据纠错方法&#xff0c;主要应用于数据通信或者数据存储的场合&#xff…

TLS协议深度解析:挖掘现代网络安全防御的底层技术

正常简单的通讯 1、服务器生成一对密钥&#xff0c;公钥A、私钥A 2、浏览器请求服务器时&#xff0c;服务器把公钥A传给浏览器 3、浏览器随机生成一个对称加密的密码S&#xff0c;用公钥A加密后传给服务器 4、服务器接收后&#xff0c;用私钥A解密&#xff0c;得到密钥S 5、浏…

java中HashMap如何根据value的值去获取key是多少

在Java中&#xff0c;HashMap是一种基于键值对存储数据的数据结构。HashMap并没有直接提供根据value获取key的方法。但你可以通过遍历HashMap的entrySet&#xff0c;找到对应的value&#xff0c;然后获取其对应的key。 以下是一个示例代码&#xff1a; public <K, V> K…

【深度学习实战—6】:基于Pytorch的血细胞图像分类(通用型图像分类程序)

✨博客主页&#xff1a;米开朗琪罗~&#x1f388; ✨博主爱好&#xff1a;羽毛球&#x1f3f8; ✨年轻人要&#xff1a;Living for the moment&#xff08;活在当下&#xff09;&#xff01;&#x1f4aa; &#x1f3c6;推荐专栏&#xff1a;【图像处理】【千锤百炼Python】【深…

dji uav建图导航系列()move_base

文章目录 1、导航框架2、move_base功能包3、amcl功能包4、代价地图的配置4.1、通用配置文件4.2、全局规划配置文件4.3、局部规划配置文件5、局部规划器配置6、launch文件1、导航框架 导航的关键是机器人定位和路径规划两大部分 move_base:实现机器人导航中的最优路径规划 am…

datagrip 相关数据连接信息无缝迁移

背景 因为公司换电脑了&#xff0c;接触的项目比较多&#xff0c;不同项目&#xff0c;不同环境的数据库连接有好几十个&#xff0c;如果在新电脑上挨个重新连接一遍劳心劳力&#xff0c;所以想看一下能不能直接将之前保存的连接信息直接迁移到新的电脑上面。 为此&#xff0c…

Docker:01 OverView

Docker&#xff1a;01 OverView 基本介绍 Docker是一个用于开发、交付、运行应用程序的开放平台&#xff0c;可以使应用程序与基础架构分开&#xff0c;以便快速交付软件。 Docker在一个被叫做容器的隔离环境下&#xff0c;提供了打包和运行的能力。 容器非常轻量化&#x…

Android studio 调整jar包顺序

第一步&#xff1a;编译jar包&#xff0c;放入lib路径下&#xff1a;如&#xff1a; 第二步&#xff1a;app 目录下build.gradle 中添加 compileOnly files(libs/classes.jar) 第三步&#xff1a;project目录下build.gradle 中添加 allprojects {gradle.projectsEvaluated {t…

第50节:cesium 绘制指定类型区域(含源码+视频)

结果示例: 完整源码: <template><div class="viewer"><el-button-group class="top_item"><el-button type=

1、Flutter移动端App实战教程【环境配置、模拟器配置】

一、概述 Flutter是Google用以帮助开发者在IOS和Android 两个平台开发高质量原生UI的移动SDK&#xff0c;一份代码可以同时生成IOS和Android两个高性能、高保真的应用程序。 二、渲染机制 之所以说Flutter能够达到可以媲美甚至超越原生的体验&#xff0c;主要在于其拥有高性…

Jetsonnano B01 笔记5:IIC通信

今日继续我的Jetsonnano学习之路&#xff0c;今日学习的是IIC通信&#xff0c;并尝试使用Jetson读取MPU6050陀螺仪数据。文章提供源码。文章主要是搬运的官方PDF说明&#xff0c;这里结合自己实际操作作笔记。 目录 IIC通信&#xff1a; IIC硬件连线&#xff1a; 安装IIC库文…

智能小车之蓝牙控制并测速小车、wife控制小车、4g控制小车、语音控制小车

目录 1. 蓝牙控制小车 2. 蓝牙控制并测速小车 3. wifi控制测速小车 4. 4g控制小车 5. 语音控制小车 1. 蓝牙控制小车 使用蓝牙模块&#xff0c;串口透传蓝牙模块&#xff0c;又叫做蓝牙串口模块 串口透传技术&#xff1a; 透传即透明传送&#xff0c;是指在数据的传输过…

掌握AI助手的魔法工具:解密`Prompt`(提示)在AIGC时代的应用(下篇)

前言&#xff1a;在前面的两篇文章中&#xff0c;我们深入探讨了AI助手中的魔法工具——Prompt&#xff08;提示&#xff09;的基本概念以及在AIGC&#xff08;Artificial Intelligence-Generated Content&#xff0c;人工智能生成内容&#xff09;时代的应用场景。在本篇中&am…

10.Xaml ListBox控件

1.运行界面 2.运行源码 a.Xaml 源码 <Grid Name="Grid1"><!--IsSelected="True" 表示选中--><ListBox x:Name="listBo

生成树协议 STP(spanning-tree protocol)

一、STP作用 1、消除环路&#xff1a;通过阻断冗余链路来消除网络中可能存在的环路。 2、链路备份&#xff1a;当活动路径发生故障时&#xff0c;激活备份链路&#xff0c;及时恢复网络连通性。 二、STP选举机制 1、目的&#xff1a;找到阻塞的端口 2、STP交换机的角色&am…

【Vue2.0源码学习】生命周期篇-初始化阶段(initState)

文章目录 1. 前言2. initState函数分析3. 初始化props3.1 规范化数据3.2 initProps函数分析3.3 validateProp函数分析3.4 getPropDefaultValue函数分析3.5 assertProp函数分析 4. 初始化methods5. 初始化data6. 初始化computed6.1 回顾用法6.2 initComputed函数分析6.3 defineC…

Hadoop的HDFS的集群安装部署

注意&#xff1a;主机名不要有/_等特殊的字符&#xff0c;不然后面会出问题。有问题可以看看第5点&#xff08;问题&#xff09;。 1、下载 1.1、去官网&#xff0c;点下载 下载地址&#xff1a;https://hadoop.apache.org/ 1.2、选择下载的版本 1.2.1、最新版 1.2.2、其…

docker报错解决方法

ERROR: readlink /var/lib/docker/overlay2/l: invalid argument 注意&#xff1a;会清空已有安装 sudo service docker stop sudo rm -rf /var/lib/docker sudo service docker start

酷开系统游戏空间,开启大屏娱乐新玩法

在这个充满科技感和无限创意的时代&#xff0c;游戏已经成为我们生活的一部分。而随时着科技的不断发展&#xff0c;以及游戏爱好者的游戏需求在不断提高&#xff0c;促使游戏体验也向更加丰富多彩的方向发展。显然&#xff0c;酷开科技早已经认识到游戏发展的新蓝图&#xff0…