Rumah >pangkalan data >tutorial mysql >Analisis contoh pertanyaan persatuan berbilang jadual MySQL
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, 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
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
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 asingJika dua jadual dikaitkan dengan pertanyaan, kami tidak menambah kekangan kunci asing Kami memanggil ini rujukan yang lemahJadi 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
Jika kekangan kunci asing ditambahkan, maka ia. Ia adalah rujukan yang kukuh
-- 创建学生表 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:
Baiklah, anda tidak boleh menukar jadual utama di Will. jadual hamba akan diasingkan Caburan dalaman ● Tanya data persilangan dalam dua jadual yang memenuhi syarat Sintaks: Fenomena 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
-- 自连接 -- 在多表关系中我们需要定义别名来区分 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 -- 查询条件
结果 :
外连接又分为左外连接与右外连接
先看左外连接 :
语法
select 结果 from 表1 left join 表 2 on 表1.column1 = 表 2.column2
左连接和内连接有什么不同呢? 通过两幅图我们就可以看出 ,内连接是取了两张表的共同部分 , 而左连接是取了左边表的全部(包括两张表的共同部分)
也就是说, 不仅查询两张表的共同部分, 并且左边表会被全部查询出来
我们通过上面外键所建的表来演示 , 为了演示方便,我们为student表再添加一列数据
可以看到, 此时第五列并没有去关联grade表
-- 左外连接查询 SELECT * FROM student s LEFT JOIN grade g ON s.gradeId= g.id
查询结果如下 :
那么说到这, 右外连接也就不难理解了 , 每次都会完整的查询右边的表
同样我们再为grade添加一条无关联的数据
语法 :
select 结果 from 表1 right join 表2 on 表1.column1 = 表2.column2
-- 右外连接查询 SELECT * FROM student s RIGHT JOIN grade g ON s.gradeId= g.id
查询结果 :
可以看到, 右表被完全查询
Atas ialah kandungan terperinci Analisis contoh pertanyaan persatuan berbilang jadual MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!