Processus d'exécution de sous-requête corrélée
Si l'exécution d'une sous-requête dépend d'une requête externe, c'est généralement parce que la table de la sous-requête utilise une table externe et effectue une association conditionnelle, donc à chaque fois qu'elle est exécutée, l'externe La requête et la sous-requête doivent être recalculées. Ces sous-requêtes sont appelées sous-requêtes corrélées. Au fur et à mesure que chaque ligne de la requête principale est exécutée, les sous-requêtes corrélées sont exécutées ligne par ligne.
Instructions : utilisez les colonnes de la requête principale dans la sous-requête
Titre : recherchez le nom, le salaire et l'identifiant du département des employés dont le salaire est supérieur au salaire moyen du département
Méthode 1 : Sous-requête associée
Utilisez la sous-requête dans FROM
SELECT last_name,salary,e1.department_id FROM employees e1,(SELECT department_id,AVG(salary) dept_avg_sal FROM employees GROUP BY department_id) e2 WHERE e1.`department_id` = e2.department_id AND e2.dept_avg_sal < e1.`salary`;
from sous-requête de type : la sous-requête fait partie de from, la sous-requête doit être citée avec (), et la sous-requête doit recevoir un nom différent
, et la traiter comme une image "Temporaire table virtuelle" est utilisée.
Titre : requête ID d'employé, salaire, trié par nom_departement
Utilisez la sous-requête dans ORDER BY :
SELECT employee_id,salary FROM employees e ORDER BY ( SELECT department_name FROM departments d WHERE e.`department_id` = d.`department_id` );
La sous-requête associée est généralement utilisée avec l'opérateur EXISTS, utilisez Pour vérifier s'il existe des lignes qui satisfont la condition dans la sous-requête.
S'il n'y a aucune ligne qui satisfait la condition dans la sous-requête :
La condition renvoie FALSE
Continuer la recherche dans la sous-requête
S'il y a une ligne qui satisfait la condition dans la sous-requête :
Ne pas continuer à recherche dans la sous-requête
La condition renvoie VRAI
Le mot-clé NON EXISTE signifie que si une certaine condition n'existe pas, VRAI est renvoyé, sinon FALSE est renvoyé.
Titre : interrogez les informations Employee_id, Last_name, Job_id, Department_id du chef d'entreprise
SELECT employee_id, last_name, job_id, department_id FROM employees e1 WHERE EXISTS ( SELECT * FROM employees e2 WHERE e2.manager_id = e1.employee_id);
La sous-requête est en fait un jugement conditionnel après interrogation via la table inconnue, tandis que l'auto-jointure est basée sur la propre table de données connue
Jugement, donc le traitement de l'auto-jointure est optimisé dans la plupart des SGBD.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!