SQL——连接查询与子查询

 

连接查询

       交叉连接

等值连接 

内连接

外连接

       左连接

右连接

 

 

笛卡尔积 结果为两个表行数的乘积

交叉连接 结果符合笛卡尔积

    语法

cross join 或者 join 或者直接用","

 

等值连接: select 字段.... from 表1,... where 连接条件

 

内连接,合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行

    select .... from 表1 inner join 表2 on 表1.列名 条件运算符 表2.列名 

表1.列名 表2.列名分别是两个表的公共列

 

外连接

左外连接 left join 左表为主表,左表中的每条记录必出现在结果集中,而在右表中没有对应的记录,将以null进行填充

右外连接 right join 右表为主表,右表中的每条记录必出现在结果集中,而在左表中没有对应的记录,将以null进行填充

外连接与普通连接的区别

            普通连接只能输出满足连接条件的元组

             外连接以指定表为连接主体,将主体表中不满足连接条件的元组一并输出

 

外连接与内查询的区别

    内连接时得到的结果是公共的部分

    外连接得到是主表所特有的部分与公共部分的合集

 

省略连接条件/连接条件无效/需要所有的组合会产生笛卡尔积

 

对于表中有相同列,使用时在列名之前需要加上表名

使用表名前缀在多个表中区分同的列

 

使用别名可以简化查询,并且可以提高效率

 

连接n个表,至少需要n-1个连接条件

 

子查询就是在原有查询语句中潜入新的查询,子查询的本质就是多个select的嵌套

子查询在父查询之前一次执行完成,其结果被父查询使用

非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。

相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。

 

注意事项

子查询要包含在括号内

将子查询放在比较条件的右侧

单行子查询只能使用单行比较操作运算符

多行子查询只能使用多行比较操作符(in any all)

单行子查询 子查询结果只有一条

多行子查询 子查询结果由多条

 

子查询书写时,分开写,先把条件一一写出,在合并,注意其与文字描述大多数时相反的顺序

 

常用的四个关键字运算符

all 与any

in与exists

all与any的区别

       all表示的是所有的,即对集合中的每个元素都要符合,比如>all其实就是大于集合中最大的元素

any 表示的是任意的,即只要对集合中的任意一个元素满足就可以,比如>any只要大于集合中最小的元素就符合条件

in与exists的区别

       in 适用于非相关子查询

       exists 适用于相关子查询

你可能感兴趣的:(sql)