连接查询
连接查询是将多张表中记录按照指定的条件进行连接的查询方式
如下两表
内连接:
内连接是返回连接表中符合连接条件或查询条件记录的连接查询
显示内连接
- 语法:SELECT 字段 FROM 表1 INNER JOIN 表2 ON 连接条件 WHERE 条件
- 示例:SELECT newsTitle,topicName FROM news AS n INNER JOIN topic AS t ON n.topicId=t.topicId
- 结果:
隐式内连接
- 语法:SELECT 字段 FROM 表1,表2 WHERE 表1.条件=表2.条件
- 示例:SELECT newsTitle,topicName FROM news AS n,topic AS t WHERE n.topicId=t.topicId
- 结果:
外连接:
外连接是以一张表为基表,返回基表中所有记录及连接表中符合条件的记录的连续查询
左外连接
语法:SELECT 字段 FROM 表1 LEFT JOIN 表2 ON 连接条件WHERE 条件
示例:SELECT topicName,newsTitle FROM topic AS t LEFT JOIN news AS n ON n.topicId=t.topicId
结果:
右外连接
语法:SELECT 字段 FROM 表1 RIGHT JOIN 表2 ON 连接条件WHERE 条件
示例:SELECT newsTitle,topicName FROM news AS n RIGHT JOIN topic AS t ON n.topicId=t.topicId
结果:
子查询
子查询是在一个查询的内部包括另一个查询的查询方式
执行顺序:先执行子查询,返回所有来自子查询的结果,再执行外围的父查询,返回查询的最终结果
示例:SELECT newsTitle FROM news WHERE newsId NOT IN( SELECT newsId FROM comments WHERE cmtAuthor LIKE ‘%东%’)
EXISTS子查询
语法:SELECT 字段 FROM 表名 WHERE EXISTS(子查询);
注意:子查询有返回结果:EXISTS子查询结果为TRUE,外层查询执行
子查询无返回结果:EXISTS子查询结果为FALSE,外层查询不执行
子查询的应用
- 任何允许使用表达式的地方都可以使用子查询
- 嵌套在父查询SELECT语句的子查询可包括
SELECT子句
FROM子句
WHERE子句
GROUP BY子句
HAVING子句 - 只出现在子查询中而没有出现在父查询中的列不能包含在输出列中