当前位置: 首页 > news >正文

02 SQL数据检索入门 - SELECT语句详解

本文是MySQL数据库系列教程的第二篇,将详细讲解如何使用SELECT语句检索数据。

上一篇: MySQL数据库基础入门指南

目录

一、SELECT语句基础
  1.1 什么是SELECT语句
  1.2 基本语法结构
二、检索单个列
  2.1 基本用法
  2.2 实战示例
三、检索多个列
  3.1 指定多个列名
  3.2 列的顺序
四、检索所有列
  4.1 使用通配符*
  4.2 使用场景与注意事项
五、去除重复值
  5.1 DISTINCT关键字
  5.2 多列去重
六、限制结果集
  6.1 LIMIT子句
  6.2 OFFSET偏移量
七、综合实战


一、SELECT语句基础

1.1 什么是SELECT语句

SELECT语句是SQL中最常用的命令,用于从数据库表中检索数据。

SELECT的作用:

  • 从一个或多个表中查询数据
  • 指定要返回哪些列
  • 对结果进行过滤、排序和限制
  • 是数据查询的核心工具

1.2 基本语法结构

SELECT 列名
FROM 表名;

语法说明:

  • SELECT - 关键字,表示要检索数据
  • 列名 - 指定要查询的列
  • FROM - 关键字,指定数据来源
  • 表名 - 数据所在的表

二、检索单个列

2.1 基本用法

检索单个列是最简单的查询操作。

语法:

SELECT column_name FROM table_name;

2.2 实战示例

假设我们有一个员工表employees

-- 创建示例表
CREATE TABLE employees (emp_id INT PRIMARY KEY,emp_name VARCHAR(50),department VARCHAR(50),salary DECIMAL(10, 2),hire_date DATE
);-- 插入测试数据
INSERT INTO employees VALUES
(1, '张伟', '技术部', 8000.00, '2023-01-15'),
(2, '李娜', '市场部', 7000.00, '2023-02-20'),
(3, '王强', '技术部', 9000.00, '2023-03-10'),
(4, '赵敏', '人事部', 6500.00, '2023-04-05'),
(5, '刘洋', '市场部', 7500.00, '2023-05-12');

查询所有员工姓名:

SELECT emp_name FROM employees;

结果:

+----------+
| emp_name |
+----------+
| 张伟     |
| 李娜     |
| 王强     |
| 赵敏     |
| 刘洋     |
+----------+

查询所有员工的部门:

SELECT department FROM employees;

结果:

+------------+
| department |
+------------+
| 技术部     |
| 市场部     |
| 技术部     |
| 人事部     |
| 市场部     |
+------------+

三、检索多个列

3.1 指定多个列名

当需要查询多个列时,用逗号分隔列名。

语法:

SELECT column1, column2, column3 FROM table_name;

示例:查询员工姓名、部门和薪资

SELECT emp_name, department, salary 
FROM employees;

结果:

+----------+------------+---------+
| emp_name | department | salary  |
+----------+------------+---------+
| 张伟     | 技术部     | 8000.00 |
| 李娜     | 市场部     | 7000.00 |
| 王强     | 技术部     | 9000.00 |
| 赵敏     | 人事部     | 6500.00 |
| 刘洋     | 市场部     | 7500.00 |
+----------+------------+---------+

3.2 列的顺序

SELECT语句中列的顺序决定了结果显示的顺序。

示例:调整列的显示顺序

-- 先显示薪资,再显示姓名和部门
SELECT salary, emp_name, department 
FROM employees;

结果:

+---------+----------+------------+
| salary  | emp_name | department |
+---------+----------+------------+
| 8000.00 | 张伟     | 技术部     |
| 7000.00 | 李娜     | 市场部     |
| 9000.00 | 王强     | 技术部     |
| 6500.00 | 赵敏     | 人事部     |
| 7500.00 | 刘洋     | 市场部     |
+---------+----------+------------+

四、检索所有列

4.1 使用通配符*

使用星号*可以检索表中的所有列,而不需要逐个列出列名。

语法:

SELECT * FROM table_name;

示例:查询员工表的所有信息

SELECT * FROM employees;

结果:

+--------+----------+------------+---------+------------+
| emp_id | emp_name | department | salary  | hire_date  |
+--------+----------+------------+---------+------------+
|      1 | 张伟     | 技术部     | 8000.00 | 2023-01-15 |
|      2 | 李娜     | 市场部     | 7000.00 | 2023-02-20 |
|      3 | 王强     | 技术部     | 9000.00 | 2023-03-10 |
|      4 | 赵敏     | 人事部     | 6500.00 | 2023-04-05 |
|      5 | 刘洋     | 市场部     | 7500.00 | 2023-05-12 |
+--------+----------+------------+---------+------------+

4.2 使用场景与注意事项

适合使用*的场景:

  • 快速查看表的所有数据
  • 不确定表有哪些列
  • 临时调试和测试

不建议使用*的场景:

  • 生产环境的应用程序
  • 只需要部分列的数据
  • 表中列很多但只需要少数几列

原因:

  1. 性能问题:检索不需要的列浪费资源
  2. 可维护性:明确列名使代码更清晰
  3. 应用兼容性:表结构变化可能导致问题

最佳实践:除非确实需要所有列,否则明确指定列名。


五、去除重复值

5.1 DISTINCT关键字

使用DISTINCT关键字可以去除结果集中的重复行。

语法:

SELECT DISTINCT column_name FROM table_name;

示例:查询有哪些部门(不重复)

SELECT DISTINCT department FROM employees;

结果:

+------------+
| department |
+------------+
| 技术部     |
| 市场部     |
| 人事部     |
+------------+

对比:不使用DISTINCT

SELECT department FROM employees;

结果:

+------------+
| department |
+------------+
| 技术部     |
| 市场部     |
| 技术部     |  -- 重复
| 人事部     |
| 市场部     |  -- 重复
+------------+

5.2 多列去重

DISTINCT作用于所有列,只有当所有指定列的组合完全相同时才会被去重。

示例:

-- 添加更多测试数据
INSERT INTO employees VALUES
(6, '孙丽', '技术部', 8000.00, '2023-06-15');-- 查询部门和薪资的组合(去重)
SELECT DISTINCT department, salary 
FROM employees;

结果:

+------------+---------+
| department | salary  |
+------------+---------+
| 技术部     | 8000.00 |
| 市场部     | 7000.00 |
| 技术部     | 9000.00 |
| 人事部     | 6500.00 |
| 市场部     | 7500.00 |
+------------+---------+

注意:虽然"技术部"出现多次,但因为薪资不同,所以不会被去重。


六、限制结果集

6.1 LIMIT子句

LIMIT子句用于限制返回的行数,在处理大量数据时非常有用。

语法:

SELECT column_name 
FROM table_name 
LIMIT number;

示例:查询前3名员工

SELECT emp_name, salary 
FROM employees 
LIMIT 3;

结果:

+----------+---------+
| emp_name | salary  |
+----------+---------+
| 张伟     | 8000.00 |
| 李娜     | 7000.00 |
| 王强     | 9000.00 |
+----------+---------+

6.2 OFFSET偏移量

OFFSET指定从哪一行开始返回数据,常用于分页查询。

语法:

SELECT column_name 
FROM table_name 
LIMIT number OFFSET offset_value;-- 或者简写形式
SELECT column_name 
FROM table_name 
LIMIT offset_value, number;

示例:跳过前2条,返回3条数据

-- 方式1
SELECT emp_name, salary 
FROM employees 
LIMIT 3 OFFSET 2;-- 方式2(简写)
SELECT emp_name, salary 
FROM employees 
LIMIT 2, 3;

结果:

+----------+---------+
| emp_name | salary  |
+----------+---------+
| 王强     | 9000.00 |
| 赵敏     | 6500.00 |
| 刘洋     | 7500.00 |
+----------+---------+

分页查询示例:

-- 第1页:每页显示2条
SELECT emp_name, department 
FROM employees 
LIMIT 2 OFFSET 0;  -- 或 LIMIT 0, 2-- 第2页
SELECT emp_name, department 
FROM employees 
LIMIT 2 OFFSET 2;  -- 或 LIMIT 2, 2-- 第3页
SELECT emp_name, department 
FROM employees 
LIMIT 2 OFFSET 4;  -- 或 LIMIT 4, 2

注意:LIMIT后面的数字表示返回的行数,OFFSET后面的数字表示跳过的行数。


七、综合实战

让我们创建一个商品表,综合运用本文学到的知识:

-- 创建商品表
CREATE TABLE products (product_id INT PRIMARY KEY,product_name VARCHAR(100),category VARCHAR(50),brand VARCHAR(50),price DECIMAL(10, 2),stock_quantity INT
);-- 插入测试数据
INSERT INTO products VALUES
(1, 'iPhone 14 Pro', '手机', '苹果', 7999.00, 50),
(2, 'MacBook Pro', '电脑', '苹果', 12999.00, 30),
(3, '小米13', '手机', '小米', 3999.00, 100),
(4, '华为MateBook', '电脑', '华为', 5999.00, 45),
(5, 'iPad Air', '平板', '苹果', 4799.00, 60),
(6, '小米平板5', '平板', '小米', 1999.00, 80),
(7, 'iPhone 13', '手机', '苹果', 5999.00, 70),
(8, '华为P60', '手机', '华为', 4999.00, 55);-- 1. 查询所有商品名称
SELECT product_name FROM products;-- 2. 查询商品名称和价格
SELECT product_name, price FROM products;-- 3. 查询所有商品的完整信息
SELECT * FROM products;-- 4. 查询有哪些品牌(去重)
SELECT DISTINCT brand FROM products;-- 5. 查询有哪些商品类别(去重)
SELECT DISTINCT category FROM products;-- 6. 查询前5个商品
SELECT product_name, price 
FROM products 
LIMIT 5;-- 7. 查询第3到第6个商品(分页)
SELECT product_name, category, price 
FROM products 
LIMIT 4 OFFSET 2;-- 8. 查询苹果品牌有哪些产品类别(去重)
SELECT DISTINCT category 
FROM products 
WHERE brand = '苹果';-- 9. 综合查询:查询前3个不重复的商品类别
SELECT DISTINCT category 
FROM products 
LIMIT 3;

总结

本文详细介绍了SELECT语句的基础用法:

  1. 检索单个列SELECT column FROM table;
  2. 检索多个列:用逗号分隔列名
  3. 检索所有列:使用*通配符(谨慎使用)
  4. 去除重复:使用DISTINCT关键字
  5. 限制结果:使用LIMITOFFSET实现分页

掌握这些基础查询技巧后,你就可以从数据库中灵活地提取所需数据了。下一篇我们将学习如何对查询结果进行排序。


下一篇: 数据排序技巧 - ORDER BY详解

http://www.dtcms.com/a/487360.html

相关文章:

  • 从分词器构建到强化学习:nanochat开源项目下载与部署全流程教程,教你一步步训练ChatGPT语言模型
  • 长安镇仿做网站注册网站好的平台
  • 加强公司内部网站建设正邦设计公司
  • 巩义网站建设价格怎么注册个人工作室
  • 四川网站建设益友网站地图怎么用
  • 制作一个响应式网站开发工具景观设计公司名称
  • 网站设计网站开发优化欢迎你的加入
  • MySql 基本操作指令大全
  • 军用网站建设ui设计一个月挣多少钱
  • 海宁市住房和城乡建设网站网站源码程序修改
  • 做足球预测的网站小程序开发教程视频
  • 消息队列相关知识总结
  • Kafka集群Broker一点通
  • 怎样看网站建设制作方松北区建设局网站
  • 锂电电芯卷绕提质增效!光子精密边缘传感器+颜色传感器组合方案
  • 堆的 shift down 操作详解
  • QT(day1)
  • 天津做网站的公司怎么样google手机官网
  • 门户网站建设滞后微信小程序功能开发
  • miniconda 配置问题 ,未解之谜
  • 西安做营销型网站建设男性产品哪个网站可以做
  • 开源CICD工具深度横评,Jenkins vs Arbess哪个更适合你?
  • 厦门建设工程招标中心网站ps 做ui比较好的网站有哪些
  • 犀牛云网站做的怎么样深圳企业网站建设服务
  • 有关maven的一些知识点
  • 低代码建站平台汽车电子商务网站建设规划书
  • 数据的“点阵密码”:用散点图看出相关性
  • 微信游戏网站开发绵阳市网站建立
  • 一些常用的网站专业建设规划及实施方案
  • Process Monitor 学习笔记(5.7):长时间运行追踪与日志文件体积的控制