Heim  >  Artikel  >  Datenbank  >  Methoden zur Deduplizierung und Verbindungsabfrage in der MySQL-Datenbank

Methoden zur Deduplizierung und Verbindungsabfrage in der MySQL-Datenbank

WBOY
WBOYnach vorne
2023-05-28 22:07:101154Durchsuche
Verzeichnis: 1. Deduplizierung: 2. Join-Abfrage -äquivalente Verbindung
  • inner Join - Self -Join

  • outer Join - Links und rechter Außendojo -Tisch. MySQL-Datentabellen In der Datenbank können doppelte Datensätze vorhanden sein. In einigen Fällen lassen wir das Vorhandensein doppelter Daten zu, manchmal müssen wir diese doppelten Daten jedoch auch löschen.

  • Zum Beispiel: Duplikate entfernen und Jobinformationen anzeigen:
      mysql> select distinct job from emp;
      +-----------+
      | job       |
      +-----------+
      | CLERK     |
      | SALESMAN  |
      | MANAGER   |
      | ANALYST   |
      | PRESIDENT |
      +-----------+
      5 rows in set (0.02 sec)
    • Ein weiteres Beispiel: Gemeinsam Duplikate entfernen und eindeutige Informationen zu Abteilungen und Positionen finden:

      mysql> select distinct job,deptno from emp;
      +-----------+--------+
      | job       | deptno |
      +-----------+--------+
      | CLERK     |     20 |
      | SALESMAN  |     30 |
      | MANAGER   |     20 |
      | MANAGER   |     30 |
      | MANAGER   |     10 |
      | ANALYST   |     20 |
      | PRESIDENT |     10 |
      | CLERK     |     30 |
      | CLERK     |     10 |
      +-----------+--------+
      9 rows in set (0.00 sec)

      Ein weiteres Beispiel: Jetzt wollen wir die Anzahl der Jobs zählen, kombiniert mit der Zählfunktion :
    • mysql> select count(distinct job) from emp;
      +---------------------+
      | count(distinct job) |
      +---------------------+
      |                   5 |
      +---------------------+
      1 row in set (0.00 sec)
    • 2. Join-Abfrage

      Wir haben gelernt, wie man Daten in einer Tabelle liest, was relativ einfach ist, aber in realen Anwendungen ist es oft notwendig, Daten aus mehreren Datentabellen zu lesen.
    • JOIN ist entsprechend seiner Funktion grob in die folgenden drei Kategorien unterteilt:

      INNER JOIN (innerer Join oder gleichwertiger Join): Erhält Datensätze von Feldübereinstimmungsbeziehungen in zwei Tabellen.
    • LEFT JOIN (linker Join): Ruft alle Datensätze in der linken Tabelle ab, auch wenn in der rechten Tabelle keine entsprechenden übereinstimmenden Datensätze vorhanden sind.

      RIGHT JOIN: Im Gegensatz zu LEFT JOIN wird es verwendet, um alle Datensätze in der rechten Tabelle abzurufen, auch wenn in der linken Tabelle keine entsprechenden übereinstimmenden Datensätze vorhanden sind.
    • Der Vorgang des Multi-Table-Joins besteht darin, jedes Datenelement in einer Tabelle mit den Datenzeilen in einer anderen Tabelle abzugleichen. Dabei geht es um die Effizienzkontrolle

      Where für Multi-Table-Verbindungsabfragen verwenden
    • Lassen Sie uns nun ein Beispiel demonstrieren: Nehmen Sie den Namen und den Abteilungsnamen jedes Mitarbeiters heraus:

      mysql> select ename,dname
          -> from emp,dept
          -> where emp.deptno = dept.deptno;
      +--------+------------+
      | ename  | dname      |
      +--------+------------+
      | SMITH  | RESEARCH   |
      | ALLEN  | SALES      |
      | WARD   | SALES      |
      | JONES  | RESEARCH   |
      | MARTIN | SALES      |
      | BLAKE  | SALES      |
      | CLARK  | ACCOUNTING |
      | SCOTT  | RESEARCH   |
      | KING   | ACCOUNTING |
      | TURNER | SALES      |
      | ADAMS  | RESEARCH   |
      | JAMES  | SALES      |
      | FORD   | RESEARCH   |
      | MILLER | ACCOUNTING |
      +--------+------------+
      14 rows in set (0.00 sec)

      Die obige SQL-Anweisung ist tatsächlich sehr ineffizient Optimieren (alias die Tabelle): (sql92-Syntax)
    • mysql> select e.ename,d.dname
          -> from emp e,dept d
          -> where e.deptno = d.deptno;
      +--------+------------+
      | ename  | dname      |
      +--------+------------+
      | SMITH  | RESEARCH   |
      | ALLEN  | SALES      |
      | WARD   | SALES      |
      | JONES  | RESEARCH   |
      | MARTIN | SALES      |
      | BLAKE  | SALES      |
      | CLARK  | ACCOUNTING |
      | SCOTT  | RESEARCH   |
      | KING   | ACCOUNTING |
      | TURNER | SALES      |
      | ADAMS  | RESEARCH   |
      | JAMES  | SALES      |
      | FORD   | RESEARCH   |
      | MILLER | ACCOUNTING |
      +--------+------------+
      14 rows in set (0.00 sec)
    Hinweis: Je mehr Verbindungen die Tabelle hat, desto geringer ist die Effizienz. Bitte versuchen Sie, die Anzahl der Verbindungen zur Tabelle zu reduzieren!

Inner Join - Äquivalenter Join

Noch im obigen Beispiel nehmen Sie den Namen und den Abteilungsnamen jedes Mitarbeiters heraus: (SQL99-Syntax)

Inner Join, wir verwenden Inner

mysql> select e.ename,d.dname
    -> from emp e
    -> inner join
    -> dept d
    -> on
    -> e.deptno = d.deptno;
+--------+------------+
| ename  | dname      |
+--------+------------+
| SMITH  | RESEARCH   |
| ALLEN  | SALES      |
| WARD   | SALES      |
| JONES  | RESEARCH   |
| MARTIN | SALES      |
| BLAKE  | SALES      |
| CLARK  | ACCOUNTING |
| SCOTT  | RESEARCH   |
| KING   | ACCOUNTING |
| TURNER | SALES      |
| ADAMS  | RESEARCH   |
| JAMES  | SALES      |
| FORD   | RESEARCH   |
| MILLER | ACCOUNTING |
+--------+------------+
14 rows in set (0.00 sec)

Der Vorteil von SQL99 ist: der Join der Die Tabelle ist unabhängig und nimmt nicht den Ort ein, an dem sie sich befindet. Machen Sie die gesamte SQL-Anweisung klarer

Inner Join – nicht äquivalenter Join

Fall: Ermitteln Sie die Gehaltsstufe jedes Mitarbeiters und verlangen Sie, dass der Name, das Gehalt und die Gehaltsstufe des Mitarbeiters angezeigt werden

mysql> select
    -> e.ename,e.sal,s.grade
    -> from
    -> emp e
    -> inner join
    -> salgrade s
    -> on
    -> e.sal between s.losal and s.hisal;
+--------+---------+-------+
| ename  | sal     | grade |
+--------+---------+-------+
| SMITH  |  800.00 |     1 |
| ALLEN  | 1600.00 |     3 |
| WARD   | 1250.00 |     2 |
| JONES  | 2975.00 |     4 |
| MARTIN | 1250.00 |     2 |
| BLAKE  | 2850.00 |     4 |
| CLARK  | 2450.00 |     4 |
| SCOTT  | 3000.00 |     4 |
| KING   | 5000.00 |     5 |
| TURNER | 1500.00 |     3 |
| ADAMS  | 1100.00 |     1 |
| JAMES  |  950.00 |     1 |
| FORD   | 3000.00 |     4 |
| MILLER | 1300.00 |     2 |
+--------+---------+-------+
14 rows in set (0.01 sec)

Inner Join – Selbstjoin

Fall: Abfrage Der Vorgesetzte des Mitarbeiters erfordert die Anzeige des Mitarbeiternamens und des entsprechenden Leiternamens

Wir können feststellen, dass sich die Beziehung zwischen Mitarbeitern und Führungskräften in einer Tabelle befindet. Zu diesem Zeitpunkt müssen wir die Selbstverknüpfung verwenden (Tipp). : Eine Tabelle wird als zwei Tabellen behandelt.)

mysql> select
    -> a.ename as '员工名',b.ename as '领导名'
    -> from emp a
    -> join emp b
    -> on
    -> a.mgr = b.empno;
+-----------+-----------+
| 员工名    | 领导名      |
+-----------+-----------+
| SMITH     | FORD      |
| ALLEN     | BLAKE     |
| WARD      | BLAKE     |
| JONES     | KING      |
| MARTIN    | BLAKE     |
| BLAKE     | KING      |
| CLARK     | KING      |
| SCOTT     | JONES     |
| TURNER    | BLAKE     |
| ADAMS     | SCOTT     |
| JAMES     | BLAKE     |
| FORD      | JONES     |
| MILLER    | CLARK     |
+-----------+-----------+
13 rows in set (0.00 sec)

Äußerer Join – linker und rechter äußerer Join

Der Unterschied zwischen äußerem Join und innerem Join besteht darin, dass die Datensätze einer bestimmten Tabelle, die vom äußeren Join nicht erfolgreich abgeglichen werden, ebenfalls berücksichtigt werden herausgenommen

Fall: Finden Sie die Abteilungsinformationen der Mitarbeiter. Fordern Sie die Abteilung auf, dies herauszufinden, auch wenn keine Mitarbeiter vorhanden sind Der äußere Join muss > ;= Anzahl der Abfrageergebnisse des inneren Joins sein jeder Mitarbeiter. Es ist erforderlich, den Namen des Mitarbeiters, den Namen der Abteilung, das Gehalt und die Gehaltsstufe anzuzeigen. Anforderung zur Anzeige des Mitarbeiternamens, des Abteilungsnamens, des Namens des Leiters, des Gehalts und der Gehaltsstufe

mysql> select
    -> e.ename,d.dname
    -> from emp e
    -> right join dept d
    -> on
    -> e.deptno = d.deptno;
+--------+------------+
| ename  | dname      |
+--------+------------+
| SMITH  | RESEARCH   |
| ALLEN  | SALES      |
| WARD   | SALES      |
| JONES  | RESEARCH   |
| MARTIN | SALES      |
| BLAKE  | SALES      |
| CLARK  | ACCOUNTING |
| SCOTT  | RESEARCH   |
| KING   | ACCOUNTING |
| TURNER | SALES      |
| ADAMS  | RESEARCH   |
| JAMES  | SALES      |
| FORD   | RESEARCH   |
| MILLER | ACCOUNTING |
| NULL   | OPERATIONS |
+--------+------------+
15 rows in set (0.00 sec)

Das obige ist der detaillierte Inhalt vonMethoden zur Deduplizierung und Verbindungsabfrage in der MySQL-Datenbank. 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