相关子查询:子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。比如:select * from 外表 where 姓名 in (select 姓名 from 内表 where 外表.姓名=内表.姓名),你看在括号里的sql语句,是与外表关联的。这里顺便说一下非相关子查询,还是以上面为例,如:select * from 外表 where 姓名 in (select 姓名 from 内表 where 外表.姓名='张铁牛'),你看这个语句中括号里的sql语句,它是单独执行的,与外表没有任何关联,它只执行一次,执行完后将结果集传递给外部查询使用。
这里只是表面上描述了一下,内部还有其他区别,lz需要通过联系体会,有问题再追问,望采纳。
数据库CTE指的是公共表表达式(Common Table Expression).可以把它认为是在单个select,insert,update, delete 或者 create view 语句中定义的临时结果集。
CTE类似派生表,但它不以对象的形式存储在数据库中,只在当前查询语句的执行期间有效。而且CTE可以在同一个语句中被多次引用。
CTE可以用于:
1. 建立递归查询。常见的场景有组织架构图、BOM等。具体用法请参考联机丛书。
2. 当不需要常规视图时,代替视图,提高可读性。
3. 允许在派生列上分组。
4. 在同一个语句中多次被引用。
派生表:比如要查找一个叫张铁牛的人的信息,我们知道他是男性,为了缩小查找范围我把所有的男性都找出来,然后从这些男性中里面再去找张铁牛。这里男性的集合就相当于派生表,转成sql语句是这样select 姓名,住址,身份z from (select * from 表名 where 性别='男性') t where 姓名='张铁牛'(这里只是为了举例子),这里的t这个数据集就是派生表,它是虚表,在数据库中不存在的,是我们构建的,在这里的目的是为了缩小数据的查找范围。相关子查询:子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。比如:select * from 外表 where 姓名 in (select 姓名 from 内表 where 外表.姓名=内表.姓名),你看在括号里的sql语句,是与外表关联的。这里顺便说一下非相关子查询,还是以上面为例,如:select * from 外表 where 姓名 in (select 姓名 from 内表 where 外表.姓名='张铁牛'),你看这个语句中括号里的sql语句,它是单独执行的,与外表没有任何关联,它只执行一次,执行完后将结果集传递给外部查询使用。
这里只是表面上描述了一下,内部还有其他区别,lz需要通过联系体会,有问题再追问,望采纳。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)