Rumah  >  Artikel  >  pangkalan data  >  Analisis contoh pertanyaan persatuan berbilang jadual MySQL

Analisis contoh pertanyaan persatuan berbilang jadual MySQL

PHPz
PHPzke hadapan
2023-05-28 13:32:351517semak imbas

Paradigma reka bentuk pangkalan data

Pada masa ini terdapat lima paradigma dalam reka bentuk pangkalan data Secara amnya, pangkalan data kami hanya perlu memenuhi tiga paradigma pertama

Paradigma pertama: pastikan setiap lajur kekal atom<.>

Apakah itu atomicity? Ini bermakna ia tidak boleh dibahagikan Contohnya,

Analisis contoh pertanyaan persatuan berbilang jadual MySQL

Maklumat hubungan termasuk QQ, WeChat, nombor telefon, dll. Jelas sekali ini. lajur tidak memenuhi atomicity , jika ia adalah QQ atau panggilan telefon yang berasingan, hanya ada satu yang memenuhi bentuk normal pertama

bentuk normal kedua: untuk mempunyai kunci primer, medan lain diperlukan untuk bergantung pada kunci utama

Mengapakah kunci utama begitu penting? Tanpa kunci utama, tiada keunikan Tanpa keunikan, barisan rekod ini tidak boleh ditempatkan dalam koleksi.

Mengapakah medan lain perlu bergantung pada kunci utama? Kerana tiada cara untuk menentukan lokasi mereka tanpa bergantung pada kunci utama. Lebih penting lagi, barisan rekod yang terdiri daripada medan lain mewakili perkara yang sama seperti kunci utama, dan kunci utama adalah unik Mereka hanya perlu bergantung pada kunci utama, dan ia menjadi unik.

Bentuk Normal Ketiga: Bentuk normal ketiga adalah untuk menghapuskan kebergantungan transitif dan memudahkan pemahaman Ia boleh dianggap sebagai "menghapuskan redundansi"

Bagaimana untuk memahami ini

Jika kita mereka bentuk jadual seperti di atas, ia kelihatan biasa, tetapi kita membahagikan jadual itu Analisis contoh pertanyaan persatuan berbilang jadual MySQL

Jika kita melakukan ini, ia akan menjadi lebih jelas. Kami secara langsung mengaitkan kedua-dua jadual melalui nombor produk Dalam setiap aspek, ia adalah lebih baik daripada memerah kesemuanya ke dalam satu jadual Analisis contoh pertanyaan persatuan berbilang jadual MySQL

Kunci

Kami tahu bahawa ada. kunci utama, yang bersamaan dengan pengecam jadual, tetapi bagaimana pula dengan kunci asing?

● Jenis lajur kunci asing adalah konsisten dengan jenis lajur kunci utama Hubungan perkaitan/rujukan antara jadual data diwujudkan dengan bergantung pada kunci utama tertentu (kunci utama) dan kunci asing (kunci asing)<. .> Padam kekunci semakan asing ALTER TABLE nama jadual DROP FOREIGN KEY nama kekangan kunci asing

Seperti yang kita nyatakan dalam contoh bentuk normal ketiga di atas, hapuskan redundansi dan kaitkan dua jadual melalui lajur tertentu, maka Kami biasanya menetapkan lajur ini yang menghubungkan dua jadual sebagai kunci asing

Walau bagaimanapun, jika kami perlu menanyakan maklumat berkaitan antara dua jadual, kami tidak semestinya menggunakan kekangan kunci asing

Jika dua jadual dikaitkan dengan pertanyaan, kami tidak menambah kekangan kunci asing Kami memanggil ini rujukan yang lemah




Jika kekangan kunci asing ditambahkan, maka ia. Ia adalah rujukan yang kukuh

Jadi apakah perbezaan antara kedua-dua jenis rujukan ini?

Kita tahu bahawa apabila kita menggunakan kunci asing, kunci asing terletak di Jadual kedua menunjukkan kunci utama jadual utama, jadi kekangan diwujudkan di antara kedua-dua jadual pada masa ini, kita tidak boleh mengubah suai nilai yang dikaitkan dengan jadual utama adalah rujukan yang kukuh
  • 1 Apabila tiada rekod yang sepadan dalam jadual induk, rekod tidak boleh ditambah pada jadual hamba

    2. mengakibatkan rekod menjadi yatim dalam jadual hamba
  • 3 Jadual hamba mempunyai rekod yang sepadan dengan jadual induk, dan baris tidak boleh dipadamkan daripada jadual induk

    4. Sebelum memadamkan jadual induk. , padamkan jadual hamba dahulu
Rujukan yang lemah membolehkan kami mengubah suai perkaitan sesuka hati Nilai antara

-- 创建学生表
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)

Cipta dan tambah data daripada jadual utama:

Cipta dan tambah data daripada jadual:

Seperti yang anda lihat, kekangan kunci asing telah ditambahkan pada medan gradeId

Pada masa ini kami cuba memadam lajur dalam jadual utama:

Analisis contoh pertanyaan persatuan berbilang jadual MySQL

Baiklah, anda tidak boleh menukar jadual utama di Will. jadual hamba akan diasingkan

Caburan dalaman

Analisis contoh pertanyaan persatuan berbilang jadual MySQL

● Tanya data persilangan dalam dua jadual yang memenuhi syarat

Sintaks: Analisis contoh pertanyaan persatuan berbilang jadual MySQLFenomena produk Cartesian: Jadual 1 mempunyai m baris, Jadual 2 mempunyai n baris, dan hasilnya =m*n

Apakah sambungan diri? Ini bermakna anda mengaitkan diri anda dengan diri anda dan melakukan produk Cartesian dengan diri anda Ini mungkin tidak mudah difahami. Berikut adalah contoh:

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

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

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

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

Analisis contoh pertanyaan persatuan berbilang jadual MySQL

-- 自连接 
-- 在多表关系中我们需要定义别名来区分
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   -- 查询条件

结果 : 

Analisis contoh pertanyaan persatuan berbilang jadual MySQL

外连接

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

先看左外连接 : 

Analisis contoh pertanyaan persatuan berbilang jadual MySQL

语法 

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

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

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

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

Analisis contoh pertanyaan persatuan berbilang jadual MySQL

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

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

查询结果如下 : 

Analisis contoh pertanyaan persatuan berbilang jadual MySQL

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

Analisis contoh pertanyaan persatuan berbilang jadual MySQL

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

Analisis contoh pertanyaan persatuan berbilang jadual MySQL

语法 :

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

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

查询结果 : 

Analisis contoh pertanyaan persatuan berbilang jadual MySQL

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

Atas ialah kandungan terperinci Analisis contoh pertanyaan persatuan berbilang jadual MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam