文章目录
第四章、排序与分页
单列排序
多列排序
分页
第五章、多表查询
笛卡尔积错误
等值连接
自连接
内连接
外连接
UNION使用
总结
第四章、排序与分页
使用 ORDER BY 子句排序 ASC(ascend): 升序
DESC(descend):降序
ORDER BY 子句在SELECT语句的结尾(默认升序)。
单列排序
SELECT
FROM
ORDER BY hire_date DESC
多列排序
SELECT
FROM
ORDER BY department_id, salary DESC;
- 可以使用不在SELECT列表中的列排序。
- 在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第 一列数据中所有值都是唯一的,将不再对第二列进行排序。
分页
背景1:查询返回的记录太多了,查看起来很不方便,怎么样能够实现分页查询呢?
背景2:表里有 4 条数据,我们只想要显示第 2、3 条数据怎么办呢?
LIMIT
--前10条记录:
SELECT * FROM 表名 LIMIT
或者
SELECT * FROM 表名 LIMIT
--第11至20条记录:
SELECT * FROM 表名
LIMIT 10,10;
--第21至30条记录:
SELECT * FROM
LIMIT 20,10
约束返回结果的数量可以 减少数据表的网络传输量 ,也可以 提升查询效率 。如果我们知道返回结果只有 1 条,就可以使用 LIMIT 1 ,告诉 SELECT 语句只需要返回一条记录即可。这样的好处就是 SELECT 不需 要扫描完整的表,只需要检索到一条符合条件的记录即可返回。
第五章、多表查询
笛卡尔积错误
在同时选中多表时,若省略连接条件,则会笛卡尔积现象(A表中A元素对应B表中所有元素)。若要进行多表查询,必须要增加连接条件
错误:
SELECT first_name,last_name, department_name
FROM正确:
SELECT last_name, country_id
FROM employees, countries
WHERE employees.department_id = departments.department_id
等值连接
除连接条件外,多个表中有相同列时,必须在列名之前加上表名前缀。
在不同表中具有相同列名的列可以用表名加以区分。
SELECT employees.last_name, departments.department_name,employees.department_id
FROM employees, departments
WHERE
为增加代码可读性且节约时间,可以给表起别名 (若起别名,则在SELECT必须使用别名)
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e , departments d
WHERE
自连接
当table1和table2本质上是同一张表,只是用取别名的方式虚拟成两张表以代表不同的意义。然后两个表再进行内连接,外连接等查询。
SELECT CONCAT(worker.last_name ,' works for '
, manager.last_name)
FROM employees worker, employees manager
WHERE
该部分内容即指将worker中的manager_id与manager自己的employee_id相等。
内连接
合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行。(内连接只包含你SELECT的内容)
SELECT 字段列表
FROM A表 INNER JOIN B表
ON 关联条件
WHERE
外连接
合并具有同一列的两个以上的表的行,结果集中除包含一个表与另一个表不匹配的行外,还查询到了左表或右表中不匹配的行。
左外连接(LEFT OUTER JOIN)
SELECT 字段列表
FROM A表 LEFT OUTER JOIN B表
ON 关联条件
WHERE
举例:
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON#(显示全部employee表)
右外连接(RIGHT OUTER JOIN)
SELECT 字段列表
FROM A表 RIGHT JOIN B表
ON 关联条件
WHERE
UNION使用
合并查询结果 利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同,并且相互对应。各个SELECT语句之间使用UNION或UNION ALL关键字分隔。
SELECT column,... FROM table1
UNION [ALL]
SELECT column,... FROM
总结
连接部分内容较有难度,且不易用文字描述,建议实操。而且谁能告诉我为什么编辑时格式时没问题的但发出与总是格式不统一。