前言
数据查询是数据库管理系统应用的主要内容,也是用户对数据库最频繁、最常见的操作请求。
数据查询可以根据用户提供的限定条件,从已存在的数据表中检索用户需要的数据。
MySQL使用SELECT语句既可以完成简单的单表查询、联合查询,也可以完成复杂的联接查询、子查询,从数据库中检索符合用户需求的数据,并将结果集以表格的形式返回给用户。
这里写目录标题
学习目标
熟练应用SELECT语句进行数据查询。
掌握应用SELECT语句进行分组聚合查询。
掌握应用SELECT语句多表联接查询和子查询。
能够应用SELECT语句进行嵌套查询
单表查询
查询语句的基本用法
主要语法格式如下:
SELECT 字段名1[,字段名2.....]FROM 表名1[,表名2.....][WHERE 条件表达式][GROUPBY 字段名列表[HAVING 条件表达式]][ORDERBY 字段名[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 运算符来指定多个部门编号。
sqlSELECT*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值。如果需要查找没有指定值的记录,可以使用此运算符。例如,查询所有没有邮箱地址的员工:
sqlSELECT*FROM Employees
WHERE Email ISNULL;
- IS NOT NULL 运算符 IS NOT NULL 运算符则用于查找那些字段有值的记录。例如,查询所有拥有邮箱地址的员工:
sqlSELECT*FROM Employees
WHERE Email ISNOTNULL;
在处理空值时,特别是在数据清理和完整性检查中,空值判断运算符是非常重要的工具。
统计查询
- COUNT 函数 COUNT 函数用于计算记录的数量。例如,计算员工总数:
SELECTCOUNT(*)FROM Employees;
- SUM 函数 SUM 函数用于计算某一列的总和。例如,计算所有订单的总金额:
SELECTSUM(TotalAmount)FROM Orders;
AVG 函数
AVG 函数用于计算平均值。例如,计算员工的平均薪资:
sqlSELECTAVG(Salary)FROM Employees;
- MAX 和 MIN 函数 MAX 和 MIN 函数分别用于查找某一列的最大值和最小值。例如,查找最高薪资和最低薪资:
SELECTMAX(Salary)AS HighestSalary,MIN(Salary)AS LowestSalary FROM Employees;
多表查询
- 内连接(INNER JOIN) 内连接用于返回两个表中匹配的记录。例如,查询每个订单及其对应的客户信息:
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNERJOIN Customers ON Orders.CustomerID = Customers.CustomerID;
- 外连接(OUTER JOIN) 外连接分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN)。左外连接返回左表的所有记录以及右表中符合条件的记录,而右外连接则相反。
– 左外连接示例
SELECT Employees.EmployeeID, Orders.OrderID
FROM Employees
LEFTJOIN Orders ON Employees.EmployeeID = Orders.EmployeeID;
- 自连接 自连接是一种特殊的连接方式,用于从同一张表中提取数据。例如,查找所有员工及其经理的信息:
SELECT E1.EmployeeName AS Employee, E2.EmployeeName AS Manager
FROM Employees E1
LEFTJOIN Employees E2 ON E1.ManagerID = E2.EmployeeID;
子查询
- 在 WHERE 子句中的子查询 例如,找出那些工资高于公司平均工资的员工:
sqlSELECT*FROM Employees
WHERE Salary >(SELECTAVG(Salary)FROM Employees);
- 在 FROM 子句中的子查询 子查询也可以作为虚拟表使用。例如,查询每个部门的平均薪资:
SELECT DepartmentID,AVG(Salary)AS AverageSalary
FROM(SELECT DepartmentID, Salary FROM Employees)AS DeptSalaries
GROUPBY DepartmentID;
联合查询
- UNION UNION 用于合并两个或多个查询的结果集,并去除重复记录。例如,查询来自不同部门的员工姓名:
sqlSELECT EmployeeName FROM Employees WHERE DepartmentID =1UNIONSELECT EmployeeName FROM Employees WHERE DepartmentID =2;
- UNION ALL UNION ALL 则会返回所有记录,包括重复的。例如:
SELECT EmployeeName FROM Employees WHERE DepartmentID =1UNIONALLSELECT EmployeeName FROM Employees WHERE DepartmentID =2;
版权归原作者 洁洁! 所有, 如有侵权,请联系我们删除。