Rumah  >  Artikel  >  pangkalan data  >  Kuasai sepenuhnya operasi berbilang jadual mysql

Kuasai sepenuhnya operasi berbilang jadual mysql

WBOY
WBOYke hadapan
2022-03-28 13:48:222214semak imbas

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.

Kuasai sepenuhnya operasi berbilang jadual mysql

Pembelajaran yang disyorkan: tutorial mysql

Hubungan berbilang jadual

Satu dengan satu (biasanya digabungkan jadual) ,
satu-ke-banyak/banyak-dengan-satu (jabatan dan pekerja),
ramai-ke-banyak (pelajar dan kursus) - menggunakan jadual perantaraan

konsep kekangan kunci asing

khususnya Kekangan untuk perhubungan berbilang jadual
Kawal kekunci asing jadual hamba melalui kunci utama jadual induk

Kekangan kunci asing:

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
Kuasai sepenuhnya operasi berbilang jadual mysql

Selepas mencipta jadual Tambah kekangan kunci asing

Kuasai sepenuhnya operasi berbilang jadual mysql

Sahkan fungsi asing kekangan utama

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
Kuasai sepenuhnya operasi berbilang jadual mysql

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';  -----可以删除

Padam kekangan kunci asing

Selepas pemadaman, tiada hubungan antara jadual
Sintaks:

alter table 表名字 drop foreign key 外键约束名alter table emp2 drop foreign key emp2_fk;

Kuasai sepenuhnya operasi berbilang jadual mysql

• 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
Kuasai sepenuhnya operasi berbilang jadual mysql

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.

Pertanyaan bersama berbilang jadual (sangat penting)

• 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

Pertanyaan sertaan dalaman

mencari persimpangan antara dua jadual
Kuasai sepenuhnya operasi berbilang jadual mysql

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 kiri
select *from dept3 a join emp3 b on a.deptno = b.dept_id;
,

Kuasai sepenuhnya operasi berbilang jadual mysql

luar kanan sertai

, Kuasai sepenuhnya operasi berbilang jadual mysql
Kuasai sepenuhnya operasi berbilang jadual mysqlsambungan Manwai

select* from A full outer join B on 条件;

注意:
Oracle 里面有 full join ,可是在mysql 对 full join 支持的不好,我们可以使用 union来达到目的
Kuasai sepenuhnya operasi berbilang jadual mysql

----外连接查询
----查询哪些部门有员工,哪些部门没有员工

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;

Kuasai sepenuhnya operasi berbilang jadual mysql

----外连接查询
----查询哪些部门有员工,哪些部门没有员工

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;

Kuasai sepenuhnya operasi berbilang jadual mysql

----查询哪些员工有对应的部门,哪些没有

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;

Kuasai sepenuhnya operasi berbilang jadual mysql

----实现满外连接: 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

Kuasai sepenuhnya operasi berbilang jadual mysql

• 基本子查询
• 子查询关键字-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!

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