参考资料:SQL之母 - SQL自学网站 (yupi.icu)
-
select * from student
-
select name,age from student
-
select name 学生姓名,age 学生年龄 from student
-
select name,score,score * 2 as double_score from student
-
select name, score from student where name = ‘鱼皮’
检索指定数据
-
select name, age from student where name != ‘热dog’
-
select name, age, score from student where age is not null
检索空值
-
select name, score from student where name not like ‘%李%’
模糊查询
- 百分号(%):表示任意长度的任意字符序列。
- 下划线(_):表示任意单个字符。
- 注意 匹配:like;不匹配:not like (没有is)
-
select name, score from student where name like ‘%李%’ or score > 500
逻辑运算
- AND:表示逻辑与,要求同时满足多个条件,才返回 true。
- OR:表示逻辑或,要求满足其中任意一个条件,就返回 true。
- NOT:表示逻辑非,用于否定一个条件(本来是 true,用了 not 后转为 false)
-
select distinct class_id, exam_num from student
去重
- ‘distinct 字段1, 字段2, 字段3, …’可筛选多种字段组合时的重复情况
-
select name, age, score from student order by score desc, age asc
排序
- ASC升序
- DESC降序
- “order by 字段1 [升序/降序], 字段2 [升序/降序], …”多种排序规则,如本题:先按照成绩从大到小排序,如果成绩相同,则按照年龄从小到大排序
-
select name, age from student order by age asc limit 1, 3
截断和偏移
-
你可以使用手指挡住不需要看的部分(即截断)
-
-- LIMIT 后只跟一个整数,表示要截断的数据条数(一次获取几条) select task_name, due_date from tasks limit 2;
-
根据任务的编号,直接翻到需要查看的位置(即偏移)
-
-- LIMIT 后跟 2 个整数,依次表示从第i+1条数据开始(下标为2即第三条)、一次获取几条 select task_name, due_date from tasks limit 2, 2;
注意这里asc后面没有逗号 ~
-
-
SELECT name, CASE WHEN (age > 60) THEN ‘老同学’ WHEN (age > 20) THEN ‘年轻’ ELSE ‘小同学’ END AS age_level FROM student ORDER BY name asc
条件分支
使用
case when
可以在查询结果中根据特定的条件动态生成新的列或对现有的列进行转换。注意根据分类筛选的该列可以准便起一个别名作为新列的名字CASE WHEN (条件1) THEN 结果1 WHEN (条件2) THEN 结果2 ... ELSE 其他结果 END
-
select name, date() as 当前日期 from student
时间函数
- DATE():获取当前日期
- DATETIME():获取当前日期时间
- TIME():获取当前时间
- 注意,这里的日期、日期时间和时间将根据当前的系统时间来生成,实际运行结果可能会因为当前时间而不同。
-
SELECT id, name, UPPER(name) AS upper_name FROM student WHERE name = ‘热dog’
字符串处理
-- 将姓名转换为大写 SELECT name, UPPER(name) AS upper_name -- 计算姓名长度 SELECT name, LENGTH(name) AS name_length -- 将姓名转换为小写并进行条件筛选 SELECT name, LOWER(name) AS lower_name