SQL练习题(一)


SQL基础练习题

  1. 创建一个名为 “products” 的表,包含 id(自增主键)、name、price 和 quantity 字段。
  2. 插入一条 id 为 1,name 为 “Apple”,price 为 2.5,quantity 为 10 的记录到 “products” 表中。
  3. 查询 “products” 表中所有的记录。
  4. 更新 id 为 1 的记录,将 price 改为 2.75。
  5. 删除 id 为 1 的记录。
  6. 插入三条新的产品记录,要求至少包含两个不同的产品名称,并确保至少有一个产品的价格小于 10,至少一个以 “A” 开头的产品。
  7. 查询 “products” 表中所有价格大于等于 10 的产品记录。
  8. 查询 “products” 表中所有名称以 “A” 开头的产品记录。
  9. 查询 “products” 表中所有价格大于 10 且名称不为 “Apple” 的产品记录。
  10. 查询 “products” 表中按照价格从小到大排列的所有产品记录。
  11. 查询 “products” 表中记录的总数。
  12. 查询 “products” 表中价格最高的产品记录。
  13. 查询 “products” 表中价格最低的产品记录。
  14. 查询 “products” 表中名称为 “Mango” 的记录是否存在。
  15. 查询 “products” 表中价格在 5 到 15 之间的产品记录。
  16. 查询 “products” 表中所有名称包含 “red” 的记录。
  17. 查询 “products” 表中所有价格在 1 到 5 之间或者在 20 到 25 之间的记录。
  18. 查询 “products” 表中 price 字段的平均值。
  19. 查询 “products” 表中价格的总和。
  20. 查询 “products” 表中价格大于等于 5 的产品的平均数量。
  21. 查询 “products” 表中每个价格对应的产品数量。
  22. 更新所有数量小于 5 的记录,将其数量改为 5。
  23. 删除所有价格大于等于 15 的产品记录。
  24. 将 “products” 表中所有产品的价格减去 1。
  25. 查询 “products” 表中按照价格分组,并统计每个价格的产品数量。
  26. 查询 “products” 表中按照名称分组,并统计每个名称的产品数量。
  27. 查询 “products” 表中价格大于等于 10 的产品记录,按照价格降序排列,只返回前 5 条记录。
  28. 查询 “products” 表中价格在 5 到 15 之间的产品记录,按照价格升序排列,将结果分页,每页显示 10 条记录,返回第三页的数据。
  29. 查询 “products” 表中第二贵的产品记录。

参考答案

1.创建表:

# 创建一个库或使用创建好的库
# CREATE DATABASE test;
USE test;
CREATE TABLE products (
  id INT AUTO_INCREMENT PRIMARY KEY COMMENT "编号",
  name VARCHAR(50)  COMMENT "商品名",
  price DECIMAL(10,2) COMMENT "价格",
  quantity INT   COMMENT "数量" 
);

2.插入数据:

INSERT INTO products (name, price, quantity)
VALUES ('Apple', 2.5, 10);

3.查询所有数据:

SELECT * FROM products;

4.更新记录:

UPDATE products SET price = 2.75 WHERE id = 1;

5.删除记录:

DELETE FROM products WHERE id = 1;

6.插入新数据:

INSERT INTO products (name, price, quantity)
VALUES
  ('Banana', 1.5, 20),
  ('Orange', 1.2, 15),
  ('Apple Pie', 12.99, 5);

7.查询价格大于等于 10 的产品记录:

SELECT * FROM products WHERE price >= 10;

8.查询名称以 “A” 开头的产品记录:

SELECT * FROM products WHERE name LIKE 'A%';

9.查询价格大于 10 且名称不为 “Apple” 的产品记录:

SELECT * FROM products WHERE price > 10 AND name <> 'Apple';

10.按价格从小到大排列的所有产品记录:

SELECT * FROM products ORDER BY price ASC;

11.查询记录总数:

SELECT COUNT(*) FROM products;

12.查询价格最高的产品记录:

SELECT * FROM products ORDER BY price DESC LIMIT 1;

13.查询价格最低的产品记录:

SELECT * FROM products ORDER BY price ASC LIMIT 1;

14.查询名称为 “Mango” 的记录是否存在:

SELECT EXISTS(SELECT * FROM products WHERE name = 'Mango');

15.查询价格在 5 到 15 之间的产品记录:

SELECT * FROM products WHERE price BETWEEN 5 AND 15;

16.查询所有名称包含 “red” 的记录:

SELECT * FROM products WHERE name LIKE '%red%';

17.查询价格在 1 到 5 之间或者在 20 到 25 之间的记录:

SELECT * FROM products WHERE price BETWEEN 1 AND 5 OR price BETWEEN 20 AND 25;

18.查询 price 字段的平均值:

SELECT AVG(price) FROM products;

19.查询价格的总和:

SELECT SUM(price) FROM products;

20.查询价格大于等于 5 的产品的平均数量:

SELECT AVG(quantity) FROM products WHERE price >= 5;

21.查询每个价格对应的产品数量:

SELECT price, COUNT(*) FROM products GROUP BY price;

22.更新数量小于 5 的记录:

UPDATE products SET quantity = 5 WHERE quantity < 5;

23.删除价格大于等于 15 的产品记录:

DELETE FROM products WHERE price >= 15;

24.所有产品的价格减去 1:

UPDATE products SET price = price - 1;

25.查询按价格分组,并统计每个价格的产品数量:

SELECT price, COUNT(*) FROM products GROUP BY price;

26.查询按名称分组,并统计每个名称的产品数量:

SELECT name, COUNT(*) FROM products GROUP BY name;

27.查询价格大于等于 10 的产品记录,并按价格降序排列返回前 5 条记录:

SELECT * FROM products WHERE price >= 10 ORDER BY price DESC LIMIT 5;

28.查询价格在 5 到 15 之间的产品记录,按照价格升序排列,将结果分页,每页显示 10 条记录,返回第三页的数据:

SELECT * FROM products WHERE price BETWEEN 5 AND 15 ORDER BY price ASC LIMIT 20, 10;

29.查询第二贵的产品记录:

SELECT * FROM products ORDER BY price DESC LIMIT 1, 1;