Heim >Datenbank >MySQL-Tutorial >So analysieren Sie Probleme mit verschachtelten Unterabfragen in MySQL
Unterabfrage bezieht sich auf eine Schreibform, bei der mehrere kleine Abfragen mit unterschiedlichen Funktionen in einer vollständigen Abfrageanweisung verschachtelt werden, um komplexe Abfragen gemeinsam abzuschließen, um das Konzept der Unterabfrage für den Leser klarer zu machen.
Unterabfrage gibt Ergebnisse zurück
Die Datentypen, die Unterabfragen zurückgeben können, sind in vier Typen unterteilt:
Einzelne Zeile und einzelne Spalte: Zurückgegeben wird der Inhalt einer bestimmten Spalte, die als Folgendes verstanden werden kann Einzelwertdaten;
Einzelne Zeile und mehrere Spalten: Gibt den Inhalt mehrerer Spalten in einer Datenzeile zurück;
Mehrere Zeilen und einzelne Spalten: Gibt den Inhalt derselben Spalte in mehreren Datensatzzeilen zurück entspricht der Angabe eines Betriebsbereichs;
Mehrere Zeilen und mehrere Spalten: Das von der Abfrage zurückgegebene Ergebnis ist eine temporäre Tabelle.
Unterabfragen mit einer Zeile und einer Spalte verarbeiten , mehrzeilige und einspaltige Unterabfragen sowie einzeilige und mehrspaltige Unterabfragen in der WHERE-Klausel.
**Beispiel 1, **Fragen Sie die vollständigen Informationen des Mitarbeiters mit dem niedrigsten Gehalt im Unternehmen ab
--查询公司之中工资最低的雇员的完整信息 SELECT * FROM emp e WHERE e.sal=( SELECT MIN(sal) FROM emp);
**Beispiel 2, **Fragen Sie die Informationen aller Mitarbeiter ab, deren Grundgehalt Das Gehalt ist niedriger als ALLEN.
**Beispiel 4, **Ermitteln Sie die Informationen aller Mitarbeiter, die den gleichen Job wie ALLEN haben und deren Grundgehalt höher ist als die Mitarbeiternummer 7521,
-- 查询出基本工资比ALLEN低的全部雇员信息 SELECT * FROM emp e WHERE e.sal<( SELECT sal FROM emp WHERE ename='ALLEN' );
--查询基本工资高于公司平均薪金的全部雇员信息 SELECT * FROM emp e WHERE e.sal>( SELECT AVG(sal) FROM emp);
**Beispiel 6, **Fragen Sie die Informationen aller Mitarbeiter ab, die den gleichen Job wie Mitarbeiter 7566 haben und die gleiche Führung haben
--查找出与ALLEN从事同一工作,并且基本工资高于雇员编号为7521的全部雇员信息, SELECT * FROM emp e WHERE e.job=( SELECT job FROM emp WHERE ename='ALLEN') AND e.sal>( SELECT sal FROM emp WHERE empno=7521);
**Beispiel 7, **Fragen Sie alle Mitarbeiter ab, die denselben Job wie ALLEN haben und im selben Jahr beschäftigt sind. Mitarbeiterinformationen (einschließlich ALLEN)
SELECT * FROM emp e WHERE (e.job,e.sal) = ( SELECT job,sal FROM emp WHERE ename='SCOTT') AND ename<>'SCOTT';
Mehrzeilige einspaltige Unterabfrage
Verwendet hauptsächlich drei Operatoren: IN, ANY, ALL
IN Betrieb**Beispiel 8, **Fragen Sie die Informationen zu jeder Abteilung ab. Alle Mitarbeiterinformationen mit dem gleichen Mindestlohn --查询与雇员7566从事同一工作且领导相同的全部雇员信息
SELECT *
FROM emp e
WHERE (e.job,e.mgr) =(
SELECT job,mgr
FROM emp
WHERE empno=7566
);
**Beispiel 9. **Fragen Sie alle Mitarbeiterinformationen ab, die nicht den gleichen Mindestlohn haben Lohn in jeder Abteilung eine mehrzeilige, mehrspaltige Ergebnismenge
--查询与ALLEN从事同一工作且在同一年雇佣的全部雇员信息(包括ALLEN) SELECT * FROM emp e WHERE (e.job,to_char(e.hiredate,'yyyy'))=( SELECT job,to_char(hiredate,'YYYY') FROM emp WHERE ename='ALLEN' );Fragen Sie die Informationen von Mitarbeitern ab, die Provisionen haben und deren Gehalt höher ist als provisions: web
--查询出与每个部门中最低工资相同的全部雇员信息 SELECT * FROM emp e WHERE e.sal IN( SELECT MIN(sal) FROM emp GROUP BY deptno );
1.FROM Die Datenquelle der Unterabfrage ist das Ergebnis einer anderen Abfrage. Das Ergebnis entspricht einer temporären Datentabelle
2 Für die Unterabfrage muss ein Alias definiert werden 3. Wenn Sie die Felder in der Unterabfrage verwenden möchten, sollten Sie die Methode „alias.field name“ als Referenz verwenden
Die Unterabfrage nach der Auswahl kann nur als Skalarabfrage verwendet werden
# Fall: Fragen Sie die Anzahl der Mitarbeiter in jeder Abteilung ab.--查询出不与每个部门中最低工资相同的全部雇员信息 SELECT * FROM emp e WHERE e.sal NOT IN( SELECT MIN(sal) FROM emp GROUP BY deptno );#Fall: Fragen Sie den Abteilungsnamen mit der Mitarbeiternummer = 102 ab.
第一种方式:能够使用HAVING字句实现 SELECT job,AVG(sal) FROM emp GROUP BY job HAVING AVG(sal)>2000; 第二种方式:使用FROM子查询 SELECT job,avgsal FROM ( SELECT job,AVG(sal) AS avgsal FROM emp GROUP BY job) temp WHERE temp.avgsal>2000;Unterabfrage verwenden
Das obige ist der detaillierte Inhalt vonSo analysieren Sie Probleme mit verschachtelten Unterabfragen in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!