MySQL数据查询(基础)

1. 基本查询

SELECT 语句

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

基本语法
sql 复制代码
SELECT 列1, 列2, ... FROM 表名;

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

sql 复制代码
SELECT * FROM customers;
示例
sql 复制代码
SELECT first_name, last_name FROM customers;

2. 筛选与条件

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

2.1 WHERE 子句

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

语法

sql 复制代码
SELECT column1, column2 
FROM table_name 
WHERE condition;

示例

sql 复制代码
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

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

2.2.2 OR

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

2.2.3 NOT

用途:排除某个条件。

示例

sql 复制代码
WHERE NOT last_name = 'Smith';

2.3 选用修饰

2.3.1 BETWEEN

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

2.3.2 IN

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

2.3.3 LIKE

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

2.3.4 IS NULL

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

2.4 综合示例

sql 复制代码
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 关键字用于从查询结果中去除重复记录,确保返回的结果集中每一行都是唯一的。

用法

sql 复制代码
SELECT DISTINCT column_name 
FROM table_name;
  • 固定格式

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

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

示例:

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

3.2 AS

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

用法

sql 复制代码
SELECT column_name AS alias_name 
FROM table_name;
  • 固定格式

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

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

示例

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

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

Name Surname
John Doe
Jane Smith
Alice Johnson
  • DISTINCT 用于去重,确保查询结果中只有唯一的记录;
  • AS 用于设置列别名,使结果输出更直观易读。

4. 排序与分组

4.1 ORDER BY

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

用法

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

示例

sql 复制代码
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())结合使用。

示例

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

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

4.3 HAVING

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

用法

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

示例

sql 复制代码
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 值的数量。

示例

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

5.2 SUM()

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

示例

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

5.3 AVG()

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

示例

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

5.4 MIN()

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

示例

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

5.5 MAX()

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

示例

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

5.6 使用场景

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

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

5.7 与 GROUP BY 的结合

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

sql 复制代码
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 查询的结果,并去除重复行。

示例

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

6.2 UNION ALL

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

示例

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

6.3 INTERSECT

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

示例

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

6.4 EXCEPT (或 MINUS)

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

示例

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

使用场景

集合操作通常用于:

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

注意事项

  • 所有 SELECT 查询的列数和数据类型必须相同。
  • 在使用 UNIONINTERSECT 时,结果会自动去除重复记录;使用 UNION ALL 时则会保留所有记录。
  • 不同数据库对集合操作的支持可能有所不同,部分数据库可能不支持 INTERSECTEXCEPT
相关推荐
十叶知秋24 分钟前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试
瓜牛_gn2 小时前
mysql特性
数据库·mysql
奶糖趣多多3 小时前
Redis知识点
数据库·redis·缓存
数新网络4 小时前
《深入浅出Apache Spark》系列②:Spark SQL原理精髓全解析
大数据·sql·spark
CoderIsArt4 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧6 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Yaml47 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
Channing Lewis7 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
追风林7 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
毕业设计制作和分享8 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis