MySQL Select 查询语句详解及高级用法

这篇具有很好参考价值的文章主要介绍了MySQL Select 查询语句详解及高级用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MySQL是一个开源的关系型数据库管理系统,支持多种操作语言,其中最基础、最常用的命令之一就是SELECT语句。在本篇文章中,这里将详细介绍MySQL SELECT语句的各个方面,从最基本的查询语句,到更高级的技巧和功能。

一、基本语法

SELECT语句用于从表格中检索数据。其基本语法如下:

 

sql

复制代码

SELECT column1, column2, ..., columnN FROM table_name;

在这个语法中,column1, column2, ..., columnN代表要检索的列名,可以是一个或多个(使用逗号分隔)。FROM后面跟着的是要检索的表格名称。

例如,假设我们有一个名为"customers"的表格,其中包含"id", "name"和"email"三列数据,我们想检索所有客户的id和name,那么我们可以使用以下语句:

 

sql

复制代码

SELECT id, name FROM customers;

这将返回一个结果集,其中包含所有客户的id和name。

二、条件查询

除了检索整个表格外,SELECT语句还可以根据特定条件过滤数据,只返回满足条件的行。条件查询可以通过加入WHERE子句来实现。WHERE子句后面跟着的是一个或多个条件,用于指定需要检索的行。例如,我们可以使用以下语句来检索所有名字为“John”的客户:

 

ini

复制代码

SELECT id, name FROM customers WHERE name = 'John';

该语句将返回一个结果集,其中包含所有名字为“John”的客户的id和name。

除了"="运算符外,WHERE子句还支持以下比较运算符:

运算符 描述
= 等于
<> 不等于
大于
>= 大于等于
< 小于
<= 小于等于

在WHERE子句中,我们也可以使用AND、OR和NOT这些逻辑运算符来组合多个条件。例如,我们可以使用以下语句来检索所有名字为“John”且邮箱以“gmail.com”结尾的客户:

 

sql

复制代码

SELECT id, name, email FROM customers WHERE name = 'John' AND email LIKE '%@gmail.com';

该语句将返回一个结果集,其中包含所有满足以上两个条件的客户的id、name和email。

三、通配符查询

使用通配符可以帮助我们更灵活地进行数据检索。通配符可以匹配任意字符或一组字符。在MySQL中,我们可以使用如下两种通配符:

  • %:代表零个或多个字符
  • _:代表单个字符

例如,我们可以使用以下语句来检索所有名字以“J”开头的客户:

 

sql

复制代码

SELECT id, name FROM customers WHERE name LIKE 'J%';

该语句将返回一个结果集,其中包含所有名字以“J”开头的客户的id和name。

我们还可以在LIKE子句中使用_通配符。例如,以下语句将检索所有名字为“John”的客户:

 

sql

复制代码

SELECT id, name FROM customers WHERE name LIKE 'John';

但是,如果我们想检索所有名字为3个字符、首字母为“J”且第三个字母为“n”的客户,我们可以使用以下语句:

 

sql

复制代码

SELECT id, name FROM customers WHERE name LIKE 'J_n';

该语句将返回一个结果集,其中包含所有满足以上条件的客户的id和name。

四、排序查询

在MySQL中,我们可以通过在SELECT语句中添加ORDER BY子句来对结果集进行排序。ORDER BY子句后面跟着要排序的列名,以及排序方式(ASC表示升序排列,DESC表示降序排列)。例如,以下语句将检索所有客户的id和name,并按照name升序排列:

 

sql

复制代码

SELECT id, name FROM customers ORDER BY name ASC;

我们也可以同时按照多个列进行排序,只需要在ORDER BY子句中添加多个列名即可。例如,以下语句将检索所有客户的id、name和email,并先按照name升序排列,然后按照email降序排列:

 

sql

复制代码

SELECT id, name, email FROM customers ORDER BY name ASC, email DESC;

五、限制查询结果

有时候我们只需要检索结果集的前几行或特定范围内的数据。在MySQL中,我们可以使用LIMIT子句来限制结果集的大小。例如,以下语句将检索所有客户的id和name,但只返回前10条记录:

 

sql

复制代码

SELECT id, name FROM customers LIMIT 10;

我们也可以使用OFFSET子句来指定结果集的起始位置。例如,以下语句将检索所有客户的id和name,但从第20条记录开始,只返回10条记录:

 

sql

复制代码

SELECT id, name FROM customers LIMIT 10 OFFSET 20;

注意,在MySQL中,LIMIT子句和OFFSET子句的顺序是固定的,先写LIMIT再写OFFSET。

六、聚合函数

除了基本的SELECT语句外,MySQL还提供了一些聚合函数,用于对数据进行统计和汇总。以下是一些常用的聚合函数:

函数 描述
COUNT() 统计查询结果的行数
SUM() 计算指定列的总和
AVG() 计算指定列的平均值
MAX() 找出指定列的最大值
MIN() 找出指定列的最小值

例如,以下语句将统计customers表格中所有客户的数量:

 

sql

复制代码

SELECT COUNT(*) FROM customers;

我们也可以使用聚合函数对满足特定条件的数据进行统计。例如,以下语句将计算名字以“J”开头的客户的数量:

 

sql

复制代码

SELECT COUNT(*) FROM customers WHERE name LIKE 'J%';

七、分组和过滤

有时候我们需要对数据进行分组统计,或者通过分组来过滤数据。在MySQL中,我们可以使用GROUP BY子句实现分组操作。GROUP BY子句后面跟着要分组的列名,例如:

 

sql

复制代码

SELECT gender, COUNT(*) FROM customers GROUP BY gender;

该语句将按照gender列进行分组,并统计每组中的客户数量。

我们也可以使用HAVING子句在分组后过滤数据。HAVING子句与WHERE子句类似,只不过它作用于分组后的结果集。例如,以下语句将找出名字以“J”开头的客户中,订阅了两个或更多服务的客户:

 

vbnet

复制代码

SELECT name, COUNT(*) as num_subscriptions FROM customers JOIN subscriptions ON customers.id = subscriptions.customer_id WHERE name LIKE 'J%' GROUP BY customers.id HAVING num_subscriptions >= 2;

该语句将按照名字以“J”开头的客户进行分组,并统计每个客户订阅的服务数量。然后,它使用HAVING子句过滤掉订阅服务少于2个的客户。

八、联结多张表格

在实际的应用中,我们经常需要从多张表格中检索数据。在MySQL中,我们可以使用JOIN操作将多张表格联结起来。以下是一些常见的JOIN操作:

  1. INNER JOIN

INNER JOIN返回两个表格中满足连接条件的行。例如,以下语句将检索每个客户的名字和购买的产品名称:

 

vbnet

复制代码

SELECT customers.name, products.name FROM customers JOIN orders ON customers.id = orders.customer_id JOIN products ON orders.product_id = products.id;

这个查询将内联接customers、orders和products三张表格。它通过customers表格中的id和orders表格中的customer_id建立链接,并通过orders表格中的product_id和products表格中的id建立链接。

  1. LEFT JOIN

LEFT JOIN返回左表格中所有行以及右表格中满足连接条件的行。如果右表格中没有匹配的行,则返回NULL值。例如,以下语句将检索每个客户的名字以及他们最近的订单日期:

 

sql

复制代码

SELECT customers.name, MAX(orders.order_date) FROM customers LEFT JOIN orders ON customers.id = orders.customer_id GROUP BY customers.id;

这个查询将左联接customers和right,通过customers表格中的id和orders表格中的customer_id建立链接。它使用GROUP BY子句按照客户ID进行分组,并计算每个客户最近的订单日期。如果某个客户没有订单,则返回NULL值。

  1. RIGHT JOIN

RIGHT JOIN返回右表格中所有行以及左表格中满足连接条件的行。如果左表格中没有匹配的行,则返回NULL值。例如,以下语句将检索每个产品的名称以及购买该产品的客户数量:

 

sql

复制代码

SELECT products.name, COUNT(customers.id) FROM customers RIGHT JOIN orders ON customers.id = orders.customer_id RIGHT JOIN products ON orders.product_id = products.id GROUP BY products.id;

这个查询将右联接orders和products,通过orders表格中的product_id和products表格中的id建立链接。它使用GROUP BY子句按照产品ID进行分组,并计算每个产品的购买客户数量。如果某个产品没有被任何客户购买,则返回NULL值。

  1. FULL OUTER JOIN

FULL OUTER JOIN返回左表格和右表格中所有行,如果左表格或右表格中没有匹配的行,则返回NULL值。MySQL不支持FULL OUTER JOIN操作,但我们可以通过UNION操作模拟它。例如,以下语句将返回customers和orders表格中所有的行:

 

sql

复制代码

SELECT customers.*, orders.* FROM customers LEFT JOIN orders ON customers.id = orders.customer_id UNION SELECT customers.*, orders.* FROM customers RIGHT JOIN orders ON customers.id = orders.customer_id WHERE customers.id IS NULL;

这个查询将先进行一个LEFT JOIN操作,然后再进行一个RIGHT JOIN操作。它使用UNION操作将两张表格中的结果合并在一起,并使用WHERE子句过滤掉左表格和右表格中都存在的行。

以上就是MySQL联结多张表格的基本操作。我们可以根据需要选择不同的JOIN操作,并使用它们来检索和分析数据库中的数据。

九、使用子查询

子查询是一种在SELECT语句中嵌套另一个SELECT语句的技术。它允许我们使用查询结果作为其他查询的输入。以下是一些常用的子查询:

  1. 用于过滤数据

我们可以使用子查询来过滤需要的数据。例如,以下语句将找出价格高于平均价格的所有产品:

 

sql

复制代码

SELECT name, price FROM products WHERE price > ( SELECT AVG(price) FROM products );

这个查询使用子查询来计算产品价格的平均值,然后将其作为WHERE子句的输入,过滤掉价格低于平均价格的产品。

  1. 用于比较数据

我们也可以使用子查询来比较数据。例如,以下语句将找出销售总额最高的客户:

 

sql

复制代码

SELECT name, ( SELECT SUM(price * quantity) FROM orders WHERE orders.customer_id = customers.id ) as total_sales FROM customers ORDER BY total_sales DESC LIMIT 1;

这个查询使用子查询来计算每个客户的销售总额,并将其作为SELECT子句的一部分输出。然后,它使用ORDER BY子句按照销售总额进行降序排列,并使用LIMIT子句只返回最高的销售总额。

  1. 用于创建派生表格

我们还可以使用子查询来创建派生表格。例如,以下语句将创建一个包含每个产品历史订单数量的表格:

 

sql

复制代码

SELECT products.*, ( SELECT COUNT(*) FROM orders WHERE orders.product_id = products.id ) as order_count FROM products;

这个查询使用子查询来计算每个产品的历史订单数量,并将其作为新的列添加到products表格中。

  1. 用于插入和更新数据

最后,我们可以使用子查询来插入和更新数据。例如,以下语句将向orders表格中插入一个新的订单,并自动设置订单编号:

 

sql

复制代码

INSERT INTO orders (customer_id, product_id, price, quantity) VALUES (1, 2, ( SELECT price FROM products WHERE id = 2 ), 5);

这个查询使用子查询来获取产品价格,并将其作为INSERT子句的一部分插入到新的订单中。文章来源地址https://www.toymoban.com/news/detail-718157.html

到了这里,关于MySQL Select 查询语句详解及高级用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库高级查询语句

    基于这两个数据库表格来实现以下实验 concat(x,y)将提供的参数x和y拼接成一个字符串 trim()返回去除指定格式的值 GROUP BY 有一个原则,凡是在 GROUP BY 后面出现的字段,必须在 SELECT 后面出现; 凡是在 SELECT 后面出现的、且未在聚合函数中出现的字段,必须出现在 GROUP BY 后

    2024年02月11日
    浏览(46)
  • MySQL数据库——高级查询语句

    数据库是用来存储数据,更新,查询数据的工具,而查询数据是一个数据库最为核心的功能,数据库是用来承载信息,而信息是用来分析和查看的。所以掌握更为精细化的查询方式是很有必要的。本文将围绕数据的高级查询语句展开。 1.指定指字段进行查询——SELECT 语法:

    2024年02月11日
    浏览(70)
  • MYSQL-SELECT语句超详解

    目录 前言: SELECT语法 示例 单个字段查询 多个字段查询 查询所有字段 没有FROM的SELECT  查询系统时间 数值计算 虚拟表dual WHERE语句  示例 = AND OR 比较运算符 AND  OR  运算符优先级  IN  NOT IN  BETWEEN NOT BETWEEN LIKE EXISTS ORDER BY  LIMIT DISTINCT 前言: 示例中操作的表为 Sakila 示例数

    2024年02月12日
    浏览(59)
  • Mysql数据库:select from语句详解

    💖The Begin💖点点关注,收藏不迷路💖 select from语句用于从数据库中查询数据。它由两个组成:select 和from。 select 用于指定要查询的列,from用于指定要查询的表。 通过结合使用这两个,我们可以从数据库中选择特定的列和行进行查询。 下面是se

    2024年02月03日
    浏览(31)
  • mysql高级语句之视图、连接查询与存储过程

    目录 视图 视图和表的区别 视图和表的联系 视图命令 视图特点 NULL 值 null、空值和零的区别 连接查询 内连接 左连接 右连接 存储过程 概述 简介 存储过程的优点 语法 调用存储过程 存储过程的参数 查看存储过程 查看指定存储过程信息 修改存储过程 删除存储过程 数据库中

    2024年02月10日
    浏览(37)
  • 【MySQL入门】-- 数据库简单的SELECT语句详解

    目录 1.SQL分类 2.注释 3.数据导入指令 4.基本的SELECT语句 5.列的别名 6.去重复行 7.显示表结构 8.一些数据库基本操作 1.SQL分类 SQL语言在功能上主要分为三大类: DDL(Data Defintion Language)数据定义语言:定义不同的数据库,表,视图,索引等,可以创建,删除,修改数据库和数据库

    2024年02月09日
    浏览(54)
  • 知识图谱实战应用23-【知识图谱的高级用法】Neo4j图算法的Cypher查询语句实例

    大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用23-【知识图谱的高级用法】Neo4j图算法的Cypher查询语句实例,Neo4j图算法是一套在Neo4j图数据库上运行的算法集合。这些算法专门针对图数据结构进行设计,用于分析、查询和处理图数据。图算法可以帮助我们发现图

    2024年02月14日
    浏览(34)
  • Mysql 数据库DQL 数据查询语言 SELECT 基本查询、条件查询、聚合查询、分组查询、排序查询、分页查询——包含DQL所有查询语句。吐血分享。

    DQL:数据查询语言; 用来对表内的数据进行查找 。Database Query Language SQL语句分为:基本查询、条件查询、聚合查询、分组查询、排序查询、分页查询。  可以发现name字段就只剩下一个张三了;   条件: 条件查询—比较运算符 比较运算符 功能 大于 = 大于等于 小于 = 小于等

    2024年01月19日
    浏览(45)
  • 8-MySQL查询高级用法,数据表的关联关系

    1.分组 group by 详情见,发布的第七篇博客文章,7- MySQL函数 2.排序 order by 说明: 在MySQL中,ORDER BY是一种用于对查询结果进行排序的。它可以根据一列或多列的值,以升序或降序的方式对查询结果进行排序,使得查询者可以更加方便 地查看、分析和处理数据。 使用OR

    2024年02月08日
    浏览(42)
  • 【MySQL系列】- Select查询SQL执行过程详解

    一条SQL语句从发送到数据并返回结果,主要经历以下几个过程: 连接器 : 查询缓存 :如果开启了查询缓存,则会经过这一步,但是大多数情况下都不是开启的,也不建议开启;MySQL8.0之后也删除了这一块功能。 分析器 : 优化器 执行器 2.1. 连接器 如果想对MySQL进行操作,第

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包