Heim >Datenbank >MySQL-Tutorial >Methoden zur Deduplizierung und Verbindungsabfrage in der MySQL-Datenbank
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.
mysql> select distinct job from emp; +-----------+ | job | +-----------+ | CLERK | | SALESMAN | | MANAGER | | ANALYST | | PRESIDENT | +-----------+ 5 rows in set (0.02 sec)
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)
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!
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)
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!