跳到主要内容

条件查询、排序与分页

条件表达式

SELECT * FROM <表名> WHERE <条件表达式>;

#条件表达式可使用 AND / OR / NOT / BETWEEN * AND 判断
SELECT * FROM <表名> WHERE <条件1> AND <条件2> ;

#多个条件使用()包裹起来
SELECT * FROM <表名> WHERE (<条件1> OR <条件2>) AND <条件3> ;

条件案例

条件表达式举例 1表达式举例 2说明
使用 = 判断相等score = 80name = 'abc'字符串需要用单引号括起来
使用 > 判断大于score > 80name > 'abc'字符串比较根据 ASCII 码,中文字符比较根据数据库设置
使用 >= 判断大于或相等score >= 80name >= 'abc'
使用 < 判断小于score < 80name <= 'abc'
使用 <= 判断小于或相等score <= 80name <= 'abc'
使用 <> 判断不相等score <> 80name <> 'abc'
使用 LIKE 判断相似name LIKE 'ab%'name LIKE '%bc%'%表示任意字符,例如'ab%'将匹配'ab','abc','abcd'

投影查询

只返回指定的列

SELECT <1>, <2>, <3> FROM ...

#列之间用`,`分隔,在列名输入空格可重命名列
SELECT name '姓名', score '分数' FROM students;

#加入条件查询
SELECT name '姓名',score '分数' FROM students WHERE score > 90;

数据排序

  • 添加order by进行列排序默认升序
  • 再列名后面添加DESC表示倒序
  • 多列排序用,隔开,按前后表达式的前后关系排序
SELECT  name '姓名',score '分数' FROM students WHERE score > 90 ORDER BY score DESC;
SELECT id, name, gender, score
FROM students
WHERE class_id = 1
ORDER BY score DESC;

分页查询

-- 查找分数大于80且名字含“小”的学生,按班级、分数、性别排序,其中分数为倒序排列
-- LIKE 为模糊查询,%为变量值
-- 注意offset的值不是页,而是偏移值,若使用作为分页功能和LIMIT是呈倍数关系
SELECT *
FROM students
WHERE score > 80 AND name LIKE "小%"
ORDER BY class_id,score DESC,gender
-- LIMIT 3 OFFSET 6;
  • 使用 LIMIT 3 OFFSET 0,实际使用 offset 可忽略
  • LIMIT 限制返回数据为前 3,偏移值为 0。每次添加偏移值即可实现分页
  • 思考如何计算总数并返回页数

注意:指定某单一条件进行排序,当有排序值相同的记录,顺序则是随机的,会造成数据“丢失”。有两种方式解决,一放弃排序