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 子句决定。其他所有子句(包括 FROMWHEREGROUP BYHAVINGORDER BYLIMIT 等)均不决定输出列。
    • 无论你在其他地方用了多少列,只有写在 SELECT 后面的才会出现在结果中。
  • 包含子查询,最终结果集的列仍然只由最外层(主查询)的 SELECT 子句决定。子查询内部的列不会自动出现在最终结果中。

执行逻辑顺序(非书写顺序):

  1. 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)时:

  1. 必须使用 GROUP BY子句,所有在SELECT中出现的非聚合列,都必须出现在GROUP BY子句中。

  2. GROUP BY子句中可以包含SELECT中没有出现的非聚合列

  3. SELECT中可以只包含聚合列,不包含任何非聚合列

否则,数据库无法确定“该返回哪一行的值”,结果具有不确定性,因此报错(如 MySQL Error 1140)。

5、完全限定的表名

是指在 SQL 查询中 明确指定表所属的数据库(或模式)和表名,有时还包括服务器名(在分布式或链接服务器场景中)。

目的是 消除歧义,尤其是在以下情况:

  • 同一个查询涉及多个数据库
  • 表名在不同数据库中重复
  • 连接了多个同名表(如自连接)
  • 使用了默认数据库但想访问其他库的表

完全限定可用于:

 1)库名 . 表名     (同时使用库名和表名)

 2)表名 . 字段名  (同时使用表名和字段名)

select 表.字段名 from 库.表      #在当前数据库中检索其他数据库中表的数据

select 表.字段名 from 表名    等价于   select 字段名 from 表名

 

SELECT
    字段列表
FROM
    表名字段
WHERE
    条件列表
GROUP BY
    分组字段列表
HAVING
    分组后的条件列表
ORDER BY
    排序字段列表
LIMIT
    分页参数

 

posted @ 2021-03-25 22:22  chao_xiong  阅读(312)  评论(0)    收藏  举报