Ligzdoti vaicājumi SQL

Priekšnosacījumi: SQL pamati

Ligzdotie vaicājumi ir veids, kā veikt sarežģītus vaicājumus, ieguljot vienu vaicājumu citā. Ārējais vaicājums var piemērot dažus nosacījumus iekšējā vaicājuma rezultātiem. Ļaujiet mums izmantot STUDENT, COURSE, STUDENT_COURSE tabulas ligzdoto vaicājumu izpratnei.

STUDENTS

S_ID S_NAME S_ADDRESS S_PHONE S_AGE
S1 RAM DELI 9455123451 18
S2 RAMESH GURGAONS 9652431543 18
S3 SUJIT ROHTAK 9156253131 divdesmit
S4 SURESH DELI 9156768971 18

KURSS

C_ID C_NAME
C1 DSA
C2 Programmēšana
C3 DBVS

STUDENT_KURSS

S_ID C_ID
S1 C1
S1 C3
S2 C1
S3 C2
S4 C2
S4 C3

Ir galvenokārt divu veidu ligzdotie vaicājumi:

  • Neatkarīgi ligzdoti vaicājumi: Neatkarīgos ligzdotos vaicājumos vaicājuma izpilde sākas no visattālākajiem vaicājumiem līdz attālākajiem vaicājumiem. Iekšējā vaicājuma izpilde ir neatkarīga no ārējā vaicājuma, bet iekšējā vaicājuma rezultāts tiek izmantots ārējā vaicājuma izpildē. Neatkarīgu ligzdotu vaicājumu rakstīšanai tiek izmantoti dažādi operatori, piemēram, IN, NOT IN, ANY, ALL utt.
    IN: Ja vēlamies noskaidrot S_ID kuri ir reģistrēti C_NAME “DSA” vai “DBMS”, mēs varam to uzrakstīt ar neatkarīga ligzdotā vaicājuma un IN operatora palīdzību. No KURSS tabulu, mēs varam uzzināt C_ID priekš C_NAME “DSA” vai DBVS”, un mēs varam tos izmantot C_ID s par atrašanu S_ID s no STUDENT_KURSS TABULA. 1. SOLIS: Meklēšana C_ID priekš C_NAME ='DSA' vai 'DBMS' Atlasiet C_ID no KURSS kur C_NAME = “DSA” vai C_NAME = 'DBVS' 2. SOLIS: Izmantojot C_ID 1. darbības atrašanai S_ID Izvēlieties S_ID no STUDENT_KURSS kur C_ID IN (ATLASĪT C_ID no KURSS kur C_NAME = “DSA” vai C_NAME ='DBVS'); Iekšējais vaicājums atgriezīs kopu ar dalībniekiem C1 un C3, un ārējais vaicājums atgriezīs tos S_ID s kuriem C_ID ir vienāds ar jebkuru kopas locekli (šajā gadījumā C1 un C3). Tātad tas atgriezīs S1, S2 un S4. Piezīme: Ja mēs vēlamies uzzināt nosaukumus STUDENTS s, kuri ir reģistrējušies DSA vai DBVS, to var izdarīt šādi: atlasiet S_NAME no STUDENTS kur S_ID IN (atlasiet S_ID no STUDENT_KURSS kur C_ID IN (ATLASĪT C_ID no KURSS kur C_NAME ='DSA' vai C_NAME ='DBVS'));
    NAV IEKŠĀ: Ja vēlamies noskaidrot S_ID s no STUDENTS s, kuri nav reģistrējušies ne “DSA”, ne “DBVS”, to var izdarīt šādi: Atlasiet S_ID no STUDENTS kur S_ID NOT IN (atlasiet S_ID no STUDENT_KURSS kur C_ID IN (ATLASĪT C_ID no KURSS kur C_NAME ='DSA' vai C_NAME ='DBVS')); Visdziļākais vaicājums atgriezīs kopu ar dalībniekiem C1 un C3. Otrais iekšējais vaicājums tos atgriezīs S_ID s kuriem C_ID ir vienāds ar jebkuru kopas locekli (šajā gadījumā C1 un C3), kas ir S1, S2 un S4. Attālākais vaicājums tos atgriezīs S_ID s kur S_ID nav kopas (S1, S2 un S4) dalībnieks. Tātad tas atgriezīs S3.
  • Saistītie ligzdotie vaicājumi: Saistītos ligzdotajos vaicājumos iekšējā vaicājuma izvade ir atkarīga no rindas, kas pašlaik tiek izpildīta ārējā vaicājumā. piem.; Ja vēlamies noskaidrot S_NAME no STUDENTS s, kas ir reģistrēti C_ID “C1”, to var izdarīt, izmantojot savstarpēji saistītu ligzdotu vaicājumu, kā: atlasiet S_NAME no STUDENTS S kur PASTĀV ( atlasiet * no STUDENT_KURSS SC, kur S. S_ID =SC. S_ID un SC. C_ID ='C1'); Katrai rindai STUDENTS S, tas atradīs rindas no STUDENT_KURSS kur ir. S_ID = SC. S_ID un SC. C_ID ='C1'. Ja par a S_ID no STUDENTS S, vismaz rinda pastāv STUDENT_KURSS SC ar C_ID ='C1', tad iekšējais vaicājums atgriezīs patiesu un atbilstošu S_ID tiks atgriezta kā izvade.

PIEMĒRS SQL KODĀ:

ATLASĪT StudentName

NO Studentiem

KUR IEKĀRTAS StudentID (

ATLASĪT Studenta ID

NO Pakāpēm

WHERE Subject = 'matemātika' UN punktu skaits> 90

);