Rumah > Artikel > pangkalan data > Kuasai sepenuhnya operasi berbilang jadual mysql
Artikel ini membawa anda pengetahuan yang berkaitan tentang mysql, yang terutamanya memperkenalkan isu yang berkaitan dengan operasi berbilang jadual, termasuk hubungan berbilang jadual, kekangan kunci asing, pertanyaan bersama berbilang jadual, pertanyaan Sambungan dalaman dan luaran pertanyaan sambungan, dll. Saya harap ia akan membantu semua orang.
Pembelajaran yang disyorkan: tutorial mysql
Satu dengan satu (biasanya digabungkan jadual) ,
satu-ke-banyak/banyak-dengan-satu (jabatan dan pekerja),
ramai-ke-banyak (pelajar dan kursus) - menggunakan jadual perantaraan
khususnya Kekangan untuk perhubungan berbilang jadual
Kawal kekunci asing jadual hamba melalui kunci utama jadual induk
1. Jadual induk mesti sudah wujud, atau Mencipta
2. Lajur kunci utama mesti ditetapkan untuk jadual utama
3. Kunci utama tidak boleh memasukkan nilai nol, tetapi kunci asing boleh memasukkan nilai nol
4. Tentukan lajur selepas nama jadual jadual utama atau Gabungan nama lajur. Lajur atau gabungan lajur ini mestilah kunci utama atau kunci calon jadual utama
5. Bilangan lajur dalam kunci asing mestilah sama dengan bilangan lajur dalam kunci primer
6. jenis data lajur dalam kunci asing mestilah sama dengan bilangan lajur dalam kunci utama Jenis data lajur yang sepadan adalah sama
• Buat kekangan kunci asing foreign key
Tambah kekangan kunci asing sebelum mencipta jadual
Selepas mencipta jadual Tambah kekangan kunci asing
1. Sisipan data:
Anda mesti menambah kekangan pada jadual utama
Daripada Menambah kekangan pada jadual bergantung pada jadual utama Data yang tidak wujud dalam jadual utama tidak boleh ditambah
2. Pemadaman data
Apabila data jadual utama bergantung pada jadual hamba, ia tidak boleh dipadam, jika tidak, ia boleh Memadam
Data daripada jadual boleh dipadamkan sewenang-wenangnya
cth:
delete from dept where deptno = '1001';-----不可以删除(被依赖了)delete from dept where deptno = '1004'; ------可以删除delete from emp where eid = '7'; -----可以删除
Selepas pemadaman, tiada hubungan antara jadual
Sintaks:
alter table 表名字 drop foreign key 外键约束名alter table emp2 drop foreign key emp2_fk;
• Hubungan banyak-ke-banyak - membina kekangan kunci asing
Satu baris jadual A sepadan dengan berbilang baris jadual B dan Satu baris sepadan dengan berbilang baris jadual A. Pada masa ini, anda perlu mencipta semula jadual perantaraan untuk merekodkan hubungan jadual
Nota:
pengubahsuaian dan pemadaman Pada masa ini, jadual hamba tengah boleh dipadam dan diubah suai sesuka hati, tetapi data yang jadual hamba pada kedua-dua belah bergantung pada jadual induk tidak boleh dipadam atau diubah suai.
• Konsep
adalah untuk pertanyaan dua atau lebih jadual pada masa yang sama, kerana kadangkala pengguna Apabila melihat data, data yang perlu dipaparkan datang daripada berbilang jadual
• Penyediaan data
Nota:
Kekangan kunci asing hanya mempengaruhi penambahan, pemadaman dan pengubahsuaian data, dan tidak mempunyai kesan pada pertanyaan data
• Pertanyaan sambung silangselect * from A ,B
;---akan menghasilkan data berlebihan
1 Pertanyaan sambung silang mengembalikan produk Cartesian bagi semua baris data dua jadual
2. Set Cartesian boleh difahami kerana setiap baris satu jadual sepadan dengan mana-mana baris jadual lain
3. Jika jadual A mempunyai m baris data dan jadual B mempunyai n baris data, Kemudian kembalikan m * n baris data
4. Produk Cartesian akan menghasilkan banyak data berlebihan Lain-lain pertanyaan seterusnya boleh melakukan penapisan bersyarat berdasarkan set ini
mencari persimpangan antara dua jadual
inner
boleh ditinggalkan
Sambungan dalam tersirat (standard SQL92):
select * from A,B where 条件;
Sambungan dalam yang eksplisit (standard SQL99); seperti;
select * from A inner join B on 条件
---查询每个部门的所属员工 //隐式内连接
select* from dept3,emp3 where dept3.deptno = emp3.dept_id; //这样写标准Anda juga boleh memberi nama alias, seperti; >
select* from dept3 a ,emp3 b where a.deptno = b.dept_id;Pertanyaan sambung luar
---查询每个部门的所属员工 //显式内连接select *from dept3 inner join emp3 on dept3.deptno = emp3.dept_id; //这样写标准
dibahagikan kepada: (luar boleh diabaikan)
sambung luar kiriselect *from dept3 a join emp3 b on a.deptno = b.dept_id;, luar kanan sertai
,
sambungan Manwai
select* from A full outer join B on 条件;
注意:
Oracle 里面有 full join
,可是在mysql 对 full join
支持的不好,我们可以使用 union
来达到目的
----外连接查询
----查询哪些部门有员工,哪些部门没有员工
use mydb3;select* from dept3 left outer join emp3 on dept3.deptno =emp3.dept_id;
----查询哪些员工有对应的部门,哪些没有
select* from dept3 right outer join emp3 on dept3.deptno =emp3.dept_id;
----使用 union 关键字实现左外连接和右外连接的并集
select* from dept3 left outer join emp3 on dept3.deptno=emp3.dept_idunionselect* from dept3 right outer join emp3 on dept3.deptno =emp3.dept_id;
----外连接查询
----查询哪些部门有员工,哪些部门没有员工
usemydb3;select* from dept3 a left outer join emp3 b on a.deptno = b.dept.idselect* from dept3 a left join emp3 b on a.deptno = b.dept_id;
----外连接多个表
select* from Aleft join B on 条件1left join C on 条件2left join D on 条件3;
----查询哪些员工有对应的部门,哪些没有
select * from dept3 a right outer join emp3 b on a.deptno = b.dept_id;select* from dept3 a right join emp3 b on a.deptno = b,dept_id;select*from Aright joinB on条件1,right joinC on条件2,right joinD on条件3;
----实现满外连接: full join
----使用 union
关键字实现左外连接和右外连接的并集
----select * from dept3 a full join emp3 b on a.deptno = b.dept_id; --不能执行
----union是将两个查询结果上下拼接,并去重
select* from dept3 a left join emp3 b on a.deptno = b.dept_idunionselect* from dept3 a right join emp3 b on a.deptno = b.dept_id
----union all 是将两个查询结果上下拼接,不去重
select* from dept3 a left join emp3 b on a.deptno = b.dept_idunion allselect* from dept3 a right join emp3 b on a.deptno= b.dept_id
• 基本子查询
• 子查询关键字-ALL
• 子查询关键字-ANY ,SOME
• 子查询关键字-IN
• 子查询关键字-EXISTS
• 自关联查询
推荐学习:mysql视频教程
Atas ialah kandungan terperinci Kuasai sepenuhnya operasi berbilang jadual mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!