Heim  >  Artikel  >  Datenbank  >  So analysieren Sie Probleme mit verschachtelten Unterabfragen in MySQL

So analysieren Sie Probleme mit verschachtelten Unterabfragen in MySQL

PHPz
PHPznach vorne
2023-05-27 23:46:271140Durchsuche

Verschachtelte MySQL-Unterabfrage

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 in der WHERE-Klausel verwenden.

Unterabfragen mit einer Zeile und einer Spalte verarbeiten , mehrzeilige und einspaltige Unterabfragen sowie einzeilige und mehrspaltige Unterabfragen in der WHERE-Klausel.

Einzeilige und einspaltige Unterabfrage

**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=&#39;ALLEN&#39;
);
**Beispiel 5, **Fragen Sie die Informationen aller Mitarbeiter ab die den gleichen Job wie SCOTT haben und das gleiche Gehalt haben. Mitarbeiterinformationen
--查询基本工资高于公司平均薪金的全部雇员信息
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=&#39;ALLEN&#39;) 
  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=&#39;SCOTT&#39;)
  AND ename<>&#39;SCOTT&#39;;

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

Javascript

Fragen Sie die Berufsbezeichnungen mit einem Durchschnittsgehalt von mehr als 2.000 ab und das Durchschnittsgehalt dieser Position Java

--查询与ALLEN从事同一工作且在同一年雇佣的全部雇员信息(包括ALLEN)
SELECT *
FROM emp e
WHERE (e.job,to_char(e.hiredate,&#39;yyyy&#39;))=(
           SELECT job,to_char(hiredate,&#39;YYYY&#39;)
            FROM emp
            WHERE ename=&#39;ALLEN&#39;
);

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
);

Zusammenfassung:

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

Unterabfrage auswählen

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen