详解SQL单表查询

SQL单表查询

  • [1. `SELECT` 语句的基本结构](#1. SELECT 语句的基本结构)
  • [2. 查询所有列和指定列](#2. 查询所有列和指定列)
  • [3. `WHERE` 条件筛选](#3. WHERE 条件筛选)
    • 比较运算符
    • [多条件查询:使用 `AND` 和 `OR`](#多条件查询:使用 ANDOR)
    • [`NOT` 操作符](#NOT 操作符)
  • [4. `ORDER BY` 进行排序](#4. ORDER BY 进行排序)
  • [5. `LIMIT` 限制返回行数](#5. LIMIT 限制返回行数)
    • 只获取前N行数据
    • [使用 `LIMIT` 和 `OFFSET` 进行分页查询](#使用 LIMITOFFSET 进行分页查询)
  • [6. 常见的SQL函数操作](#6. 常见的SQL函数操作)
  • [7. 使用别名 `AS`](#7. 使用别名 AS)
  • [8. 使用 `DISTINCT` 去重](#8. 使用 DISTINCT 去重)
  • 综合实例

1. SELECT 语句的基本结构

单表查询的最基本语句结构是:

sql 复制代码
SELECT 列1, 列2, ... 
FROM 表名
WHERE 条件
ORDER BY 列名 ASC|DESC
LIMIT 数量;

关键要素说明:

  • SELECT:选择列。可以指定多个列,也可以使用通配符(*)选择所有列。
  • FROM:指定查询的数据来源,即数据表的名称。
  • WHERE:条件筛选,设置过滤条件,只返回符合条件的行。
  • ORDER BY:排序,对结果集按指定列进行升序或降序排列。
  • LIMIT:限制结果行数,适合分页或只取前几条数据。

2. 查询所有列和指定列

查询所有列

如果希望一次性查询表中的所有列,可以用星号*代替列名。

示例 :查询employees表的所有数据。

sql 复制代码
SELECT * FROM employees;

此时返回整个表的内容,非常适合快速查看一个表的所有数据。

查询特定列

在很多实际情况下,我们并不需要所有列的数据。我们可以指定要查询的列名,以减少数据传输量。

示例:查询员工姓名和工资

sql 复制代码
SELECT name, salary FROM employees;

这种方法尤其适合数据量较大时的查询操作,因为只获取所需列的数据能够显著提升查询效率。

3. WHERE 条件筛选

WHERE子句允许我们对数据进行条件过滤。只有符合条件的记录才会被返回。WHERE子句支持多种比较运算符和逻辑运算符。

比较运算符

  • =:等于
  • <>:不等于
  • >:大于
  • <:小于
  • >=:大于等于
  • <=:小于等于

示例:查询工资大于8000的员工

sql 复制代码
SELECT * FROM employees WHERE salary > 8000;

返回结果中只有工资高于8000的员工数据。

多条件查询:使用 ANDOR

可以使用ANDOR运算符组合多个条件。

  • AND:只有所有条件都为真时,结果才会返回。
  • OR:只要有一个条件为真,结果就会返回。

示例 :查询IT部门且工资大于8000的员工

sql 复制代码
SELECT * FROM employees WHERE department = 'IT' AND salary > 8000;

只有同时满足两个条件的记录才会返回。

示例 :查询IT部门或工资大于8000的员工

sql 复制代码
SELECT * FROM employees WHERE department = 'IT' OR salary > 8000;

只要满足其中一个条件的记录都会被返回。

NOT 操作符

NOT运算符用于否定条件,返回不符合该条件的记录。

示例 :查询非IT部门的员工

sql 复制代码
SELECT * FROM employees WHERE NOT department = 'IT';

4. ORDER BY 进行排序

ORDER BY子句用于对结果进行排序,可以指定升序(ASC)或降序(DESC)。

  • ASC(升序):从小到大排列(默认)。
  • DESC(降序):从大到小排列。

示例:按工资升序排列

sql 复制代码
SELECT * FROM employees ORDER BY salary ASC;

示例:按年龄降序排列

sql 复制代码
SELECT * FROM employees ORDER BY age DESC;

多列排序

可以根据多列进行排序。首先按第一列排序,如果第一列相同,则按第二列排序,以此类推。

示例:先按部门排序,再按工资降序排序

sql 复制代码
SELECT * FROM employees ORDER BY department, salary DESC;

返回结果会先按部门分组排序,然后在每个部门内按工资降序排列。

5. LIMIT 限制返回行数

LIMIT子句用于限制查询结果返回的行数,特别适用于分页查询和获取前几条记录。

只获取前N行数据

示例:获取工资最高的两位员工

sql 复制代码
SELECT * FROM employees ORDER BY salary DESC LIMIT 2;

此查询首先按工资降序排序,然后仅返回前两条记录。

使用 LIMITOFFSET 进行分页查询

分页查询时,我们可以配合LIMITOFFSET使用,OFFSET表示从第几行开始返回数据。

示例:从第3行开始返回两条数据

sql 复制代码
SELECT * FROM employees LIMIT 2 OFFSET 2;

此查询会跳过前两行,从第三行开始返回两条记录。

6. 常见的SQL函数操作

在单表查询中,SQL提供了一些常用的函数来对数据进行处理:

  • COUNT():计算记录行数。
  • SUM():计算数值列的总和。
  • AVG():计算数值列的平均值。
  • MAX():返回数值列中的最大值。
  • MIN():返回数值列中的最小值。

示例:统计员工总数

sql 复制代码
SELECT COUNT(*) AS total_employees FROM employees;

示例:计算所有员工的平均工资

sql 复制代码
SELECT AVG(salary) AS avg_salary FROM employees;

示例 :查询部门为IT的员工最高工资

sql 复制代码
SELECT MAX(salary) AS max_salary FROM employees WHERE department = 'IT';

7. 使用别名 AS

别名AS用于给列或表起一个临时名称。别名不会改变列或表的真实名称,但可以使查询结果更加易读。

示例 :查询员工姓名和工资,并给工资列起别名为employee_salary

sql 复制代码
SELECT name, salary AS employee_salary FROM employees;

在查询结果中,列名会显示为employee_salary而不是salary,这在需要重新命名列名时非常方便。

8. 使用 DISTINCT 去重

DISTINCT关键字用于消除结果中的重复值。

示例:查询所有不同的部门名称

sql 复制代码
SELECT DISTINCT department FROM employees;

返回结果中,每个部门只会出现一次。

综合实例

假设我们想要查询以下信息:

  1. 所有部门中工资最高的员工姓名及其工资。
  2. 只返回IT财务部门,并按工资降序排列。

综合使用多种SQL关键字的查询语句如下:

sql 复制代码
SELECT name, department, MAX(salary) AS highest_salary
FROM employees
WHERE department IN ('IT', '财务')
GROUP BY department
ORDER BY highest_salary DESC;

通过熟练掌握以上内容,可以灵活应用单表查询从数据中获取所需信息。

相关推荐
浪九天32 分钟前
Orcale、MySQL中参数类型的详解和运用场景(不带示例)
数据库·mysql·oracle
程序员阿鹏34 分钟前
jdbc批量插入数据到MySQL
java·开发语言·数据库·mysql·intellij-idea
橘猫云计算机设计3 小时前
基于Django的购物商城平台的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
java·数据库·spring boot·后端·django
2501_903238653 小时前
Spring Boot日志配置与环境切换实战
数据库·spring boot·后端·个人开发
梓沂3 小时前
审计级别未启用扩展模式导致查询 DBA_AUDIT_TRAIL 时 SQL_TEXT 列为空
数据库·sql·dba
caihuayuan43 小时前
PHP建立MySQL持久化连接(长连接)及mysql与mysqli扩展的区别
java·大数据·sql·spring
Smile丶凉轩3 小时前
数据库面试知识点总结
数据库·c++·mysql
RainbowSea4 小时前
9-1. MySQL 性能分析工具的使用——last\_query\_cost,慢查询日志
数据库·sql·mysql
Sui_Network4 小时前
Sui 如何支持各种类型的 Web3 游戏
大数据·数据库·人工智能·游戏·web3·区块链
ZKNOW甄知科技5 小时前
IT服务运营管理体系的常用方法论与实践指南(上)
大数据·数据库·人工智能