MySQL DQL语法

MySQL DQL语法

DQL语法简介

DQL(Data Query Language)语句是一种用于从数据库中检索数据的语言。它主要用于数据查询和数据分析,而不是对数据库中的数据进行更新、插入或删除。DQL语句通常用于获取特定条件下的数据,进行聚合计算、排序、过滤和连接等操作。

DQL语句的主要目的是从数据库中检索和查询数据,并根据特定的需求对数据进行分析和处理。通过灵活使用DQL语句,可以满足不同的数据查询和分析需求,从而提取有用的信息和洞察力。

DQL 基本查询语法

  1. 查询语句(SELECT):

    • 查询语句(SELECT)用于从数据库表中检索所需的数据行。下面是查询语句的详细说明:

      • 原型:SELECT 列1, 列2, … FROM 表名 WHERE 条件

      • 参数:

        • 列1, 列2, …:要查询的列名称,可选参数。如果不指定列,将返回表中所有列的数据。
        • 表名:要查询数据的数据库表名称。
        • 条件:指定要检索的数据行的条件,可选参数。只有满足条件的数据行才会被检索。
      • 选项:

        • 可以根据条件来检索满足条件的数据行。
        • 如果不指定条件,则将检索表中的所有行。
        • 可以使用关键字ORDER BY来指定查询结果的排序顺序。
        • 可以使用关键字DISTINCT来排除重复的结果。

      示例:
      假设我们有一个存储学生信息的表名为"students",包含列名id、name和age。我们要检索年龄大于等于20的学生的姓名和年龄,并按照姓名进行升序排序。查询语句如下所示:

      SELECT name, age FROM students WHERE age >= 20 ORDER BY name;
      

      这个语句将从"students"表中检索年龄大于等于20的学生姓名和年龄,并按照姓名进行升序排序。

    DQL 进阶语法

     除了基本的SELECT语句,DML语句SELECT还提供了一些扩展功能和选项,用于更灵活和精确地检索所需的数据。下面是一些常用的扩展功能:
    
    1. 条件筛选:

      • 原型:SELECT 列1, 列2, … FROM 表名 WHERE 条件

      • 参数:

        • 列1, 列2, …:指定要选择的列名称或表达式,用于返回所需的数据。
        • 表名:要查询数据的数据库表名称。
        • 条件:指定要筛选的数据行的条件,根据条件判断返回行是否满足要求。条件可以使用比较操作符(如=、<、>、IN、BETWEEN等)和逻辑操作符(如AND、OR、NOT)进行组合。
      • 选项:

        • WHERE子句必须在FROM子句之后,在GROUP BY子句或ORDER BY子句之前。
        • 可以使用多个条件组合使用,并用逻辑操作符连接条件,以构建更复杂的条件筛选。

        示例:

        • 等于(=)操作符:
        SELECT * FROM table WHERE column = value;
        

        例如:SELECT * FROM customers WHERE age = 25;
        这个查询将返回customers表中年龄为25岁的所有顾客信息。

        1. 小于(<)操作符:
        SELECT * FROM table WHERE column < value;
        

        例如:SELECT * FROM products WHERE price < 50;
        这个查询将返回products表中价格低于50的所有产品信息。

        1. 大于(>)操作符:
        SELECT * FROM table WHERE column > value;
        

        例如:SELECT * FROM orders WHERE total_amount > 1000;
        这个查询将返回orders表中总金额超过1000的所有订单信息。

        1. IN操作符:
        SELECT * FROM table WHERE column IN (value1, value2, ...);
        

        例如:SELECT * FROM customers WHERE id IN (1, 2, 3);
        这个查询将返回customers表中ID为1、2、3的顾客信息。

        1. BETWEEN操作符:
        SELECT * FROM table WHERE column BETWEEN value1 AND value2;
        

        例如:SELECT * FROM orders WHERE order_date BETWEEN '2021-01-01' AND '2021-01-31';
        这个查询将返回orders表中订单日期在2021年1月1日到2021年1月31日期间的订单信息。

        1. AND逻辑运算符:
        SELECT * FROM table WHERE condition1 AND condition2;
        

        例如:SELECT * FROM products WHERE price < 50 AND stock > 0;
        这个查询将返回products表中价格低于50且库存大于0的产品信息。

        1. OR逻辑运算符:
        SELECT * FROM table WHERE condition1 OR condition2;
        

        例如:SELECT * FROM customers WHERE age < 18 OR age > 65;
        这个查询将返回customers表中年龄小于18岁或大于65岁的顾客信息。

        1. NOT逻辑运算符:
        SELECT * FROM table WHERE NOT condition;
        

        例如:SELECT * FROM orders WHERE NOT status = 'Completed';
        这个查询将返回orders表中状态不是"Completed"的所有订单信息。

        • 别名定义:
      • 可以使用AS关键字为选择的列指定别名,以便在结果中显示具有更具描述性的列名。别名可以通过给列名或表达式使用AS关键字来定义,例如:SELECT 列名 AS 别名 FROM 表名。

    2. 排序:

      • 排序是DML语句SELECT中一个常用的扩展功能,它允许我们按照特定的列或表达式对查询结果进行升序(ASC)或降序(DESC)排序。排序可以根据需要对数据进行正确的排列,以便更好地理解和分析结果。以下是排序的详细说明:

        • 原型:SELECT 列1, 列2, … FROM 表名 ORDER BY 列1 [ASC|DESC], 列2 [ASC|DESC], …

        • 参数:

          • 列1, 列2, …:要排序的列名称或表达式,用于定义排序顺序。可以指定多个列,按照列的顺序进行排序。
          • 表名:要查询数据的数据库表名称。
          • ASC:指定升序排序方式(可选,默认排序方式)。
          • DESC:指定降序排序方式(可选)。
        • 选项:

          • ORDER BY子句必须在SELECT语句中紧随FROM子句之后,在GROUP BY子句之前。
          • 可以对一个或多个列进行排序,列名之间用逗号分隔。
          • 可以使用ASC或DESC关键字指定排序方式,默认为升序排序。

        示例:
        假设我们有一个存储学生信息的表名为"students",该表包含列名name、age和grade。我们希望将学生信息按照年龄进行升序排序,并在年龄相同的情况下按照姓名进行升序排序。排序的查询语句如下所示:

        SELECT name, age, grade FROM students ORDER BY age ASC, name ASC;
        

        这个查询语句将从"students"表中选择学生姓名(name)、年龄(age)和年级(grade),并按照年龄(升序)和姓名(升序)的顺序进行排序。首先根据学生的年龄进行升序排序,年龄相同时再根据姓名进行升序排序。

    3. 分页查询:

      • 分页查询是DML语句SELECT中常用的一种扩展功能,它允许我们在查询结果中限制返回的数据行数,以便在大型数据集中分页显示数据或限制结果集的大小。分页查询可以方便地浏览和展示大量数据

      • 以下是分页查询在MySQL中的语法示例:

        SELECT1,2, ... FROM 表名 LIMIT 起始行索引, 每页行数;
        
        • 参数:
          • 列1, 列2, …:要选择的列名称或表达式,用于返回所需的数据。
          • 表名:要查询数据的数据库表名称。
          • 起始行索引:指定起始行的索引位置,通常表示为第一行为0或1,具体取决于数据库。
          • 每页行数:指定每页返回的数据行数。

        示例:
        假设我们有一个存储学生信息的表名为"students",包含列名id、name和age。我们希望在每页显示10条数据,并获取第3页的数据。分页查询的查询语句如下所示:

        SELECT id, name, age FROM students LIMIT 20, 10;
        

        这个查询将从"students"表中选择学生的id、姓名和年龄,并限制返回从第21行开始的10行数据(即第3页的数据)。

    4. 聚合函数:

      • 聚合函数(Aggregate functions)是DML语句SELECT中用于对结果集进行汇总、计算和统计的函数。通过使用聚合函数,我们可以对选定的列或表达式进行统计操作,例如计算总和、平均值、最大值、最小值等。以下是常用的聚合函数以及它们的功能:

        1. SUM:计算指定列的总和。
        SELECT SUM(column) FROM table;
        

        例如:SELECT SUM(sales) FROM orders; 将计算"orders"表中sales列的总和。

        1. COUNT:计算指定列中的行数(不包括NULL值)。
        SELECT COUNT(column) FROM table;
        

        例如:SELECT COUNT(*) FROM customers; 将计算"customers"表中的总行数。

        1. AVG:计算指定列的平均值。
        SELECT AVG(column) FROM table;
        

        例如:SELECT AVG(price) FROM products; 将计算"products"表中price列的平均值。

        1. MAX:返回指定列中的最大值。
        SELECT MAX(column) FROM table;
        

        例如:SELECT MAX(quantity) FROM inventory; 将返回"inventory"表中quantity列的最大值。

        1. MIN:返回指定列中的最小值。
        SELECT MIN(column) FROM table;
        

        例如:SELECT MIN(age) FROM employees; 将返回"employees"表中age列的最小值。

    5. 分组合计:

      • 分组合计是DML语句SELECT中常用的一种扩展功能,它允许我们根据指定的列或表达式进行分组,并对每个分组应用聚合函数,计算每个分组的统计值。通过分组合计,我们可以在查询结果中获取按照特定分类进行汇总的数据。以下是分组合计的详细说明:

        • 原型:SELECT 列1, 列2, …, 聚合函数(column) FROM 表名 GROUP BY 列1, 列2, …

        • 参数:

          • 列1, 列2, …:用于选择的列名称或表达式。
          • 聚合函数(column):要应用的聚合函数,可以是SUM、COUNT、AVG、MAX、MIN等。
          • 表名:要查询数据的数据库表名称。
          • GROUP BY 列1, 列2, …:根据指定列或表达式进行分组,以计算每个分组的聚合计算结果。
        • 选项:

          • GROUP BY子句必须在SELECT语句中紧随FROM子句之后,并在WHERE子句之前。
          • 可以根据需要指定多个列或表达式作为分组标准,多个分组标准之间用逗号分隔。
          • 分组的结果集中,每个组将包含具有相同分组值的行。

        示例:
        假设我们有一个存储销售订单的表名为"orders",该表包含列名order_id、customer_id和order_total。我们希望按照customer_id对订单进行分组,并计算每个客户的订单总额。分组合计的查询语句如下所示:

        SELECT customer_id, SUM(order_total) AS total_amount FROM orders GROUP BY customer_id;
        

        这个查询语句将从"orders"表中选择customer_id,并使用SUM函数计算每个客户的订单总额。使用GROUP BY子句将订单表根据customer_id进行分组,以便对每个分组应用聚合计算。

    6. 连接查询:

      • 连接查询(Join)是DML语句SELECT中的一种常用操作,用于将多个表关联起来,根据共享的列值从多个表中获取数据。连接查询可以从多个表中检索相关数据,以便获取更丰富和全面的查询结果。以下是连接查询的详细说明:

        • 原型:SELECT 列1, 列2, … FROM 表1 JOIN 表2 ON 表1.列 = 表2.列 WHERE 条件

        • 参数:

          • 列1, 列2, …:要选择的列名称或表达式,用于返回所需的数据。
          • 表1, 表2:要连接的数据库表名称。
          • ON 表1.列 = 表2.列:指定连接条件,即指定表1和表2之间的关联列。
          • WHERE 条件:可选,用于进一步筛选满足特定条件的数据行。
        • 选项:

          • 连接查询可以使用不同的连接类型,如内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)等,根据需求选择适当的连接类型。
          • 连接条件是指定连接的关键,连接条件使用ON子句指定,通常是通过表1和表2之间的列之间的相等关系来建立连接。

        示例:
        假设我们有两个存储订单信息和客户信息的表:"orders"表包含列order_id、customer_id和order_total,"customers"表包含列customer_id和customer_name。我们要查询订单信息以及每个订单对应的客户名称,查询语句如下所示:

        SELECT orders.order_id, orders.order_total, customers.customer_name
        FROM orders
        JOIN customers ON orders.customer_id = customers.customer_id;
        

        这个查询语句使用了内连接(INNER JOIN),将"orders"表和"customers"表根据customer_id列进行关联。通过指定ON子句中的连接条件,共享相同customer_id值的订单和客户记录被关联起来。这样,查询结果将包含订单信息(order_id, order_total)以及对应的客户名称(customer_name)。

DQL 语法编写顺序

在编写DQL(Data Query Language)语句时,通常会按照以下顺序编写语法:

  1. SELECT子句:指定要从数据库中检索的列。

  2. FROM子句:指定数据查询的源表或视图。

  3. WHERE子句:可选,用于筛选特定条件的数据。

  4. GROUP BY子句:可选,用于按指定的列进行分组。

  5. HAVING子句:可选,用于对分组后的结果进行条件过滤。

  6. ORDER BY子句:可选,用于按指定的列对结果进行排序。

  7. LIMIT子句:在所有其他子句之后,用于限制查询结果的数量。

编写DQL语句时,可以根据具体需求决定是否编写WHERE子句、GROUP BY子句、HAVING子句和ORDER BY子句。这些子句的顺序可以根据查询的逻辑关系进行调整。最后的查询结果将根据编写的DQL语句进行返回。

DQL 语法执行顺序

DQL(数据查询语言)语句的执行顺序是按照以下顺序进行的:

  1. FROM子句:首先,数据库管理系统(DBMS)会检索FROM子句指定的数据表或视图。

  2. WHERE子句:接下来,DBMS会对FROM子句返回的数据进行筛选,根据WHERE子句中定义的条件过滤出满足条件的行。

  3. GROUP BY子句:如果存在GROUP BY子句,DBMS会将筛选后的数据按照GROUP BY子句中指定的列进行分组。

  4. HAVING子句:如果存在HAVING子句,DBMS会在分组后的数据上根据HAVING子句中定义的条件进行进一步筛选。

  5. SELECT子句:DBMS会根据SELECT子句中指定的列,从筛选和分组后的数据中提取需要的列数据。

  6. ORDER BY子句:如果存在ORDER BY子句,DBMS会按照ORDER BY子句指定的列对结果进行排序。

  7. LIMIT子句:最后,如果存在LIMIT子句,DBMS会根据LIMIT子句指定的数量限制结果集的返回数量。

需要注意的是,虽然以上是DQL语句的一般执行顺序,但实际的执行顺序可能会根据DBMS优化执行计划和查询处理方式而有所不同。DBMS会尽可能优化查询,例如使用索引、内部排序等来提高查询性能。因此,在实际执行中可能会调整执行顺序以提高效率。

总结

DQL是用于查询和检索数据库数据的重要工具。它具有丰富的功能和灵活性,可以根据不同的查询需求进行条件过滤、排序、聚合计算等操作。通过合理使用DQL,可以从数据库中提取有用的数据以进行数据分析和决策支持。

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

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

相关文章

一文让你彻底搞懂Mybatis之缓存机制

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 Maven版本&#xff1a;apache-maven-3.6.3 Mybatis版本&#xff1a;3.5.6 文章目录 一. 缓存是什么&#xff1f;二. 为什么要使用缓存&#xff1f;三. Mybatis中的缓存分哪几种&#…

pg_13安装

1.安装&#xff08;rpm包安装&#xff09; 1.1 rpm安装 https://www.postgresql.org/download https://yum.postgresql.org/repopackages.php 文档&#xff1a;https://www.postgresql.org/download/linux/redhat/ rpm下载&#xff1a;https://yum.postgresql.org/rpmchart/1…

MySql基本操作

在了解具体的MySql操作之前&#xff0c;我们需要了解一些基本的sql语句注意事项&#xff0c;如下所示&#xff1a; 每一条sql语句都需要以英文 ; 作为结尾&#xff1b;sql语句当中的关键字不区分大小写&#xff0c;不区分双引号和单引号&#xff1b;sql中库名称、表名称和字段…

Springboot+Netty搭建基于UDP协议的客户端(四)

使用NettySpringBoot方式可以快速地开发一套基于UDP协议的服务端程序&#xff0c;同样的也可以开发客户端&#xff0c;一般使用UDP都是使用原生的方式&#xff0c;发送消息后就不管不问&#xff0c;也就是不需要确定消息是否收到&#xff0c;这里使用Netty创建的客户端和服务端…

Windows 不同方式打开的cmd/dos窗口属性配置不同

文章目录 1. 默认值&#xff08;控制台窗口&#xff09;属性2. "C:\Windows\System32\cmd.exe" 属性3. "命令提示符"属性4. 自定义某标题cmd窗口属性5. cmd快捷方式的属性总结 最近在写某个批处理脚本时&#xff0c;意外发现 Windows系统中&#xff0c;在不…

mac 中 brctl 怎么用

mac 中 brctl 怎么用 mac 中 brctl 怎么用1.使用 Homebrew 安装 bridge2.安装完成后&#xff0c;你可以使用 bridge 命令来管理网络桥接。 mac 中 brctl 怎么用 在 macOS 中&#xff0c;没有官方提供的 brctl 命令行工具。但是&#xff0c;你可以使用一个名为 bridge 的开源工…

HBuilder 编辑器终端窗口无法输入,未响应的解决方案

HBuilder 编辑器终端窗口无法输入&#xff0c;未响应的解决方案 一、找到 HBuilder 安装目录 找到 main.js HBuilderX - plugins - builtincef3terminal - script - main.js 二、编辑 main.js 将 main.js 文件中的 powershell.exe 和 cmd.exe 路径都改为绝对路径 C:/Windows…

传染病模型

title: 传染病模型 date: 2023-7-24 10:55:00 updated: 2023-7-24 10:55:00 tags: 算法数学建模传染病模型matlab categories: 数学建模 传染病模型中的符号表示 SI模型&#xff08;艾滋传染模型&#xff09; %% 直接求微分方程的解析解 dsolve(Dx1 -0.1 * x1 * x2 / 1000, D…

SSIS对SQL Server向Mysql数据转发表数据 (三)

1、在控制流界面&#xff0c;在左侧的组件里&#xff0c;添加一个“序列容器组件”和一个“数据流任务组件” 2、双击数据流任务&#xff0c;进入到数据流界面&#xff0c;然后再在左面添加一个OLE DB 源组件、目标源组件 3、右键源组件&#xff0c;编辑&#xff0c;选择好相关…

Aerotech系列文章(3)运动设置命令Motion Setup Commands

1.运动设置命令Motion Setup Commands 斜坡类型&#xff1a; 直线&#xff0c;S曲线&#xff0c;与正弦曲线 Enumerator: RAMPTYPE_Linear Linear-based ramp type. RAMPTYPE_Scurve S-curve-based ramp type. RAMPTYPE_Sine Sine-based ramp type. 函数原型&a…

2023年 React 最佳学习路线

CSS CSS JavaScript JavaScript TypeScript 目前没有找到比其他文档好很多的文档地址 可以先看官网 React 新版 React 官方文档无敌 React React-router-dom V5 V6 Webpack webpack Antd antd

神码ai火车头伪原创设置【php源码】

大家好&#xff0c;给大家分享一下python考什么内容&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 火车头采集ai伪原创插件截图&#xff1a; 1、Python 计算机二级都考什么 Python要到什么程度 考试内容 一、Python语言的基本语法元素…

Jenkins 拉取 GitHub 私有仓库失败问题

添加仓库的时候提示 stderr: fatal: Cannot prompt because user interactivity has been disabled. 把在 GitHub账户设置中生成的个人访问令牌填到地址里

如何使用Flask-WTF来处理表单提交和验证?

处理表单提交和验证是个麻烦的问题&#xff0c;但是我们可以使用Flask-WTF让它变得简单一些&#xff01;Flask-WTF是一个Flask插件&#xff0c;它结合了Flask和WTForms&#xff0c;使得在Flask应用中处理表单变得非常简单。 首先&#xff0c;我们要安装Flask-WTF。你可以使用p…

技术分享 | App测试时常用的adb命令你都掌握了哪些呢?

adb 全称为 Android Debug Bridge&#xff08;Android 调试桥&#xff09;&#xff0c;是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。 adb 是一种功能强大的命令行工具&#xff0c;可让 PC 端与 Android 设备进行通信。adb 命令可执行各种设备操作&#xff0…

UE5引擎源码小记 —反射信息注册过程

序 最近看了看反射相关的知识&#xff0c;用不说一点人话的方式来说&#xff0c;反射是程序在运行中能够动态获取修改或调用自身属性的东西。 一开始我是觉得反射用处好像不大&#xff0c;后续查了下一些反射的使用环境&#xff0c;发现我格局小了&#xff0c;我觉得用处不大的…

43.240.75.X服务器是什么,有什么作用?

什么是服务器&#xff1f;今天我们来了解下服务器到底是什么&#xff1f;还有服务器用途是什么&#xff1f;让我们对服务器有一个简单的了解。 43.240.75.1什么是服务器&#xff1f; 服务器是一台专门用于存储、处理和传输数据的计算机设备。它在网络中扮演着重要角色&#x…

cnvd水证书

日常水个证书 本人比较菜&#xff0c;挖cnvd总是挖不倒漏洞&#xff0c;只能从弱口令入手了&#xff0c;一般使用fofa脚本批量跑。 过程&#xff1a; 日常在佛法中我们总是会遇见设备弱口或系统弱口令 一般是看登录成功的特征和口令&#xff0c;写一个对应的弱口令检测脚本…

Linux虚拟机(lvm)报Unmount and run xfs_repair

问题 linux系统没有正常关机&#xff0c;今天启动虚拟机无法进入系统&#xff0c;提示metadata corruption deleted at xxxx&#xff1b; Unmount and run xfs_repair 分析 主机异常掉电后里面的虚拟机无法启动&#xff0c;主要是损坏的分区 解决 看出来应该是dm-0分区损坏…

unity表情显示在android或者ios原生页面上

国际通用表情库&#xff0c;附带表情unicode码 在unity里面将unicode码转换成字符串&#xff0c;然后就可以再android和ios原生上显示了&#xff0c; 如下是在unity里面将unicode码转字符串方法&#xff1a; string unicodeString char.ConvertFromUtf32((int)emojiSprite.un…