mysql菜鸟教程
5.2 查询数据:SELECT基础
如果说 INSERT 是为数据库注入血液,那么 SELECT 就是让数据“开口说话”的神奇咒语。它是 SQL 语言中使用最频繁、功能最强大的语句,负责从数据库中检索、筛选、计算和呈现数据。掌握 SELECT,是你从数据库“保管员”变为“探索者”的关键一步。
一、SELECT 语句的核心:你想要什么?从哪里拿?
SELECT 语句最基础的形式,清晰地回答了这两个问题:
SELECT 列名1, 列名2, ... -- 你想要什么数据(哪些列)? FROM 表名 -- 从哪里拿(哪张表)? [WHERE 条件]; -- 有什么要求(哪些行)?
我们可以将其视作一个清晰的查询流程:
SELECT 语句一个非常关键的内在逻辑:执行顺序。数据库引擎在内部处理你的查询请求时,并非严格按照你书写的顺序(SELECT -> FROM -> WHERE)来执行。它通常先通过 FROM 子句定位数据所在的表,然后利用 WHERE 子句进行筛选,最后才根据 SELECT 子句的指定,将所需的数据列呈现给你。理解这一点,对于后续编写复杂查询和进行性能优化至关重要。
二、基础查询实战
让我们基于一张 products (产品)表来学习,它的结构如下:
CREATE TABLE products ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, category VARCHAR(50), price DECIMAL(10, 2), stock INT DEFAULT 0, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );
1. 检索所有列 (*)
使用星号 * 作为通配符,可以快速查看表里的所有数据。
-- 查看products表中的所有记录的所有字段 SELECT * FROM products;
使用场景:快速浏览、数据调试。在正式代码或复杂查询中应尽量避免,因为它会返回不必要的数据,降低性能且使结果不明确。
2. 检索特定列
明确指定你需要的列名,这是推荐的做法。
-- 只查看产品的名称和价格 SELECT name, price FROM products;
3. 使用WHERE子句筛选行
WHERE 子句是你的“数据过滤器”,它根据指定的条件返回满足条件的行。
-- 查找所有‘电子产品’类别的产品 SELECT id, name, price FROM products WHERE category = ‘电子产品’; -- 查找价格低于1000元的产品 SELECT name, price, stock FROM products WHERE price < 1000; -- 查找库存大于0的‘食品’类产品 SELECT * FROM products WHERE category = ‘食品’ AND stock > 0; -- 查找价格在50到200元之间的产品 SELECT name, price FROM products WHERE price BETWEEN 50 AND 200; -- 查找名称中包含‘手机’的产品(模糊查询) SELECT name, price FROM products WHERE name LIKE ‘%手机%’;
4. 为列起别名 (AS)
别名可以让查询结果中的列标题更易读,或在计算时使用。
-- 将`price`列在结果中显示为‘售价’ SELECT name, price AS ‘售价’, stock AS ‘库存’ FROM products; -- 别名用于计算(假设查询一个8折后的价格) SELECT name, price, price * 0.8 AS ‘折后价’ FROM products;
三、初识函数与简单计算
你可以在 SELECT 列表中直接使用表达式和函数。
常用函数示例
-- 1. 文本函数 SELECT name, UPPER(name) AS ‘大写名称’, -- 转换为大写 LENGTH(name) AS ‘名称长度’ -- 计算字符长度 FROM products; -- 2. 数学函数与计算 SELECT name, price, ROUND(price * 1.1, 2) AS ‘加税后价格’ -- 四舍五入保留2位小数 FROM products; -- 3. 聚合函数(先有个概念,后面章节详解) SELECT COUNT(*) AS ‘产品总数’, -- 统计行数 AVG(price) AS ‘平均价格’, -- 计算平均值 MAX(price) AS ‘最高价格’, -- 找出最大值 MIN(price) AS ‘最低价格’, -- 找出最小值 SUM(stock) AS ‘总库存’ -- 计算总和 FROM products;
四、去重与简单排序
DISTINCT:消除重复行
-- 查看所有不重复的产品类别 SELECT DISTINCT category FROM products; -- 查看不重复的类别和品牌组合(如果表有brand列) SELECT DISTINCT category, brand FROM products;
ORDER BY:对结果排序
-- 按价格从低到高排序(默认ASC升序) SELECT name, price FROM products ORDER BY price; -- 按价格从高到低排序(DESC降序) SELECT name, price FROM products ORDER BY price DESC; -- 先按类别排序,同类中再按价格降序排序 SELECT name, category, price FROM products ORDER BY category, price DESC;
LIMIT:限制返回行数
这在分页或只想看前几条记录时非常有用。
-- 查看最贵的5个产品 SELECT name, price FROM products ORDER BY price DESC LIMIT 5; -- 分页查询:跳过前10条,取接下来的5条(常用于第3页,每页5条) SELECT name, price FROM products LIMIT 10, 5; -- 注意:第一个参数是偏移量(offset),第二个是行数(row_count)
五、综合实战练习
让我们将上面的知识点串联起来,完成一个综合查询。
需求:查询“电子产品”类别中,库存大于10的产品,按价格升序排列,只显示产品名称、价格和库存,并将价格列重命名为“零售价”,最后只查看前10条记录。
SELECT name, price AS ‘零售价’, stock FROM products WHERE category = ‘电子产品’ AND stock > 10 ORDER BY price ASC LIMIT 10;
六、最佳实践与常见错误
SELECT 语句是通往数据世界的大门。本章介绍的基础是你构建所有复杂查询的基石。请务必在数据库环境中反复练习,尝试组合不同的子句,观察结果的变化。

发表评论
所有评论