前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【MySQL】基础实战篇(2)—数据查询操作

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

作者头像
洁洁
发布2024-09-27 08:45:43
910
发布2024-09-27 08:45:43
举报
文章被收录于专栏:小洁叫你mysql

前言

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

学习目标

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

单表查询

查询语句的基本用法

主要语法格式如下:

代码语言:javascript
复制
SELECT 字段名1 [,字段名2.....]
FROM 表名1    [,表名2.....]
[WHERE 条件表达式]
[GROUP BY 字段名列表[HAVING 条件表达式]]
[ORDER BY 字段名[ASC|DESC]];

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

字段的别名

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

代码语言:javascript
复制
SELECT name 姓名, id AS 学号
FROM STUDENT;
DISTINCT消除重复记录

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

WHERE子句指定查询条件
  • 语法
代码语言:javascript
复制
SELECT 字段名1[,字段名2...]
FROM 表名1[,表名2...]
WHERE 条件表达式

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

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

  • AND :连接两个条件表达式当且仅当两个条件表达式都成立时,组合起来的条件才成立。
  • OR: 连接两个条件表达式,两个条件表达式之一成立,组合起来的条件就成立。
  • NOT: 连接一个条件表达式,对给定条件取反。
  • AND运算符的优先级高于OR运算符,因此当两个同时使用时,优先处理AND的表达式

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

代码语言:javascript
复制
字段名 LIKE ‘指定字符串’;

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

通配符

含义

%

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

-

代表任意1个字符

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

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

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

  • IN 运算符 IN 运算符用于检查某个值是否存在于一个指定的列表中。例如,如果我们想查询某个部门的所有员工,可以使用 IN 运算符来指定多个部门编号。
代码语言:javascript
复制
sql
SELECT * FROM Employees
WHERE DepartmentID IN (1, 2, 3);

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

  • BETWEEN 运算符 BETWEEN 运算符用于选择在某个范围内的值。例如,查询某个时间段内的订单,可以使用 BETWEEN 运算符:
代码语言:javascript
复制
SELECT * FROM Orders
WHERE OrderDate BETWEEN '2024-01-01' AND '2024-12-31';

空值判断运算符

  • IS NULL 运算符 IS NULL 运算符用于检测字段是否为NULL值。如果需要查找没有指定值的记录,可以使用此运算符。例如,查询所有没有邮箱地址的员工:
代码语言:javascript
复制
sql
SELECT * FROM Employees
WHERE Email IS NULL;
  • IS NOT NULL 运算符 IS NOT NULL 运算符则用于查找那些字段有值的记录。例如,查询所有拥有邮箱地址的员工:
代码语言:javascript
复制
sql
SELECT * FROM Employees
WHERE Email IS NOT NULL;

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

统计查询

  • COUNT 函数 COUNT 函数用于计算记录的数量。例如,计算员工总数:
代码语言:javascript
复制
SELECT COUNT(*) FROM Employees;
  • SUM 函数 SUM 函数用于计算某一列的总和。例如,计算所有订单的总金额:
代码语言:javascript
复制
SELECT SUM(TotalAmount) FROM Orders;

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

代码语言:javascript
复制
sql
SELECT AVG(Salary) FROM Employees;
  • MAX 和 MIN 函数 MAX 和 MIN 函数分别用于查找某一列的最大值和最小值。例如,查找最高薪资和最低薪资:
代码语言:javascript
复制
SELECT MAX(Salary) AS HighestSalary, MIN(Salary) AS LowestSalary FROM Employees;

多表查询

  1. 内连接(INNER JOIN) 内连接用于返回两个表中匹配的记录。例如,查询每个订单及其对应的客户信息:
代码语言:javascript
复制
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
  1. 外连接(OUTER JOIN) 外连接分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN)。左外连接返回左表的所有记录以及右表中符合条件的记录,而右外连接则相反。

– 左外连接示例

代码语言:javascript
复制
SELECT Employees.EmployeeID, Orders.OrderID
FROM Employees
LEFT JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID;
  1. 自连接 自连接是一种特殊的连接方式,用于从同一张表中提取数据。例如,查找所有员工及其经理的信息:
代码语言:javascript
复制
SELECT E1.EmployeeName AS Employee, E2.EmployeeName AS Manager
FROM Employees E1
LEFT JOIN Employees E2 ON E1.ManagerID = E2.EmployeeID;

子查询

  • 在 WHERE 子句中的子查询 例如,找出那些工资高于公司平均工资的员工:
代码语言:javascript
复制
sql
SELECT * FROM Employees
WHERE Salary > (SELECT AVG(Salary) FROM Employees);
  • 在 FROM 子句中的子查询 子查询也可以作为虚拟表使用。例如,查询每个部门的平均薪资:
代码语言:javascript
复制
SELECT DepartmentID, AVG(Salary) AS AverageSalary
FROM (SELECT DepartmentID, Salary FROM Employees) AS DeptSalaries
GROUP BY DepartmentID;

联合查询

  • UNION UNION 用于合并两个或多个查询的结果集,并去除重复记录。例如,查询来自不同部门的员工姓名:
代码语言:javascript
复制
sql
SELECT EmployeeName FROM Employees WHERE DepartmentID = 1
UNION
SELECT EmployeeName FROM Employees WHERE DepartmentID = 2;
  • UNION ALL UNION ALL 则会返回所有记录,包括重复的。例如:
代码语言:javascript
复制
SELECT EmployeeName FROM Employees WHERE DepartmentID = 1
UNION ALL
SELECT EmployeeName FROM Employees WHERE DepartmentID = 2;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 学习目标
  • 单表查询
    • 查询语句的基本用法
      • 字段的别名
        • DISTINCT消除重复记录
          • WHERE子句指定查询条件
          • 统计查询
          • 多表查询
          • 子查询
          • 联合查询
          相关产品与服务
          云数据库 MySQL
          腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档