笛卡尔积:
在默认情况下,当量表查询时,规则:
1.从第一张表中,取出一行和第二张表的每一行进行组合,返回结果(含有两张表的所有列)
2.一共返回的记录数:第一张表的行数*第二章表的行数
3.这样多表查询默认处理返回的结果称为笛卡尔积
4.解决这个多表的关键就是要写出正确的过滤条件where
相等连接
把两个表中,指定列的值相等的行连接起来
不等连接
自连接
自连接是指在同一张表的连接查询(将同一张表看做两张表)。
需要给表取别名
子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
单行子查询
单行子查询是指只返回一行数据的子查询语句
多行子查询
多行子查询指返回多行数据的子查询,使用关键字 in
在多行子查询中使用all操作符
(大于最大的,小于最小的)
也可以用max()和min()替换
在多行子查询中使用any操作符
(大于最小的,小于最大的)
也可以用max()和min()替换
子查询可以当做临时表使用
SELECT ...
FROM (子查询) 别名 , 另一个表名
where 条件
多列子查询
where(列1,列2...)= (select 列1,列2 from...)
表复制
自我复制(蠕虫复制)
有时,为了对某个sql语句进行效率测试,我们需要海量数据时,可以使用此法为表创建海量数据
INSERT INTO 表名
SELECT * FROM 表名;
表结构复制
CREATE TABLE 新表 LIKE 旧表; 把旧表的结构复制到新表中
表去重
1.先创建一张临时表 newtable,该表的结构和 table 一样
2.把 table 的记录通过 distinct 关键字处理后,把记录复制到 newtable
3.清除掉 table 的记录
4.把 newtable 表的记录复制到 table
5.drop 掉临时表 newtable
也可以给 newtable 添加记录后将 table 删掉,将 newtable 改名为 table
合并查询
有时在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号union,unionall
1.union all
该操作符用于取得两个结果集的并集,不会取消重复行。
2.union
该操作符与union all 相似,但会自动去掉结果集中重复行
外连接
左外连接
左侧的表完全显示我们就说是左外连接,也就是,左边的表和右边的表没有匹配的记录,也会把左边的记录显示出来
SELECT ... FROM 表1 LEFT JOIN 表2 ON 条件;
表1就是左表,表2就是右表;
右外连接
右侧的表完全显示我们就说是右外连接右边的表和左边的表没有匹配的记录,也会把右边的记录显示出来
SELECT ... FROM 表1 RIGHT JOIN 表2 ON 条件;
表1就是左表,表2就是右表;