Tujuan

Hari ini Anda akan belajar tentang bergabung. Informasi ini akan memungkinkan Anda untuk mengumpulkan dan memanipulasi data di beberapa tabel. Pada akhir hari, Anda akan memahami dan dapat melakukan hal berikut:

  • Lakukan luar bergabung
  • Lakukan ke kiri bergabung
  • Melakukan hak bergabung
  • Lakukan bergabung equi-
  • Melakukan non-equi bergabung
  • Gabung meja untuk dirinya sendiri

Pengenalan

Salah satu fitur yang paling kuat dari SQL adalah kemampuan untuk mengumpulkan dan memanipulasi data dari seberang beberapa tabel. Tanpa fitur ini Anda harus menyimpan semua elemen data yang diperlukan untuk setiap aplikasi dalam satu tabel. Tanpa tabel umum Anda akan perlu untuk menyimpan data yang sama di beberapa tabel. Bayangkan harus mendesain ulang, membangun kembali, dan terisi kembali tabel Anda dan basis data pengguna setiap kali Anda membutuhkan query dengan informasi baru. The BERGABUNG pernyataan dari SQL memungkinkan Anda untuk desain yang lebih kecil, lebih tabel khusus yang lebih mudah untuk mempertahankan dari tabel yang lebih besar.

Beberapa Tabel dalam Pernyataan SELECT Single

Seperti Dorothy dalam The Wizard of Oz, Anda memiliki kekuatan untuk bergabung dengan tabel sejak Hari 2, “Pengantar Permintaan: Pernyataan SELECT," ketika Anda belajar tentang SELECTdan FROM. Tidak seperti Dorothy, Anda tidak perlu klik Anda tumit bersama-sama tiga kali untuk melakukan bergabung. Gunakan tabel berikut dua, bernama, cukup cerdas, TABLE1 dan TABLE2.


CATATAN: Permintaan di’s contoh hari ini diproduksi dengan menggunakan Borland alat ISQL. Anda akan melihat beberapa perbedaan antara permintaan dan yang yang kami gunakan sebelumnya dalam buku ini. Sebagai contoh, pertanyaan ini tidak dimulai dengan SQL prompt. Perbedaan lain adalah bahwa ISQL tidak membutuhkan tanda titik koma pada akhir pernyataan. (Titik koma bersifat opsional dalam ISQL Tapi.) Dasar-dasar SQL masih sama.


INPUT:
  SELECT * 
  DARI TABLE1
OUTPUT:
  ROW KOMENTAR 
  ========== ======= 

  baris 1 Tabel 1 
  baris 2 Tabel 1 
  baris 3 Tabel 1 
  baris 4 Tabel 1 
  baris 5 Tabel 1 
  baris 6 Tabel 1
INPUT:
  SELECT * 
  FROM TABLE2
OUTPUT:
  ROW KOMENTAR 
  ======== ========== 

  baris 1 tabel 2 
  baris 2 tabel 2 
  tabel 2 baris 3 
  baris 4 tabel 2 
  baris 5 tabel 2 
  tabel 2 baris 6 

Untuk bergabung dengan dua meja, ketik ini:

INPUT:
  SELECT * 
  DARI TABLE1, TABLE2
OUTPUT:
 KOMENTAR ROW ROW KOMENTAR ========== ========== ========== ======== baris 1 Tabel 1 baris 1 tabel 2 Tabel 1 baris 1 baris 2 baris 1 tabel 2 Tabel 1 tabel 2 baris 3 baris 1 Tabel 1 baris 4 tabel 2 baris 1 Tabel 1 baris 5 baris 1 tabel 2 Tabel 1 tabel 2 baris 6 baris 2 Tabel 1 baris 1 tabel 2 baris 2 Tabel 1 baris 2 tabel 2 baris 2 baris 3 Tabel 1 tabel 2 baris 2 Tabel 1 baris 4 tabel 2 baris 2 Tabel 1 baris 5 tabel 2 baris 2 baris 6 Tabel 1 tabel 2 baris 3 Tabel 1 baris 1 tabel 2 baris 3 Tabel 1 baris 2 tabel 2 baris 3 Tabel 1 baris 3 tabel 2 baris 3 Tabel 1 baris 4 tabel 2 baris 3 Tabel 1 baris 5 tabel 2 baris 3 baris 6 Tabel 1 tabel 2 baris 4 Tabel 1 baris 1 tabel 2 baris 4 Tabel 1 baris 2 tabel 2 baris 4 Tabel 1 tabel 2 baris 3 baris 4 Tabel 1 baris 4 tabel 2 baris 4 Tabel 1 baris 5 baris 4 tabel 2 Tabel 1 tabel 2 baris 6 baris 5 Tabel 1 baris 1 tabel 2 baris 5 Tabel 1 baris 2 tabel 2 baris 5 Tabel 1 baris 3 tabel 2 baris 5 Tabel 1 baris 4 tabel 2 baris 5 Tabel 1 baris 5 tabel 2 baris 5 baris 6 Tabel 1 tabel 2 baris 6 Tabel 1 baris 1 tabel 2 baris 6 Tabel 1 baris 2 tabel 2 baris 6 Tabel 1 baris 3 tabel 2 baris 6 Tabel 1 baris 4 tabel 2 baris 6 Tabel 1 baris 5 tabel 2 baris 6 Tabel 1 tabel 2 baris 6

Tiga puluh enam baris! Manakah mereka datang? Dan macam apa ini bergabung?

ANALISIS:

Pemeriksaan dekat hasil Anda bergabung pertama menunjukkan bahwa setiap baris dari TABLE1 telah ditambahkan untuk setiap baris dari TABLE2. Kutipan dari ini bergabung dengan menunjukkan apa yang terjadi:

OUTPUT:
  KOMENTAR ROW ROW KOMENTAR 
  ===== ========== ========= ======== 

  baris 1 Tabel 1 baris 1 tabel 2 
  Tabel 1 baris 1 baris 2 tabel 2 
  baris 1 Tabel 1 baris 3 tabel 2 
  baris 1 Tabel 1 baris 4 tabel 2 
  baris 1 Tabel 1 baris 5 tabel 2 
  Tabel 1 baris 1 tabel 2 baris 6 

Perhatikan bagaimana setiap baris dalam TABLE2 dikombinasikan dengan baris 1 di TABLE1. Selamat! Anda telah dilakukan Anda bergabung pertama. Tapi apa bergabung? Sebuah batin bergabung? yang luar bergabung? atau apa? Well, sebenarnya jenis ini bergabung disebut bergabung silang. A bergabung lintas biasanya tidak berguna seperti yang lain bergabung tertutup hari ini, tapi ini bergabung tidak menggambarkan properti menggabungkan dasar semua bergabung: Bergabung membawa tabel bersama-sama.

Misalnya Anda menjual komponen dengan toko-toko sepeda untuk mencari nafkah. Bila Anda dirancang database Anda, Anda dibangun satu meja besar dengan semua kolom yang bersangkutan.Setiap kali Anda memiliki persyaratan baru, Anda menambahkan kolom baru atau memulai sebuah meja baru dengan semua data lama ditambah data baru yang dibutuhkan untuk membuat permintaan khusus. Akhirnya, database Anda akan runtuh dari beratnya sendiri – tidak terlihat cantik. Sebuah desain alternatif, yang didasarkan pada model relasional, akan Anda memasukkan semua data yang terkait menjadi satu tabel. Berikut ini bagaimana tabel pelanggan Anda akan terlihat:

INPUT:
  SELECT * 
  DARI PELANGGAN
OUTPUT:
  ALAMAT NAMA NEGARA ZIP PHONE KOMENTAR 
  ========== ========== ====== ========== ========= ===== ===== 

  WHEEL TRUE 55O HUSKER NE 58.702 555-4.545 NONE 
  SEPEDA SPEC CPT mendengarkan pengakuan dosa dan LA 45678 555-1234 NONE 
  LE KS Hometown Shoppe 54678 555-1278 NONE 
  SEPEDA AAA 10 OLDTOWN NE 56.784 555-3.421 JOHN-Mgr 
  Jacks SEPEDA 24 Eglin FL 34.567 555-2.314 NONE 
ANALISIS:

Tabel ini berisi semua informasi yang Anda butuhkan untuk menggambarkan pelanggan Anda. Item yang dijual akan pergi ke meja lain:

INPUT:
  SELECT * 
  BAGIAN DARI
OUTPUT:
 PARTNUM URAIAN =========== ==================== =========== HARGA 54 pedal 54,25 42 Kursi 24,50 15,25 23 46 ban SEPEDA GUNUNG SEPEDA JALAN 76 350,45 530,00 10 Tandem 1.200,00

Dan perintah Anda ambil akan meja mereka sendiri:

INPUT:
  SELECT * 
  Dari pesanan
OUTPUT:
  NAMA ORDEREDON KUANTITAS PARTNUM KOMENTAR 
  =========== ========== =========== =========== ======= 

  15-MAY-1996 WHEEL TRUE 23 6 DISETOR 
  19-MAY-1996 WHEEL TRUE 76 3 DISETOR 
   2-SEP 1996 TRUE WHEEL-10 1 DISETOR 
  30-JUN 1996 TRUE WHEEL-42 8 DISETOR 
  30-JUN-1996 SEPEDA SPEC 54 10 DISETOR 
  30-MAY-1996 SEPEDA SPEC 10 2 DISETOR 
  30-MAY-1996 SPEC SEPEDA 23 8 DISETOR 
  17-JAN-1996 SEPEDA SPEC 76 11 DISETOR 
  17-JAN-1996 LE Shoppe 76 5 DISETOR 
   1-JUN-1996 LE Shoppe 10 3 DISETOR 
   1-SEPEDA AAA-1996 10 Jun 1 DISETOR 
   1-JUL-1996 SEPEDA AAA 76 4 DISETOR 
   1-JUL-1996 SEPEDA AAA 46 14 DISETOR 
  11-JUL-1996 jack SEPEDA 76 14 DISETOR 

Satu keuntungan dari pendekatan ini adalah bahwa Anda dapat memiliki tiga orang khusus atau departemen yang bertanggung jawab untuk memelihara data mereka sendiri. Anda tidak perlu database administrator yang mahir dengan semua aspek dari proyek Anda untuk gembala satu raksasa, database multidepartmental. Keuntungan lainnya adalah bahwa dalam usia jaringan, setiap tabel dapat berada pada mesin yang berbeda. Orang-orang yang memahami data yang bisa mempertahankan itu, dan bisa berada pada mesin yang tepat (daripada yang jahat mainframe perusahaan dilindungi oleh pasukan dari administrator sistem).

Sekarang bergabung PARTS dan perintah:

INPUT / OUTPUT:
  SELECT O. ORDEREDON, O. NAMA, O. PARTNUM, 
  P. PARTNUM, P. URAIAN 
  DARI O pesanan, P BAGIAN 

    NAMA ORDEREDON PARTNUM PARTNUM URAIAN 
  =========== ========== =========== ========= ========= === 

  15-MAY-1996 23 54 WHEEL TRUE pedal 
  19-MAY-1996 76 54 WHEEL TRUE pedal 
   2-SEP-1996 10 54 WHEEL TRUE pedal 
  30-JUN-1996 42 54 WHEEL TRUE pedal 
  30-JUN-1996 54 54 SEPEDA SPEC pedal 
  30-MAY-1996 SEPEDA SPEC 10 54 pedal 
  30-MAY-1996 SEPEDA SPEC 23 54 pedal 
  17-JAN-1996 76 54 SEPEDA SPEC pedal 
  17-JAN-1996 LE Shoppe 76 54 pedal 
   1-JUN-1996 LE Shoppe 10 54 pedal 
   1-JUN 1996 AAA SEPEDA-10 54 pedal 
   1-JUL-1996 76 54 SEPEDA AAA pedal 
   1-JUL-1996 46 54 SEPEDA AAA pedal 
  11-JUL-1996 jack pedal SEPEDA 76 54 
  ... 
ANALISIS:

Kode sebelumnya adalah hanya sebagian hasil set. Set sebenarnya adalah 14 (jumlah baris dalam pesanan) x 6 (jumlah baris dalam BAGIAN), atau 84 baris. Hal ini mirip dengan hasil dari bergabung dan TABLE2 TABLE1 sebelumnya hari ini, dan masih satu pernyataan malu menjadi berguna. Sebelum kita mengungkapkan bahwa pernyataan, kita perlu mundur sedikit dan berbicara tentang lain digunakan untuk alias.

Mencari Kolom Correct

Bila Anda bergabung TABLE1 dan TABLE2, Anda menggunakan SELECT *, yang dikembalikan semua kolom di kedua tabel. Dalam bergabung dengan perintah kepada BAGIAN, pernyataanSELECT agak sedikit lebih rumit:

  SELECT O. ORDEREDON, O. NAMA, O. PARTNUM, 
  P. PARTNUM, P. URAIAN 

SQL cukup pintar untuk mengetahui bahwa ORDEREDON dan NAMA hanya ada dalam perintah dan yang ada hanya dalam URAIAN BAGIAN, tapi bagaimana PARTNUM, yang ada di kedua? Jika Anda memiliki kolom yang memiliki nama yang sama di dua tabel, Anda harus menggunakan alias dalam klausa SELECT Anda untuk menentukan kolom yang ingin ditampilkan. Teknik umum adalah untuk menetapkan karakter tunggal untuk setiap tabel, seperti yang Anda lakukan dalam klausa FROM:

  DARI O pesanan, P BAGIAN 

Anda menggunakan karakter yang dengan setiap nama kolom, seperti yang Anda lakukan pada klausa SELECT sebelumnya. Klausa SELECT juga dapat ditulis seperti ini:

  SELECT ORDEREDON, NAMA, O. PARTNUM, P. PARTNUM, URAIAN 

Tapi ingat, suatu hari nanti Anda mungkin harus kembali dan mempertahankan query ini. Tidak ada salahnya untuk membuatnya lebih mudah dibaca. Sekarang kembali ke pernyataan hilang.

Bergabung Equi-

Sebuah ekstrak dari BAGIAN / perintah bergabung memberikan petunjuk mengenai apa yang hilang:

  30-JUN-1996 42 54 WHEEL TRUE pedal 
  30-JUN-1996 54 54 SEPEDA SPEC pedal 
  30-MAY-1996 SEPEDA SPEC 10 54 pedal 

Perhatikan PARTNUM bidang yang sama untuk kedua tabel. Bagaimana jika Anda menulis hal berikut ini?

INPUT:
  SELECT O. ORDEREDON, O. NAMA, O. PARTNUM, 
  P. PARTNUM, P. URAIAN 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM
OUTPUT:
 NAMA ORDEREDON PARTNUM PARTNUM URAIAN =========== ========== =========== ========= ==== ========== 1-JUN 1996 AAA SEPEDA-10 10 Tandem 30-MUNGKIN-1996 SEPEDA SPEC 10 10 tandem 2-September-1996 WHEEL TRUE 10 10 Tandem 1-Juni-1996 LE Shoppe 10 10 Tandem 30-MAY-1996 SEPEDA SPEC 23 23 SEPEDA GUNUNG 15-MEI-1996 23 23 WHEEL TRUE SEPEDA GUNUNG 30-Juni-1996 WHEEL TRUE 42 42 Kursi 1-Juli-1996 AAA SEPEDA 46 46 ban 30-Juni-1996 SEPEDA SPEC 54 54 pedal 1-Juli-1996 AAA SEPEDA SEPEDA JALAN 76 76 17 JAN-1996 76 76 SPEC SEPEDA JALAN SEPEDA 19-MUNGKIN-1996 76 76 WHEEL TRUE JALAN SEPEDA 11-Juli-1996 jack SEPEDA SEPEDA JALAN 76 76 17-JAN- 1996 LE Shoppe 76 76 JALAN SEPEDA
ANALISIS:

Menggunakan PARTNUM kolom yang ada di kedua tabel sebelumnya, Anda baru saja menggabungkan informasi yang Anda telah disimpan dalam tabel pesanan dengan informasi dari tabel BAGIANuntuk menunjukkan gambaran bagian-bagian toko sepeda telah memerintahkan dari Anda. Join yang digunakan disebut bergabung equi-karena tujuannya adalah untuk mencocokkan nilai kolom dalam satu tabel dengan nilai-nilai yang sesuai dalam tabel kedua.

Anda dapat lebih memenuhi syarat query ini dengan menambahkan kondisi yang lebih dalam klausul WHERE. Sebagai contoh:

INPUT / OUTPUT:
  SELECT O. ORDEREDON, O. NAMA, O. PARTNUM, 
  P. PARTNUM, P. URAIAN 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM 
  DAN O. PARTNUM = 76 

    NAMA ORDEREDON PARTNUM PARTNUM URAIAN 
  =========== ========== =========== ========== ======== ==== 

   1-JUL-1996 SEPEDA AAA 76 76 JALAN SEPEDA 
  17-JAN-1996 76 76 SPEC SEPEDA SEPEDA JALAN 
  19-MAY-1996 76 76 WHEEL TRUE JALAN SEPEDA 
  11-JUL-1996 76 76 Jacks SEPEDA SEPEDA JALAN 
  17-JAN-1996 LE Shoppe 76 76 JALAN SEPEDA 

Nomor 76 tidak terlalu deskriptif, dan Anda tidak ingin orang-orang penjualan Anda harus mengingat nomor bagian. (Kami telah kemalangan untuk melihat data informasi banyak sistem di bidang yang membutuhkan pengguna akhir untuk mengetahui beberapa kode aneh untuk sesuatu yang memiliki nama yang baik sempurna. Jangan menulis salah satu dari mereka!) Berikut adalah cara lain untuk menulis pertanyaan:

INPUT / OUTPUT:
  SELECT O. ORDEREDON, O. NAMA, O. PARTNUM, 
  P. PARTNUM, P. URAIAN 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM 
  DAN '= JALAN SEPEDA URAIAN P.' 

    NAMA ORDEREDON PARTNUM PARTNUM URAIAN 
  =========== ========== =========== ========== ======== ==== 

   1-JUL-1996 76 76 AAA SEPEDA SEPEDA JALAN 
  17-JAN-1996 76 76 SPEC SEPEDA SEPEDA JALAN 
  19-MAY-1996 76 76 WHEEL TRUE JALAN SEPEDA 
  11-JUL-1996 76 76 Jacks SEPEDA SEPEDA JALAN 
  17-JAN-1996 LE Shoppe 76 76 JALAN SEPEDA 

Sepanjang garis yang sama, silakan lihat di dua tabel lagi untuk melihat bagaimana mereka dapat bergabung. Dalam contoh ini jelas employee_id kolom harus unik. Anda bisa memiliki karyawan dengan nama yang sama, mereka bisa bekerja di departemen yang sama, dan mendapatkan gaji yang sama. Namun, setiap karyawan akan memiliki dia sendiri atau Nya employee_id. Untuk bergabung dua tabel, Anda akan menggunakan kolom employee_id.

EMPLOYEE_TABLE EMPLOYEE_PAY_TABLE
employee_id employee_id
last_name gaji
first_name departemen
middle_name pengawas
marital_status
INPUT:
  SELECT E. EMPLOYEE_ID E., LAST_NAME, EP.SALARY 
  DARI EMPLOYEE_TBL E, 
       EMPLOYEE_PAY_TBL EP 
  WHERE EMPLOYEE_ID E. = EP.EMPLOYEE_ID 
    DAN E. LAST_NAME 'SMITH =';
OUTPUT:
  E. EMPLOYEE_ID E. EP.SALARY LAST_NAME 

  ============= =========== ========= 
          SMITH 13.245 35.000,00 

TIP: Bila Anda bergabung dengan dua meja tanpa menggunakan klausa WHERE, Anda melakukan join Cartesian. Ini bergabung dengan mengkombinasikan semua baris dari semua tabel di klausa FROM. Jika tabel masing-masing memiliki 200 baris, maka Anda akan berakhir dengan 40.000 baris dalam hasil Anda (200 x 200). Selalu bergabung tabel Anda pada klausa WHERE kecuali Anda memiliki kebutuhan nyata untuk bergabung semua baris semua tabel yang dipilih.


Kembali ke tabel asli. Sekarang Anda siap untuk menggunakan semua informasi ini tentang bergabung untuk melakukan sesuatu yang sangat berguna: mencari tahu berapa banyak uang yang telah Anda buat dari penjualan sepeda jalan:

INPUT / OUTPUT:
  SELECT SUM (O. KUANTITAS * P. HARGA) TOTAL 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM 
  DAN '= JALAN SEPEDA URAIAN P.' 

        TOTAL 
  =========== 

     19.610,00 
ANALISIS:

Dengan setup ini, orang-orang penjualan dapat menyimpan tabel perintah diperbarui, departemen produksi dapat menyimpan tabel BAGIAN saat ini, dan Anda dapat menemukan garis bawah Anda tanpa merancang ulang database Anda.


CATATAN: Perhatikan konsistensi penggunaan tabel dan kolom alias dalam contoh pernyataan SQL. Anda akan menghemat banyak, banyak ketikan dengan menggunakan alias.Mereka juga membantu untuk membuat laporan Anda lebih mudah dibaca.


Dapatkah Anda bergabung lebih dari satu tabel? Sebagai contoh, untuk menghasilkan informasi untuk mengirimkan faktur, Anda bisa mengetik pernyataan ini:

INPUT / OUTPUT:
  C. SELECT NAMA, ALAMAT C., (O. KUANTITAS * P. HARGA) TOTAL 
  ORDER DARI O, P BAGIAN, PELANGGAN C 
  PARTNUM WHERE O. = P. PARTNUM 
  DAN NAME O. = C. NAMA 

  NAMA ALAMAT TOTAL 
  ========== ========== =========== 

  TRUE WHEEL 55O HUSKER 1.200,00 
  SEPEDA CPT SPEC mendengarkan pengakuan dosa 2.400,00 
  LE Pojok Hometown 3.600,00 
  AAA SEPEDA 10 OLDTOWN 1.200,00 
  TRUE WHEEL 55O HUSKER 2.102,70 
  SEPEDA CPT SPEC mendengarkan pengakuan dosa 2.803,60 
  TRUE WHEEL 55O HUSKER 196,00 
  AAA SEPEDA 10 OLDTOWN 213,50 
  SEPEDA CPT SPEC mendengarkan pengakuan dosa 542,50 
  TRUE WHEEL 55O HUSKER 1.590,00 
  SEPEDA CPT SPEC mendengarkan pengakuan dosa 5.830,00 
  Jacks SEPEDA 24 Eglin 7.420,00 
  LE Pojok Hometown 2.650,00 
  AAA SEPEDA 10 OLDTOWN 2.120,00 

Anda dapat membuat output lebih mudah dibaca dengan menulis pernyataan seperti ini:

INPUT / OUTPUT:
 C. SELECT NAMA, ALAMAT C., O. KUANTITAS JUMLAH * HARGA P. dari pesanan O, P BAGIAN, PELANGGAN C WHERE PARTNUM O. = P. PARTNUM DAN NAME O. = C. ORDER BY C. NAMA NAMA NAMA ALAMAT JUMLAH ========== ========== =========== AAA 10 OLDTOWN 213,50 SEPEDA SEPEDA AAA AAA 10 OLDTOWN 2.120,00 1.200,00 SEPEDA SEPEDA 10 OLDTOWN CPT SPEC mendengarkan pengakuan dosa 542,50 SEPEDA CPT SPEC SPEC mendengarkan pengakuan dosa dan pengakuan dosa dan mengampuni 2.803,60 CPT SEPEDA SEPEDA SPEC CPT 5.830,00 2.400,00 mendengarkan pengakuan dosa dan jack SEPEDA 24 Eglin 7.420,00 2.650,00 Hometown Shoppe LE LE Shoppe Hometown WHEEL 3.600,00 196,00 HUSKER TRUE 55O 55O WHEEL TRUE TRUE WHEEL HUSKER 2.102,70 1.590,00 HUSKER 55O 55O WHEEL TRUE HUSKER 1.200,00

CATATAN: Perhatikan bahwa ketika bergabung dengan tiga meja (perintah, BAGIAN, dan PELANGGAN) bahwa tabel perintah yang digunakan dalam dua bergabung dan meja lainnya hanya digunakan sekali. Tabel yang akan mengembalikan baris paling sedikit dengan kondisi tertentu yang biasanya disebut sebagai tabel mengemudi, atau tabel dasar. Tabel selain tabel basis di query biasanya bergabung ke tabel dasar untuk pengambilan data yang lebih efisien. Akibatnya, tabel Orders adalah tabel dasar dalam contoh ini. Dalam sebuah tabel database paling dasar beberapa bergabung (baik secara langsung maupun tidak langsung) semua meja lainnya. (Lihat Hari 15, “Memperlancar SQL Laporan untuk Peningkatan Kinerja,” untuk lebih lanjut tentang tabel dasar.)


Anda dapat membuat permintaan sebelumnya yang lebih spesifik, sehingga lebih bermanfaat, dengan menambahkan kolom URAIAN seperti dalam contoh berikut:

INPUT / OUTPUT:
 C. SELECT NAMA, ALAMAT C., O. KUANTITAS JUMLAH * HARGA P., P. URAIAN dari pesanan O, P BAGIAN, PELANGGAN C WHERE PARTNUM O. = P. PARTNUM DAN NAME O. = C. ORDER BY NAMA C. TOTAL NAMA NAMA ALAMAT DESKRIPSI ========== ========== =========== ============== SEPEDA AAA 10 OLDTOWN 213,50 ban AAA SEPEDA 10 OLDTOWN 2.120,00 JALAN SEPEDA SEPEDA AAA 10 OLDTOWN 1.200,00 SEPEDA Tandem CPT SPEC mendengarkan pengakuan dosa dan 542,50 pedal SEPEDA SEPEDA CPT SPEC mendengarkan pengakuan dosa CPT SPEC SEPEDA GUNUNG SEPEDA SEPEDA 2.803,60 mendengarkan pengakuan dosa CPT SPEC JALAN 5.830,00 2.400,00 mendengarkan pengakuan dosa dan Tandem SEPEDA Jacks 24 Eglin 7.420,00 JALAN SEPEDA Shoppe Hometown LE LE 2.650,00 JALAN SEPEDA Hometown Shoppe 3.600,00 Tandem WHEEL TRUE 55O HUSKER 196,00 Kursi WHEEL TRUE 55O HUSKER 2.102,70 SEPEDA GUNUNG WHEEL TRUE 55O HUSKER 1.590,00 SEPEDA JALAN WHEEL TRUE 55O HUSKER Tandem 1.200,00
ANALISIS:

Informasi ini merupakan hasil dari bergabung dengan tiga meja. Anda sekarang dapat menggunakan informasi ini untuk membuat faktur.


CATATAN: Pada contoh di awal hari, SQL dikelompokkan TABLE1 dan TABLE2 untuk menciptakan tabel baru dengan X (baris dalam TABLE1) x Y (baris dalam TABLE2) jumlah baris.Sebuah meja fisik tidak diciptakan oleh bergabung, tetapi dalam pengertian virtual. Join antara dua tabel memproduksi satu set baru yang memenuhi semua kondisi di klausa WHERE,termasuk bergabung itu sendiri. Pernyataan SELECT telah mengurangi jumlah baris yang ditampilkan, tetapi untuk mengevaluasi klausa WHERE SQL masih menciptakan semua baris mungkin. Sampel tabel di’s contoh ini hanya beberapa baris. data aktual Anda mungkin memiliki ribuan baris. Jika Anda bekerja pada platform dengan banyak tenaga kuda, menggunakan tabel-ganda bergabung mungkin tidak tampak mempengaruhi kinerja. Namun, jika Anda bekerja di lingkungan yang lebih lambat, bergabung dapat menyebabkan penurunan yang signifikan.

Kami tidak mengatakan Anda untuk tidak menggunakan bergabung, karena Anda telah melihat keuntungan yang bisa diperoleh dari desain relasional. Hanya menyadari platform yang Anda gunakan dan itu persyaratan pelanggan Anda untuk kecepatan versus kehandalan.


Non-Equi-Bergabung

Karena SQL mendukung bergabung equi-, Anda mungkin beranggapan bahwa SQL juga memiliki non-equi-bergabung. Anda akan benar! Sedangkan-equi bergabung menggunakan tanda = dalam laporan WHERE, non-equi-bergabung menggunakan semuanya tapi merupakan tanda =. Sebagai contoh:

INPUT:
  O. SELECT NAMA, O. PARTNUM, P. PARTNUM, 
  KUANTITAS O. * P. HARGA TOTAL 
  DARI O pesanan, P BAGIAN 
  WHERE O. PARTNUM> PARTNUM P.
OUTPUT:
 NAMA PARTNUM PARTNUM JUMLAH ========== =========== =========== =========== TRUE WHEEL 76 54 SEPEDA SPEC 162,75 596,75 76 54 76 54 LE Shoppe SEPEDA AAA 271,25 217,00 76 54 76 54 Jacks SEPEDA WHEEL TRUE 759,50 73,50 76 42 54 42 SPEC SEPEDA SEPEDA SPEC 245,00 269,50 76 42 76 42 LE Shoppe AAA 122,50 98,00 SEPEDA SEPEDA 76 42 46 AAA 42 Jacks 343,00 343,00 SEPEDA 76 42 76 46 WHEEL TRUE SEPEDA 45,75 152,50 SPEC 54 46 76 46 SEPEDA SPEC LE 167,75 76,25 Shoppe 76 46 76 46 SEPEDA AAA jack SEPEDA 61,00 213,50 76 46 76 23 WHEEL TRUE TRUE WHEEL 1.051,35 2.803,60 42 23 ...
ANALISIS:

Listing ini melanjutkan dengan menjelaskan semua baris dalam bergabung WHERE O. PARTNUM> P. PARTNUM. Dalam konteks toko sepeda Anda, informasi ini tidak memiliki banyak makna, dan di dunia nyata bergabung equi-jauh lebih umum daripada non-equi-bergabung. Namun, Anda mungkin mengalami suatu aplikasi di mana-equi-non bergabung menghasilkan hasil yang sempurna.

Bergabung Luar versus batin Bergabung

Sama seperti-equi-non bergabung menyeimbangkan equi-join, outer join melengkapi bergabung batin. Sebuah bergabung batin adalah dimana baris tabel digabungkan satu sama lain, menghasilkan jumlah baris baru sama dengan hasil jumlah baris dalam setiap tabel. Juga, bergabung batin menggunakan baris ini untuk menentukan hasil klausa WHERE. Sebuah luar bergabung dengan kelompok dua tabel dalam cara yang sedikit berbeda. Menggunakan tabel BAGIAN dan perintah dari contoh sebelumnya, lakukan hal berikut bergabung dalam:

INPUT:
  SELECT P. PARTNUM, P. URAIAN, P. HARGA, 
  O. NAMA, O. PARTNUM 
  BAGIAN DARI P 
  JOIN Pesanan ON ORDERS.PARTNUM O = 54
OUTPUT:
  PARTNUM URAIAN HARGA NAMA PARTNUM 
  ==================== =========== ======= ========== == ========= 

       54 54 54,25 pedal SEPEDA SPEC 
       42 54 Kursi 24,50 SEPEDA SPEC 
       Ban 54 46 15,25 SEPEDA SPEC 
       23 SEPEDA GUNUNG SEPEDA SPEC 54 350,45 
       76 JALAN SEPEDA SEPEDA SPEC 54 530,00 
       10 Tandem 1.200,00 SEPEDA SPEC 54 

CATATAN: sintaks yang anda gunakan untuk mendapatkan ini bergabung – BERGABUNG ON – tidak ANSI standar. implementasi yang anda gunakan untuk contoh ini memiliki sintaks tambahan. Anda menggunakan di sini untuk menentukan dalam dan luar bergabung. Kebanyakan implementasi dari SQL memiliki ekstensi yang sama. Perhatikan adanya klausa WHEREdalam jenis bergabung.


ANALISIS:

Hasilnya adalah bahwa semua baris pada BAGIAN yang disambung ke baris tertentu dalam perintah mana kolom PARTNUM adalah 54. Berikut adalah HAK Outer JOIN pernyataan:

INPUT / OUTPUT:
 SELECT P. PARTNUM, P. URAIAN, HARGA P., O. NAMA, O. PARTNUM BAGIAN DARI KANAN P Outer JOIN ON ORDERS.PARTNUM perintah O = 54 PARTNUM URAIAN NAMA HARGA PARTNUM ======= ==== ================ ======= ============== ======= <null> <null> TRUE <null> WHEEL 23 <null> <null> <null> WHEEL TRUE 76 <null> <null> <null> WHEEL TRUE 10 <null> <null> <null> WHEEL TRUE pedal 42 54 54 54,25 SEPEDA SPEC 42 Kursi 24,50 SEPEDA SPEC 54 46 ban 15,25 SPEC SEPEDA GUNUNG SEPEDA 54 23 SEPEDA SPEC 54 350,45 76 530,00 JALAN SEPEDA SEPEDA SPEC 54 10 Tandem 1.200,00 SEPEDA SPEC 54 <null> <null> <null> SEPEDA SPEC 10 <null> <null> <null > SEPEDA SPEC 23 <null> <null> <null> SEPEDA SPEC 76 <null> <null> <null> LE Shoppe 76 <null> <null> <null> LE Shoppe 10 <null> <null> <null> AAA SEPEDA 10 <null> <null> <null> AAA SEPEDA 76 <null> <null> <null> AAA SEPEDA 46 <null> <null> Jacks <null> SEPEDA 76
ANALISIS:

Jenis pertanyaan baru. Pertama Anda tetapkan sebuah Outer RIGHT JOIN, yang menyebabkan SQL untuk mengembalikan set lengkap meja kanan, pesanan, dan ke tempat nulls di bidang di mana <> 54 ORDERS.PARTNUM. Berikut ini adalah pernyataan KIRI Outer JOIN:

INPUT / OUTPUT:
 SELECT P. PARTNUM, P. URAIAN, HARGA P., O. NAMA, O. PARTNUM BAGIAN DARI KIRI BERGABUNG Outer P O pesanan ORDERS.PARTNUM = 54 PARTNUM URAIAN NAMA HARGA PARTNUM ======= ==== ============== =========== ========== =========== 54 SEPEDA pedal 54,25 SPEC 54 42 Kursi 24,50 SEPEDA SPEC 54 46 ban 15,25 SPEC SEPEDA GUNUNG SEPEDA 54 23 SEPEDA SPEC 54 350,45 76 530,00 JALAN SEPEDA SEPEDA SPEC 54 10 Tandem 1.200,00 SEPEDA SPEC 54
ANALISIS:

Anda mendapatkan baris yang sama enam sebagai INNER JOIN. Karena Anda ditentukan KIRI (tabel KIRI), BAGIAN menentukan jumlah baris Anda akan kembali. Karena BAGIAN lebih kecil dariperintah, SQL melihat tidak perlu pad bidang-bidang lain dengan kosong.

Jangan terlalu khawatir tentang dalam dan luar bergabung. Sebagian besar produk SQL menentukan BERGABUNG optimal untuk permintaan Anda. Bahkan, jika Anda menempatkan permintaan Anda ke dalam suatu prosedur yang disimpan (atau menggunakannya dalam program (baik disimpan prosedur dan Embedded SQL tertutup pada Hari 13, “Advanced SQL Topik”), Anda tidak harus menentukan jenis bergabung bahkan jika Anda SQL implementasi menyediakan sintaks yang tepat. Jika Anda menetapkan bergabung jenis, pengoptimasi memilih cara Anda bukan secara optimal.

Beberapa implementasi dari SQL menggunakan tanda + bukan sebuah Outer JOIN pernyataan. + Itu hanya berarti “Tunjukkan semua bahkan jika ada sesuatu yang hilang.” Berikut sintaks:

Sintaks:
  SQL> e.name pilih, e.employee_id, ep.salary, 
              ep.marital_status 
       dari e, ployee_tbl e, 
            employee_pay_tbl ep 
       mana e.employee_id = ep.employee_id (+) 
        dan e.name% MITH 'seperti'; 
ANALISIS:

Pernyataan ini bergabung dengan dua meja. Tanda + dalam kolom ep.employee_id akan mengembalikan semua baris bahkan jika mereka kosong.

Bergabung dengan Tabel untuk Hakikat

Akhir topik ini Hari ini adalah menggunakan teknik-sering bergabung dengan meja untuk dirinya sendiri. Sintaks operasi ini mirip dengan bergabung dengan dua meja. Misalnya, untuk bergabungTABLE1 meja untuk dirinya sendiri, jenis ini:

INPUT:
  SELECT * 
  DARI TABLE1, TABLE1
OUTPUT:
  
  KOMENTAR ROW ROW KOMENTAR 
  ========== ========== ========== ======== 

  baris 1 Tabel 1 baris 1 Tabel 1 
  Tabel 1 baris 1 baris 2 Tabel 1 
  baris 1 Tabel 1 baris 3 Tabel 1 
  baris 1 Tabel 1 baris 4 Tabel 1 
  baris 1 Tabel 1 baris 5 Tabel 1 
  baris 1 Tabel 1 baris 6 Tabel 1 
  baris 2 Tabel 1 baris 1 Tabel 1 
  Tabel 1 baris 2 baris 2 Tabel 1 
  Tabel 1 baris 2 baris 3 Tabel 1 
  baris 2 Tabel 1 baris 4 Tabel 1 
  baris 2 Tabel 1 baris 5 Tabel 1 
  Tabel 1 baris 2 baris 6 Tabel 1 
  baris 3 Tabel 1 baris 1 Tabel 1 
  Tabel 1 baris 3 baris 2 Tabel 1 
  baris 3 baris 3 Tabel 1 Tabel 1 
  baris 3 Tabel 1 baris 4 Tabel 1 
  baris 3 Tabel 1 baris 5 Tabel 1 
  Tabel 1 baris 3 baris 6 Tabel 1 
  baris 4 Tabel 1 baris 1 Tabel 1 
  Tabel 4 baris 1 baris 2 Tabel 1 
  ... 
ANALISIS:

Dalam bentuk lengkapnya, ini bergabung menghasilkan jumlah yang sama bergabung dengan dua kombinasi sebagai baris tabel 6. Jenis bergabung bisa berguna untuk memeriksa konsistensi internal data. Apa yang akan terjadi jika seseorang jatuh tertidur di departemen produksi dan memasuki bagian baru dengan PARTNUM yang sudah ada? Itu akan menjadi berita buruk bagi semua orang: Faktur akan salah; aplikasi Anda mungkin akan meledak, dan pada umumnya Anda akan di untuk waktu yang sangat buruk. Dan penyebab semua masalah Anda akan menjadi duplikatPARTNUM pada tabel berikut:

INPUT / OUTPUT:
 SELECT * FROM PARTNUM HARGA BAGIAN URAIAN =========== ==================== =========== 54 42 Kursi pedal 54,25 24,50 15,25 23 46 ban SEPEDA GUNUNG SEPEDA JALAN 350,45 76 530,00 10 1.200,00 76 Tandem SHOE CLIPPLESS 65,00 <-CATATAN SAME #

Anda menyelamatkan perusahaan Anda dari situasi yang buruk dengan memeriksa BAGIAN sebelum ada yang menggunakannya:

INPUT / OUTPUT:
  F. SELECT PARTNUM, F. URAIAN, 
  S. PARTNUM, S. URAIAN 
  BAGIAN DARI F, BAGIAN S 
  WHERE PARTNUM F. = S. PARTNUM 
  DAN F. URAIAN <> URAIAN S. 

     PARTNUM PARTNUM URAIAN URAIAN 
  ========== ======================== ======= ========= === 

          76 JALAN SEPEDA 76 SHOE CLIPPLESS 
          76 SHOE CLIPPLESS 76 JALAN SEPEDA 
ANALISIS:

Sekarang Anda adalah pahlawan sampai seseorang bertanya mengapa meja hanya memiliki dua entri. Anda, mengingat apa yang telah Anda pelajari tentang BERGABUNG s, pahlawan mempertahankan status Anda dengan menjelaskan bagaimana bergabung menghasilkan dua baris yang puas kondisi WHERE F. PARTNUM = S. PARTNUM DAN F. URAIAN <> S. URAIAN. Tentu saja, di beberapa titik, baris data yang berisi duplikat PARTNUM harus diperbaiki.

Ringkasan

Hari ini Anda belajar bahwa bergabung menggabungkan semua kombinasi yang mungkin hadir di baris tabel yang dipilih. Baris ini baru kemudian tersedia untuk seleksi berdasarkan informasi yang Anda inginkan.

Sumber ; http://www.webbasedprogramming.com