Pertanyaan bersama berbilang jadual Mysql

Banyak kali dalam perniagaan sebenar, kami tidak hanya menanyakan jadual.

  1. Dalam sistem e-dagang, tanya pengguna yang belum membeli produk.

  2. Bank boleh menanyakan rekod pelanggaran, dan pada masa yang sama menanyakan

  3. meminta maklumat pemenang dan maklumat asas pemenang .

Jika perkara di atas hanyalah situasi lajur, kita perlu menanyakan kedua-dua jadual bersama-sama.

Dalam perniagaan yang dinyatakan di atas, berbilang jadual perlu disatukan untuk membuat pertanyaan bagi mendapatkan hasil, dan intipati pertanyaan bersama berbilang jadual ialah: sambungan jadual.

Sambungan jadual

Apabila anda perlu menanyakan medan dalam berbilang jadual, anda boleh menggunakan sambungan jadual. Cantuman meja dibahagikan kepada cantuman dalam dan cantuman luar.

  1. Campuran dalaman: Sertai rekod yang medan dalam dua jadual mempunyai perhubungan cantum yang sepadan dengan perhubungan cantum untuk membentuk set rekod.

  2. Sambungan luar: Rekod lain yang tidak dapat dipadankan akan dipilih, dibahagikan kepada sambung kiri luar dan sambung kanan luar.

Sebelum eksperimen pembelajaran, saya menyediakan dua jadual data simulasi untuk semua orang:

  1. Jadual pengguna untuk menyimpan maklumat pengguna
  2. Jadual pesanan, yang menyimpan pengguna mana yang membeli produk mana

penyata penciptaan jadual pengguna

BUAT JADUAL JIKA TIDAK WUJUD user (
uid int(11) BUKAN NULL,
username varchar(30) BUKAN NULL,
password char(32) BUKAN NULL
) ENGINE=CHARSET LAALA InnoDB=utf8;

BUAT JADUAL JIKA TIDAK WUJUD order_goods (
oid int(11) BUKAN NULL,
uid int(11) BUKAN NULL,
name varchar(50) BUKAN NULL,
buytime int(11) BUKAN NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

data jadual pengguna adalah seperti berikut:

uidusernamepassword
1景甜123456
2王小二245667
3王宝强1235531
4井柏然123455
5范冰冰5abcwa
6黄晓明abcdeef
7anglebabycaption
8TFBOYSabcdwww
9安小超12tfddwd
10高小峰3124qwqw
11李小强323fxfvdvd
12李小超311aqqee
13韩小平121rcfwrfq
14宋小康123123tcsd
15佟小刚3cxvdfs

data barang_pesanan adalah seperti berikut:

oiduidnamebuytime
110苹果鼠标1212313
23iphone 12s123121241
312雪碧13232333
415
34242123
53iphone 键盘12123413

Nota: Dalam jadual barang_pesanan di atas, uid merujuk kepada medan uid dalam jadual pengguna. Dalam jadual di atas, baris data dengan oid ialah 1 dan pengguna dengan uid ialah 10. Untuk pengguna dengan uid 10 dalam jadual pengguna: Gao Xiaofeng. Pengguna membeli tetikus Apple. Masa belian masa pembelian ialah cap waktu unix.

Penyertaan dalaman

Sintaks asas 1:

类别详细解示
基本语法select 表1.字段 [as 别名],表n.字段  from 表1 [别名],表n where 条件;
示例select user.uid ,user.username as username,order_goods.oid,order_goods.uid,order_goods.name as shopname from user,order_goods  where user.uid = order_goods.uid;
示例说明查询商品表中哪些用户购买过商品,并将用户信息显示出来

Nota: Dalam contoh berikut, jadual dari menggunakan alias jadual.

Oleh kerana nama jadual terlalu panjang, mudah untuk melakukan kesilapan setiap kali anda menulisnya. Kita boleh mengikuti jadual secara langsung dengan rentetan bahasa Inggeris yang disingkat. Apabila menyambung medan tadi, hanya gunakan rentetan singkatan.medan.

mysql> pilih u.uid ,u.username sebagai nama pengguna,o.oid,o.uid,o.name sebagai nama kedai daripada pengguna u,order_goods o where u.uid = o.uid;
+-----+-----------+-----+-----+---------------+
|. uid |. nama kedai | +-----+-----------+-----+-----+---------------+
|. 10 |. Gao Xiaofeng | |. 3 |. Wang Baoqiang | |. 12 |. Li Xiaochao | |.. Tong Xiaogang | |. 3 |. Li Wenkai | +-----+-----------+-----+-----+---------------+
5 baris dalam set (0.00 saat)


Sintaks asas 2:

Hasilnya konsisten dengan Tatabahasa Asas 1.

mysql> pilih user.uid ,user.username sebagai nama pengguna,order_goods.oid,order_goods.uid,order_goods.name sebagai nama kedai daripada pengguna inner join order_goods pada user.uid = order_goods. uid;
+-----+-----------+-----+-----+---------------+
|. uid |. nama kedai | +-----+-----------+-----+-----+---------------+
|. 10 |. Gao Xiaofeng | |. 3 |. Wang Baoqiang | |. 12 |. Li Xiaochao | |.. Tong Xiaogang | |. 3 |. Wang Baoqiang | +-----+-----------+-----+-----+---------------+
5 baris dalam set (0.00 saat)


Sambungan luar

Cambung luar dibahagikan kepada cantuman kiri dan pautan kanan Definisi khusus adalah seperti berikut.

Cabutan kiri: Mengandungi semua rekod dalam jadual kiri walaupun rekod yang tidak sepadan dengannya dalam jadual kanan

mysql> pilih * daripada pengguna kiri sertai order_goods pada pengguna .uid = order_goods.uid;
+-----+-----------+------------+------+ - -----+--------------+----------+
| nama pengguna | masa beli |
+-----+-----------+------------+------+----- - +--------------+---------+
|. 1212313 | >|. 3 |. 1235531 | |. Tong Xiaogang | 15 |. 34242123 | NULL |
|. 2 | Wang Xiao |. NULL |. NULL | 🎜 >| 6 | abcdeef |. NULL |. NULL |. | NULL |
| 9 |. 12tfddwd |. NULL | 123tcsd |. NULL |. ----------+------+------+-----------------+------ --- -+
16 baris dalam set (0.00 saat)

Cantum kanan: Mengandungi semua rekod dalam jadual yang betul walaupun rekod yang tidak sepadan dengannya dalam jadual yang betul

类别详细解示
基本语法select 表1.字段 [as 别名],表n.字段  from 表1 right JOIN 表n on  条件;
示例select *  from user right join order_goods  on  user.uid = order_goods.uid;
示例说明查询商品表中哪些用户购买过商品,并将用户信息显示出来

mysql> pilih * daripada user right join order_goods pada pengguna .uid = order_goods.uid;
+------+-----------+----------+-----+-- - --+----------------+---------+
| nama pengguna | 🎜>+------+-----------+----------+-----+-----+---- - ---------+----------+
| 3124qwqw | Baoqiang |. 311aqqee | ng Xiaogang |. 3cxvdfs | 🎜 >|. 3 |. Wang Baoqiang |. 5 |. --- +-----+-----+----------------+-----------+
5 baris dalam set (0.00 saat)

Subquery

Kadangkala, apabila kita membuat pertanyaan, syarat yang diperlukan adalah hasil daripada penyataan pilih yang lain, maka kita perlu menggunakan subquery. Kata kunci yang digunakan untuk subkueri termasuk dalam, bukan dalam, =, !=, wujud, tidak wujud, dsb.

Contoh 1:

mysql> pilih * daripada pengguna di mana uid masuk (1,3,4);
+-----+-----------+----------+
|. nama pengguna | +-----+-----------+----------+
|. 1 |. Jing Tian | |. 3 |. Wang Baoqiang | 4 |. Jing Boran | +-----+-----------+----------+
3 baris dalam set (0.00 saat)



Contoh 2:

mysql> ; +-----+-----------+----------+

|. nama pengguna | +-----+-----------+----------+
|. 10 | |. 3 |. Wang Baoqiang | |. 12 |. Li Xiaochao | |. 15 |. Tong Xiaogang | +-----+-----------+----------+

4 baris dalam set (0.00 saat)


mysql> pilih * dari emp di mana deptno masuk (pilih deptno dari dept);

Rekod kesatuan

Gunakan kesatuan dan Kesatuan semua kata kunci digunakan untuk menanyakan data daripada dua jadual mengikut syarat pertanyaan tertentu, dan kemudian menggabungkan hasil dan memaparkannya bersama-sama. Perbezaan utama antara kedua-duanya ialah hasil digabungkan secara langsung, manakala kesatuan ialah hasil daripada melaksanakan operasi yang berbeza pada keputusan selepas gabungan semua, dan mengalih keluar rekod pendua.

mysql> pilih uid daripada kesatuan pengguna pilih uid daripada order_goods;

+-----+

|. uid |

+-----+

|. 1 |

|. 2 |

|. 3 |
类别详细解示
基本语法select语句1 union[all] select语句2
示例select *  from user where uid in (1,3,4);
示例说明将商品表中的用户信息和用户表中的用户信息的结果组合在一起
|. 4 |
|. 5 |

|. 6 |
|. 7 |
|. 8 |
|. 9 |
|. 10 |
|. 11 |
|. 12 |
|. 13 |
|. 14 |
|. 15 |
+-----+
15 baris dalam set (0.00 saat)


Meneruskan pembelajaran
||
<?php echo "Hello Mysql"; ?>
  • Cadangan kursus
  • Muat turun perisian kursus