MySQL基础——DQL

DQL(Data Query Language,数据查询语言)是SQL中的一个子集,主要用于查询数据库中的数据。DQL的核心语句是 SELECT,它用于从一个或多个表中提取数据,并能够通过各种条件进行过滤、排序和聚合操作。下面是DQL的相关知识点及示例:

1. SELECT 语句

SELECT 是 DQL 中的核心语句,用于从表中查询数据。

基本语法:
SELECT 列名1, 列名2, ... FROM 表名 WHERE 条件;
  • 列名1, 列名2:需要查询的列。
  • FROM:指定查询的表。
  • WHERE:可选的条件,用于过滤返回的行。
示例:

查询 users 表中的 nameemail 列:

SELECT name, email FROM users;
 设置别名
语法:SELECT 字段1 AS 别名1, 字段2 AS 别名2 ... FROM 表名;
示例:

name 列的别名设置为 username,将 email 列的别名设置为 user_email

SELECT name AS username, email AS user_email FROM users;
去除重复记录
语法:SELECT DISTINCT 字段列表 FROM 表名;
示例:

查询 users 表中不同的城市(去除重复的 city):

SELECT DISTINCT city FROM users;
示例2:

查询 users 表中不同的 emailcity 组合:

SELECT DISTINCT email, city FROM users;

2. SELECT * 查询所有列

使用 * 可以查询表中的所有列。

示例:

查询 users 表的所有列:

SELECT * FROM users;

3. WHERE 子句(条件查询)

WHERE 子句用于过滤查询结果,返回满足条件的行。

基本语法:
SELECT 列名 FROM 表名 WHERE 条件;
示例:

查询 users 表中 age 大于 25 的用户:

SELECT * FROM users WHERE age > 25;
2. 比较运算符

WHERE 子句中,常用的比较运算符包括:

  • =:等于
  • !=<>:不等于
  • >:大于
  • <:小于
  • >=:大于或等于
  • <=:小于或等于
示例:
# 查询 users 表中 age 等于 30 的用户:SELECT * FROM users WHERE age = 30;# 查询 users 表中 age 不等于 30 的用户:SELECT * FROM users WHERE age != 30;
3. 逻辑运算符

逻辑运算符用于在 WHERE 子句中组合多个条件:

  • AND:所有条件都必须为真。
  • OR:只要有一个条件为真。
  • NOT:条件不成立时为真。
示例:
# 查询 users 表中 age 大于 25 且 city 为 'New York' 的用户:SELECT * FROM users WHERE age > 25 AND city = 'New York';# 查询 users 表中 age 大于 25 或 city 为 'New York' 的用户:SELECT * FROM users WHERE age > 25 OR city = 'New York';
4. BETWEEN 操作符

BETWEEN 用于筛选值在某个范围内的记录。

基本语法:
SELECT 列名 FROM 表名 WHERE 列名 BETWEEN 最小值 AND 最大值;
示例:

查询 users 表中 age 在 20 到 30 岁之间的用户:

注意小的值在前,大的值在后,否则无法筛选

SELECT * FROM users WHERE age BETWEEN 20 AND 30;
5. IN 操作符

IN 用于筛选列值在给定列表中的记录。(相当于或)

基本语法:
SELECT 列名 FROM 表名 WHERE 列名 IN (值1, 值2, ...);
示例:

查询 users 表中 city 为 'New York'、'Los Angeles' 'Chicago' 的用户:

SELECT * FROM users WHERE city IN ('New York', 'Los Angeles', 'Chicago');
6. LIKE 操作符

LIKE 用于进行模糊匹配,常用于文本数据。通常结合通配符 %(表示零个或多个字符)和 _(表示一个字符)使用。

基本语法:
SELECT 列名 FROM 表名 WHERE 列名 LIKE 模式;
示例:

查询 users 表中 name 以 'A' 开头的用户:A%表示开头为A,其余的都行

SELECT * FROM users WHERE name LIKE 'A%';

查询 users 表中 name 中包含 'son' 的用户:

SELECT * FROM users WHERE name LIKE '%son%';
7. IS NULLIS NOT NULL

IS NULL 用于查找列中值为 NULL 的记录,IS NOT NULL 用于查找列中不为 NULL 的记录。

基本语法:
SELECT 列名 FROM 表名 WHERE 列名 IS NULL; SELECT 列名 FROM 表名 WHERE 列名 IS NOT NULL;
示例:

查询 users 表中 email 为空的用户:

SELECT * FROM users WHERE email IS NULL;

查询 users 表中 email 不为空的用户:

SELECT * FROM users WHERE email IS NOT NULL;

 4. 聚合函数:

通常对字段(列)进行操作

  • COUNT()
    • 计算选定列中不为 NULL 的记录数。
    • 示例:SELECT COUNT(*) FROM students; 计算 students 表中记录的总数。
  • SUM()
    • 返回选定列的数值总和。
    • 示例:SELECT SUM(salary) FROM employees; 计算 employees 表中所有员工的工资总和。
  • AVG()
    • 返回选定列数值的平均值。
    • 示例:SELECT AVG(age) FROM users; 计算 users 表中用户的平均年龄。
  • MAX()
    • 返回选定列中的最大值。
    • 示例:SELECT MAX(price) FROM products; 找到 products 表中价格最高的商品。
  • MIN()
    • 返回选定列中的最小值。
    • 示例:SELECT MIN(price) FROM products; 找到 products 表中价格最低的商品。
#聚合函数
select count(IdCard) from user;#null值不参与聚合函数运算
select  avg(age) from user;
select  max(age )from user;
select  min(age) from user;
select sum(age) from user where adress='湖南';

5. GROUP BY 子句(分组查询)

GROUP BY 用于将查询结果按某个或多个列进行分组,常常与聚合函数(如 COUNTSUMAVG 等)一起使用。

基本语法
SELECT 列名, 聚合函数 FROM 表名 GROUP BY  列名;
示例:

统计 users 表中每个城市的用户数量:

SELECT city, COUNT(*) AS user_count FROM users GROUP BY city;
HAVING 子句:

HAVING 子句用于过滤 GROUP BY 的结果。它与 WHERE 类似,但 HAVING 主要用于过滤分组后的结果,而 WHERE 则用于在分组前过滤数据。

基本语法:
SELECT 列名, 聚合函数 FROM 表名 GROUP BY 列名 HAVING 条件;
示例:

查询 users 表中用户数量大于 10 的城市:

SELECT city, COUNT(*) AS user_count FROM users GROUP BY city HAVING user_count > 10;
#查询年龄小于等于60的,并且根据工作地址分组
#获取员工数量大于等于2的工作地址,其中adress_cnt是count的重命名
select adress,count(*) AS adress_cnt from user where age<=60 group by adress having adress_cnt>=2;

执行该查询时,步骤如下:

  • 过滤掉年龄大于 60 岁的用户(如 David)。
  • adress 分组
  • 统计每个组的人数

6. ORDER BY 子句(排序查询)

ORDER BY 用于对查询结果进行排序,可以按升序(ASC)或降序(DESC)排列。

基本语法:
SELECT 列名 FROM 表名 ORDER BY 列名 [ASC|DESC];
示例:

查询 users 表中的用户,并按 age 列降序排列:

SELECT * FROM users ORDER BY age DESC;

支持多字段排序 

#根据年龄对公司员工进行升序排序
select *from user order by age asc;#asc可以省略
select *from user order by age ;#降序排序
select * from user order by age desc;#根据年龄升序排序,如果年龄相同就按照name大小的倒序排序
select *from user order by  age asc,name desc ;

7. LIMIT 子句(分页查询)

LIMIT 用于限制返回的结果集中的行数。通常用于分页查询。

基本语法:
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;

LIMIT 起始索引, 查询记录数:通过 LIMIT 限制返回的行数。

  • 起始索引:表示从哪一行开始返回结果,索引从 0 开始计数。
  • 查询记录数:表示要返回的行数。

注意
起始索引从0开始,起始索引通常使用以下公式计算:

起始索引 = (页码 - 1) * 每页展示的记录数

举例:

假设你想要每页展示 5 条记录:

  • 第一页

    SELECT * FROM user LIMIT 0, 5;
    • 起始索引为 (1 - 1) * 5 = 0,显示第 1 到第 5 条记录。
  • 第二页

    SELECT * FROM user LIMIT 5, 5;
    • 起始索引为 (2 - 1) * 5 = 5,显示第 6 到第 10 条记录。
  • 第三页

    SELECT * FROM user LIMIT 10, 5;
    • 起始索引为 (3 - 1) * 5 = 10,显示第 11 到第 15 条记录。

分页查询是数据库的方言,不同的数据库有不同的实现

如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。 

也就是

SELECT 字段列表 FROM 表名 LIMIT 查询记录数;
示例:

查询 users 表中的前 5 行数据:

SELECT * FROM users LIMIT 5;

练习:

# 查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工
select * from employee where gender = '男' and age between 20 and 40 AND name like '__';# 统计员工表中,年龄小于60岁的,男性员工和女性员工的人数。
select gender,count(*) from employee where age <= 60 group by gender;# 查询所有年龄小于等于35岁员工的姓名和年龄,并且对查询结果按照年龄升序排序,
# 如果年龄相同就按照id升序排序select name,age from employee where age <= 35 order by age,id;# 查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息对查询的结果按年龄降序排序,年龄相同按id值升序排序。
select * from employee where gender = '男' AND age between 20 and 40 order by age desc, id limit 5;

 

DQL的编写顺序和执行顺序:

这是我们通常按照 SQL 语法编写查询语句的顺序。一般的 SQL 查询编写顺序如下:

SELECT column1, column2
FROM table_name
WHERE condition
GROUP BY column
HAVING condition
ORDER BY column
LIMIT row_count OFFSET offset;

编写顺序解释

  1. SELECT:选择要返回的列。
  2. FROM:指定数据表的名称。
  3. WHERE:过滤条件,选择符合条件的数据。
  4. GROUP BY:将查询结果按某列分组。
  5. HAVING:对分组后的数据进行过滤,类似于 WHERE,但用于聚合结果。
  6. ORDER BY:对查询结果进行排序。
  7. LIMIT/OFFSET:限制返回的行数,分页查询中常用。
执行顺序:
  1. FROM employees:首先从 employees 表中读取所有的数据。
  2. WHERE age > 30:对表中的数据进行筛选,过滤出 age > 30 的记录。
  3. GROUP BY department:对筛选后的数据按照 department 列进行分组。
  4. HAVING COUNT(*) > 5:对分组后的数据进行过滤,保留员工数量超过 5 的部门。
  5. SELECT name, COUNT(*):根据查询条件返回指定的列,即部门名称和员工数量。
  6. ORDER BY COUNT(*) DESC:按员工数量进行降序排序。
  7. LIMIT 10:限制返回的记录数为 10 条。

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

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

相关文章

【学习笔记】手写Tomcat 二

目录 响应静态资源 HTTP协议请求格式 1. 解析请求信息 创建解析请求类 HttpRequest 2. 创建静态资源目录 webs 3. 封装响应信息 创建静态资源处理器 StaticResourceHandler 创建响应类 HttpResponse 然后就可以调用响应类了 测试 静态资源的路径说明 作业 1. 绘制…

JNI 详细介绍

一 介绍 java调⽤c&#xff0c;c代码可以通过JNIEnv执行java代码。 安卓NDK 已经对JNI环境进行了集成&#xff0c;我们可以通过android studio来快速搭建一个项目。 二 项目搭建 打开android studio 创建工程&#xff0c;创建工程选择模板Native C 三 模板格式介绍 生成的…

非关系型数据库Redis

文章目录 一&#xff0c;关系型数据库和非关系型数据可区别1.关系型数据库2.非关系型数据库3.区别3.1存储方式3.2扩展方式3.2事务性的支持 二&#xff0c;非关系型数据为什么产生三&#xff0c;Redis1.Redis是什么2.Redis优点3.Redis适用范围4. Redis 快的原因4.1 基于内存运行…

直播标准权威发布,阿里云RTS获首批卓越级评估认证

近期举办的2024“可信云大会”上&#xff0c;中国信通院正式发布了2024年上半年音视频领域最新评估结果。阿里云超低延时直播&#xff0c;以首批卓越级&#xff0c;通过中国信通院超低延时直播性能及服务质量分级测试。 标准发布&#xff0c;权威量化直播体验质量 从直播元年发…

神经网络通俗理解学习笔记(0) numpy、matplotlib

Numpy numpynumpy 基本介绍Ndarray对象及其创建Numpy数组的基础索引numpy数组的合并与拆分&#xff08;重要&#xff09;numpy数组的矩阵运算Numpy数组的统计运算numpy中的arg运算numpy中的神奇索引和比较 Matplotlib numpy numpy 基本介绍 numpy 大多数机器学习库都用了这个…

【Echarts】使用多横坐标轴展示近十五天天气预报

现在手机都有天气app,使用echarts展示十五天天气预报的需要你遇到过这样离大谱的需求吗&#xff1f;如果没有或许你能从中找到些许思路。 效果 看效果是不是有点那么个意思,开局一张图,代码全靠ctrl c。不多说上代码。 vue模板引擎代码 <template><div ref"xA…

从头开始学MyBatis—02基于xml和注解分别实现的增删改查

首先介绍此次使用的数据库结构&#xff0c;然后引出注意事项。 通过基于xml和基于注解的方式分别实现了增删改查&#xff0c;还有获取参数值、返回值的不同类型对比&#xff0c;帮助大家一次性掌握两种代码编写能力。 目录 数据库 数据库表 实体类 对应的实体类如下&#x…

【LeetCode每日一题】——912.排序数组

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 优先队列 二【题目难度】 中等 三【题目编号】 912.排序数组 四【题目描述】 给你一个整数…

H5 three.js 实现六年级观察物体

o(&#xffe3;▽&#xffe3;)ブ 我又带着新的demo来啦~ 预览 功能点 立方体的阴影 立方体的添加 位置记录 最大限制 三视图展示 立方体的移除 答题模式 随机出题 题库出题 源码 注释算是比较全了&#xff0c;可能部分会有点绕&#xff0c;还能够再优化一下~ <!DOCTYPE …

【第35章】Spring Cloud之Seata-Server快速入门

文章目录 前言一、准备1. 架构图2. 工作机制3. Seata术语4. 事务模式4.1 Seata AT 模式(依赖数据库)4.2 Seata TCC 模式(不依赖数据库)4.3 Seata Saga 模式(支持长事务)4.4 Seata XA 模式(支持XA 协议) 二、安装1. 下载2. 解压3. 重要属性4. 修改配置4.1 配置中心4.2 注册中心4…

C语言 13 指针

指针可以说是整个 C 语言中最难以理解的部分了。 什么是指针 还记得在前面谈到的通过函数交换两个变量的值吗&#xff1f; #include <stdio.h>void swap(int, int);int main() {int a 10, b 20;swap(a, b);printf("a %d, b %d", a, b); }void swap(int …

循环神经网络RNN+长短期记忆网络LSTM 学习记录

循环神经网络&#xff08;RNN) RNN的的基础单元是一个循环单元&#xff0c;前部序列的信息经处理后&#xff0c;作为输入信息传递到后部序列 x为输入向量&#xff0c;y为输出向量&#xff0c;a为上一隐藏层的a与x通过激活函数得到的值&#xff0c;简言之&#xff0c;每一层神…

华为 HCIP-Datacom H12-821 题库 (23)

&#x1f423;博客最下方微信公众号回复题库,领取题库和教学资源 &#x1f424;诚挚欢迎IT交流有兴趣的公众号回复交流群 &#x1f998;公众号会持续更新网络小知识&#x1f63c; 1.以下关于 VRRP 基本概念的描述&#xff0c;错误的是哪些选项&#xff1f; A、一个虚拟路由器…

S32K3 工具篇6:如何将RTD EB工程导入到S32DS

S32K3 工具篇6&#xff1a;如何将RTD EB工程导入到S32DS 1. MCAL_Plugins->Link Source Resource Filters2. Includes3. Preprocessor4. Linker5. optimization6. main.c 这个主题实际上&#xff0c;之前已经有多人写过&#xff0c;并且写的很好&#xff0c;只是实际操作中&…

qt-creator-10.0.2之后版本的jom.exe编译速度慢下来了

1、Qt的IDE一直在升级&#xff0c;qt-creator的新版本下载地址 https://download.qt.io/official_releases/qtcreator/ 2、本人一直用的是qt-creator-10.0.2版本&#xff0c;官网历史仓库可以下载安装包qt-creator-opensource-windows-x86_64-10.0.2.exe https://download.qt…

URP 线性空间 ui资源制作规范

前言&#xff1a; 关于颜色空间的介绍&#xff0c;可参阅 unity 文档 Color space URP实现了基于物理的渲染&#xff0c;为了保证光照计算的准确&#xff0c;需要使用线性空间&#xff1b; 使用线性空间会带来一个问题&#xff0c;ui资源在unity中进行透明度混合时&#xff…

COMP 6714-Info Retrieval and Web Search笔记week1

哭了哭了&#xff0c;这周唯一能听懂的就这门 目录 IR&#xff08;Information Retrieval)是什么&#xff1f;IR的基本假设Unstructured (text) vs. structuredDocuments vs. Database Records比较文本&#xff08;Comparing Text&#xff09;IR的范围(Dimensions of IR)IR的任…

YoloV10改进策略:上采样改进|动态上采样|轻量高效,即插即用(适用于分类、分割、检测等多种场景)

摘要 本文使用动态上采样改进YoloV10,动态上采样是今天最新的上采样改进方法,具有轻量高效的特点,经过验证,在多个场景上均有大幅度的涨点,而且改进方法简单,即插即用! 论文:《DySample:Learning to Upsample by Learning to Sample》 论文:https://arxiv.org/pdf/…

fmql之ubuntu移植

官方资料&#xff1a;ubuntu18的压缩包 目的&#xff1a;放到SD卡中启动ubuntu&#xff08;官方是放在emmc中&#xff09; 教程&#xff1a;99_FMQL45_大黄蜂开发板跑ubuntu18.04.docx 所需文件 其中&#xff0c;format_emmc_ext4.txt对emmc的分区是512M&#xff08;放上述文…

C++ | Leetcode C++题解之第397题整数替换

题目&#xff1a; 题解&#xff1a; class Solution { public:int integerReplacement(int n) {int ans 0;while (n ! 1) {if (n % 2 0) {ans;n / 2;}else if (n % 4 1) {ans 2;n / 2;}else {if (n 3) {ans 2;n 1;}else {ans 2;n n / 2 1;}}}return ans;} };