管理

SQL 入门 1:从 SELECT 到 WHERE

Posted on 2025-04-20 09:45  lzhdim  阅读(10416)  评论(0)    收藏  举报

我们一起来学习 SQL 中的 SELECT 和 WHERE 语句。这些是数据库查询的基础,掌握它们可以让我们灵活地从数据库中提取所需数据。以下是本次学习的主要内容:

学习内容

  1. SQL 不区分大小写
    SQL 关键字(如 SELECT、FROM、WHERE)不区分大小写,但为了规范,我们通常将关键字大写,字段名保持原有大小写。
  2. SELECT 语句基础
    • SELECT 用于选择要查询的列,可以用 * 表示所有列。
    • FROM 指定数据来源的表。
    • 显示顺序取决于 SELECT 中列的顺序。
    • 可以在 SELECT 中进行运算(如加减乘除),并用 AS 为新列命名(建议用引号规范命名)。
  3. WHERE 筛选数据
    • WHERE 用于条件筛选,支持比较运算符(>、<、>=、<=、=、!=、<>)。
    • 支持逻辑运算符:AND(与)、OR(或)、NOT(取反)。
    • 注意:AND 的优先级高于 OR,可以用括号明确运算顺序。
  4. ORDER BY 排序
    • ORDER BY 用于排序,默认升序,可按列名排序。
    • WHERE、FROM 和 ORDER BY 都是可选的,但关键字顺序固定:SELECT → FROM → WHERE → ORDER BY。
  5. DISTINCT 去重
    • DISTINCT 用于选择唯一值,去除重复结果。
  6. IN 和 BETWEEN
    • IN 用于匹配多个离散值,用括号包裹。
    • BETWEEN 用于范围筛选,用 AND 连接,包含边界值。

示例代码与讲解

1. 基础查询与筛选

SELECT *
FROM customers
WHERE customer_id = 5;

  • 查询 customers 表中 customer_id 为 5 的记录。

SELECT *
FROM customers
ORDER BY first_name;

  • 查询所有客户并按 first_name 排序。

2. 选择列与运算

SELECT first_name, last_name
FROM customers;

SELECT last_name, first_name
FROM customers;

  • 显示顺序取决于 SELECT 中列的顺序。

SELECT first_name, last_name, points, points + 100
FROM customers;

  • 在查询中对 points 加 100。

SELECT
    first_name,
    last_name,
    points,
    points * 10 + 100 AS "discount_dactor"
FROM customers;

  • 更规范的写法:列分行排列,用 AS 命名新列。

3. 去重查询

SELECT state
FROM customers;

SELECT DISTINCT state
FROM customers;

  • DISTINCT 去除重复的州名。

4. WHERE 条件筛选

SELECT *
FROM customers
WHERE points > 1344;

  • 查询积分大于 1344 的客户。

SELECT *
FROM customers
WHERE state != 'VA';

  • 查询州不等于 'VA' 的客户(!= 和 <> 等价)。

SELECT *
FROM customers
WHERE birth_date > '1990-01-01';

  • 查询出生日期晚于 1990-01-01 的客户,日期需用引号。

5. 逻辑运算符

SELECT *
FROM customers
WHERE birth_date > '1990-01-01' AND points <= 1000;

  • AND:出生日期晚于 1990-01-01 且积分小于等于 1000。

SELECT *
FROM customers
WHERE birth_date > '1990-01-01' OR points <= 1000;

  • OR:满足任一条件即可。

SELECT *
FROM customers
WHERE (birth_date > '1990-01-01' OR points <= 1000) AND state = 'VA';

  • 括号明确优先级:先计算 OR,再与 state = 'VA' 结合。

SELECT *
FROM customers
WHERE birth_date > '1990-01-01' OR points <= 1000 AND state = 'VA';

  • 无括号时,AND 优先级更高,相当于 (points <= 1000 AND state = 'VA') OR birth_date > '1990-01-01'。

SELECT *
FROM customers
WHERE NOT (birth_date > '1990-01-01' OR points <= 1000);

  • NOT 取反,相当于 birth_date <= '1990-01-01' AND points > 1000。

6. IN 和 BETWEEN

SELECT *
FROM customers
WHERE state IN ('VA', 'GA', 'FL');

  • 查询州在 'VA'、'GA'、'FL' 中的客户。

SELECT *
FROM customers
WHERE state NOT IN ('VA', 'GA', 'FL');

  • 查询州不在这些值中的客户。

SELECT *
FROM customers
WHERE 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 orders
WHERE order_date >= '2019-01-01';

  • 查询 2019 年及以后的订单,注意使用 >= 包含边界。

作业 3:订单项筛选

SELECT *
FROM order_items
WHERE order_id = 6 AND quantity * unit_price >= 30;

  • 查询订单 ID 为 6 且总价(数量 × 单价)大于等于 30 的订单项。

作业 4:库存筛选

SELECT *
FROM products
WHERE quantity_in_stock IN (38, 49, 72);

  • 查询库存量为 38、49 或 72 的产品。

作业 5:出生日期范围

SELECT *
FROM customers
WHERE birth_date BETWEEN '1990-01-01' AND '2000-01-01';

  • 查询 1990-2000 年出生的客户(包含边界)。

小结

通过本次学习,我们掌握了 SQL 中 SELECT 和 WHERE 的基本用法,包括筛选、排序、去重以及逻辑运算。希望大家通过练习加深理解,下次我们将继续探索更多 SQL 功能。

 

Copyright © 2000-2022 Lzhdim Technology Software All Rights Reserved