Heim  >  Artikel  >  Datenbank  >  Beispielanalyse einer MySQL-Mehrtabellen-Assoziationsabfrage

Beispielanalyse einer MySQL-Mehrtabellen-Assoziationsabfrage

PHPz
PHPznach vorne
2023-05-28 13:32:351465Durchsuche

Datenbankdesign-Paradigmen

Es gibt derzeit fünf Paradigmen im Datenbankdesign. Im Allgemeinen muss unsere Datenbank nur die ersten drei Paradigmen erfüllen. Das erste Paradigma: Stellen Sie sicher, dass jede Spalte atomar bleibt. Was bedeutet Atomizität? Die folgenden

Kontaktinformationen umfassen beispielsweise QQ, WeChat, Telefon usw. Offensichtlich erfüllt diese Spalte nicht die Atomizität. Wenn es sich um ein separates QQ oder Telefon usw. handelt, gibt es nur eine erfüllt die erste Normalform

Beispielanalyse einer MySQL-Mehrtabellen-Assoziationsabfragedie zweite Normalform: Um einen Primärschlüssel zu haben, müssen andere Felder vom Primärschlüssel abhängen

Warum ist der Primärschlüssel so wichtig, wenn wir die Tabelle betrachten? Als Team ist der Primärschlüssel die Flagge des Teams. Ohne einen Primärschlüssel gibt es keine Eindeutigkeit. Ohne Eindeutigkeit kann diese Datensatzreihe nicht in der Sammlung gefunden werden, daher ist der Primärschlüssel erforderlich.

Warum müssen andere Felder auf den Primärschlüssel angewiesen sein? Weil es keine Möglichkeit gibt, ihren Standort zu bestimmen, ohne sich auf den Primärschlüssel zu verlassen. Noch wichtiger ist, dass die aus anderen Feldern bestehende Datensatzzeile dasselbe darstellt wie der Primärschlüssel und der Primärschlüssel eindeutig ist. Sie müssen nur vom Primärschlüssel abhängen und werden eindeutig.

Dritte Normalform: Die dritte Normalform dient dazu, transitive Abhängigkeiten zu beseitigen und das Verständnis zu erleichtern. Sie kann als „Beseitigung von Redundanz“ angesehen werden.

Wie ist das zu verstehen? Wenn wir eine Tabelle entwerfen Es sieht aus wie oben, was normal aussieht, aber wenn wir diese Tabelle aufteilen

Wenn wir dies tun, wird es viel klarer. Wir verknüpfen die beiden Tabellen direkt über die Produktnummer, egal wo. In jeder Hinsicht. Es ist viel besser, als alles in eine Tabelle zu packen.

Fremdschlüssel. Wir wissen, dass es einen Primärschlüssel gibt, der der Kennung der Tabelle entspricht. Aber was ist mit Fremdschlüsseln?

Beispielanalyse einer MySQL-Mehrtabellen-Assoziationsabfrage● Fremdschlüssel: verweist auf einen anderen Datentabelle einen bestimmten Datensatz.

● Der Fremdschlüsselspaltentyp stimmt mit dem Primärschlüsselspaltentyp überein. Die Assoziations-/Referenzbeziehung zwischen Datentabellen wird auf der Grundlage des spezifischen Primärschlüssels (Primärschlüssels) und des Fremdschlüssels (Fremdschlüssel) hergestellt.

Beispielanalyse einer MySQL-Mehrtabellen-AssoziationsabfrageFremdschlüsseleinschränkung hinzufügen

ALTER TABLE-Tabellenname ADD [CONSTRAINT-Einschränkungsname] FOREIGN KEY (Fremdschlüsselspalte)

REFERENCES-bezogene Tabelle (Primärschlüssel);

Fremdprüfschlüssel löschen ALTER TABLE-Tabellenname DROP FOREIGN KEY Fremdschlüsseleinschränkungsname

Wir sind hier Wie im dritten Beispiel der Normalform oben erwähnt, um Redundanz zu beseitigen und zwei Tabellen über eine bestimmte Spalte zuzuordnen, legen wir diese Spalte, die die beiden Tabellen verbindet, im Allgemeinen als Fremdschlüssel fest

Wenn wir jedoch Ich brauche zwei Tabellenbezogene Abfragen, die nicht unbedingt Fremdschlüsseleinschränkungen verwenden.

Wenn zwei Tabellen mit Abfragen verknüpft sind, fügen wir keine Fremdschlüsseleinschränkungen hinzu. Wir nennen dies eine schwache Referenz Es ist eine starke Referenz


Was ist also der Unterschied zwischen diesen beiden Referenzen?

Wir wissen, dass sich der Fremdschlüssel bei Verwendung eines Fremdschlüssels in der Slave-Tabelle befindet und der Fremdschlüssel auf den Primärschlüssel verweist der Haupttabelle, dann wird eine Einschränkung zwischen den beiden Tabellen hergestellt. Zu diesem Zeitpunkt können wir die mit der Haupttabelle oder der Slave-Tabelle verknüpften Werte nicht nach Belieben ändern

1 . Wenn in der Haupttabelle kein entsprechender Datensatz vorhanden ist, können Datensätze nicht zur Slave-Tabelle hinzugefügt werden.

2 Werte in der Master-Tabelle können nicht geändert werden, was zu verwaisten Datensätzen in der Slave-Tabelle führt Die Master-Tabelle ist in der Slave-Tabelle vorhanden und die Zeile kann nicht aus der Master-Tabelle gelöscht werden

4 Bevor Sie die Master-Tabelle löschen, löschen Sie zuerst die Slave-Tabelle
  • Mit schwachen Referenzen können wir die Werte zwischen Assoziationen nach Belieben ändern

    -- 创建学生表
    CREATE TABLE student(
        id INT PRIMARY KEY AUTO_INCREMENT,
        num INT,
        NAME VARCHAR(20),
        sex CHAR(1),
        gradeId INT   -- 从表外键列
    )
    -- 创建年级表
    CREATE TABLE grade(
        -- 主表主键列
        id INT PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(20)
    )     
    -- 添加外键约束
    ALTER TABLE student ADD CONSTRAINT fk_grade 
          FOREIGN KEY(gradeId) REFERENCES grade(id)

    Erstellen Sie Daten und fügen Sie sie zur Master-Tabelle hinzu:
  • Erstellen Sie Daten und fügen Sie sie zur Slave-Tabelle hinzu:

Sie können sehen, dass dem gradeId-Feld eine Fremdschlüsseleinschränkung hinzugefügt wurde

Jetzt haben wir Versuchen Sie, eine Spalte in der Haupttabelle zu löschen:

Sie können sehen, dass Sie die Haupttabelle nicht nach Belieben ändern können. Dadurch werden die Daten in der Tabelle isoliert

Inner Join

Beispielanalyse einer MySQL-Mehrtabellen-Assoziationsabfrage● Fragen Sie die Schnittdaten in den beiden Tabellen ab, die die Bedingungen erfüllen.

Syntax:

Beispielanalyse einer MySQL-Mehrtabellen-AssoziationsabfrageWählen Sie Ergebnisse aus Tabelle 1 und Tabelle 2 aus, wobei Tabelle 1. Spalte1 = Tabelle 2.Spalte2

Innere Verknüpfungen umfassen gleiche Verknüpfungen und nicht äquivalente Verknüpfungen , und Selbstverknüpfung. Hier diskutieren wir hauptsächlich das Phänomen des Kartesischen Produkts: Tabelle 1 hat m Zeilen und Tabelle 2 hat n Zeilen. Das Ergebnis ist =m*n

Was bedeutet Selbstverbindung? es ist auf sich selbst bezogen und bildet ein kartesisches Produkt mit sich selbst. Dies ist möglicherweise nicht leicht zu verstehen. Hier ist ein Beispiel:

我们平时在淘宝网购填地址的时候, 都是采用选择的方式, 先选择省,然后是省下面的市, 接着是市下面的区(县) ,它们都是在数据库中存着, 如何去实现这个功能呢 ? 

有人可能会说, 建三张表相互关联即可 , 但实际是 , 我们采用自连接的方式 , 一张表即可实现

CREATE TABLE demo(     -- 建立demo表
    id INT PRIMARY KEY,
    NAME VARCHAR(50),
    pid INT    
 )

往表中填入数据, pid为关联上一级的id

Beispielanalyse einer MySQL-Mehrtabellen-Assoziationsabfrage

-- 自连接 
-- 在多表关系中我们需要定义别名来区分
SELECT d1.name,d2.name,d3.name FROM demo d1 
            INNER JOIN demo d2 ON d1.id=d2.pid  --自连接条件
            INNER JOIN demo d3 ON d2.id=d3.pid  --自连接条件
  WHERE d3.id=6101011   -- 查询条件

结果 : 

Beispielanalyse einer MySQL-Mehrtabellen-Assoziationsabfrage

外连接

外连接又分为左外连接与右外连接

先看左外连接 : 

Beispielanalyse einer MySQL-Mehrtabellen-Assoziationsabfrage

语法 

select 结果 from 表1 left join 表 2 on 表1.column1 = 表 2.column2 

左连接和内连接有什么不同呢?  通过两幅图我们就可以看出 ,内连接是取了两张表的共同部分 , 而左连接是取了左边表的全部(包括两张表的共同部分)

也就是说, 不仅查询两张表的共同部分, 并且左边表会被全部查询出来

我们通过上面外键所建的表来演示 , 为了演示方便,我们为student表再添加一列数据

Beispielanalyse einer MySQL-Mehrtabellen-Assoziationsabfrage

可以看到, 此时第五列并没有去关联grade表

-- 左外连接查询
SELECT * FROM student s 
     LEFT JOIN grade g ON s.gradeId= g.id

查询结果如下 : 

Beispielanalyse einer MySQL-Mehrtabellen-Assoziationsabfrage

 那么说到这, 右外连接也就不难理解了 , 每次都会完整的查询右边的表

Beispielanalyse einer MySQL-Mehrtabellen-Assoziationsabfrage

同样我们再为grade添加一条无关联的数据

Beispielanalyse einer MySQL-Mehrtabellen-Assoziationsabfrage

语法 :

 select 结果 from 表1 right join 表2 on 表1.column1 = 表2.column2 

-- 右外连接查询
SELECT * FROM student s 
     RIGHT JOIN grade g ON s.gradeId= g.id

查询结果 : 

Beispielanalyse einer MySQL-Mehrtabellen-Assoziationsabfrage

可以看到, 右表被完全查询

Das obige ist der detaillierte Inhalt vonBeispielanalyse einer MySQL-Mehrtabellen-Assoziationsabfrage. 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