MySQL数据库—DQL查询语句(一篇教会你快速找到想要的数据)

news2025/1/8 4:28:13

目录

▐ 特定列查询

▐ 逻辑处理

▐ 字符函数操作

▐ 分组函数统计

▐ 数学函数

▐ 日期函数

▐ 条件查询

▐ 排序

▐ 数量限制 

▐ 合并

▐ 分组查询


▐ 前言:

 •  DQL全称 Data Query Language 数据查询语言 

 •  可以从一个表中查询数据,也可以从多个表中查询数据。 

 •  基本语法:select 查询的列  from 表名  where 条件   排序   数量限制   分组......

📖 首先让我们先创建一个表,本篇文章的查询都以此表为例

-- 创建一个学生表
CREATE TABLE student(

num INT PRIMARY KEY AUTO_INCREMENT,-- 学号 -主键

NAME VARCHAR(10) NOT NULL,         -- 名字    
gender CHAR(1) NOT NULL,           -- 性别    
score INT NOT NULL,                -- 分数
birthday DATE,                     -- 出生日期
height DECIMAL(3,2)                -- 身高

) 

-- 插入数据
INSERT INTO student(NAME,gender,score,birthday,height)
VALUE
('一鸣','男',84,'2005-4-5','1.75'),
('张三','男',76,'2005-7-4','1.81'),
('小李','女',68,'2005-1-12','1.71'),
('小张','女',54,'2004-8-23','1.64'),
('李四','男',90,'2004-9-6','1.68'),
('张三','男',80,'2006-12-9','1.77')

       就此我们的表就创建完成了,接下来会讲解对表的各种查询操作,上船~启航!

▐ 特定列查询

 •  select  查询列表  from  表名

-- 查找name,score列
SELECT NAME,score FROM student
-- 查找所有列 *
SELECT * FROM student

 

▐ 逻辑处理

 •  case  when  条件  then 结果1 else 结果2  end    可以有多个when

-- case  when  条件  then 结果1 else 结果2  end    可以有多个when
SELECT NAME ,(CASE WHEN score>=90 THEN '优秀'
                  WHEN score>80 AND score<90 THEN'良好'
                  ELSE '一般' END)AS '等级'FROM student
-- 使用as为列重命名

▐ 字符函数操作

 •  单行字符函数--会对查询的每条记录进行操作

 -- length():获取参数值的字节个数
 SELECT NAME,LENGTH(NAME) FROM student

 -- char_length()获取参数值的字符个数
  SELECT NAME,CHAR_LENGTH(NAME)AS NAME,gender FROM student
 
 -- concat(str1,str2,.....):拼接字符串  as 别名
 SELECT num,CONCAT(NAME,':',gender)AS NAME FROM student
 
-- upper()/lower():将字符串变成大写/小写
SELECT UPPER(NAME),LOWER(NAME) FROM student

-- substring(str,pos,length):截取字符串 位置从1开始
SELECT SUBSTRING(NAME,2,3) FROM student

-- instr(str,指定字符):返回子串第一次出现的索引(indexof()),如果找不到返回0
SELECT INSTR(NAME,'三') FROM student

-- trim(str):去掉字符串前后的空格或子串,trim(指定子串 from 字符串)
SELECT CHAR_LENGTH(TRIM(NAME)) FROM student
SELECT  TRIM('张' FROM NAME)  FROM student


-- lpad(str,length,填充字符):用指定的字符实现左填充将str填充为指定长度
SELECT LPAD(NAME,5,'a') , RPAD(NAME,5,'b')FROM student
-- rpad(str,length,填充字符):用指定的字符实现右填充将str填充为指定长度

-- replace(str,old,new):替换,替换所有的子串
SELECT REPLACE(NAME,'一','I') FROM student                  

分组函数统计

  •  sum 求和、avg 平均值、max 最大值、min 最小值、count 计数

-- sum 求和、avg 平均值、max 最大值、min 最小值、count 计数
 -- sum(),avg()只能用于数值类型
 -- max(),min()可以适用于所有类型
 -- count统计行数
 -- count(*) count(1) count(列名) 列的值为空不统计
 
SELECT SUM(height),AVG(height),MAX(height),MIN(height),COUNT(*) FROM student
 -- 查询身高最高的
SELECT * FROM student WHERE height =(SELECT MAX(height)FROM student)

数学函数

 

 •  round( , 保留位数 )四舍五入
 
 •  ceil向上取整
 
 •  floor向下取整   
 
 •  truncate 截断,不会进行四舍五入
 
 •  mod(被除数,除数)
 
 •  rand()获取随机数 0~1之间的小数

-- round(数值):四舍五入
SELECT NAME,ROUND(height) FROM student
-- 指定保留小数位数
SELECT NAME,ROUND(height,1) FROM student

-- ceil(数值):向上取整,返回>=该参数的最小整数
 SELECT NAME,CEIL(height),FLOOR(height) FROM student

-- floor(数值):向下取整,返回<=该参数的最大整数
-- truncate(数值,保留小数的位数):截断,小数点后截断到几位, 不会四舍五入
SELECT NAME,TRUNCATE(height,1) FROM student

-- mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负
SELECT NAME, MOD(num,3) FROM student

-- rand():获取随机数,返回0-1之间的小数
SELECT NAME, RAND() FROM student
 

▐ 日期函数

 •  str_to_date(字符串格式日期,格式):将日期格式的字符转换成指定格式的日期

 •  date_format(日期列,格式):将日期转换成字符串

 •  datediff(big,small):返回两个日期相差的天数

-- 日期格式化
SELECT NAME, YEAR(birthday),MONTH(birthday),DAY(birthday) FROM student

-- 将字符串格式化为日期类型
SELECT STR_TO_DATE('2001-2-2','%Y-%m-%d') FROM student 
 
 -- 将日期格式化为指定的字符串
SELECT DATE_FORMAT(birthday,'%Y-%m') FROM student

-- 计算两个日期之间相差的天数
SELECT DATEDIFF(CURDATE(),birthday) FROM student

日期格式: 

 条件查询

 •  使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句

 •  语法:select <结果列>  from <表名>  where <条件>


 •  比较符号:   =  ,   != 或<>  ,   >  ,   <  ,   >=  ,   <=

-- select 结果列 from 表名 where 条件
 SELECT * FROM student WHERE num =2

 •  逻辑运算:  and (与)     or (或)     not (非)

 -- and 所有条件都满足 or满足其一即可
 SELECT * FROM student WHERE gender ='男'AND height>=1.75

 •  between ... and ...  两者之间  ( 包含临界值 )

 -- 包含临界值
 SELECT * FROM student WHERE height BETWEEN 1.70 AND 1.85

 •  in   判断某字段的值是否属于in列表中的某一项

 -- in (等价or) 否定在in前加not
 SELECT * FROM student WHERE height IN(1.71,1.81)

 •  IS NULL(为空的)或 IS NOT NULL(不为空的)

 -- is (not) null
 SELECT * FROM student WHERE address IS NULL

 •  模糊查询:like  (效率低很少用)

 -- 模糊查询(效率低很少用)   %通配符
 -- like
 SELECT * FROM student WHERE NAME LIKE '张%'

 排序

 •  查询结果排序使用 ORDER BY          order by 排序列 ASC/DESC

 •  ASC 升序 (默认)       DESC 降序

 •  可以给多个排序条件 (什么排序都没有,默认按主键升序排序)

-- ASC 升序(默认)    DESC降序
 SELECT * FROM student ORDER BY height DESC

 SELECT * FROM student ORDER BY height ASC
 -- 可以给多个排序条件

 数量限制 

 •  对查询的显示结果限制数目。limit 开始位置 , 查询的数量   (sql语句最末尾位置)

 •  实际应用场景:数据分页显示

-- limit 开始位置,查询的数量
 SELECT * FROM student LIMIT 0,2
 SELECT * FROM student LIMIT 2,2

📖 若设n为分页的页数,m为查询的数量,则总数为 (n-1)*2

 合并

 •  union        合并多个查询结果,可以去除重复数据.

 •  union all   只合并不去重 (效率更高)

📖     [SQL 语句 1]                     [SQL 语句 1] 

          UNION                              UNION ALL

          [SQL 语句 2]                     [SQL 语句 2]

 注意:合并时要求结果列相同.

 分组查询

  •  语法:select  列  from  表  where  筛选条件  group by  分组的列表  having  分组后的筛选 

-- 只筛选出同名的人
SELECT COUNT(*),NAME FROM student GROUP BY NAME HAVING COUNT(*)>1 

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

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

相关文章

数据库大作业——基于qt开发的图书管理系统(二) 相关表结构的设计

前言 在上一篇文章中。我们完成了Qt环境的安装&#xff0c;同时完成了有关项目需求的分析并绘制了整体的项目架构图&#xff0c;而在图书管理系统中&#xff0c;其实我们主要完成的就是对数据的增删改查&#xff0c;并将这些功能通过信号与槽机制和可视化界面绑定在一起&#…

Fluent 区域交界面的热边界条件

多个实体域公共交界面的壁面&#xff0c;Fluent 会分拆为 wall 和 wall-shadow 的两个壁面&#xff0c;两者为配对关系&#xff0c;分别从属于一个实体域。 配对面可使用热通量、温度、耦合三类热边界条件&#xff0c;前两者统称为非耦合热边界条件。 耦合为配对面默认的热边界…

迭代器解释(C++)

一、什么是迭代器 为了提高C编程的效率&#xff0c;STL&#xff08;Standard Template Library&#xff09;中提供了许多容器&#xff0c;包括vector、list、map、set等。然而有些容器&#xff08;vector&#xff09;可以通过下标索引的方式访问容器里面的数据&#xff0c;但是…

TypeError报错处理

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 一、Python中的TypeError简介 这个错误通常表示在方法调用时&#xff0c;参数类型不正确&#xff0c;或者在对字符串进行格式化操作时&#xff0c;提供的变量与预期不符。 二、错误的源头&#xff1a;字符串格式化…

select,poll,epoll

在 Linux Socket 服务器短编程时&#xff0c;为了处理大量客户的连接请求&#xff0c;需要使用非阻塞I/O和复用&#xff0c;select&#xff0c;poll 和 epoll 是 Linux API 提供的I/O复用方式。 \selectpollepoll操作方式遍历遍历回调底层实现数组链表哈希表IO效率每次调用都进…

数据结构——链表专题1

文章目录 一、移除链表元素二、反转链表三、合并两个有序链表四、链表的中间节点五、环形链表的约瑟夫问题六、分割链表 一、移除链表元素 原题链接&#xff1a;移除链表元素 一个解法是遍历原链表&#xff0c;将与val相等的结点抛弃&#xff0c;链接后一个结点 另一个解法是…

被问了n遍的小程序地理位置权限开通方法

小程序地理位置接口有什么功能&#xff1f; 在平时我们在开发小程序时&#xff0c;难免会需要用到用户的地理位置信息的功能&#xff0c;小程序开发者开放平台新规要求如果没有申请开通微信小程序地理位置接口( getLocation )&#xff0c;但是在代码中却使用到了相关接口&#…

【go项目01_学习记录06】

学习记录 1 使用中间件1.1 测试一下1.2 push代码 2 URI 中的斜杆2.1 StrictSlash2.2 兼容 POST 请求 1 使用中间件 代码中存在重复率很高的代码 w.Header().Set("Content-Type", "text/html; charsetutf-8")统一对响应做处理的&#xff0c;我们可以使用中…

鸿蒙内核源码分析(原子操作篇) | 谁在为原子操作保驾护航

基本概念 在支持多任务的操作系统中&#xff0c;修改一块内存区域的数据需要“读取-修改-写入”三个步骤。然而同一内存区域的数据可能同时被多个任务访问&#xff0c;如果在修改数据的过程中被其他任务打断&#xff0c;就会造成该操作的执行结果无法预知。 使用开关中断的方…

【目标检测】Deformable DETR

一、前言 论文&#xff1a; Deformable DETR: Deformable Transformers for End-to-End Object Detection 作者&#xff1a; SenseTime Research 代码&#xff1a; Deformable DETR 特点&#xff1a; 提出多尺度可变形注意力 (Multi-scale Deformable Attention) 解决DETR收敛…

力扣每日一题115:不同的子序列

题目 困难 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 示例 1&#xff1a; 输入&#xff1a;s "rabbbit", t "rabbit" 输出&#xff1a;3 解释&#xff1a; 如下所示, 有 3 种…

2024视觉与学习青年学者研讨会(VALSE 2024)热点推文预告

视觉与学习青年学者研讨会&#xff08;VALSE&#xff09;是国内人工智能领域顶尖学者一年一度的研讨会。该会议的特点是大、全、新。会议的规模大&#xff0c;参会者达到五千人以上&#xff1b;会议的主题全&#xff0c;全面覆盖人工智能的各大领域&#xff1b;会议的内容新&am…

CSS Web服务器、2D、动画和3D转换

Web服务器 我们自己写的网站只能自己访问浏览&#xff0c;但是如果想让其他人也浏览&#xff0c;可以将它放到服务器上。 什么是Web服务器 服务器(我们也会称之为主机)是提供计算服务的设备&#xff0c;它也是一台计算机。在网络环境下&#xff0c;根据服务器提供的服务类型不…

【arduino】库的安装方法

arduino 库的安装方法 假设你已经安装好 Arduino IDE 以 OneButton 为例来介绍几种安装方法 文章目录 arduino 库的安装方法方法一&#xff1a;直接安装法方法二&#xff1a;导入 .ZIP库方法三&#xff1a;将库文件夹直接复制到贡献库路径下方法四&#xff1a;将库文件夹直接…

JAVA学习14——异常

目录 异常&#xff1a; 1.异常基本介绍&#xff1a; 2.异常体系图&#xff1a; 3.五大运行时异常&#xff1a; &#xff08;1&#xff09;NullPointerException空指针异常&#xff1a; &#xff08;2&#xff09;AirthmetiException数字运算异常&#xff1a; &#xff0…

投资海外标的,首选跨境ETF!现在新开佣金低至万0.5!

全球资产配置的利器 随着经济的发展&#xff0c;全球资产配置成为中产阶级的关注方向。目前&#xff0c;全球资产配置的主要渠道包括直接开立境外账户、 QDII 基金、跨境 ETF 等。 现阶段通过跨境 ETF 投资境外股市是最便利、最具效率的方式之一。首先&#xff0c;与直接境外…

Gradle 基础学习(三) 认识Command-Line Interface

Gradle命令行接口 除了IDE外&#xff0c;我们主要通过Gradle命令行接口来运行Gradle任务和管理Gradle项目。 下面是Gradle命令行使用的一些参考&#xff0c;熟悉后建议实际项目中使用Gradle Wrapper&#xff0c;gradle用法都可以替换为gradlew (macOS / Linux) 或gradlew.bat…

LVGL移植到STM32F4

1、LVGL简介 LittlevGL是一个免费的开源图形库&#xff0c;提供了创建嵌入式GUI所需的一切&#xff0c;具有易于使用的图形元素、漂亮的视觉效果和低内存占用。 1.1、LVGL特点 强大的构建模组&#xff1a;按钮、图表、列表、滑块、图像等先进的图形&#xff1a;动画、反锯齿…

hadoop学习---基于Hive的数仓搭建增量信息拉链表的实现

拉链表就是SCD2&#xff0c;它的优点是即满足了反应数据的历史状态&#xff0c;又能在最大程度上节省存储。 拉链表的实现需要在原始字段基础上增加两个新字段&#xff1a; start_time(表示该条记录的生命周期开始时间——周期快照时的状态)end_time(该条记录的生命周期结束时…

家政保洁上门预约服务小程序源码系统 带完整的安装代码包以及搭建教程

随着社会的快速发展和人们生活节奏的加快&#xff0c;家政保洁服务已成为现代生活中不可或缺的一部分。为了满足广大用户的需求&#xff0c;罗峰给大家分享一款家政保洁上门预约服务小程序源码系统&#xff0c;该系统不仅提供完整的安装代码包&#xff0c;还附带详细的搭建教程…