Oracle中的select

news/2024/6/19 2:45:00 标签: oracle, select, 子查询, 子查询因子化

1.子查询分两种
(1)单行子查询:对外部的SQL要么不返回结果,要么只返回一行。单行子查询的一种特殊情况就是正好包含一列(标量子查询
(2)多行子查询:向外部的SQL语句返回一行或多行
(3)多列子查询:向外部的SQL语句返回多列
(4)关联子查询:引用外部SQL中的一列或者多列,因为他们通过相同的列与外部的SQL进行关联,所以叫关联子查询
(5)嵌套子查询:位于另外一个子查询
2.单行子查询
(1)子查询可以放到select语句的where、having或者from子句中
(2)在单行子查询中,可以使用其他的比较操作符
(3)标量子查询是只返回一行且包含一列的查询
(4)在外部的查询可以使用having对子查询的结果进行行组过滤
(5)在外部查询的from子句中也可以使用子查询(内联视图)
(6)单行子查询最多只能返回一行,且不能包含order by 子句。
3.多行子查询
(1)要处理返回多行的子查询,外部查询可以使用IN,ANY,ALL操作符。
(2)IN可以用来检查在值列表中是否包含指定的值。值列表也可以来自子查询的返回结果。NOT IN用来检查在值列表中是否不包含指定的值。
(3)ANY操作符可以用来将值与列表中的任何值进行比较,在查询中,在ANY操作符之前必须使用>,<,<=,>=操作符
(4)ALL操作符可以用来将值与列表中的所有值进行比较,在查询中,在ALL操作符之前必须使用>,<,<=,>=操作符
4.关联子查询
(1)关联子查询对于外部查询的每一行都会运行一次,非关联子查询只在运行外部查询之前运行一次,此外关联子查询可以解决空值的问题。
(2)在关联子查询中,外部查询中的每一行都被逐行传递给子查询子查询一次读取外部查询中每一行的值,并将其应用到子查询,直到外部查询中的所有行都被处理完为止,然后返回整个查询的结果。
(3)exists操作符用于检查子查询返回行的存在性,虽然exists也可以在非关联子查询中使用,但是exists通常用于关联子查询;exists只是检查子查询返回行的存在性,因此子查询不必返回一列,可以只返回字面值,只要子查询返回一行或者多行,exists返回true;否则返回false
(4)not exists用于检查行是否不存在于子查询返回的结果中时使用
(5)exists比in的性能高,in要检查实际值,exists检查行的存在性
(6)not in和not exists区别:当值列表包含空值时,not exists返回true;not in返回false
4.子查询因子化
(1)子查询放在with子句中并且在with子句的外部引用这些子查询
比如:

WITH temp_table AS(
SELECT t.ID,t.sname,t.sex FROM student
)
SELECT * FROM temp_table
ORDER BY temp_table.ID

在这里插入图片描述


http://www.niftyadmin.cn/n/749842.html

相关文章

php获取目录下所有文件及目录(多种方法)

获取某目录下所有子文件和子目录 function getDirContent($path){if(!is_dir($path)){return false;} //readdir方法 /* $dir opendir($path); $arr array(); while($content readdir($dir)){ if($content ! . && $content ! ..){ $arr[] $content; } } closedir(…

DevOps 开源工具

60 个最棒的 DevOps 开源工具 实现DevOps需要什么工具

frp配置模板

1、frpc客户端 [common] server_addr www.yourdomain.com #frps服务端地址 server_port 7000 #frps服务端通讯端口&#xff0c;客户端连接到服务端内网穿透传输数据的端口 privilege_token frp888 #特权模式密钥&#xff0c;客户端连接到FRPS服务端的验证密钥 log_file f…

字符串反转

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner s new Scanner(System.in);String str s.nextLine();StringBuffer sb new StringBuffer(str);System.out.println(sb.reverse());}}

计算字符个数

题目描述&#xff1a; 写出一个程序&#xff0c;接受一个有字母和数字以及空格组成的字符串&#xff0c;和一个字符&#xff0c;然后输出输入字符串中含有该字符的个数。不区分大小写。 输入描述&#xff1a; 输入一个有字母和数字以及空格组成的字符串&#xff0c;和一个字符。…

求一个字符串中大写字母的个数

题目描述 找出给定字符串中大写字符(即’A’-‘Z’)的个数 接口说明 原型&#xff1a;int CalcCapital(String str); 返回值&#xff1a;int 输入描述: 输入一个String数据 输出描述: 输出string中大写字母的个数 算法实现&#xff1a; package com.husweijishi.suanfa;import…

数字颠倒

题目描述 描述&#xff1a; 输入一个整数&#xff0c;将这个整数以字符串的形式逆序输出 程序不考虑负数的情况&#xff0c;若数字含有0&#xff0c;则逆序形式也含有0&#xff0c;如输入为100&#xff0c;则输出为001 输入描述: 输入一个int整数 输出描述: 将这个整数以字符串…

使用kubeadm搭建高可用k8s v1.16.3集群

使用kubeadm搭建高可用k8s v1.16.3集群