Heim >Datenbank >MySQL-Tutorial >MySQL – ausführliche Einführung und Beispiele für Abfragen mit mehreren Tabellen

MySQL – ausführliche Einführung und Beispiele für Abfragen mit mehreren Tabellen

王林
王林nach vorne
2019-08-28 11:59:232735Durchsuche

1. Die Beziehung zwischen Tabellen

Eins-zu-eins: Benutzertabelle und Identitätsinformationstabelle, die Benutzertabelle ist die Haupttabelle
Zum Beispiel: Männertabelle, Frauentabelle

  create table man( 
   mid int primary key  auto_increment,
        mname varchar(32),
        wid int unique
    );
 create table woman(
        wid  int primary key  auto_increment,
        wname varchar(32)
    );

Eins-zu-viele: die häufigsten Tabellenbeziehungen, Benutzertabelle und Auftragstabelle
Zum Beispiel: Mitarbeitertabelle, Abteilungstabelle

 create table emp(
            empno int primary key  auto_increment,
            ename varchar(32),
            deptno int
        );
 create table dept(
            deptno int primary key  auto_increment,
            dname varchar(32)
        );

Viele-zu-viele: Zum Beispiel teilen die Studententabelle und der Stundenplan die Viele-zu-viele-Beziehung normalerweise in eine Eins-zu-viele- oder eine Viele-zu-eins-Beziehung auf.

create table student(            sid  int primary key  auto_increment,
            sname varchar(32)
        );
insert into student (sname) values ('大拿');     
insert into student (sname) values ('唐嫣');
insert into student (sname) values ('王健林');
 create table course(
            cid int primary key  auto_increment,
            cname varchar(32)
        );
insert into course (cname) values ('语文');    
insert into course (cname) values ('数学');    
insert into course (cname) values ('英语');    
insert into course (cname) values ('化学');
create table s_c(
       cid int,        sid int
   );
 insert into s_c (sid,cid) values (1,1);    
 insert into s_c (sid,cid) values (1,2);    
 insert into s_c (sid,cid) values (1,3);    
 insert into s_c (sid,cid) values (1,4);    
 insert into s_c (sid,cid) values (2,2);    
 insert into s_c (sid,cid) values (2,4);    
 insert into s_c (sid,cid) values (3,1);    
 insert into s_c (sid,cid) values (3,3);

2. Warum mehrere Tabellen verwenden

Um die Redundanz großer Datenmengen zu vermeiden.
Je mehr die Uhr geteilt ist, desto besser ist es, sie entsprechend der tatsächlichen Situation aufzuteilen.

3. Konzept

Mehrere Tabellen gleichzeitig abfragen

4 🎜> f35d6e602fd7d0f0edfa6f7d103c1b57Abfrage zusammenführen

Union, Union All


Das Zusammenführen von Ergebnismengen bedeutet das Zusammenführen der Abfrageergebnisse von zwei Auswahlanweisungen. (Entspricht Union)
Die beiden zusammengeführten Ergebnisse, die Anzahl der Spalten, die Reihenfolge der Spalten und die Klasse müssen konsistent sein

create table emp(
       empno int primary key  auto_increment,
       ename varchar(32)
   );
create table dept(
        deptno int primary key  auto_increment,
        dname varchar(32)
    );
select * from emp  union select * from dept;    
select * from emp  union all select * from dept;

2cc198a1d5eb0d3eb508d858c9f5cbdbJoin-Abfrage

Mitarbeitertabelle


  create table emp(
            empno int primary key auto_increment, # 员工编号
            ename varchar(32),  #员工姓名
            job varchar(32),        #员工职位
            mgr  int,                       #上级编号
            hiredate date,          #入职时间
            sal double,                 #薪水
            comm double,                #奖金
            deptno int                  #所属部门
        );

Abteilungstabelle

 create table dept(
            deptno int primary key auto_increment,  #部门编号
            dname varchar(32),      #部门名称
            loc varchar(32)             #部门地址
        );

Interne Verbindung: Inner Join .... On, Join,,
Inner Join ist ein Vergleichsoperator, der nur qualifizierte Zeilen zurückgibt

Zum Beispiel:

select * from emp inner join  dept  on emp.deptno=dept.deptno;        
select * from emp e ,dept d where e.deptno = d.deptno;        
select * from emp e join dept d where e.deptno = d.deptno;

Outer Join:

Left Outer Join: LEFT OUTER JOIN |. Left Join ... on

Stellt die Abfrage dar, alle Zeilen auf der linken Seite, wenn rechts gibt es keine, null

select * from emp e LEFT OUTER JOIN  dept d ON e.deptno = d.deptno;

Rechter äußerer Join: rechter Join ... on oder rechter äußerer Join .... on
          Der rechte Join enthält alle Zeilen der rechten Seite Tabelle im rechten Join. Wenn eine Zeile in der linken Tabelle nicht mit der rechten Tabelle übereinstimmt, sind die Abteilungen der entsprechenden linken Tabelle im Ergebnis alle leer (null)

 select * from emp e right OUTER JOIN  dept d ON e.deptno = d.deptno;

Selbstverknüpfung :
Selbstverknüpfung bedeutet, dass in derselben Datentabelle zwei Tabellen betrachtet werden. Dies bedeutet, dass der Anführer jeder Person gefunden wird. Wenn es keinen Anführer gibt, wird kein Anführer angezeigt.
Denken Sie an eine Tabelle Als zwei Tabellen, eine Mitarbeitertabelle und eine Führungstabelle, sind beide Emp-Tabellen als rechter Join)

Natural Join beurteilt und verwendet automatisch dieselben Felder in den beiden Tabellen wie die Verbindungsbedingung und gibt Abfrageergebnisse zurück.

select e.ename,el.ename from emp e left join emp el on e.mgr = el.empno;

Hinweis: Wenn die innere Verbindung die Verbindungsbedingung nicht schreibt, tritt das Ergebnis des kartesischen Produkts auf. Diese Situation sollte vermieden werden, und wenn die äußere Verbindung die nicht schreibt Verbindungszustand wird ein Fehler gemeldet.




5bdf4c78156c7953567bb5a0aef2fc53Unterabfrage (JEDE Unterabfrage, IN-Unterabfrage, EINIGE Unterabfrage, ALLE Unterabfrage)

Problem gelöst durch Unterabfrage:

Wessen Gehalt ist höher als Cong Hao? ? ?

select * from emp natural join dept;       
select * from emp NATURAL left join dept;        
select * from emp NATURAL right join dept;

Definition: Unterabfrage ermöglicht die Verschachtelung einer Abfrage in einer anderen Abfrage
Unterabfrage wird auch als interne Abfrage bezeichnet, was einer internen Abfrage entspricht. Eine Abfrage, die eine innere Abfrage enthält, wird als äußere Abfrage bezeichnet. Die Ergebnisse der Unterabfrage werden von der Hauptabfrage verwendet.
Wichtige Hinweise
:

1. Klammern


2. Sie können Unterabfragen verwenden, nachdem Sie in der Hauptabfrage ausgewählt haben
3 . Unterabfragen können nicht nach der Gruppierung von

4 verwendet werden. Die Hauptabfrage und die Unterabfrage müssen sich nicht in derselben Tabelle befinden.

Anforderung: Mitarbeiterinformationen abfragen, deren Abteilungsname Personalwesen ist

Erster Weg: Unterabfrage verwenden

 select * from emp where sal >(select sal from emp where ename='从浩');

Zweiter Weg: Verwandte Abfrage verwenden

select * from emp where deptno=(select deptno from dept where dname='人力部');

SQL-Optimierung: Versuchen Sie, Abfragen mit mehreren Tabellen zu verwenden
Die meisten Unterabfragen werden bei der endgültigen Ausführung in eine Abfrage mit mehreren Tabellen umgewandelt. Dies ist im SQL-Ausführungsplan ersichtlich.
Durch den SQL-Ausführungsplan werden Sie feststellen, dass die Ausführung der beiden Methoden gleich ist.

5.from后面的子查询
               需求:
                   查询员工号   姓名      月薪

select empno,ename,sal from emp;

6.一般不在子查询中排序        

7.一般先执行子查询,再去执行主查询

ANY关键字

假设any内部的查询返回结果个数是三个,如:result1,result2,result3,那么

select .... from .. where a > any(...);
->select ..... from ... where a > result1 or a >result2  or a >result3;

需求:
   查询工资比1号部门中任意一个员工高的信息

select * from emp where sal > any(select sal from emp where deptno = 1);

ALL关键字

ALL关键字与any关键字类似,只不过上面的or改成and :

select .... from .. where a > all(...);
->select ..... from ... where a > result1 and a >result2  and a >result3;

需求:
   查询工资比1号部门中所有员工号的员工信息

   select * from emp where sal > all(select sal from emp where deptno = 1);

SOME关键字

some 关键字和any关键字是一样的功能。所以:

select .... from .. where a > any(...);

->select ..... from ... where a > result1 or a >result2  or a >result3;

IN关键字

IN运算符用于where表达式中,以列表向的形式支持多个选择。语法如下:

where column in (v1,v2,v3,.....);        
where column not in (v1,v2,v3,.....);

当in前面加上not运算符时候,表示与in相反的意思,既不在这写列表项中选择。

案例:
   查询部门名称是人力和研发的员工

 select * from emp where deptno in   (select deptno from dept where dname='人力部' or dname='研发部')
分类: MySQL数据库

想了解更多相关问题请访问PHP中文网:MySQL视频教程

Das obige ist der detaillierte Inhalt vonMySQL – ausführliche Einführung und Beispiele für Abfragen mit mehreren Tabellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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