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

【MySQL】基础实战篇(2)—数据查询操作

前言

数据查询是数据库管理系统应用的主要内容,也是用户对数据库最频繁、最常见的操作请求。
数据查询可以根据用户提供的限定条件,从已存在的数据表中检索用户需要的数据。
MySQL使用SELECT语句既可以完成简单的单表查询、联合查询,也可以完成复杂的联接查询、子查询,从数据库中检索符合用户需求的数据,并将结果集以表格的形式返回给用户。

这里写目录标题
  • 前言
  • 学习目标
  • 单表查询
      • 查询语句的基本用法
      • 字段的别名
      • DISTINCT消除重复记录
      • WHERE子句指定查询条件
  • 统计查询
  • 多表查询
  • 子查询
  • 联合查询

学习目标

熟练应用SELECT语句进行数据查询。
掌握应用SELECT语句进行分组聚合查询。
掌握应用SELECT语句多表联接查询和子查询。
能够应用SELECT语句进行嵌套查询

单表查询

查询语句的基本用法

主要语法格式如下:

SELECT 字段名1 [,字段名2.....]
FROM 表名1    [,表名2.....]
[WHERE 条件表达式]
[GROUP BY 字段名列表[HAVING 条件表达式]]
[ORDER BY 字段名[ASC|DESC]];

GROUP BY 用于对查询结果进行分组
ORDER BY 用来指定查询结果集的排序方式 ,ASC代表升序排列|DESC代表降序排列

字段的别名

方法
一:字段名 AS 别名
二:字段名 别名

SELECT name 姓名, id AS 学号
FROM STUDENT;
DISTINCT消除重复记录

如果查询结果中出现了重复的行,消除结果中重复的行,则使用DISTINCT关键字可达成此要求。
DISTINCT关键字要在SELECT关键字和第一个字段之间。
对于DISTINCT关键字来说,所有的空值NULL将被认为是重复的内容,当SELECT语句中包括DISTINCT关键字时,不论遇到多少个空值,在结果中只返回一个NULL。

WHERE子句指定查询条件
  • 语法

    SELECT 字段名1[,字段名2…]
    FROM 表名1[,表名2…]
    WHERE 条件表达式

当条件表达式中出现数据类型为 CHAR、NCHAR、VARCHAR、NVARCHAR、text、datetime和smalldatetime的数据时,在引用时需要用单引号括起来。
比较运算符
= , > , < , >= , <= , <> , != , !> , !< , 可以让表中的值与指定值或表达式作比较。

逻辑运算符
逻辑运算符包括AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)。

  • AND :连接两个条件表达式当且仅当两个条件表达式都成立时,组合起来的条件才成立。

  • OR: 连接两个条件表达式,两个条件表达式之一成立,组合起来的条件就成立。

  • NOT: 连接一个条件表达式,对给定条件取反。

  • AND运算符的优先级高于OR运算符,因此当两个同时使用时,优先处理AND的表达式

字符串匹配运算符
在指定条件不是很明确的时候可以使用LIKE 运算符与指定的字符串进行匹配。其语法格式如下:

字段名 LIKE ‘指定字符串’;

通配符和字符串比逊在单引号中。

通配符

含义

%

代表任意长度(0个或多个)的字符串

-

代表任意1个字符

  • 比如
    LIKE ‘c%’ 其意为 匹配以字母c开头的字符串。
    LIKE ‘%21’ 其意为 匹配以数字21结尾的字符串
    LIKE ‘_c%’其意为 匹配以字母c为第二个字符的字符串。

范围运算符
使用 BETWEEN AND 可以查询一个连续的范围

列表运算符
列表运算符主要用于在SQL查询中对一组值进行匹配。常见的列表运算符包括 IN 和 BETWEEN。它们能够使得查询更加简洁高效。

  • IN 运算符
    IN 运算符用于检查某个值是否存在于一个指定的列表中。例如,如果我们想查询某个部门的所有员工,可以使用 IN 运算符来指定多个部门编号。

    sql
    SELECT * FROM Employees
    WHERE DepartmentID IN (1, 2, 3);

在这个例子中,查询所有属于部门1、2或3的员工。使用 IN 运算符可以使查询更清晰,并减少重复代码。

  • BETWEEN 运算符
    BETWEEN 运算符用于选择在某个范围内的值。例如,查询某个时间段内的订单,可以使用 BETWEEN 运算符:

    SELECT * FROM Orders
    WHERE OrderDate BETWEEN ‘2024-01-01’ AND ‘2024-12-31’;

空值判断运算符

  • IS NULL 运算符
    IS NULL 运算符用于检测字段是否为NULL值。如果需要查找没有指定值的记录,可以使用此运算符。例如,查询所有没有邮箱地址的员工:

    sql
    SELECT * FROM Employees
    WHERE Email IS NULL;

  • IS NOT NULL 运算符
    IS NOT NULL 运算符则用于查找那些字段有值的记录。例如,查询所有拥有邮箱地址的员工:

    sql
    SELECT * FROM Employees
    WHERE Email IS NOT NULL;

在处理空值时,特别是在数据清理和完整性检查中,空值判断运算符是非常重要的工具。

统计查询

  • COUNT 函数
    COUNT 函数用于计算记录的数量。例如,计算员工总数:

    SELECT COUNT(*) FROM Employees;

  • SUM 函数
    SUM 函数用于计算某一列的总和。例如,计算所有订单的总金额:

    SELECT SUM(TotalAmount) FROM Orders;

AVG 函数
AVG 函数用于计算平均值。例如,计算员工的平均薪资:

sql
SELECT AVG(Salary) FROM Employees;
  • MAX 和 MIN 函数
    MAX 和 MIN 函数分别用于查找某一列的最大值和最小值。例如,查找最高薪资和最低薪资:

    SELECT MAX(Salary) AS HighestSalary, MIN(Salary) AS LowestSalary FROM Employees;

多表查询

  1. 内连接(INNER JOIN)
    内连接用于返回两个表中匹配的记录。例如,查询每个订单及其对应的客户信息:

    SELECT Orders.OrderID, Customers.CustomerName
    FROM Orders
    INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

  2. 外连接(OUTER JOIN)
    外连接分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN)。左外连接返回左表的所有记录以及右表中符合条件的记录,而右外连接则相反。

– 左外连接示例

SELECT Employees.EmployeeID, Orders.OrderID
FROM Employees
LEFT JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID;
  1. 自连接
    自连接是一种特殊的连接方式,用于从同一张表中提取数据。例如,查找所有员工及其经理的信息:

    SELECT E1.EmployeeName AS Employee, E2.EmployeeName AS Manager
    FROM Employees E1
    LEFT JOIN Employees E2 ON E1.ManagerID = E2.EmployeeID;

子查询

  • 在 WHERE 子句中的子查询
    例如,找出那些工资高于公司平均工资的员工:

    sql
    SELECT * FROM Employees
    WHERE Salary > (SELECT AVG(Salary) FROM Employees);

  • 在 FROM 子句中的子查询
    子查询也可以作为虚拟表使用。例如,查询每个部门的平均薪资:

    SELECT DepartmentID, AVG(Salary) AS AverageSalary
    FROM (SELECT DepartmentID, Salary FROM Employees) AS DeptSalaries
    GROUP BY DepartmentID;

联合查询

  • UNION
    UNION 用于合并两个或多个查询的结果集,并去除重复记录。例如,查询来自不同部门的员工姓名:

    sql
    SELECT EmployeeName FROM Employees WHERE DepartmentID = 1
    UNION
    SELECT EmployeeName FROM Employees WHERE DepartmentID = 2;

  • UNION ALL
    UNION ALL 则会返回所有记录,包括重复的。例如:

    SELECT EmployeeName FROM Employees WHERE DepartmentID = 1
    UNION ALL
    SELECT EmployeeName FROM Employees WHERE DepartmentID = 2;


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

相关文章:

  • (上)基于机器学习的图像识别——遥感图像分类(LeNet-5;AlexNet;VGGNet;GoogLeNet;ResNet)
  • 车载定位监控系统开发指南
  • 运维Splunk面试题及参考答案
  • 聚焦低空经济,峰飞航空飞行汽车开启未来出行新篇章
  • 「JVS更新日志」低代码、企业会议、智能BI、智能排产2.26更新说明
  • 一、Vscode、Git、Github账号及个人访问令牌
  • 使用mermaid查看cursor程序生成的流程图
  • WSL2下,向github进行push时出现timeout的问题
  • 8.5 kubelet维护pod的内存管理器podManager源码解析
  • 测试金蝶云的OpenAPI
  • 使用 Kubeflow 和 Ray 构建机器学习平台
  • 机器学习:监督学习、无监督学习和强化学习
  • 达梦数据库阻塞死锁及解锁
  • Excel工作圈小工具一个集合了大量Excel功能的绿色工具软件
  • C#中使用Newtonsoft.Json多态正反序列化
  • 基于 MetaGPT 自部署一个类似 MGX 的多智能体协作框架
  • 内容中台的企业CMS架构是什么?
  • 对话式AI引擎:DeepSeek技术引领多模态交互新篇章
  • RabbitMq延时队列的实现
  • 【漫话机器学习系列】107.线性组合(Linear Combination)