En SQL, une sous-requête peut être simplement définie comme une requête dans une autre requête. En d’autres termes, nous pouvons dire qu’une sous-requête est une requête intégrée dans la clause WHERE d’une autre requête SQL. Règles importantes pour les sous-requêtes :
Mo contre Go
- Vous pouvez placer la sous-requête dans un certain nombre de clauses SQL : OÙ clause HAVING, clause FROM. Les sous-requêtes peuvent être utilisées avec les instructions SELECT, UPDATE, INSERT, DELETE ainsi que l'opérateur d'expression. Il peut s'agir d'un opérateur d'égalité ou d'un opérateur de comparaison tel que l'opérateur =,>, =, <= et Like.
- Une sous-requête est une requête au sein d’une autre requête. La requête externe est appelée comme requête principale et la requête interne est appelée comme sous-requête .
- La sous-requête s'exécute généralement en premier lorsqu'elle n'a aucun corrélation avec le requête principale , lorsqu'il y a une co-relation, l'analyseur prend la décision à la volée sur quelle requête exécuter priorité et utilise la sortie de la sous-requête en conséquence.
- La sous-requête doit être placée entre parenthèses.
- Les sous-requêtes se trouvent sur le côté droit de l'opérateur de comparaison.
- COMMANDÉ PAR commande ne peut pas être utilisé dans une sous-requête. PAR GROUPE La commande peut être utilisée pour exécuter la même fonction que la commande ORDER BY.
- Utilisez des opérateurs à une seule ligne avec des sous-requêtes à une seule ligne. Utilisez des opérateurs à plusieurs lignes avec des sous-requêtes à plusieurs lignes.
Syntaxe: Il n'existe pas de syntaxe générale pour les sous-requêtes. Cependant, les sous-requêtes sont utilisées le plus fréquemment avec l'instruction SELECT, comme indiqué ci-dessous :
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );>
Exemple de tableau :
BASE DE DONNÉES
| NOM | ROLL_NO | EMPLACEMENT | NUMÉRO DE TÉLÉPHONE |
|---|---|---|---|
| RAM | 101 | Chennai | 9988775566 |
| Raj | 102 | Coimbatore | 8877665544 |
| Sassi | 103 | Maduraï | 7766553344 |
| Traitement | 104 | Salem | 8989898989 |
| Sumathi | 105 | Kanchipuram | 8989856868 |
ÉTUDIANT
| NOM | ROLL_NO | SECTION |
|---|---|---|
| Traitement | 104 | UN |
| Sumathi | 105 | B |
| Raj | 102 | UN |
Exemples de requêtes
:
- Pour afficher le NOM, LOCATION, PHONE_NUMBER des étudiants de la table DATABASE dont la section est A
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);>
- Explication : La première sous-requête exécute SELECT ROLL_NO de STUDENT où SECTION='A' renvoie ROLL_NO de la table STUDENT dont SECTION est 'A'. Ensuite, la requête externe l'exécute et renvoie le NOM, l'LOCATION et le NUMÉRO DE TÉLÉPHONE de la table DATABASE de l'étudiant dont ROLL_NO est renvoyé par la sous-requête interne. Sortir:
| NOM | ROLL_NO | EMPLACEMENT | NUMÉRO DE TÉLÉPHONE |
| Traitement | 104 | Salem | 8989898989 |
| Raj | 102 | Coimbatore | 8877665544 |
- Exemple de requête d'insertion :
Tableau 1 : Étudiant 1
| NOM | ROLL_NO | EMPLACEMENT | NUMÉRO DE TÉLÉPHONE | |
|---|---|---|---|---|
| RAM | 101 | Chennai | 9988773344 | |
| Raju | 102 | Coimbatore | 9090909090 | |
| Traitement | 103 | Salem | 8989898989 |
Tableau2 : Étudiant2
| NOM | ROLL_NO | EMPLACEMENT | NUMÉRO DE TÉLÉPHONE | |
|---|---|---|---|---|
| Raj | 111 | Chennai | 8787878787 | |
| Jusqu'à | 112 | Bombay | 6565656565 | |
| Sri | 113 | Coimbatore | 7878787878 |
- Pour insérer Student2 dans la table Student1 :
INSERT INTO Student1 SELECT * FROM Student2;>
- Sortir:
| NOM | ROLL_NO | EMPLACEMENT | NUMÉRO DE TÉLÉPHONE | |
|---|---|---|---|---|
| RAM | 101 | Chennai | 9988773344 | |
| Raju | 102 | Coimbatore | 9090909090 | |
| Traitement | 103 | Salem | 8989898989 | |
| Raj | 111 | Chennai | 8787878787 | |
| Jusqu'à | 112 | Bombay | 6565656565 | |
| Sri | 113 | Coimbatore | 7878787878 |
- Pour supprimer les étudiants de la table Student2 dont le numéro de rôle est le même que celui de la table Student1 et dont l'emplacement est Chennai
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);>
- Sortir:
1 row delete successfully.>
- Afficher le tableau Étudiant2 :
| NOM | ROLL_NO | EMPLACEMENT | NUMÉRO DE TÉLÉPHONE | |
|---|---|---|---|---|
| Jusqu'à | 112 | Bombay | 6565656565 | |
| Sri | 113 | Coimbatore | 7878787878 |
- Pour mettre à jour le nom des étudiants en geeks dans la table Student2 dont l'emplacement est le même que Raju, Ravi dans la table Student1
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));>
- Sortir:
1 row updated successfully.>
- Afficher le tableau Étudiant2 :
| NOM | ROLL_NO | EMPLACEMENT | NUMÉRO DE TÉLÉPHONE | |
|---|---|---|---|---|
| Jusqu'à | 112 | Bombay | 6565656565 | |
| les geeks | 113 | Coimbatore | 7878787878 |