
文章插图
18. ORDER BY
ORDER BY可以对结果进行排序,在没有明确指定ASC(升序)或DESC(降序)的情况下,默认按升序排列 。
SELECT <列名1>, <列名2>, …FROM <表名>ORDER BY <列名1>, <列名2>, …, ASC|DESC;例子:
SELECT * FROM course ORDER BY credits;SELECT * FROM course ORDER BY credits DESC;

文章插图
19. BETWEEN
BETWEEN语句用于指定区间 。
SELECT <列名1>, <列名2>, … FROM <表名> WHERE <列名x> BETWEEN <值1> AND <值2>;其中“值”可能是数字,文本,乃至日期等 。
例如,列出薪资在50000和100000之间的教员:
SELECT * FROM instructorWHERE salary BETWEEN 50000 AND 100000;

文章插图
20. LIKE
LIKE用于匹配文本中的特定模式 。
SELECT <列名1>, <列名2>, … FROM <表名> WHERE <列名x> LIKE <模式>;模式中可以使用以下两个通配符:
- % (零个、一个或多个字符)
- _ (单个字符)
SELECT * FROM course WHERE title LIKE '%to%';SELECT * FROM course WHERE course_id LIKE 'CS-___';

文章插图
21. IN
IN语句表示值属于某个集合 。
SELECT <列名1>, <列名2>, … FROM <表名> WHERE <列名n> IN (<值1>, <值2>, …);例子:列出计算机科学、物理、电子工程部门的学生 。
SELECT * FROM studentWHERE dept_name IN ('Comp. Sci.', 'Physics', 'Elec. Eng.');

文章插图
22. JOIN
JOIN用来组合两张以上表中的值 。下图展示了JOIN的三种类型:

文章插图
图片来源:zeroturnaround.com
SELECT <列名1>, <列名2>, … FROM <表名1> JOIN <表名2> ON <表名1.列名x> = <表名2.列名x>让我们来看三个例子,分别对应三种JOIN的类型 。
第一个例子,列出课程时包含开设课程的部门详情:
SELECT * FROM courseJOIN departmentON course.dept_name=department.dept_name;

文章插图
第二个例子,列出所有具有前置课程的课程的详情:
SELECT prereq.course_id, title, dept_name, credits, prereq_idFROM prereqLEFT OUTER JOIN courseON prereq.course_id=course.course_id;

文章插图
最后一个例子,列出所有课程的详情,不管是否具有前置课程:
SELECT course.course_id, title, dept_name, credits, prereq_idFROM prereqRIGHT OUTER JOIN courseON prereq.course_id=course.course_id;

文章插图
23. 视图
视图(view)是虚拟的SQL表 。它包含行和列,和一般的SQL表格很类似 。视图总是显示数据库中的最新数据 。
CREATE VIEW
创建视图:
CREATE VIEW <视图名> AS SELECT <列名1>, <列名2>, … FROM <表名> WHERE <条件>;DROP VIEW
删除视图:
DROP VIEW <视图名>;
例如,创建3学分的课程视图:
CREATE VIEW my_view AS SELECT * FROM course WHERE credits=3;

文章插图
24. 聚合函数
我们之前已经提到聚合函数,这里列出最常用的一些聚合函数:
- COUNT(列名) 返回行数
- SUM(列名) 返回指定列的值之和
- AVG(列名) 返回指定列的平均值
- MIN(列名) 返回指定列的最小值
- MAX(列名) 返回指定列的最大值
在SQL请求中,可以嵌套SELECT-FROM-WHERE表达式,称为嵌套子查询(nested subqueries) 。
例如,查找2009年秋、2010年春都开的课程:
SELECT DISTINCT course_idFROM sectionWHERE semester = ‘Fall’ AND year= 2009 AND course_id IN ( SELECT course_idFROM sectionWHERE semester = ‘Spring’ AND year= 2010 );
推荐阅读
- 晚上睡觉小腿肚抽筋
- 小腿肚大的原因
- 梦见自己开大巴车拉着很多人 梦见开班车拉着很多人
- 周公解梦梦见狗往怀里扑亲我 梦到狗很亲热的扑向我
- 肉夹馍|选择钓场也是一门学问,钓场周边看地形,岸边环境很重要,水中有鱼腥才更好
- 梦见辣椒树上结很多红辣椒跟青辣椒 梦见辣椒树上结很多红辣椒是什么意思
- 防晒 喝茶居然能防晒, 你听说过吗
- 算法面试 - 水壶问题
- 秋季喝茶的四点好处 很实用
- 从阿里、头条面试回来,面试官最喜欢问的Jvm和Redis你了解多少?
