MySQL数据查询(基础)

news/2024/9/28 20:55:31 标签: mysql, 数据库, sql

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。

NameSurname
JohnDoe
JaneSmith
AliceJohnson
  • 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

http://www.niftyadmin.cn/n/5681832.html

相关文章

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——15.红黑树

1.红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路 径会比其他路径长出俩倍,…

在一个.NET Core项目中使用RabbitMQ进行即时消息管理

为了在一个.NET Core项目中使用RabbitMQ进行即时消息管理,以下是详细的全程操作指南,包括安装、配置、编写代码和调试使用。 一、安装RabbitMQ 1. 安装Erlang RabbitMQ依赖Erlang,因此需要先安装Erlang。 Windows: 下载并运行Erlang安装…

rust的nutyp验证和validator验证数据的方法

使用nutype验证 Cargo.toml nutype { version "0.5.0", features ["serde","regex"] } regex "1" thiserror "1"modules.rs #[nutype(sanitize(trim, lowercase),validate(not_empty, len_char_min 3, len_char_max …

统一建模语言(UML)在软件研发过程中常用图接受:类图、用例图、时序图、状态图、活动图、流程图、顺序图

UML具有许多不同类型的图表,包括: 静态图:用例图、类图、对象图、组件图、部署图动态图:活动图、状态图、时序图(又叫顺序图、序列图)、协作图 软件工程(软件工程中的各种图一般用于以下三个阶段…

WPF之UI进阶--完整了解wpf的控件和布局容器及应用

前面三篇有关WPF的基础介绍,分别介绍了wpf与winform的异同,wpf的事件生成和使用以及数据绑定。但我们还缺乏一副好的“皮囊”,所以从这篇开始我们来开始学习wpf的UI相关的内容,首当其冲的就是布局容器。 其实我们知道,…

深度学习(入门)03:监督学习

1、监督学习简介 监督学习(Supervised Learning)是一种重要的机器学习方法,它的目标是通过“已知输入特征”来预测对应的标签。在监督学习中,每一个“特征-标签”对被称为样本(example),这些样…

uniapp踩坑 tabbar页面数据刷新了但视图没有更新

问题描述: 有个uni-data-checkbox组件,两个选项:选项1和选项2(对应的value值分别为1和2),v-model绑定属性名为value 两个tabbar页面:tab1,tab2。 tab1页面有个逻辑是在onShow中刷新v…

Leetcode 3298. Count Substrings That Can Be Rearranged to Contain a String II

Leetcode 3298. Count Substrings That Can Be Rearranged to Contain a String II 1. 解题思路2. 代码实现 题目链接:3298. Count Substrings That Can Be Rearranged to Contain a String II 1. 解题思路 这一题和题目3297本质上就是一道题目,然后就…