CodeGym /课程 /SQL SELF /用SELECT、WHERE和ORDER BY写简单查询

用SELECT、WHERE和ORDER BY写简单查询

SQL SELF
第 3 级 , 课程 2
可用

现在是时候把这些东西都串起来,学会用SELECTWHEREORDER BY组合写出简单但很有用的查询啦。这个技能你以后会经常用到,比如查用户列表、做个小报告啥的。

在开始之前,先回顾下最基础的SQL查询结构长啥样:

SELECT 列1, 列2, 列3
FROMWHERE 条件
ORDER BYASC
LIMIT 行数
OFFSET 行数;

如果SQL是本小说的话,SELECT就是章节标题,FROM是内容,WHERE是剧情解释。ORDER BY就像给故事加点顺序,看起来更有意思!

这些关键字的顺序是固定的。 有些可以省略(不写),但顺序绝对不能乱。

例子1:查出成绩优秀的学生名字

假设我们有个students表,结构和数据如下:

id name age grade
1 Otto 21 A
2 Maria 22 B
3 Alex 20 A
4 Nat 23 C
5 Dan 25 B

你要查出所有成绩是A的学生(也就是grade = 'A'),并按名字排序。这样写:

SELECT name
FROM students
WHERE grade = 'A'
ORDER BY name ASC;

结果:

name
Alex
Otto

解释

  1. SELECT name —— 只查名字。没必要把不需要的数据都查出来,浪费资源。
  2. WHERE grade = 'A' —— 只要成绩是A的。
  3. ORDER BY name ASC —— 按名字字母顺序排。

例子2:按价格查商品

现在假设有个products表,里面是商品信息:

id product_name category price
1 智能手机 Electronics 30000
2 电视 Electronics 45000
3 冰箱 Appliances 50000
4 吸尘器 Appliances 15000
5 灯泡 Lighting 500

我们的任务是查出"Electronics"分类下的商品,并按价格从高到低排。SQL如下:

SELECT product_name, price
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;

结果:

product_name price
电视 45000
智能手机 30000

解释

  1. SELECT product_name, price —— 查商品名和价格。
  2. WHERE category = 'Electronics' —— 只要"Electronics"分类的。
  3. ORDER BY price DESC —— 按价格从高到低排(最贵的在前面)。

例子3:复杂条件过滤

还是用students表。假如我们要找所有年龄大于21岁,成绩是BC的学生,并按年龄排序。这里要组合多个条件:

SELECT name, age, grade
FROM students
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
ORDER BY age ASC;

结果:

name age grade
Maria 22 B
Nat 23 C
Dan 25 B

解释

  1. WHERE age > 21 —— 只要年龄大于21的学生。
  2. AND (grade = 'B' OR grade = 'C') —— 成绩是B或C。括号用来分组条件。
  3. ORDER BY age ASC —— 按年龄从小到大排。

例子4:排序和过滤一起用

回到products表。我们想找出价格低于50000的商品,先按分类排,再在每个分类里按价格从低到高排。

SELECT product_name, category, price
FROM products
WHERE price < 50000
ORDER BY category ASC, price ASC;

结果:

product_name category price
吸尘器 Appliances 15000
智能手机 Electronics 30000
电视 Electronics 45000
灯泡 Lighting 500

解释

  1. WHERE price < 50000 —— 先过滤出价格低于50000的商品。
  2. ORDER BY category ASC, price ASC —— 先按分类字母顺序排,每个分类里再按价格从低到高排。

例子5:常见错误——漏写括号

现在看看可能会出错的地方。如果像下面这样忘了加括号,逻辑运算就会出问题:

错误的SQL:

SELECT name, age, grade
FROM students
WHERE age > 21 AND grade = 'B' OR grade = 'C'
ORDER BY age ASC;

这里OR grade = 'C'会被单独执行,跟AND age > 21没关系,结果会查出所有成绩是C的学生,不管他们多大。

所以一定要用括号让条件更清楚:

WHERE age > 21 AND (grade = 'B' OR grade = 'C')
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION