Komputer, Pemrograman
Kiri bergabung (SQL) - contoh, penjelasan rinci, penggunaan kesalahan
Dalam database relasional yang nyata, semua informasi didistribusikan di meja terpisah. Banyak dari tabel ditetapkan dalam skema komunikasi satu sama lain. Namun, dengan bantuan Sql query itu sangat mungkin untuk menempatkan link antara data, tidak tertanam di sirkuit. Hal ini dilakukan dengan melakukan koneksi bergabung, yang memungkinkan Anda untuk membangun hubungan antara sejumlah tabel, dan bahkan menghubungkan informasi yang tampaknya terpisah.
Artikel ini akan berbicara secara khusus tentang kiri luar bergabung. Sebelum melanjutkan ke deskripsi jenis koneksi, menambahkan dalam beberapa tabel database.
Mempersiapkan tabel yang diperlukan
Sebagai contoh, dalam database kami, ada informasi tentang orang-orang dan real estate mereka. Ringkasan berdasarkan tiga tabel: Masyarakat (orang), Realty (real estate), Realty_peoples (hubungan tabel, orang-orang yang dari apa properti milik). Asumsikan data berikut disimpan dalam tabel rakyat:
masyarakat | ||||
id | L_NAME | F_Name | Middle_name | ulang tahun |
1 | Ivanova | Daria |
B. | 2000/07/16 |
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 |
3 | Evgenin | Alexander | Federovich | 1964/04/30 |
4 | Annina | cinta | P. | 1989/12/31 |
5 | Gerasimovsky | berharap | P. | 1992/03/14 |
6 | Gerasimovsky | oleg | Albertovich | 1985/01/29 |
7 | Sukhanovskaya | juri | A. | 1976/09/25 |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 |
real estate:
barang tetap | |
id | alamat |
1 | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
2 | Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5 |
3 | wilayah Arkhangelsk, Severodvinsk, st. Lenin, d. 134, q. 85 |
4 | wilayah Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
5 | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
Hubungan orang - properti:
Realty_peoples | ||
id_peoples | id_realty | jenis |
7 | 3 | Total kepemilikan bersama |
8 | 3 | Total kepemilikan bersama |
3 | 5 | milik |
7 | 1 | milik |
5 | 4 | bagian umum |
6 | 4 | bagian umum |
Meninggalkan bergabung (Sql) - Keterangan
Senyawa meninggalkan memiliki sintaks berikut:
Table_A LEFT JOIN table_B [{ON predikat} | {MENGGUNAKAN spisok_ dengan tolbtsov}] |
Dan secara skematik sebagai berikut:
Dan ungkapan ini diterjemahkan sebagai "Pilih Semua, tanpa kecuali, garis Tabel A dan Tabel B untuk menampilkan hanya baris yang cocok predikat. Jika tabel ditemukan dalam tabel string untuk pasangan A, kemudian mengisi kolom yang dihasilkan Null - nilai-nilai".
Paling sering, ketika koneksi meninggalkan ditunjukkan ON, MENGGUNAKAN digunakan hanya ketika nama kolom, yang direncanakan untuk membuat koneksi yang sama.
Kiri bergabung - contoh penggunaan
Dengan koneksi dari kiri kita bisa melihat, semua orang dari daftar jika ada properti Masyarakat. Untuk melakukan hal ini di sebelah kiri bergabung sql contoh query:
Masyarakat SELECT. *, Realty_peoples.id_realty, Realty_peoples.type DARI Masyarakat LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Dengan hasil sebagai berikut:
Query1 | ||||||
id | L_NAME | F_Name | Middle_name | ulang tahun | id_realty | jenis |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | milik |
4 | Annina | cinta | P. | 1989/12/31 | ||
5 | Gerasimovsky | berharap | P. | 1992/03/14 | 4 | bagian umum |
6 | Gerasimovsky | oleg | Albertovich | 1985/01/29 | 4 | bagian umum |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 1 | milik |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 3 | Total kepemilikan bersama |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Total kepemilikan bersama |
Seperti yang kita lihat, Ivanova Darya Pugin Vladislav dan Anninoy Lyubovi ada terdaftar hak real estate.
Dan apa yang akan kita terima, menggunakan bergabung batin batin bergabung? Seperti yang Anda tahu, itu tidak termasuk baris yang tidak cocok, sehingga tiga dari sampel akhir kita hanya akan dijatuhkan:
Query1 | ||||||
id | L_NAME | F_Name | Middle_name | ulang tahun | id_realty | jenis |
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | milik |
5 | Gerasimovsky | berharap | P. | 1992/03/14 | 4 | bagian umum |
6 | Gerasimovsky | oleg | Albertovich | 1985/01/29 | 4 | bagian umum |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 1 | milik |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 3 | Total kepemilikan bersama |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Total kepemilikan bersama |
Akan terlihat bahwa versi kedua juga memenuhi kondisi masalah kita. Namun, jika kita mulai menempel pada yang lain, dan meja lain, tiga orang dari hasil yang sudah irretrievably hilang. Oleh karena itu, dalam prakteknya, ketika menggabungkan beberapa tabel lebih sering digunakan Kiri dan Kanan koneksi dari batin bergabung.
Akan terus melihat ke kiri bergabung contoh sql. Melampirkan meja dengan alamat rumah kami:
Masyarakat SELECT. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address DARI Masyarakat LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty ON Realty.id = Realty_peoples.id_realty |
Sekarang kita tidak hanya semacam hukum, tetapi juga alamat real estate:
Query1 | |||||||
id | L_NAME | F_Name | Middle_name | ulang tahun | id_realty | jenis | alamat |
1 | Ivanova | Daria | B. | 2000/07/16 | |||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | |||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | milik | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
4 | Annina | cinta | P. | 1989/12/31 | |||
5 | Gerasimovsky | berharap | P. | 1992/03/14 | 4 | bagian umum | wilayah Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
6 | Gerasimovsky | oleg | Albertovich | 1985/01/29 | 4 | bagian umum | wilayah Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 3 | Total kepemilikan bersama | wilayah Arkhangelsk, Severodvinsk, st. Lenin, d. 134, q. 85 |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 1 | milik | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Total kepemilikan bersama |
wilayah Arkhangelsk, Severodvinsk, st. Lenin, d. 134, q. 85 |
Kiri bergabung - penggunaan khas kesalahan: meja prosedur valid
kesalahan dasar yang dibuat di kiri luar bergabung tabel, dua:
- Benar dipilih urutan tabel yang datanya hilang.
- Di mana kesalahan ketika menggunakan query dengan bergabung tabel.
Pertimbangkan kesalahan pertama. Sebelum keputusan masalah harus dipahami dengan jelas bahwa apa yang kita ingin mendapatkan pada akhirnya. Dalam contoh di atas, kita mengambil setiap satu dari orang-orang, tapi benar-benar kehilangan informasi tentang objek yang nomor 2, yang pemiliknya tidak ditemukan.
Jika kami pindah tabel dalam query di beberapa tempat, dan akan mulai dengan «... Dari Realty kiri bergabung Masyarakat ...» salah satu properti, kita tidak akan hilang, Anda tidak akan memberitahu tentang orang-orang.
Tapi jangan takut koneksi kiri, beralih ke penuh eksternal, yang termasuk dalam hasil dan pencocokan, dan bukan garis yang cocok.
Setelah semua, volume sampel sering sangat besar, dan data tambahan sebenarnya tidak berguna. Hal utama - untuk mencari tahu apa yang ingin Anda mendapatkan hasil: dari semua orang dengan daftar properti yang tersedia atau daftar properti seluruh dengan pemiliknya (jika ada).
Kiri bergabung - penggunaan khas kesalahan: Permintaan benar saat mengatur kondisi di mana
Kesalahan kedua juga berhubungan dengan hilangnya data, dan tidak selalu segera jelas.
Mari kita kembali ke query ketika kami meninggalkan melalui koneksi data yang diterima untuk semua orang dan properti yang sudah ada mereka. Ingat berikut dengan kiri bergabung contoh sql:
DARI Masyarakat LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Misalkan kita ingin mengklarifikasi permintaan dan tidak output data, dimana jenis hukum - "Properti". Jika kita hanya menambahkan, menggunakan kiri bergabung sql, contoh kondisi berikut:
...
Dimana tipe <> "Properti" |
kita akan kehilangan data pada orang yang tidak memiliki properti, karena nilai nol Null tidak dibandingkan sebagai berikut:
Query1 | ||||||
id | L_NAME | F_Name | Middle_name | ulang tahun | id_realty | jenis |
5 | Gerasimovsky | berharap | P. | 1992/03/14 | 4 | bagian umum |
6 | Gerasimovsky | oleg | Albertovich | 1985/01/29 | 4 | bagian umum |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 3 | Total kepemilikan bersama |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Total kepemilikan bersama |
Untuk mencegah kesalahan dari terjadi untuk alasan ini, yang terbaik adalah untuk mengatur kondisi pemilihan segera setelah koneksi. Kami menyarankan untuk mempertimbangkan hal berikut dengan kiri bergabung contoh sql.
Masyarakat SELECT. *, Realty_peoples.id_realty, Realty_peoples.type DARI Masyarakat LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples DAN jenis <> "Properti") |
Hasilnya akan seperti berikut:
Query1 | ||||||
id | L_NAME | F_Name | Middle_name | ulang tahun | id_realty | jenis |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | ||
4 | Annina | cinta | P. | 1989/12/31 | ||
5 | Gerasimovsky | berharap | P. | 1992/03/14 | 4 | bagian umum |
6 | Gerasimovsky | oleg | Albertovich | 1985/01/29 | 4 | bagian umum |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 3 | Total kepemilikan bersama |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Total kepemilikan bersama |
Dengan demikian, dengan mengikuti sederhana ke kiri bergabung contoh sql, kami menerima daftar semua orang, bergerak lebih lanjut, salah satu properti ini dalam ekuitas / kepemilikan bersama.
Sebagai kesimpulan saya ingin menekankan sekali lagi bahwa sampel dari setiap informasi dari database perlu diambil secara bertanggung jawab. Banyak nuansa dibuka di depan kami dengan kiri bergabung contoh sederhana sql, penjelasan yang satu - sebelum Anda mulai menulis bahkan kueri dasar, Anda harus hati-hati untuk memahami apa yang kita ingin mendapatkan pada akhirnya. Good luck!
Similar articles
Trending Now