数据库基础入门指南 Part 3
前提环境准备说明
表格内容回顾
题目 1:使用 USING 语法查询产品型号 + 系列信息
题目要求:
思路参考:
--语法格式
SELECT
表1别名.字段1 AS 中文别名1,
表2别名.字段2 AS 中文别名2,
表2别名.字段3 AS 中文别名3
FROM 表1 表1别名
INNER JOIN 表2 表2别名
USING(关联字段); -- 仅当两张表的关联字段名称完全一致时可用USING答案如下:
SELECT
p.model_name AS 产品型号,
ps.series_name AS 所属系列,
ps.product_type AS 产品类型
FROM products p
INNER JOIN product_series ps
USING(series_id); -- USING语法:关联字段在两张表中名称相同(均为series_id),可简化写法
含义解释
核心知识点
题目 2:查询屏幕尺寸≥10 英寸的 iPad Pro 产品
题目要求
思路参考:
--语法格式如下
SELECT
表1别名.字段1 AS 中文别名1,
表1别名.字段2 AS 中文别名2,
表1别名.字段3 AS 中文别名3
FROM 表1 表1别名
INNER JOIN 表2 表2别名
ON 表1别名.关联字段 = 表2别名.关联字段
WHERE 表2别名.筛选字段1 = '条件值1'
AND 表2别名.筛选字段2 = '条件值2'
AND 表1别名.筛选字段3 >= 数值条件
ORDER BY 表1别名.排序字段 ASC;答案如下:
SELECT
p.model_name AS 产品型号,
p.screen_size_inch AS 屏幕尺寸(英寸),
p.storage_options AS 存储版本
FROM products p
INNER JOIN product_series ps
ON p.series_id = ps.series_id
WHERE ps.product_type = 'iPad' -- 筛选“iPad”类型
AND ps.series_name = 'Pro' -- 筛选“Pro”系列
AND p.screen_size_inch >= 10 -- 筛选屏幕尺寸≥10英寸
ORDER BY p.screen_size_inch ASC; -- 按屏幕尺寸升序(ASC可省略,默认升序)含义解释
核心知识点
题目 3:查询 2020 年后发布的产品(含型号、系列、初始系统、类型)
题目要求
--语法格式如下
SELECT
表1别名.字段1 AS 中文别名1,
表2别名.字段2 AS 中文别名2,
表1别名.字段3 AS 中文别名3,
表2别名.字段4 AS 中文别名4
FROM 表1 表1别名
INNER JOIN 表2 表2别名
ON 表1别名.关联字段 = 表2别名.关联字段
WHERE 表1别名.时间字段 >= 年份条件
ORDER BY 表1别名.时间字段 DESC;答案如下:
SELECT
p.model_name AS 产品型号,
ps.series_name AS 所属系列,
p.initial_os AS 初始操作系统,
ps.product_type AS 产品类型
FROM products p
INNER JOIN product_series ps
ON p.series_id = ps.series_id
WHERE p.release_year >= 2020 -- 筛选2020年后发布的产品
ORDER BY p.release_year DESC; -- 按发布年份倒序(最新产品在前)含义解释
核心知识点
题目 4:多表内连接(模拟销量表查询 2022 年高销量产品)
题目要求
数据补充:
-- 先模拟创建销量表并插入测试数据(实际使用时执行)
CREATE TABLE IF NOT EXISTS sales (
sale_id INT PRIMARY KEY AUTO_INCREMENT,
product_id INT NOT NULL,
sale_num INT NOT NULL,
sale_year YEAR NOT NULL,
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
INSERT INTO sales (product_id, sale_num, sale_year) VALUES
(1, 1200, 2022), (5, 1500, 2022), (10, 900, 2022), (15, 2000, 2022);思路参考:
SELECT
表1别名.字段1 AS 中文别名1,
表2别名.字段2 AS 中文别名2,
表2别名.字段3 AS 中文别名3,
表3别名.字段4 AS 中文别名4
FROM 表1 表1别名
INNER JOIN 表2 表2别名 ON 表1别名.关联字段1 = 表2别名.关联字段1
INNER JOIN 表3 表3别名 ON 表1别名.关联字段2 = 表3别名.关联字段2
WHERE 表3别名.筛选字段1 = 条件值1
AND 表3别名.筛选字段2 >= 条件值2;答案如下:
-- 多表连接查询SQL
SELECT
p.model_name AS 产品型号,
ps.series_name AS 所属系列,
ps.product_type AS 产品类型,
s.sale_num AS 2022年销量
FROM products p
INNER JOIN product_series ps ON p.series_id = ps.series_id -- 先关联产品表和系列表
INNER JOIN sales s ON p.product_id = s.product_id -- 再关联销量表
WHERE s.sale_year = 2022 -- 筛选2022年销量数据
AND s.sale_num >= 1000; -- 筛选销量≥1000的产品含义解释
核心知识点
题目 5:统计每个 iPhone 系列的产品总数
题目要求
思路参考:
--语法格式如下
SELECT
表2别名.分组字段 AS 中文别名1,
COUNT(表1别名.主键字段) AS 中文别名2 -- 用主键计数,避免NULL影响结果
FROM 表1 表1别名
INNER JOIN 表2 表2别名
ON 表1别名.关联字段 = 表2别名.关联字段
WHERE 表2别名.筛选字段 = '条件值'
GROUP BY 表2别名.分组字段
ORDER BY 中文别名2 DESC;答案如下:
SELECT
ps.series_name AS iPhone系列,
COUNT(p.product_id) AS 产品数量 -- COUNT统计产品ID(非NULL值),确保计数准确
FROM products p
INNER JOIN product_series ps
ON p.series_id = ps.series_id
WHERE ps.product_type = 'iPhone' -- 仅统计iPhone产品
GROUP BY ps.series_name -- 按系列名称分组(每个系列对应一组统计)
ORDER BY 产品数量 DESC; -- 按产品数量倒序含义解释
核心知识点
题目 6:查询平均电池容量≥3000mAh 的 iPhone 系列
题目要求
思路参考:
SELECT
表2别名.分组字段 AS 中文别名1,
ROUND(AVG(表1别名.数值字段), 保留小数位数) AS 中文别名2
FROM 表1 表1别名
INNER JOIN 表2 表2别名
ON 表1别名.关联字段 = 表2别名.关联字段
WHERE 表2别名.筛选字段 = '条件值'
AND 表1别名.数值字段 IS NOT NULL -- 排除NULL值
GROUP BY 表2别名.分组字段
HAVING 中文别名2 >= 数值条件 -- 分组后筛选用HAVING(WHERE无法筛选聚合结果)
ORDER BY 中文别名2 DESC;答案如下:
SELECT
ps.series_name AS iPhone系列,ROUND(AVG(p.battery_capacity_mah), 1) AS 平均电池容量(mAh)
-- ROUND(值,1)保留1位小数
FROM products p
INNER JOIN product_series ps
ON p.series_id = ps.series_id
WHERE ps.product_type = 'iPhone' -- 仅统计iPhone产品
AND p.battery_capacity_mah IS NOT NULL -- 排除电池容量为NULL的数据(避免影响平均值)
GROUP BY ps.series_name
HAVING 平均电池容量(mAh) >= 3000 -- 分组后筛选:平均容量≥3000mAh(注意用HAVING而非WHERE)
ORDER BY 平均电池容量(mAh) DESC;含义解释
核心知识点
题目 7:查询初始系统为 iOS 16 及以上的 Pro 系列产品
题目要求
思路参考:
SELECT
表1别名.字段1 AS 中文别名1,
表2别名.字段2 AS 中文别名2,
表2别名.字段3 AS 中文别名3,
表1别名.字段4 AS 中文别名4
FROM 表1 表1别名
INNER JOIN 表2 表2别名
ON 表1别名.关联字段 = 表2别名.关联字段
WHERE 表2别名.筛选字段1 = '条件值1'
AND 表1别名.筛选字段2 IN ('条件值2', '条件值3', '条件值4') -- IN简化多值匹配
ORDER BY 表2别名.排序字段 ASC;答案如下:
SELECT
p.model_name AS 产品型号,
ps.series_name AS 所属系列,
ps.product_type AS 产品类型,
p.initial_os AS 初始操作系统
FROM products p
INNER JOIN product_series ps
ON p.series_id = ps.series_id
WHERE ps.series_name = 'Pro' -- 筛选Pro系列
AND p.initial_os IN ('iOS 16', 'iOS 17', 'iOS 18', 'iOS 26') -- IN匹配多个系统值
ORDER BY ps.product_type ASC; -- 按产品类型升序(iPhone在前或iPad在前,按字母排序)含义解释
核心知识点
题目 8:统计 2021 年后发布的各系列产品数量
题目要求
思路参考:
SELECT
表2别名.分组字段1 AS 中文别名1,
表2别名.分组字段2 AS 中文别名2,
COUNT(表1别名.主键字段) AS 中文别名3
FROM 表1 表1别名
INNER JOIN 表2 表2别名
ON 表1别名.关联字段 = 表2别名.关联字段
WHERE 表1别名.时间字段 >= 条件值
GROUP BY 表2别名.分组字段1, 表2别名.分组字段2 -- 联合分组:按多个字段分组
ORDER BY 表2别名.分组字段1 ASC, 中文别名3 DESC; -- 多字段排序:先排字段1,再排统计结果答案如下:
SELECT
ps.product_type AS 产品类型,
ps.series_name AS 所属系列,
COUNT(p.product_id) AS 产品数量
FROM products p
INNER JOIN product_series ps
ON p.series_id = ps.series_id
WHERE p.release_year >= 2021 -- 筛选2021年后发布的产品
GROUP BY ps.product_type, ps.series_name -- 按“产品类型+系列名称”联合分组(同一类型下的不同系列)
ORDER BY ps.product_type ASC, 产品数量 DESC; -- 先按类型升序,再按数量降序
