Poddotazy v Oracle
(1) Poddotaz nebo vnořený dotaz je dotaz v rámci jiného dotazu SQL a vložený do klauzule WHERE. Poddotaz je dotaz v rámci dotazu
(2) Poddotaz se používá k vrácení dat, která budou použita v hlavním dotazu jako podmínka pro další omezení dat, která mají být načtena.
(3) Poddotazy odpovídají na dotazy, které mají více částí. Nadřazený dotaz odpovídá na část a vedlejší dotaz odpovídá na jinou část
(4) Poddotazy lze použít s příkazy SELECT, INSERT, UPDATE a DELETE spolu s operátory jako =, <,>,>=, <=, IN, BETWEEN atd.
(5)Používání dílčích dotazů v klauzuli FROM je známé jako vložené zobrazení .
(6) Použití poddotazů v klauzuli WHERE se nazývá vnořený poddotaz . Je povoleno až 255 vnořených dotazů.
Některá pravidla pro poddotazy Oracle
(1) Dílčí dotazy musíme vždy vkládat do závorek
(2) Musíme umístit dílčí dotazy na pravou stranu operátoru porovnání
(3) Použijte jednořádkový operátor pro jednořádkové poddotazy a víceřádkový operátor s víceřádkovými poddotazy
Obecná syntaxe
SELECT col1, col2 FROM table1 WHERE col1 OPERATOR (SELECT col1 FROM table2 [WHERE])
Jednořádkový dílčí dotaz
Vrací pouze jeden řádek výsledků a používá jednořádkový operátor (nejběžnější je stejný operátor (=)). Ostatní operátory jsou > ,<,>= ,=<
Jednořádkové poddotazy mohou vybrat data ze stejné tabulky nebo z jiné tabulky
SELECT ENAME FROM EMP WHERE SAL = (SELECT MIN(SAL) FROM EMP);SELECT ENAME FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = 'RESEARCH');
Víceřádkový dílčí dotaz
Vrací několik řádků výsledků z poddotazu, používá operátor IN. Pokud by v předchozím dotazu existovalo více než jedno výzkumné oddělení, dotaz by selhal. Příklad vrácení více než jednoho řádku v poddotazu
Dalším používaným operátorem je jakýkoli a vše
SELECT ENAME, DEPTNO FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE DNAME LIKE 'R%');
Korelovaný dílčí dotaz
Korelovaný poddotaz je poddotaz, který se opírá o sloupce z nadřazeného dotazu. Korelovaný poddotaz je vyhodnocen pro každý řádek zpracovaný nadřazeným dotazem. Rodičovský příkaz může být SELECT, UPDATE nebo DELETE.
SELECT ENAME,SAL FROM EMP E1 WHERE SAL = (SELECT MAX(SAL) FROM EMP E2 WHERE E1.DEPTNO = E2.DEPTNO);
Na základě stejných údajů o emp a dept je zde výsledek
Skalární dílčí dotazy
Vrací přesně jednu hodnotu z jednoho řádku, která se nejčastěji používá v klauzuli VALUES příkazu INSERT, v klauzuli ORDER BY nebo WHERE a v klauzuli SELECT:
SELECT ENAME, DEPTNO, (SELECT MAX(SAL) FROM EMP E2 WHERE E2.DEPTNO = E1.DEPTNO) HIGH_SAL FROM EMP E1 WHERE ENAME LIKE 'B%';
Dílčí dotaz se provede jednou pro každé provedení hlavního dotazu. Jednořádkový poddotaz lze použít pouze s jednořádkovými operátory
Poddotazy s více sloupci
Dotaz může mít více než jeden sloupec v klauzuli SELECT poddotazu nebo v příkazech 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');
Poddotazy v jiných výpisech DML
Poddotazy lze použít v příkazech UPDATE, DELETE a 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 );
Související články
jak psát dotazy SQL :Co jsou Oracle Joins s příklady (Sql spojení), Různé typy spojení, Vnitřní spojení,Vnější spojení,levé vnější spojení,pravé vnější spojení,křížové spojení s příklady
Oracle Joins :Co jsou Oracle Joins s příklady (Sql spojení), Různé typy spojení, Vnitřní spojení,Vnější spojení,levé vnější spojení,pravé vnější spojení,křížové spojení s příklady
Funkce data v oracle :Podívejte se na tento příspěvek pro oracle datumové funkce, rozdíl data Oracle v letech, rozdíl dat Oracle ve dnech, rozdíl dat Oracle v měsících.
JSON v oracle:Podívejte se na tento příspěvek o tom, jak používat JSON v oracle, jak vytvořit tabulku obsahující data JSON, jak k extrahování vložte data JSON do oracle
Výukový program Oracle Sql :Seznam všech výukových lekcí SQL, které lze použít k zvládnutí SQL a použití v Oracle, správě dat a manipulaci
https://livesql. oracle.com/apex/livesql/file/tutorial_GMLYIBY74FPBS888XO8F1R95I.html