当前位置: 首页 > article >正文

MySQL数据查询(基础)

1. 基本查询

 SELECT 语句

SELECT语句用于从表中查询数据。可以选择特定的列,也可以选择所有列。

基本语法
SELECT 列1, 列2, ... FROM 表名;

选择所有列: 使用*表示选择所有列。

SELECT * FROM customers;
示例
SELECT first_name, last_name FROM customers;

2. 筛选与条件

在 SQL 查询中,使用 WHERE 子句来指定条件,以筛选出满足特定条件的记录。这样可以限制返回的结果集,确保只得到需要的数据。

2.1 WHERE 子句

用途:用于指定查询条件,限制返回的记录。

语法

SELECT column1, column2 
FROM table_name 
WHERE condition;

示例

SELECT first_name, last_name 
FROM customers 
WHERE last_name = 'Smith';
  • 固定格式
    • SELECT:开始查询。
    • FROM:指定数据来源表。
    • WHERE:用于筛选数据。
  • 可更改字段
    • first_name, last_name:要选择的列。
    • customers:表名。
    • last_name = 'Smith':筛选条件。

2.2 逻辑连词

2.2.1 AND

  • 用途:同时满足多个条件。
  • 示例
WHERE last_name = 'Smith' AND first_name = 'John';

2.2.2 OR

  • 用途:满足任一条件。
  • 示例
WHERE last_name = 'Smith' OR last_name = 'Johnson';

2.2.3 NOT

用途:排除某个条件。

示例

WHERE NOT last_name = 'Smith';

2.3 选用修饰

2.3.1 BETWEEN

  • 用途:筛选某个范围内的值(例如,价格在 100 到 500 之间)。
  • 示例
WHERE order_amount BETWEEN 100 AND 500;
  • 说明:包括范围的起始值和结束值。

2.3.2 IN

  • 用途:检查某列的值是否在指定的列表中。
  • 示例
WHERE last_name IN ('Smith', 'Johnson', 'Williams');
  • 说明:相当于多个 OR 条件的组合。

2.3.3 LIKE

  • 用途:进行模式匹配,常用于字符串匹配。
  • 示例
WHERE first_name LIKE 'A%';
  • 说明% 代表任意字符,可以用于模糊查询。first_name则是你要查询的字段,这里会查询first_name字段是否存在AE、A8、A;这种模式的值。

2.3.4 IS NULL

  • 用途:检查某列的值是否为 NULL。
  • 示例
WHERE phone_number IS NULL;
  • 说明:用于查找没有值的记录。

2.4 综合示例

SELECT first_name, last_name 
FROM customers 
WHERE (last_name = 'Smith' OR last_name = 'Johnson') 
AND phone_number IS NOT NULL;
  • SELECT first_name, last_name

    • 选择要返回的列,这里是客户的名(first_name)和姓(last_name)。
  • FROM customers

    • 指定要查询的表,这里是 customers 表。
  • WHERE

    • 这是筛选条件,用于限制返回的记录。
  • (last_name = 'Smith' OR last_name = 'Johnson')

    • 这是一个逻辑条件,表示筛选出姓氏为 'Smith' 或 'Johnson' 的客户。
    • 使用了逻辑连词 OR,意味着只要满足其中一个条件就会被选中。
  • AND phone_number IS NOT NULL

    • 这是另一个条件,用于确保筛选出的记录中,phone_number 列的值不为 NULL。
    • 这意味着只有那些有电话号码的客户才会被返回。

 

3. 结果处理

3.1 DISTINCT

概念DISTINCT 关键字用于从查询结果中去除重复记录,确保返回的结果集中每一行都是唯一的。

用法

SELECT DISTINCT column_name 
FROM table_name;
  • 固定格式

    • SELECT:关键字,用于指定要查询的列。
    • DISTINCT:关键字,表示只返回唯一值。
    • FROM:关键字,指定数据来源表。
  • 可变字段

    • column_name:表示要选择的列名。
    • table_name:表示要查询的表名。

示例:

SELECT DISTINCT last_name 
FROM customers;
  • 解释: 从 customers 表中选择唯一的姓氏 (last_name)。如果 last_name 列中有重复值,返回的结果将只包含每个唯一姓氏一次。

3.2 AS

概念AS 关键字用于给查询结果中的列或表达式起一个别名,使输出结果更易于理解和阅读。

用法

SELECT column_name AS alias_name 
FROM table_name;
  • 固定格式

    • SELECT:关键字,用于指定要查询的列。
    • AS:关键字,用于指定别名。
    • FROM:关键字,指定数据来源表。
  • 可变字段

    • column_name:表示要选择的列名。
    • alias_name:表示为列起的别名。
    • table_name:表示要查询的表名。

示例

SELECT first_name AS Name, last_name AS Surname 
FROM customers;
  • 解释: 从 customers 表中选择 first_namelast_name 列,并将它们分别命名为 NameSurname。这样,结果集中将显示更友好的列名,便于理解。

最后返回的内容中这两个字段不再叫做 first_namelast_name 列,而是叫做Name和Usrname。

NameSurname
JohnDoe
JaneSmith
AliceJohnson
  • DISTINCT 用于去重,确保查询结果中只有唯一的记录;
  • AS 用于设置列别名,使结果输出更直观易读。

4. 排序与分组

4.1 ORDER BY

功能:用于对查询结果进行排序。

用法

  • 可以按一个或多个列排序。
  • 支持升序(ASC,默认)或降序(DESC)排列。

示例

SELECT first_name, last_name 
FROM customers 
ORDER BY last_name ASC;
  • 固定格式
    • ORDER BY:关键字,用于指定排序的列。
    • ASC|DESC:排序方式,可选,默认为升序。
  • 可更改字段
    • last_name:要排序的列名。

4.2 GROUP BY

功能GROUP BY 的主要功能就是将同一列中出现的相同值的记录归为一组。具体来说,当你使用 GROUP BY 语句时,数据库会扫描指定的列,并将所有相同的值聚合到一起,从而形成一个组。每个组中的数据可以通过聚合函数进行计算,比如求和、计数、平均值等。

用法

  • 常与聚合函数(如 COUNT()SUM())结合使用。

示例

SELECT last_name, COUNT(*) AS count 
FROM customers 
GROUP BY last_name;
  • 固定格式
    • GROUP BY:关键字,用于分组的列。
  • 可更改字段
    • last_name:要分组的列名。
    • COUNT(*):聚合函数,返回每组的记录数。

将一列中具有相同值的记录归为一组,然后在对这组记录进行操作。 

4.3 HAVING

功能:用于对分组后的结果进行筛选。

用法

  • 常与 GROUP BY 结合使用,过滤分组的结果集。

示例

SELECT last_name, COUNT(*) AS count 
FROM customers 
GROUP BY last_name 
HAVING COUNT(*) > 1;
  • 固定格式
    • HAVING:关键字,用于条件筛选。
  • 可更改字段
    • COUNT(*) > 1:用于筛选条件,可以更改为其他聚合函数或条件。

结合这些功能,可以在查询中使用 ORDER BY 来对最终结果排序,使用 GROUP BY 来对数据进行分组,并利用 HAVING 来过滤这些分组结果,从而得到所需的信息。

5.聚合函数 

聚集函数是 SQL 中用于对一组值进行计算的函数,通常与 GROUP BY 子句结合使用,用于对分组后的数据进行统计分析。以下是常用的聚集函数及其详细说明:

后面的示例中带有AS,只是值最后返回结果的时候,将这个字段命名为这个名字展示,与聚合函数的使用无关。 

5.1 COUNT()

功能:计算行数或非 NULL 值的数量。

示例

SELECT COUNT(customer_id) AS total_customers
FROM customers;
  • 解释:返回 customers 表中所有具有客户 ID 的数量。

5.2 SUM()

功能:计算指定列的总和。

示例

SELECT SUM(sale_amount) AS total_sales
FROM sales;
  • 解释:返回 sales 表中所有销售金额的总和。

5.3 AVG()

功能:计算指定列的平均值。

示例

SELECT AVG(sale_amount) AS average_sales
FROM sales;
  • 解释:返回 sales 表中销售金额的平均值。

5.4 MIN()

功能:查找指定列的最小值。

示例

SELECT MIN(price) AS lowest_price
FROM products;
  • 解释:返回 products 表中价格的最小值。

5.5 MAX()

功能:查找指定列的最大值。

示例

SELECT MAX(price) AS highest_price
FROM products;
  • 解释:返回 products 表中价格的最大值。

5.6 使用场景

聚集函数通常用于生成报告和分析,例如:

  • 统计客户数量、销售总额。
  • 分析销售趋势,查找最低和最高价格。
  • 计算产品的平均销量。

5.7 与 GROUP BY 的结合

聚集函数经常与 GROUP BY 结合使用,以便对分组后的数据进行统计。例如:

SELECT product_id, SUM(sale_amount) AS total_sales
FROM sales
GROUP BY product_id;
  • 解释:对 sales 表按产品 ID 分组,并计算每种产品的总销售额。

如果不加GROUP BY的话,直接用SUM,会计算所有记录的sale_amount字段的总和,加了之后,就会将同一个组(product_id字段相同的)的sale_amount记录相加,然后将几个组的合展示出来。 

6. 集合操作

6.1 UNION

功能:合并两个或多个 SELECT 查询的结果,并去除重复行。

示例

SELECT first_name FROM customers
UNION
SELECT first_name FROM employees;
  • 解释:此查询将 customers 表和 employees 表中的 first_name 列的所有唯一值合并,返回一个不重复的名字列表。

6.2 UNION ALL

功能:合并多个 SELECT 查询的结果,但保留所有重复行。

示例

SELECT first_name FROM customers
UNION ALL
SELECT first_name FROM employees;
  • 解释:此查询将返回两个表中的所有名字,包括重复的名字。

6.3 INTERSECT

功能:返回两个查询结果的交集,即只包含在两个结果集中都出现的记录。

示例

SELECT first_name FROM customers
INTERSECT
SELECT first_name FROM employees;
  • 解释:此查询将返回在 customers 表和 employees 表中都存在的 first_name

6.4 EXCEPT (或 MINUS)

功能:返回第一个查询结果中不在第二个查询结果中的记录。

示例

SELECT first_name FROM customers
EXCEPT
SELECT first_name FROM employees;
  • 解释:此查询将返回在 customers 表中存在,但不在 employees 表中的 first_name

使用场景

集合操作通常用于:

  • 整合来自不同表的数据。
  • 找出重复或唯一的记录。
  • 比较不同数据集的相似性和差异性。

注意事项

  • 所有 SELECT 查询的列数和数据类型必须相同。
  • 在使用 UNIONINTERSECT 时,结果会自动去除重复记录;使用 UNION ALL 时则会保留所有记录。
  • 不同数据库对集合操作的支持可能有所不同,部分数据库可能不支持 INTERSECTEXCEPT

http://www.kler.cn/a/321619.html

相关文章:

  • mybatisPlus打印sql配置
  • leetcode hot100【LeetCode 236.二叉树的最近公共祖先】java实现
  • 使用热冻结数据层生命周期优化在 Elastic Cloud 中存储日志的成本
  • Vue3 -- 项目配置之stylelint【企业级项目配置保姆级教程3】
  • 【视觉SLAM】1-概述
  • SQL 注入详解:原理、危害与防范措施
  • 新React v19特性
  • 面试速通宝典——4
  • Java中的注解处理器:自定义注解与APT工具的应用场景
  • 基于SSM+小程序的医院核酸检测服务管理系统(医院2)(源码+sql脚本+视频导入教程+文档)
  • LabVIEW提高开发效率技巧----利用第三方库和工具
  • Spring Boot与Spring Integration:集成模式的现代化实现
  • C++冷门知识点1
  • 基于SpringBoot+Vue+MySQL的电影院购票管理系统
  • word2vector训练数据集整理(代码实现)
  • 设计模式、系统设计 record part01
  • 生信初学者教程(十一):数据校正
  • 【C语言】手把手带你拿捏指针(完)(指针笔试、面试题解析)
  • 算法学习021 c++有多少张桌子 并查集算法学习 中小学算法思维学习 比赛算法题解 信奥算法解析
  • pandas习题 042:将列标签中的日期由近到远排列
  • map的使用
  • FFmpeg源码:avio_skip函数分析
  • 云计算Openstack Nova
  • elasticSearch常见命令及历史数据迁移
  • openlayers中一些问题的解决方案
  • JVM 类加载机制2