Tout d'abord, lorsque vous utilisez des sous-requêtes, veuillez noter que les sous-requêtes peuvent être imbriquées sur plusieurs niveaux et que les sous-requêtes doivent être placées entre parenthèses (). Jetons un coup d'œil à l'introduction détaillée ci-dessous.
Introduction de base
1, où : la sous-requête renverra généralement une seule ligne, une seule colonne, une seule ligne, plusieurs colonnes, plusieurs lignes et une seule colonne
2, ayant : la sous-requête renverra une seule ligne, une seule colonne, tandis que Indique que les fonctions statistiques doivent être utilisées
3, from : la sous-requête renvoie des données multi-lignes et multi-colonnes (structure de table) ; 🎜>4, select : renvoie une seule ligne et une seule colonne (généralement non utilisée) ;
Exemple de détails
où (filtrage des lignes de données) :
a : interroger l'employé informations inférieures au salaire moyen de l’entreprise.
La requête ci-dessus renvoie une seule ligne et une seule colonne qui peuvent être utilisées comme condition de filtre de la clause Whereselect * from emp where sal<(select avg(sal) from emp);
b : interroger les informations du premier employé embauché par ; l'entreprise.
C : Rechercher des informations sur les employés qui ont le même travail que Scott et qui ont le même salaire.select * from emp where hiredate= (select MIN(hiredate) from emp);in : fait référence au même contenu renvoyé par la sous-requête.
select* from emp where (job,sal) =( select job,sal from emp where ename ='scott') and ename <>'scott';pas dans :
select * from emp where sal in (select sal from emp where job = 'manager');Il ne peut pas y avoir de valeur nulle dans la sous-requête.
select* from emp where sal not in(select sal from emp where job='manager');
any :
est supérieur à la valeur maximale renvoyée par la sous-requêteselect* from emp where sal = any(select sal from emp where job='manager'); select* from emp where sal > any(select sal from emp where job='manager');est inférieur à la valeur maximale renvoyée par la sous-requête
select* from emp where sal < any(select sal from emp where job='manager');
all :
all : supérieur à la valeur maximale renvoyée par la sous-requête Interroger le titre du poste, le nombre de postes et le salaire moyen supérieur au salaire moyen de l'entreprise. Interrogez le numéro, le nom, le poste et le nom du service de chaque employé. à partir de (point clé) : Requêtez le nom, l'emplacement et le nombre de personnes dans chaque département. Réponse : Dans le travail réel, l'objectif principal de la sous-requête est de résoudre le problème de performances des requêtes multi-tables, elle est donc la plus utilisée en développement. Le rôle le plus important est de résoudre le problème du produit cartésien affectant les performances causé par les requêtes multi-tables. Requête complexe = requête simple, requête limitée, requête multi-tables, requête statistique groupée, sous-requête ; Résumé Ce qui précède concerne la sous-requête Oracle, j'espère. Le contenu de cet article sera utile. Il sera utile à tout le monde d'apprendre ou d'utiliser Oracle. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Pour plus d'articles liés à l'apprentissage de base d'Oracle, veuillez faire attention au site Web PHP chinois !
Le la probabilité que la sous-requête soit très élevée ;
avoir :select job,count(empno),avg(sal) from emp group by job
having avg(sal)>(select avg(sal) from emp);
select e.empno,e.ename,e.job,
(select d.dname from dept d whered.deptno=e.deptno)from emp e;
select d.dname,d.loc,count(e.empno)
from emp e,dept d
where e.deptno(+)=d.deptno
group by d.dname,d.loc;
Les requêtes et sous-requêtes multi-tables peuvent obtenir des statistiques, alors quelle méthode est la meilleure ? 分步1: select d.deptno,d.dname,d.locfrom dept d;
分步2:select deptno,count(empno)from emp group by deptno;
正确的查询:
select d.deptno,d.dname,d.loc,temp.count
from dept d,(select deptno,count(empno) count from emp
group by deptno) temp
where d.deptno=temp.deptno(+);