SQL-subquerys

Laatste update op 26 februari 2020 08:07:42 (UTC / GMT +8 uur)

Wat is een subquery in SQL?

Een subquery is een SQL-query die is genest in een grotere query.

  • Een subquery kan voorkomen in:
    • – A SELECT-clausule
    • – A FROM-clausule
    • – A WHERE-component
  • De subquery kan worden genest in een SELECT-, INSERT-, UPDATE- of DELETE-instructie of in een andere subquery.
  • Een subquery wordt meestal toegevoegd binnen de WHERE-clausule van een andere SQL SELECT-instructie.
  • U kunt de vergelijkingsoperatoren gebruiken, zoals >, <, of =. De vergelijkingsoperator kan ook een operator met meerdere rijen zijn, zoals IN, ANY of ALL.
  • Een subquery wordt ook wel een innerlijke query of innerlijke selectie genoemd, terwijl de instructie die een subquery bevat ook een outer query of outer select.
  • De innerlijke query wordt eerst uitgevoerd vóór de bovenliggende query, zodat de resultaten van een innerlijke query kunnen worden doorgegeven aan de buitenste query.

U kan een subquery in een SELECT-, INSERT-, DELETE- of UPDATE-instructie gebruiken om de volgende taken uit te voeren:

  • Vergelijk een uitdrukking met het resultaat van de query.
  • Bepaal of een uitdrukking is opgenomen in de resultaten van de zoekopdracht.
  • Controleer of de zoekopdracht rijen selecteert.

Syntaxis:

  • De subquery (innerlijke query) wordt eenmaal uitgevoerd voordat de hoofdquery (buitenste query) wordt uitgevoerd.
  • De hoofdquery (buitenste query) gebruikt het subqueryresultaat.

Voorbeeld van SQL-subquerys:

In deze sectie leert u de vereisten voor het gebruik van subquerys. We hebben de volgende twee tabellen “student” en “marks” met het gemeenschappelijke veld “StudentID”.



studentcijfers

Nu willen we een vraag schrijven om alle studenten te identificeren die betere cijfers halen dan die van de student wiens StudentID “V002” is, maar we kennen de cijfers van “V002” niet.
– Om het probleem op te lossen, hebben we twee zoekopdrachten nodig. Eén zoekopdracht retourneert de cijfers (opgeslagen in het veld Total_marks) van “V002” en een tweede zoekopdracht identificeert de leerlingen die betere cijfers halen dan het resultaat van de eerste zoekopdracht.

Eerste zoekopdracht:

Query-resultaat:

Het resultaat van de zoekopdracht is 80.
– Met behulp van het resultaat van deze zoekopdracht hebben we hier nog een zoekopdracht geschreven om de studenten te identificeren die betere cijfers halen dan 80. Hier is de vraag:

Tweede zoekopdracht:

Query-resultaat:

Boven twee zoekopdrachten geïdentificeerde studenten die t krijgen het betere nummer dan de student wiens StudentID “V002” (Abhay) is.

U kunt de bovenstaande twee zoekopdrachten combineren door de ene zoekopdracht in de andere te plaatsen. De subquery (ook wel de “innerlijke query” genoemd) is de query tussen haakjes. Zie de volgende code en het resultaat van de zoekopdracht:

SQL-code:

Resultaat van de zoekopdracht:

Geïllustreerde presentatie van SQL-subquery:

Subquerys: algemene regels

Een subquery SELECT-instructie lijkt bijna op aan de SELECT-instructie en deze wordt gebruikt om een gewone of externe vraag te beginnen. Hier is de syntaxis van een subquery:

Syntaxis:

Subquerys: richtlijnen

Er zijn enkele richtlijnen waarmee u rekening moet houden bij het gebruik van subquerys:

  • Een subquery moet tussen haakjes staan.
  • Een subquery moet aan de rechterkant van de vergelijkingsoperator worden geplaatst.
  • Subquerys kunnen hun resultaten niet intern manipuleren, daarom kan de ORDER BY-clausule niet aan een subquery worden toegevoegd. U kunt een ORDER BY-clausule gebruiken in de hoofdinstructie SELECT (buitenste query) die de laatste clausule zal zijn.
  • Gebruik operators met één rij voor subquerys met één rij.
  • Als een subquery (innerlijke query) een null-waarde retourneert aan de buitenste query, retourneert de buitenste query geen rijen bij gebruik van bepaalde vergelijkingsoperatoren in een WHERE-component.

Type subquerys

  • Subquery met één rij: retourneert nul of één rij.
  • Subquery met meerdere rijen: retourneert een of meer rijen.
  • Meerdere kolomsubquerys: retourneert een of meer kolommen.
  • Gecorreleerde subquerys: verwijs naar een of meer kolommen in de buitenste SQL-instructie. De subquery staat bekend als een gecorreleerde subquery omdat de subquery gerelateerd is aan de buitenste SQL-instructie.
  • Geneste subquerys: Subquerys worden in een andere subquery geplaatst.

In de volgende sessie hebben we de bovenstaande onderwerpen grondig besproken. Afgezien van het bovenstaande type subquerys, kunt u een subquery gebruiken in de instructies INSERT, UPDATE en DELETE. Hier is een korte bespreking:

Subquerys met INSERT-instructie

INSERT-instructie kan worden gebruikt met subquerys.Hier zijn de syntaxis en een voorbeeld van subquerys die INSERT-instructie gebruiken.

Syntaxis:

INSERT INTO table_name ) ]SELECT FROM table1 ;

Als we die orders willen invoegen van ” orders “tabel met de advance_amount 2000 of 5000 in” neworder “tabel kan de volgende SQL worden gebruikt:

Voorbeeldtabel: orders

SQL-code:

Uitvoer:

Voor meer details van subquerys met gebruik van INSERT-instructie, klik hier.

Subquerys met UPDATE-instructie

In een UPDATE-instructie kunt u een nieuwe kolomwaarde instellen die gelijk is aan het resultaat dat wordt geretourneerd door een enkele rij-subquery. Hier zijn de syntaxis en een voorbeeld van subquerys die gebruik maken van de UPDATE-instructie.

Syntaxis:

UPDATE table SET column_name = new_value(SELECT COLUMN_NAMEFROM TABLE_NAME) 

Als we die ord_date willen bijwerken in ” neworder “tabel met” 15-JAN-10 “die het verschil hebben van ord_amount en advance_amount is kleiner dan het minimum ord_amount van” orders “-tabel kan de volgende SQL worden gebruikt:

Voorbeeldtabel: neworder

SQL-code:

Uitvoer:

Klik hier om meer details te zien van subquerys die UPDATE gebruiken.

Subquerys met DELETE-instructie

DELETE-instructie kan worden gebruikt met subquerys. Hier zijn de syntaxis en een voorbeeld van subquerys die de DELETE-instructie gebruiken.

Syntaxis:

DELETE FROM TABLE_NAME(SELECT COLUMN_NAME FROM TABLE_NAME) 

Als we die bestellingen willen verwijderen uit de “neworder” -tabel waarvan het advance_amount kleiner is dan het maximale advance_amount van ” orders “-tabel, kan de volgende SQL worden gebruikt:

Voorbeeldtabel: neworder

SQL-code:

Uitvoer:

Klik hier om meer details te zien van subquerys die de DELETE-instructie gebruiken.

Wat nu?

  • SQL-subquerys – diapresentatie
  • Subquerys met één rij
  • Subquerys met meerdere rijen en kolommen
  • Gecorreleerde subquerys met aliassen
  • Geneste subquerys

Opmerking: de uitvoer van de genoemde SQL-instructie die hier wordt weergegeven, wordt uitgevoerd met behulp van Oracle Database 10g Express Edition.

Oefen SQL-oefeningen

  • SQL-oefeningen, oefenen, oplossing
  • SQL Gegevens ophalen uit tabellen
  • SQL Booleaanse en relationele operatoren
  • SQL-jokertekens en speciale operators
  • SQL Aggregate Functies
  • Query-uitvoer in SQL-opmaak
  • SQL-quering op meerdere tabellen
  • FILTEREN en SORTEREN op HR-database
  • SQL-JOINS
    • SQL JOINS
    • SQL JOINS op HR Database
  • SQL SUBQUERIES
    • SQL SUBQUERIES
    • SQL-SUBQUERIES op HR-database
  • SQL Union
  • SQL-weergave
  • SQL-gebruikersaccountbeheer
  • Movie-database
    • BASISquerys op filmdatabase
    • SUBVERZOEKEN op filmdatabase
    • JOINS op filmdatabase
  • Soccer Database
    • Inleiding
    • BASISquerys op voetbaldatabase
    • SUBVRAAGSTELLINGEN op voetbaldatabase
    • DOEN AAN met queries op voetbaldatabase
  • Ziekenhuisdatabase
    • Inleiding
    • BASIS, SUBQUERIES en JOINS
  • Werknemersdatabase
    • BASISquerys op werknemersdatabase
    • SUBVRAAGS op werknemersdatabase
  • Er volgt nog meer!

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *