Subconsultas no Oracle
(1) Uma subconsulta ou consulta aninhada é uma consulta dentro de outra consulta SQL e incorporada na cláusula WHERE. Uma subconsulta é uma consulta dentro de uma consulta
(2) Uma subconsulta é usada para retornar dados que serão usados na consulta principal como condição para restringir ainda mais os dados a serem recuperados.
(3) As subconsultas respondem às consultas que têm várias partes. A consulta pai responde a uma parte e a subconsulta responde a outra parte
(4) As subconsultas podem ser usadas com as instruções SELECT, INSERT, UPDATE e DELETE junto com os operadores como =, <,>,>=, <=, IN, BETWEEN etc.
(5)O uso de subconsultas em uma cláusula FROM é conhecido como visualização em linha .
(6) O uso de subconsultas na cláusula WHERE é chamado de subconsulta aninhada . São permitidas até 255 consultas aninhadas.
Algumas diretrizes para Subconsultas do Oracle
(1) Precisamos colocar subconsultas entre parênteses sempre
(2) Precisamos colocar subconsultas no lado direito do operador de comparação
(3) Use operador de linha única com subconsultas de linha única e operador de várias linhas com subconsultas de várias linhas
Sintaxe geral
SELECT col1, col2 FROM table1 WHERE col1 OPERATOR (SELECT col1 FROM table2 [WHERE])
Subconsulta de linha única
Ele retorna apenas uma linha de resultados e usa um único operador de linha (o mais comum é o operador igual (=)). Os outros operadores são > ,<,>= ,=<
As subconsultas de linha única podem selecionar dados da mesma tabela ou de outra tabela
SELECT ENAME FROM EMP WHERE SAL = (SELECT MIN(SAL) FROM EMP);SELECT ENAME FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = 'RESEARCH');
Subconsulta de várias linhas
Ele retorna várias linhas de resultados da subconsulta, usa o operador IN. Na consulta anterior, se houvesse mais de um departamento de pesquisa, a consulta teria falhado. Exemplo de retorno de mais de uma linha na subconsulta
O outro operador que é usado é todo e qualquer
SELECT ENAME, DEPTNO FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE DNAME LIKE 'R%');
Subconsulta correlacionada
Uma subconsulta correlacionada é uma subconsulta que se baseia em colunas da consulta pai. Uma subconsulta correlacionada é avaliada para cada linha processada pela consulta pai. A instrução pai pode ser um SELECT, UPDATE ou DELETE.
SELECT ENAME,SAL FROM EMP E1 WHERE SAL = (SELECT MAX(SAL) FROM EMP E2 WHERE E1.DEPTNO = E2.DEPTNO);
Com base nos mesmos dados de emp e dept, aqui está o resultado
Subconsultas escalares
Ele retorna exatamente um valor de uma linha, usado com mais frequência na cláusula VALUES de uma instrução INSERT, em uma cláusula ORDER BY ou WHERE e em uma cláusula SELECT:
SELECT ENAME, DEPTNO, (SELECT MAX(SAL) FROM EMP E2 WHERE E2.DEPTNO = E1.DEPTNO) HIGH_SAL FROM EMP E1 WHERE ENAME LIKE 'B%';
A subconsulta é executada uma vez para cada execução da consulta mestre. Uma subconsulta de linha única só pode ser usada com operadores de linha única
Subconsultas de várias colunas
A consulta pode ter mais de uma coluna na cláusula SELECT de uma subconsulta ou em instruções UPDATE
SELECT CITY,CITY_CODE,CITY_DESCRIPTION FROM LOCATIONS WHERE (LOCATION_ID, COUNTRY_ID) IN (SELECT LOCATION_ID, COUNTRY_ID FROM LOCATIONS WHERE STATE_PROVINCE = 'NEWYORK');
Subconsultas em outras declarações DML
As subconsultas podem ser usadas em instruções UPDATE, DELETE e INSERT
Update Statement UPDATE EMP SET SALARY = (SELECT SALARY FROM EMP WHERE EMPLOYEE_ID = 112408) WHERE EMPLOYEE_ID = 193711; Insert Statement INSERT INTO DEPT (DEPT_ID, DEPT_NAME) VALUES ((SELECT MAX(DEPT_ID) FROM DEPT), 'NEW DEPT'); Delete Statement DELETE FROM CUSTOMERS WHERE AGE IN (SELECT AGE FROM CUST_BACK WHERE AGE > 40 );
Artigos relacionados
como escrever consultas sql:O que são Oracle Joins com exemplos (Sql joins), Diferentes tipos de joins, Inner Join,Outer join,left outer join,right outer join,cross join com exemplos
Oracle Joins :O que são Oracle Joins com exemplos (Sql joins), Diferentes tipos de joins, Inner Join,Outer join,left outer join,right outer join,cross join com exemplos
Funções de data no oracle :Confira este post para oracle funções de data, diferença de data oracle em anos, diferença de data oracle em dias, diferença de data oracle em meses.
JSON in oracle:Confira este post sobre como usar JSON no oracle, como criar tabela contendo dados JSON, como para extrair, insira os dados JSON no oracle
Tutorial do Oracle Sql:Listagem de todas as lições do tutorial sql que podem ser usadas para dominar o sql e usar no Oracle, gerenciamento e manipulação de dados
https://livesql. oracle.com/apex/livesql/file/tutorial_GMLYIBY74FPBS888XO8F1R95I.html