子查询是指嵌套在其他SQL语句内的查询语句。
子查询指嵌套在查询内部,且必须始终出现在圆括号内。
子查询的结果作为外层另一个查询的过滤条件。
用any、all、some关键字修饰子查询
1、放在比较运算符的后面。
2、any和some是同义词,表示满足内层子循环中的任何一个条件。
3、all表示需要同时满足所有内层查询的条件。
in关键字:进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作。
not in与in的作用相反
例:select * from table where exists(子查询);
① 判断子查询是否返回行;
② 如果返回,那么exists的结果为true;
③ 如果没有返回任何行,那么exists返回的结果为false。
插入记录时使用子查询
insert into select语句从一个表复制数据,然后把数据插入到一个已存在的表中。
多表连接查询
语法结构: table_reference
[inner] join {left|right} [outer] join
Table_reference
on conditional_ecpr
内连接:根据连接条件从多个表中查询选择数据,显示这些表中与连接条件相匹配的数据行,组合成新纪录。
语法结构: select column_list
From t1
[inner] join t2 on join_condition1
[inner join t2 on join_condition2
…]
where where_conditions;
外连接:查询多个表中相关联的行。
左外连接:显示左表全部记录,右表满足连接条件的记录。
右外连接:显示右表全部记录,左表满足连接条件的记录。
语法结构: select column_list
From t1
left|right [outer] join t2 on join_condition1;
自连接:如果在一个连接查询中,涉及的两个表都是同一个表。
自连接是一种特殊的连接查询,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表。
例: select t1.category_id as '图书类别编号',
t1.category as '图书类别名称',
t2.category as '图书上级分类名称'
from bookcategory t1
left join bookcategory t2 ON t.parent_id = t2.category_id;
多表更新
update tabl1 {[inner] join | {left | right} [outer] join} table2
on 连接条件
set 列名1 = {值1 | default}
[,列名2 = {值2 | default}]…
[where 筛选条件]
多表记录删除
delete 表1[.*],表2[.*]
from 表1 {内连接|外连接} 表2
on 连接条件
[where 筛选条件]