5、数据查询select
1、SELECT 子句
从数据库中检索数据,这是最常用的查询语句。
作用:
-
读取数据但不修改数据
-
可以过滤、排序、分组数据
-
可以连接多个表的数据
-
SELECT 中的列可以来自任意参与查询的表(或多张表),不要求来自同一张表。
-
不仅 SELECT,几乎所有 SQL 子句中的列都可以跨表引用,只要这些表在 FROM 或 JOIN 中被引入。
-- 功能:从数据库中检索数据 SELECT -- SELECT子句:指定要返回的列 employee_id, -- 直接选择列 CONCAT(first_name, ' ', last_name) AS full_name, -- 使用函数并设置别名 salary, department_id FROM employees -- FROM子句:指定数据源表 WHERE salary > 50000 -- WHERE子句:过滤行数据 AND hire_date >= '2020-01-01' -- 多个条件用AND/OR连接 GROUP BY department_id -- GROUP BY:按列分组 HAVING COUNT(*) > 5 -- HAVING:对分组结果过滤 ORDER BY salary DESC, last_name ASC -- ORDER BY:排序结果 LIMIT 10; -- LIMIT:限制返回行数
SELECT 语句的结果称为结果集。
- 最终结果集显示哪些列,由
SELECT子句决定。其他所有子句(包括FROM、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT等)均不决定输出列。- 无论你在其他地方用了多少列,只有写在
SELECT后面的才会出现在结果中。
- 无论你在其他地方用了多少列,只有写在
- 包含子查询,最终结果集的列仍然只由最外层(主查询)的
SELECT子句决定。子查询内部的列不会自动出现在最终结果中。
执行逻辑顺序(非书写顺序):
FROM→ 2.WHERE→ 3.GROUP BY→ 4.HAVING→ 5.SELECT→ 6.ORDER BY→ 7.LIMIT
1、 查看当前正在使用的数据库:
select database();
2、select 语句查询表中数据
select 字段名 from 表名; -- 只查询相应的字段,其他字段数据不显示 select * from 表名; -- 使用通配符(*)查询整张表所有字段的数据
可查询多个字段,字段之间以逗号( , )隔开
3、distinct 运算符检索的数据去重
使用关键字(distinct)检索某个字段中不同的行,即返回唯一值。从表的某一列中选择不重复的值。
select distinct 字段名 from 表名;
- distinct 关键字必须放在字段名前面,只用于 select 语句
- distinct 关键字用于所有列,而不只是前置它的列。
select distinct name, id from A; -- 实际上是根据“name+id”来去重,distinct同时作用在了name和id上,去重列组 select id, distinct name from A; -- 会提示错误,因为distinct必须放在字段名前面
4、核心规则
当SELECT子句的列表中包含聚合函数(如COUNT, SUM, AVG, MAX, MIN)时:
-
必须使用 GROUP BY子句,所有在SELECT中出现的非聚合列,都必须出现在GROUP BY子句中。
-
GROUP BY子句中可以包含SELECT中没有出现的非聚合列
-
SELECT中可以只包含聚合列,不包含任何非聚合列
否则,数据库无法确定“该返回哪一行的值”,结果具有不确定性,因此报错(如 MySQL Error 1140)。
5、完全限定的表名
是指在 SQL 查询中 明确指定表所属的数据库(或模式)和表名,有时还包括服务器名(在分布式或链接服务器场景中)。
目的是 消除歧义,尤其是在以下情况:
- 同一个查询涉及多个数据库
- 表名在不同数据库中重复
- 连接了多个同名表(如自连接)
- 使用了默认数据库但想访问其他库的表
完全限定可用于:
1)库名 . 表名 (同时使用库名和表名)
2)表名 . 字段名 (同时使用表名和字段名)
select 表.字段名 from 库.表 #在当前数据库中检索其他数据库中表的数据 select 表.字段名 from 表名 等价于 select 字段名 from 表名
SELECT 字段列表 FROM 表名字段 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后的条件列表 ORDER BY 排序字段列表 LIMIT 分页参数
本文来自博客园,作者:chao_xiong,转载请注明原文链接:https://www.cnblogs.com/chao-xiong/p/14579308.html

浙公网安备 33010602011771号