sql >> Databasteknik >  >> RDS >> Oracle

Vad är subqueries i oracle

SubQueries i Oracle

(1) En underfråga eller kapslad fråga är en fråga i en annan SQL-fråga och inbäddad i WHERE-satsen. En underfråga är en fråga i en fråga

(2) En underfråga används för att returnera data som kommer att användas i huvudfrågan som ett villkor för att ytterligare begränsa data som ska hämtas.

(3) Underfrågor svarar på frågor som har flera delar. Den överordnade frågan besvarar en del och underfrågan svarar på den andra delen

(4)Subqueries kan användas med SELECT-, INSERT-, UPDATE- och DELETE-satserna tillsammans med operatorerna som =, <,>,>=, <=, IN, BETWEEN etc.

(5) Att använda underfrågor i en FROM-klausul kallas en inlinevy .

(6) Att använda underfrågor i WHERE-satsen kallas en kapslad underfråga . Upp till 255 kapslade frågor är tillåtna.

Några riktlinjer för Oracle SubQueries

(1) Vi måste alltid sätta underfrågor inom parentes

(2) Vi måste placera underfrågor till höger om jämförelseoperatorn

(3) Använd enkelradsoperator med enradsunderfrågor och multipla radoperator med flera radunderfrågor

Allmän syntax

SELECT col1, col2
FROM   table1
WHERE  col1  OPERATOR
(SELECT col1
FROM table2
[WHERE])

En rad underfråga

Den returnerar endast en rad med resultat och använder en enda radoperator (vanligast är den lika operatorn (=)). De andra operatorerna är > ,<,>=  ,=<

En rad underfrågor kan välja data från samma tabell eller från en annan tabell

SELECT ENAME FROM EMP WHERE SAL = (SELECT MIN(SAL) FROM EMP);SELECT ENAME FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = 'RESEARCH');

Underfråga med flera rader

Den returnerar flera rader med resultat från underfrågan, använder IN-operatorn. I den föregående frågan, om det fanns mer än en forskningsavdelning, skulle frågan ha misslyckats. Exempel på att returnera mer än en rad i underfrågan

Den andra operatorn som används är alla

SELECT ENAME, DEPTNO FROM EMP
WHERE DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE DNAME LIKE 'R%');

Korrelerad underfråga

En korrelerad underfråga är en underfråga som förlitar sig på kolumner från den överordnade frågan. En korrelerad underfråga utvärderas för varje rad som bearbetas av den överordnade frågan. Den överordnade satsen kan vara en SELECT, UPDATE eller DELETE.

SELECT ENAME,SAL FROM EMP E1
WHERE SAL = (SELECT MAX(SAL)
FROM EMP E2 WHERE E1.DEPTNO = E2.DEPTNO);

Baserat på samma data för emp och dept, här är resultatet

Skalära delfrågor

Den returnerar exakt ett värde från en rad, som oftast används i VALUES-satsen i en INSERT-sats, i och ORDER BY eller WHERE-satsen och i en SELECT-sats:

SELECT ENAME,
DEPTNO, (SELECT MAX(SAL)
FROM EMP E2
WHERE E2.DEPTNO = E1.DEPTNO) HIGH_SAL
FROM EMP E1
WHERE ENAME LIKE 'B%';

Underfrågan körs en gång för varje körning av huvudfrågan. En enkelrads underfråga kan endast användas med enradsoperatorer

  Undersökningar med flera kolumner

Frågan kan ha  mer än en kolumn i SELECT-satsen i en underfråga eller i UPDATE-satser

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');

Undersökningar i andra DML-utlåtanden

Underfrågor kan användas i UPDATE-, DELETE- och INSERT-satser

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 );

Relaterade artiklar
hur man skriver sql-frågor :Vad är Oracle Joins med exempel (Sql Joins), Olika typer av Join, Inner Join, Outer Join, Left Outer Joins, Right Outer Joins, Cross Joins med exempel
Oracle Joins :Vad är Oracle Joins med exempel (Sql joins), Olika typer av joins , Inner Join, Outer Join, Left Outer Join, Right yttre Join, Cross Joins med exempel
Datumfunktioner i Oracle :Kolla in det här inlägget för Oracle datumfunktioner, Oracle-datumskillnad i år, Oracle-datumskillnad i dagar, Oracle-datumskillnad i månader.
JSON i Oracle:Kolla in det här inlägget om hur man använder JSON i Oracle,hur man skapar en tabell som innehåller JSON-data, hur för att extrahera, infoga JSON-data i Oracle
Oracle Sql-handledning:Lista över alla sql-handledningslektioner som kan användas för att bemästra SQL och använda i Oracle, datahantering och manipulation
https://livesql. oracle.com/apex/livesql/file/tutorial_GMLYIBY74FPBS888XO8F1R95I.html


  1. Skapa tabell med datumstämpeln

  2. Är OraOLEDB-leverantören i .NET opålitlig på CLOB-fält?

  3. Oracle radantal av tabell efter antal(*) mot NUM_ROWS från DBA_TABLES

  4. Hur använder man MySQLDB SScursor effektivt?