USE sql_store;2025.3.25 - SQL SELECT 与 WHERE 语句学习笔记
今天是 2025 年 3 月 25 日,我们一起来学习 SQL 中的 SELECT 和 WHERE 语句。这些是数据库查询的基础,掌握它们可以让我们灵活地从数据库中提取所需数据。以下是本次学习的主要内容:
学习内容
SQL 不区分大小写SQL 关键字(如
SELECT、FROM、WHERE)不区分大小写,但为了规范,我们通常将关键字大写,字段名保持原有大小写。SELECT语句基础
SELECT用于选择要查询的列,可以用*表示所有列。FROM指定数据来源的表。显示顺序取决于 SELECT中列的顺序。可以在 SELECT中进行运算(如加减乘除),并用AS为新列命名(建议用引号规范命名)。
WHERE 筛选数据
WHERE用于条件筛选,支持比较运算符(>、、>=、、=、!=、)。支持逻辑运算符: AND(与)、OR(或)、NOT(取反)。注意: AND的优先级高于OR,可以用括号明确运算顺序。
ORDER BY 排序
ORDER BY用于排序,默认升序,可按列名排序。WHERE、FROM和ORDER BY都是可选的,但关键字顺序固定:SELECT→FROM→WHERE→ORDER BY。
DISTINCT 去重
DISTINCT用于选择唯一值,去除重复结果。
IN 和 BETWEEN
IN用于匹配多个离散值,用括号包裹。BETWEEN用于范围筛选,用AND连接,包含边界值。
示例代码与讲解
1. 基础查询与筛选
SELECT *FROM customersWHERE customer_id = 5;查询 customers表中customer_id为 5 的记录。
SELECT *FROM customersORDER BY first_name;查询所有客户并按 first_name排序。
2. 选择列与运算
SELECT first_name, last_nameFROM customers;SELECT last_name, first_nameFROM customers;显示顺序取决于 SELECT中列的顺序。
SELECT first_name, last_name, points, points + 100FROM customers;在查询中对 points加 100。
SELECT first_name, last_name, points, points * 10 + 100 AS "discount_dactor"FROM customers;更规范的写法:列分行排列,用 AS命名新列。
3. 去重查询
SELECT stateFROM customers;SELECT DISTINCT stateFROM customers;DISTINCT去除重复的州名。
4. WHERE 条件筛选
SELECT *FROM customersWHERE points > 1344;查询积分大于 1344 的客户。
SELECT *FROM customersWHERE state != 'VA';查询州不等于 'VA' 的客户( !=和等价)。
SELECT *FROM customersWHERE birth_date > '1990-01-01';查询出生日期晚于 1990-01-01 的客户,日期需用引号。
5. 逻辑运算符
SELECT *FROM customersWHERE birth_date > '1990-01-01' AND points 1000;AND:出生日期晚于 1990-01-01 且积分小于等于 1000。
SELECT *FROM customersWHERE birth_date > '1990-01-01' OR points 1000;OR:满足任一条件即可。
SELECT *FROM customersWHERE (birth_date > '1990-01-01' OR points 1000) AND state = 'VA';括号明确优先级:先计算 OR,再与state = 'VA'结合。
SELECT *FROM customersWHERE birth_date > '1990-01-01' OR points 1000 AND state = 'VA';无括号时, AND优先级更高,相当于(points '1990-01-01'。
SELECT *FROM customersWHERE NOT (birth_date > '1990-01-01' OR points 1000);NOT取反,相当于birth_date 1000。
6. IN 和 BETWEEN
SELECT *FROM customersWHERE state IN ('VA', 'GA', 'FL');查询州在 'VA'、'GA'、'FL' 中的客户。
SELECT *FROM customersWHERE state NOT IN ('VA', 'GA', 'FL');查询州不在这些值中的客户。
SELECT *FROM customersWHERE points BETWEEN 1000 AND 2000;查询积分在 1000 到 2000 之间的客户(包含边界)。
作业
作业 1:新价格计算
SELECT name, unit_price, unit_price * 1.1 AS "new price"FROM products;计算产品单价上浮 10% 后的新价格。
作业 2:2019 年订单
SELECT *FROM ordersWHERE order_date >= '2019-01-01';查询 2019 年及以后的订单,注意使用 >=包含边界。
作业 3:订单项筛选
SELECT *FROM order_itemsWHERE order_id = 6 AND quantity * unit_price >= 30;查询订单 ID 为 6 且总价(数量 × 单价)大于等于 30 的订单项。
作业 4:库存筛选
SELECT *FROM productsWHERE quantity_in_stock IN (38, 49, 72);查询库存量为 38、49 或 72 的产品。
作业 5:出生日期范围
SELECT *FROM customersWHERE birth_date BETWEEN '1990-01-01' AND '2000-01-01';查询 1990-2000 年出生的客户(包含边界)。
小结
通过本次学习,我们掌握了 SQL 中 SELECT 和 WHERE 的基本用法,包括筛选、排序、去重以及逻辑运算。希望大家通过练习加深理解,下次我们将继续探索更多 SQL 功能。
