MySQL查询语句语法使用

目录

  • 一、基本查询
  • 二、条件查询
      • 2.1 简单条件表达式
      • 2.2 逻辑表达式
      • 2.3 模糊查询 (`LIKE`)
      • 2.4 范围查询 (`BETWEEN ... AND ...`)
      • 2.5 列表查询 (`IN`)
      • 2.6 空值查询 (`IS NULL` 或 `IS NOT NULL`)
  • 三、排序查询
      • 3.1 基本语法
      • 3.2 单列排序
      • 3.2 多列排序
      • 3.3 使用表达式排序
  • 四、分组查询
      • 聚合函数
      • 分组查询-基础语法
      • 示例
      • 多列分组
      • 使用HAVING子句
      • 注意
  • 五、限制查询【`LIMIT`】
      • 注意
  • 六、多表查询
      • 最后当然还需要配合一些题目练习查询语句的技巧,下面的链接是一些比较经典的题目,可以尝试着写一下
    • MySQL查询练习题目
    • 最后

一、基本查询

select 字段1,字段2,… from 表名;

查询返回的是一张虚拟表,查询对原表数据没有任何影响,默认查询的全表数据

-- 基本查询
-- 查询所有列
select sid,sname,age,sex,score,cid groupLeaderId from stu;
-- 查询所有列,在测试,练习时可以使用*代替
select * from stu;
-- 查询指定 列
select sid,sname,sex from stu;
-- 查询的列名可以取别名,使用as,但是一般as不写
select sid as 学号,sname as 姓名,score 成绩 from stu-- 年龄+1
select age+1 from stu;
算数运算符描述
+两列做加法运算
-两列做减法运算
*两列做乘法运算
/两列做除法运算

二、条件查询

MySQL 中的条件查询主要用于从数据库表中筛选出符合特定条件的记录。条件通过 WHERE 子句来指定,可以结合多种运算符和函数来构建复杂的查询条件。以下是一些基本的条件表达式类型及其示例:

2.1 简单条件表达式

  • 等于 (=): 查询某一列值等于特定值。
    SELECT * FROM employees WHERE salary = 8000;
    
  • 不等于 (!=<>): 查询某一列值不等于特定值。
    SELECT * FROM employees WHERE salary != 8000;
    
  • 大于 (>), 小于 (<), 大于等于 (>=), 小于等于 (<=):
    SELECT * FROM employees WHERE age > 30;
    

2.2 逻辑表达式

  • AND: 用于组合多个条件,所有条件必须同时满足。
    SELECT * FROM employees WHERE department = 'Sales' AND salary > 5000;
    
  • OR: 用于组合条件,任一条件满足即可。
    SELECT * FROM employees WHERE department = 'Sales' OR department = 'Marketing';
    
  • NOT: 对条件取反。
    SELECT * FROM employees WHERE NOT (salary >= 5000);
    

2.3 模糊查询 (LIKE)

  • 用于匹配包含特定模式的字符串。
    SELECT * FROM employees WHERE name LIKE 'J%'; -- 开头为 J 的名字
    SELECT * FROM employees WHERE name LIKE '%a%'; -- 包含字母 a 的名字
    SELECT * FORM employees WHERE name LIKE '李_'; -- 两个字的李姓
    

2.4 范围查询 (BETWEEN ... AND ...)

  • 用于查询值在指定范围内的记录。
    SELECT * FROM employees WHERE hire_date BETWEEN '2000-01-01' AND '2010-12-31';
    

2.5 列表查询 (IN)

  • 用于匹配列值是否在给定的值列表中。
    SELECT * FROM employees WHERE department IN ('HR', 'IT');
    

2.6 空值查询 (IS NULLIS NOT NULL)

  • 用于查询某列值是否为空或非空。
    SELECT * FROM employees WHERE email IS NULL;
    

三、排序查询

在MySQL中,排序查询主要通过ORDER BY子句来实现。以下是一些关于如何使用ORDER BY进行排序的关键点和示例:

3.1 基本语法

SELECT column1, column2, ...
FROM table_name
ORDER BY column_to_sort [ASC|DESC], [another_column_to_sort [ASC|DESC]];
  • column_to_sort是要根据其值进行排序的列名。
  • ASC表示升序排序,默认值,可以省略。
  • DESC表示降序排序。

3.2 单列排序

-- 按照年龄升序排序
SELECT * FROM students ORDER BY age ASC;-- 按照分数降序排序
SELECT * FROM scores ORDER BY score DESC;

3.2 多列排序

当有多列参与排序时,先按照第一个列排序,如果第一个列有相同值,则按照第二个列排序,以此类推。

-- 先按班级升序,班级相同则按学号降序
SELECT * FROM students ORDER BY class ASC, student_id DESC;

3.3 使用表达式排序

可以在ORDER BY中使用表达式,比如计算列或函数。

-- 计算年薪并按其降序排序
SELECT *, (salary * 12) AS year_salary -- AS 也可以省略
FROM employees 
ORDER BY year_salary DESC;

注意:ORDER BY子句通常置于查询的末尾,但在LIMIT子句之前。

四、分组查询

在MySQL中,分组查询是通过GROUP BY子句来实现的,它允许你根据一个或多个列的值将查询结果分成多个组,以便于进行聚合操作,如计算每个组的总数、平均值、最大值、最小值等。以下是进行分组查询的基本概念和示例:

分组查询通常配合聚合函数进行查询,下面先讲一下聚合函数

聚合函数

MySQL支持多种聚合函数,以下是一些常用的聚合函数及其用途:

  1. COUNT():

    • 功能:计算行数。
    • 用法COUNT(*) 计算所有行,包括 NULL 值;COUNT(column_name) 计算指定列中非 NULL 值的数量。
  2. SUM():

    • 功能:计算一列的总和。
    • 用法SUM(column_name) 返回指定列所有值的和。
  3. AVG():

    • 功能:计算平均值。
    • 用法AVG(column_name) 返回指定列所有值的平均数。
  4. MAX():

    • 功能:找出最大值。
    • 用法MAX(column_name) 返回指定列中的最大值。
  5. MIN():

    • 功能:找出最小值。
    • 用法MIN(column_name) 返回指定列中的最小值。

注意,聚合函数不能直接嵌套调用,例如,不能直接写成AVG(SUM(column_name))的形式,如果需要这样的复合聚合操作,通常需要使用子查询或者临时变量。

分组查询-基础语法

SELECT column1,column2...
FROM table_name
WHERE conditions
GROUP BY column1 [ASC|DESC], column2...;
  • column1, column2 是用于分组的列名。
  • table_name 是表的名称。
  • WHERE conditions 是可选的,用于在分组前过滤数据。
  • ASCDESC 可用于指定分组的排序顺序,但不常用,因为通常是在聚合后对结果进行排序。

示例

假设有一个销售订单表orders,包含product_id(产品ID)、quantity(数量)和order_date(订单日期)字段,你想要按产品ID分组并计算每个产品的总销售数量:

SELECT product_id, SUM(quantity) AS total_quantity
FROM orders
GROUP BY product_id;

多列分组

如果你需要根据多个列进行分组,只需在GROUP BY后面列出这些列名,例如,同时按产品ID和订单日期分组:

SELECT product_id, order_date, SUM(quantity) AS daily_total_quantity
FROM orders
GROUP BY product_id, order_date;

使用HAVING子句

HAVING子句用于在分组后对结果进行过滤,通常与聚合函数一起使用:

SELECT product_id, SUM(quantity) AS total_quantity
FROM orders
GROUP BY product_id
HAVING SUM(quantity) > 100;

这将只显示总销售数量超过100的产品。

注意

  • GROUP BY必须出现在WHERE子句之后,ORDER BY之前。
  • 未包含在聚合函数中的、且不在GROUP BY子句中的列不能出现在SELECT列表中,除非该列也在GROUP BY子句中。
  • ORDER BY可以用来对最终的分组结果进行排序。

五、限制查询【LIMIT

在MySQL中,限制查询结果数量通常使用LIMIT子句。LIMIT允许你指定从查询结果中返回的行数。其基本语法如下:

SELECT column1, column2, ...
FROM table_name
LIMIT [offset,] row_count;
  • offset 是一个可选参数,表示从哪一行开始返回结果,第一行的索引是0。如果省略,默认从0(即第一行)开始。
  • row_count 是必需的,指定了想要返回的最大行数。

例如,如果你想从employees表中获取前5条记录,可以这样写:

SELECT * FROM employees LIMIT 5;

如果你想从第10条记录开始,获取接下来的10条记录,可以这样写:

SELECT * FROM employees LIMIT 10, 10;

这里,10是索引,表示从第10条记录开始,10是行数,表示需要获取10条记录。

注意

  • 限制查询通常用于实现分页功能
    例如:假如 student 表中有50个学生
    如果在页面显示所有学生信息,50个学生全部都显示在一页上,显然是不可能的,就算显示出来,也很难找到想要查看的信息。
  • 那么,就要通过实现分页显示功能,来进行显示信息
    假设 一页显示10个学生,也就是十条数据,那就分成5页
  • 页数:pageNum = 5
  • 单页数据量:pageSize = 10
  • 查询第n页数据:
select * from student limit (n-1) * pageSize , pageSize 

六、多表查询

MySQL中的多表查询主要用于从两个或更多表中联合检索数据,主要通过以下几种方式实现:

  1. 内连接(INNER JOIN)
    内连接只返回两个表中匹配的行。如果表A的某行在表B中没有匹配,或者反过来,那么这行就不会出现在结果集中。

    SELECT columns
    FROM table1
    INNER JOIN table2
    ON table1.column = table2.column;
    

    也可以这样写:

     SELECT columnsFROM table1 , table2where table1.column = table2.column;
    
  2. 外连接(OUTER JOIN)

    • 左连接(LEFT JOIN/LEFT OUTER JOIN):返回左表的所有行,即使在右表中没有匹配项。如果右表中没有匹配,则结果为NULL。
      SELECT columns
      FROM table1
      LEFT JOIN table2
      ON table1.column = table2.column;
      
    • 右连接(RIGHT JOIN/RIGHT OUTER JOIN):与左连接相反,返回右表的所有行,即使左表中没有匹配项。
      SELECT columns
      FROM table1
      RIGHT JOIN table2
      ON table1.column = table2.column;
      
    • 全连接(FULL JOIN):返回左表和右表中的所有行。如果某一边没有匹配,则另一边的结果为NULL。MySQL本身不直接支持FULL JOIN,但可以通过UNION来模拟实现。
  3. 交叉连接(CROSS JOIN)
    返回左表的每一行与右表的每一行的笛卡尔积,即所有可能的组合。如果不带ON子句,那么就是一个交叉连接。

    SELECT columns
    FROM table1
    CROSS JOIN table2;
    
  4. 子查询(Nested Select或Subquery)
    在一个查询内部嵌套另一个查询,外部查询可以使用内部查询的结果。

    SELECT column
    FROM table1
    WHERE column IN (SELECT column FROM table2);
    
  5. 使用表别名(Aliases)
    为表指定别名可以简化复杂的查询,提高代码的可读性。

    SELECT a.column1, b.column2
    FROM table1 AS a
    INNER JOIN table2 AS b
    ON a.id = b.id;
    

    其中 AS可以省略:

    SELECT a.column1, b.column2
    FROM table1  a
    INNER JOIN table2  b
    ON a.id = b.id;
    

最后当然还需要配合一些题目练习查询语句的技巧,下面的链接是一些比较经典的题目,可以尝试着写一下

MySQL查询练习题目


最后

如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍在这里插入图片描述

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

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

相关文章

mysql的安装和连接

一.数据库相关概 念 1.数据库 存储数据的仓库,数据是有组织的进行存储,简称DB。 2.数据库管理系统 操纵和管理数据库的大型软件,简称DBM。 3.SQL 操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。简称SQL。 二.市面上流行的数据库 1.ORACLE 2.MySQL …

如何搭建一个成功的短剧制作平台

要搭建一个成功的短剧制作平台&#xff0c;需要考虑多个方面&#xff0c;包括目标定位、技术选择、内容管理、用户体验等。 1、明确目标和定位&#xff1a; 确定你的目标受众是谁&#xff0c;他们的年龄、兴趣、消费习惯等。 明确短剧制作平台的主要定位&#xff0c;是提供原创…

新能源燃气灶用的是什么燃料?无需燃料,电生明火

新能源燃气灶广义的讲就是用电生明火的烹饪灶具&#xff0c;如&#xff1a;电焰灶、电燃灶或电火灶&#xff0c;无需任何燃料和氧气助燃&#xff1b;而狭义上讲是采用出电能以外的一切新燃料烹饪灶具&#xff0c;如&#xff1a;高功率燃气灶、生物合成油灶等。在厨房革命的浪潮…

01--MySQL数据库概述

目录 第1章 MySQL数据库概述 1.1 基本概念 1.2 MySQL数据库管理系统 1.3 表的关系 第2章 MySQL卸载、安装、登录 第3章 客户端使用演示 3.1 命令行客户端 3.1.1 数据库 3.1.2 数据表 3.1.3 导入数据 3.1.4 导出数据 3.2 可视化客户端 第4章 SQL语句 4.1 SQL的分类…

Linux中的文本编辑器vi与vim

摘要&#xff1a; 本文将深入探讨VI和VIM编辑器的基本概念、特点、使用方法以及它们在Linux环境中的重要性。通过对这两款强大的文本编辑器的详细分析&#xff0c;读者将能够更全面地理解它们的功能&#xff0c;并掌握如何有效地使用它们进行日常的文本编辑和处理任务。 引言&…

【Mac】FxFactory 8 Pro for Mac(视觉特效处理包)及同类型软件介绍

软件介绍 FxFactory Pro 是一款功能强大的插件管理和创作工具&#xff0c;专为视频编辑器和特效艺术家设计&#xff0c;适用于 macOS 系统。它集成了大量的视频特效插件&#xff0c;并与多种主流视频编辑软件无缝兼容&#xff0c;如 Final Cut Pro、Premiere Pro、After Effec…

vue项目首页优化问题(前后端都要优化)

2.1 config/index.js 开启productionGzip 将其productionGzip 配置成true 2.2 配置Gzip的 插件配置 打开webpack.prod.config.js 配置一下这段代码 代码如下 if (config.build.productionGzip) { const CompressionWebpackPlugin require(‘compression-webpack-plugin’)…

kafka(五)spring-kafka(2)详解与demo

一、简单的收发消息demo 父工程pom&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&qu…

谷歌手机刷机教学

注意&#xff1a;手机已经解开了oem锁和bl 1、adb基础命令 连接设备adb devices&#xff1a;列出当前连接的所有设备。 adb connect <设备IP>&#xff1a;通过IP地址连接设备&#xff08;用于无线连接&#xff09;。 设备信息adb shell getprop&#xff1a;获取设备的所…

Docker部署MySQL8.3.0(保姆级图文教程)

系列文章目录 Docker部署Nginx1.21.5&#xff08;保姆级图文教程&#xff09; Docker部署MySQL8.3.0&#xff08;保姆级图文教程&#xff09; 文章目录 一、环境二、拉取镜像2.1 查找 Docker Hub 上的 MySQL 镜像2.2 拉取MySQL镜像2.3 查看MySQL镜像 三、在宿主机创建目录3.1 创…

无痛接入图像生成风格迁移能力:GAN生成对抗网络

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享&#xff0c;包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

【一】【算法】经典树状数组和并查集,详细解析,初步认识,【模板】树状数组 1,树状数组并查集

【模板】树状数组 1 题目描述 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面两种操作&#xff1a; 将某一个数加上 x x x 求出某区间每一个数的和 输入格式 第一行包含两个正整数 n , m n,m n,m&#xff0c;分别表示该数列数字的个数和操作的总个数。 第二…

java: Annotation processing is not supported for module cycles.

java: Annotation processing is not supported for module cycles. 查了半天是造成了循环依赖 解决步骤 1.打开project structure 2.找到循环依赖的两个或多个模块&#xff0c;在dependencies中找到对应的模块并删除 仅记录我遇到这个问题的解决方法&#xff0c;并不适合所…

七层和四层的区别

OSI七层模型的结构如下&#xff1a; 物理层&#xff08;Physical Layer&#xff09;&#xff1a;负责传输原始比特流&#xff0c;实现数据在物理媒介上的传输&#xff1b; 数据链路层&#xff08;Data Link Layer&#xff09;&#xff1a;负责在相邻节点之间传输数据帧&#…

Git简单使用和理解

workspace: 本地的工作目录。 index/stage&#xff1a;暂存区域&#xff0c;临时保存本地改动。 local repository: 本地仓库&#xff0c;只想最后一次提交HEAD。 remote repository&#xff1a;远程仓库。 对于Git,首先应该明白第一git是一种分布式版本控制系统&#xff0c;最…

后仿真中 module path polarity 问题

目录 一 未知极性 二 正极性 三 负极性 不知道大家有没有遇到这个问题:什么?我们知道的module path delay 指的是定义在specify...endspecify block 中的语句,指示输入-输出的延迟信息。 这里的module path 竟然还有极性问题,今天,来学习一下。 模块路径的极性是一…

用RNN构建人名分类器

目录 项目综述1.导入必备的工具包2.处理数据&#xff0c;满足训练要求2.1 统计常用的字符2.2 进行规范化处理,去除重音符号2.3 将文件读取到内存中2.4 构建人名国家和具体人名的对应关系2.5 one-hot编码 3.构建RNN模型3.1 构建传统RNN模型3.2 构建传统LSTM模型3.3 构建传统GRU模…

永久免费设备日志采集工具

免费试用下载: Gitee下载 最新版本 优势: A. 开箱即用. 解压直接运行.不需额外安装. B. 批管理设备. 设备配置均在后台管理. C. 无人值守 客户端自启动,自更新. D. 稳定安全. 架构简单,内存占用小,通过授权访问.

openeuler一个服务异常占用cpu的排查过程

1 环境 硬件环境&#xff1a;LS1046A arm64 系统环境&#xff1a;openEuler release 22.03 (LTS-SP1) Linux kernel 4.19.26 2 问题说明 我的硬件平台需要适配一下 openEuler release 22.03 (LTS-SP1) 但是目前只能使用原来硬件平台的内核&#xff0c;在适配的过程中…

LLM大语言模型应用方案之RAG检索增强生成的实现步骤。

0.我理解的RAG 什么是RAG&#xff1f; RAG的全称是“检索增强生成模型”&#xff08;Retrieval-Augmented Generation&#xff09;。这是一种特别聪明的大语言模型。 RAG是怎么工作的呢&#xff1f; 1.检索&#xff1a;当你问RAG一个问题时&#xff0c;它会先去“图书…