SQL Select tertanam

Tinggalkan komentar

Tujuan

Subquery adalah query yang hasilnya diteruskan sebagai argumen untuk permintaan lain. Subqueries memungkinkan Anda untuk beberapa pertanyaan mengikat. Pada akhir hari, Anda akan memahami dan dapat melakukan hal berikut:

  • Membangun sebuah subquery
  • Gunakan kata kunci yang ada, APAPUN, dan SEMUA dengan subqueries Anda
  • Membangun dan menggunakan subqueries berkorelasi

CATATAN: Contoh untuk pelajaran hari ini diciptakan dengan menggunakan Borland ISQL, pelaksanaan yang sama yang digunakan pada Hari 6, “Bergabung dengan Tabel.” Ingat, implementasi ini tidak menggunakan SQL> prompt atau nomor baris.


Membangun sebuah Subquery

Sederhananya, subquery memungkinkan Anda dasi hasil satu set query yang lain. Sintaks umum adalah sebagai berikut:

Sintaks:
  SELECT * 
  DARI TABLE1 
  WHERE TABLE1.SOMECOLUMN = 
  (SELECT SOMEOTHERCOLUMN 
  DARI TABLE2 
  WHERE SOMEOTHERCOLUMN = SOMEVALUE) 

Perhatikan bagaimana permintaan kedua adalah bersarang di dalam pertama. Berikut adalah contoh nyata dunia yang menggunakan tabel BAGIAN dan Pesanan:

INPUT:
  SELECT * 
  BAGIAN DARI
OUTPUT:
  PARTNUM URAIAN HARGA 
  =========== ==================== =========== 

           54 pedal 54,25 
           42 Kursi 24,50 
           46 Ban 15,25 
           23 SEPEDA GUNUNG 350,45 
           76 JALAN SEPEDA 530,00 
           10 Tandem 1.200,00
INPUT / OUTPUT:
 SELECT * FROM ORDEREDON NAMA PARTNUM KOMENTAR kuantitas pesanan =========== ========== =========== ========= == ======== 15-MAY-1996 WHEEL TRUE 23 6 DIBAYAR 19-MUNGKIN-WHEEL TRUE 1.996 76 3 DIBAYAR 2-September-1996 WHEEL TRUE 10 1 DIBAYAR 30-Juni-1996 WHEEL TRUE 42 8 DISETOR 30-JUN-1996 SEPEDA SPEC 54 10 DIBAYAR 30-MUNGKIN-1996 SEPEDA SPEC 10 2 DIBAYAR 30-MUNGKIN-1996 SEPEDA SPEC 23 8 DIBAYAR 17-JAN-1996 SEPEDA SPEC 76 11 DIBAYAR 17-JAN-1996 LE Shoppe 76 5 DISETOR 1-JUN-1996 LE Shoppe 10 3 DIBAYAR 1-Juni 1996 AAA SEPEDA-10 1 DIBAYAR 1-Juli-1996 SEPEDA AAA 76 4 DIBAYAR 1-Juli-1996 SEPEDA AAA 46 14 DIBAYAR 11-Juli-1996 SEPEDA Jacks 76 14 DISETOR
ANALISIS:

Tabel berbagi bidang umum yang disebut PARTNUM. Misalkan Anda tidak tahu (atau tidak mau tahu) yang PARTNUM, tapi ingin bekerja dengan gambaran bagian. Menggunakan subquery, Anda bisa mengetik ini:

INPUT / OUTPUT:
 SELECT * FROM Orders WHERE PARTNUM = SELECT PARTNUM (BAGIAN MANA DARI URAIAN SEPERTI "% JALAN") ORDEREDON PARTNUM KUANTITAS NAMA =========== ========== ==== KOMENTAR ======= =========== ======== 19-MAY-1996 WHEEL TRUE 76 3 DIBAYAR 17-JAN-1996 SEPEDA SPEC 76 11 DIBAYAR 17-JAN- 1996 LE Shoppe 76 5 DIBAYAR 1-Juli-1996 AAA SEPEDA 76 4 DIBAYAR 11-Juli-1996 SEPEDA Jacks 76 14 DISETOR
ANALISIS:

Bahkan lebih baik, jika Anda menggunakan konsep yang Anda pelajari pada Hari 6, Anda dapat meningkatkan kolom PARTNUM dalam hasilnya dengan termasuk URAIAN, membuat PARTNUM jelas bagi siapa saja yang belum hafal itu. Coba ini:

INPUT / OUTPUT:
  SELECT O. ORDEREDON, O. PARTNUM, 
  URAIAN P., O. KUANTITAS, O. KOMENTAR 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM 
  DAN 
  O. PARTNUM = 
  (SELECT PARTNUM 
  BAGIAN DARI 
  URAIAN SEPERTI MANA "% JALAN") 

    ORDEREDON PARTNUM KUANTITAS URAIAN KOMENTAR 
  =========== =========== ============ =========== ===== ==== 

  19-MAY-1996 76 SEPEDA JALAN 3 DISETOR 
   1-JUL-1996 76 SEPEDA JALAN 4 DISETOR 
  17-JAN-1996 76 JALAN SEPEDA 5 DISETOR 
  17-JAN-1996 76 11 SEPEDA JALAN DIBAYAR 
  11-JUL-1996 76 14 SEPEDA JALAN DIBAYAR 
ANALISIS:

Bagian pertama dari query sangat akrab:

  SELECT O. ORDEREDON, O. PARTNUM, 
  URAIAN P., O. KUANTITAS, O. KOMENTAR 
  DARI O pesanan, P BAGIAN 

Di sini Anda menggunakan alias O dan P untuk perintah tabel dan BAGIAN untuk memilih lima kolom Anda tertarik Dalam hal ini alias tidak diperlukan karena masing-masing kolom Anda diminta untuk kembali adalah unik. Namun, lebih mudah untuk membuat permintaan dibaca sekarang daripada harus mencari tahu nanti. WHERE klausa pertama yang Anda hadapi

  PARTNUM WHERE O. = P. PARTNUM 

adalah bahasa standar untuk bergabung tabel BAGIAN dan perintah yang ditetapkan dalam klausa FROM. Jika Anda tidak menggunakan klausa WHERE, Anda akan memiliki semua kombinasi baris kemungkinan dua meja. Bagian berikutnya berisi subquery itu. Pernyataan

  DAN 
  O. PARTNUM = 
  (SELECT PARTNUM 
  BAGIAN DARI 
  URAIAN SEPERTI MANA "% JALAN") 

Menambahkan O. PARTNUM kualifikasi yang harus sama dengan hasil dari subquery sederhana Anda. subquery adalah langsung, mencari semua nomor bagian yang SEPERTI "% JALAN".Penggunaan SEPERTI agak malas, tabungan Anda penekanan tombol yang dibutuhkan untuk jenis JALAN SEPEDA. Namun, ternyata Anda beruntung kali ini. Bagaimana jika seseorang di departemen Bagian telah menambahkan bagian baru yang disebut roadkill? Tabel BAGIAN revisi akan terlihat seperti ini:

INPUT / OUTPUT:
  SELECT * 
  BAGIAN DARI 

      PARTNUM URAIAN HARGA 
  =========== ==================== =========== 

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

Misalkan Anda tidak menyadari perubahan ini dan coba query Anda setelah ini produk baru telah ditambahkan. Jika Anda memasukkan ini:

  SELECT O. ORDEREDON, O. PARTNUM, 
  URAIAN P., O. KUANTITAS, O. KOMENTAR 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM 
  DAN 
  O. PARTNUM = 
  (SELECT PARTNUM 
  BAGIAN DARI 
  URAIAN SEPERTI MANA "% JALAN") 

mesin SQL mengeluh

  beberapa baris di pilih tunggal 

dan Anda tidak mendapatkan hasil apapun. Tanggapan dari mesin SQL Anda dapat berbeda, tetapi masih mengeluh dan kembali apa-apa. Untuk mengetahui mengapa Anda mendapatkan hasil yang tidak diinginkan, berperan sebagai mesin SQL. Anda mungkin akan mengevaluasi subquery yang pertama. Anda akan kembali ini:

INPUT / OUTPUT:
  SELECT PARTNUM 
  BAGIAN DARI 
  URAIAN SEPERTI MANA "% JALAN" 

      PARTNUM 
  =========== 

           76 
           77 

Anda akan mengambil hasil ini dan menerapkannya ke O. PARTNUM =, yang merupakan langkah yang menyebabkan masalah.

ANALISIS:

Bagaimana PARTNUM sama dengan baik 76 dan 77? Ini harus apa mesin maksudkan ketika itu menuduh Anda sebagai orang tolol. Bila Anda menggunakan klausa LIKE, Anda membuka diri untuk kesalahan ini. Ketika Anda menggabungkan hasil operator relasional dengan operator lainnya relasional, seperti =, <, atau>, Anda harus memastikan hasilnya adalah tunggal. Dalam kasus contoh kita telah menggunakan, solusi akan menulis ulang query menggunakan = bukan SEPERTI, seperti ini:

INPUT / OUTPUT:
 SELECT O. ORDEREDON, O. PARTNUM, P. URAIAN, O. KUANTITAS, O. KOMENTAR dari pesanan O, BAGIAN MANA PARTNUM O. P = P. PARTNUM DAN PARTNUM O. = (PARTNUM SELECT FROM WHERE BAGIAN URAIAN = "JALAN SEPEDA ) ORDEREDON PARTNUM KUANTITAS URAIAN KOMENTAR =========== =========== =============== ====== ===== ========== 19-MAY-1996 76 JALAN SEPEDA 3 DIBAYAR 1-Juli-1996 76 JALAN SEPEDA 4 DIBAYAR 17-JAN-1996 76 JALAN SEPEDA 5 DIBAYAR 17-JAN-1996 76 JALAN SEPEDA 11 DIBAYAR 11-Juli-1996 76 14 SEPEDA JALAN DIBAYAR
ANALISIS:

subquery ini hanya mengembalikan satu hasil yang unik, sehingga mempersempit = kondisi Anda ke nilai tunggal. Bagaimana Anda bisa yakin subquery tidak akan kembali beberapa nilai jika Anda mencari hanya satu nilai?

Menghindari penggunaan SEPERTI adalah memulai. Pendekatan lain adalah untuk memastikan keunikan kolom pencarian pada desain meja. Jika Anda adalah tipe untrusting, Anda bisa menggunakan metode (dijelaskan kemarin) untuk bergabung dengan meja untuk dirinya sendiri untuk memeriksa suatu bidang tertentu untuk keunikan. Jika Anda desain tabel sendiri (lihat Hari 9, “Menciptakan dan Mempertahankan Tabel”) atau percaya kepada orang yang merancang meja, Anda dapat memerlukan kolom yang Anda cari untuk memiliki nilai yang unik. Anda juga bisa menggunakan bagian dari SQL yang mengembalikan hanya satu jawaban: fungsi agregat.

Menggunakan Fungsi Agregat dengan Subqueries

Keseluruhan fungsi SUM, COUNT, MIN, MAX, dan AVG semua mengembalikan nilai tunggal. Untuk menemukan jumlah rata-rata pesanan, jenis ini:

INPUT:
  SELECT AVG (O. KUANTITAS * P. HARGA) 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM
OUTPUT:
 
  AVG 
  =========== 

      2.419,16 
ANALISIS:

Pernyataan ini mengembalikan hanya satu nilai. Untuk mengetahui yang berada di atas rata-rata perintah, gunakan perintah SELECT untuk subquery Anda sebelumnya. Permintaan lengkap dan hasil adalah sebagai berikut:

INPUT / OUTPUT:
  SELECT NAMA O. O., ORDEREDON, 
  KUANTITAS O. * P. HARGA TOTAL 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM 
  DAN 
  KUANTITAS O. * P. HARGA> 
  (SELECT AVG (O. KUANTITAS * P. HARGA) 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM) 

  NAMA ORDEREDON TOTAL 
  ========== =========== =========== 

  LE Shoppe 1-JUN-1996 3600,00 
  SEPEDA SPEC 30-MAY-1996 2.803,60 
  LE Shoppe 17-JAN-1996 2650,00 
  SEPEDA SPEC 17-JAN-1996 5830,00 
  Jacks SEPEDA 11-JUL-1996 7420,00 
ANALISIS:

Contoh ini berisi SELECT biasa-biasa saja agak / FROM / klausa WHERE:

  SELECT NAMA O. O., ORDEREDON, 
  KUANTITAS O. * P. HARGA TOTAL 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM 

Garis-garis ini merupakan cara yang umum untuk bergabung dengan kedua tabel. Bergabung ini diperlukan karena harga di BAGIAN dan kuantitas yang di perintah.. Para MANA memastikan bahwa Anda hanya memeriksa bergabung membentuk-baris yang berhubungan dengan Anda kemudian menambahkan subquery ini:

 KUANTITAS DAN HARGA O. * P.> (SELECT AVG (KUANTITAS O. * P. HARGA) dari pesanan O, P BAGIAN MANA PARTNUM O. = P. PARTNUM)

Kondisi sebelumnya membandingkan total setiap pesanan dengan rata-rata yang dihitung dalam subquery itu. Perhatikan bahwa bergabung dalam subquery diwajibkan untuk alasan yang sama seperti dalam laporan SELECT utama. Bergabung ini juga dibangun persis dengan cara yang sama. Ada rahasia jabat tangan di subqueries; mereka sintaks yang sama persis sebagai permintaan mandiri. Bahkan, kebanyakan subqueries dimulai sebagai pertanyaan mandiri dan digabungkan sebagai subqueries setelah hasil mereka diuji.

Bersarang Subqueries

Bersarang adalah tindakan embedding subquery di dalam subquery yang lain. Sebagai contoh:

  Pilih * DARI SESUATU WHERE (SUBQUERY (SUBQUERY (SUBQUERY))); 

Subqueries dapat diulang sedalam implementasi dari SQL memungkinkan Anda. Misalnya, untuk mengirim pemberitahuan spesial untuk pelanggan yang menghabiskan lebih dari jumlah rata-rata uang, Anda akan menggabungkan informasi dalam tabel PELANGGAN

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 

dengan versi yang dimodifikasi sedikit dari query yang digunakan untuk menemukan perintah di atas rata-rata:

INPUT / OUTPUT:
  PILIH SEMUA NAMA C., C. ALAMAT, C. NEGARA, C. ZIP 
  DARI PELANGGAN C 
  C. NAMA DI MANA 
  (SELECT NAMA O. 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM 
  DAN 
  KUANTITAS O. * P. HARGA> 
  (SELECT AVG (O. KUANTITAS * P. HARGA) 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM)) 

  ALAMAT NAMA NEGARA ZIP 
  ========== ========== ====== ========== 

  SEPEDA SPEC CPT 45.678 mendengarkan pengakuan dosa dan LA 
  Hometown Shoppe LE KS 54678 
  Jacks SEPEDA 24 Eglin FL 34567 
ANALISIS:

Berikut adalah melihat apa yang Anda minta. Di paling set tanda kurung, Anda akan menemukan pernyataan akrab:

  SELECT AVG (O. KUANTITAS * P. HARGA) 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM 

Hasil ini feed ke versi yang dimodifikasi sedikit dari klausa SELECT yang Anda gunakan sebelumnya:

 O. SELECT NAMA dari pesanan O, BAGIAN MANA PARTNUM O. P = P. PARTNUM DAN KUANTITAS O. * P. HARGA> (...)

Catatan klausa SELECT telah dimodifikasi untuk kembali satu kolom, NAMA, yang tidak begitu kebetulan, adalah sama dengan tabel PELANGGAN. Menjalankan laporan ini dengan sendirinya Anda mendapatkan:

INPUT / OUTPUT:
  O. SELECT NAME 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM 
  DAN 
  KUANTITAS O. * P. HARGA> 
  (SELECT AVG (O. KUANTITAS * P. HARGA) 
  DARI O pesanan, P BAGIAN 
  PARTNUM WHERE O. = P. PARTNUM) 

  NAMA 
  ========== 

  LE Shoppe 
  SEPEDA SPEC 
  LE Shoppe 
  SEPEDA SPEC 
  Jacks SEPEDA 
ANALISIS:

Kami hanya menghabiskan waktu beberapa mendiskusikan mengapa subqueries Anda harus mengembalikan hanya satu nilai. Alasannya permintaan ini dapat kembali lebih dari satu nilai menjadi jelas dalam sekejap.

Anda membawa hasil ini dengan pernyataan:

  C. SELECT NAMA, ALAMAT C., C. NEGARA, C. ZIP 
  DARI PELANGGAN C 
  C. NAMA DI MANA 

  (...) 
ANALISIS:

Dua baris pertama adalah biasa-biasa saja. Yang ketiga perkenalkan kembali kata kunci DALAM, terakhir terlihat pada Hari 2, “Pengantar Query: SELECT Pernyataan DI." Adalah alat yang memungkinkan Anda untuk menggunakan beberapa baris output dari subquery Anda. DI, seperti yang Anda ingat, mencari pertandingan berikut seperangkat nilai-nilai yang tertutup oleh tanda kurung, yang dalam hal ini menghasilkan nilai berikut:

  LE Shoppe 
  SEPEDA SPEC 
  LE Shoppe 
  SEPEDA SPEC 
  Jacks SEPEDA 

subquery ini menyediakan kondisi yang memberi Anda mailing list:

  ALAMAT NAMA NEGARA ZIP 
  ========== ========== ====== ====== 

  SEPEDA SPEC CPT mendengarkan pengakuan dosa dan LA 45678 
  Hometown Shoppe LE KS 54678 
  Jacks SEPEDA 24 Eglin FL 34567 

DI ini menggunakan sangat umum di subqueries. Karena DI menggunakan seperangkat nilai untuk perbandingan, ia tidak menyebabkan mesin SQL merasa berkonflik dan tidak memadai.

Subqueries juga dapat digunakan dengan klausa GROUP BY dan HAVING tersebut. Periksa query berikut:

INPUT / OUTPUT:
  SELECT NAMA, AVG (KUANTITAS) 
  Dari pesanan 
  GROUP BY NAME 
  HAVING AVG (KUANTITAS)> 
  (SELECT AVG (KUANTITAS) 
  Dari pesanan) 

  NAMA AVG 
  ========== =========== 

  SEPEDA 8 SPEC 
  Jacks SEPEDA 14 
ANALISIS:

Mari kita memeriksa permintaan ini dalam urutan mesin SQL akan. Pertama, lihatlah subquery ini:

INPUT / OUTPUT:
  SELECT AVG (KUANTITAS) 
  Dari pesanan 

          AVG 
  =========== 

            6 

Dengan sendirinya, pertanyaan adalah sebagai berikut:

INPUT / OUTPUT:
 SELECT NAMA, AVG (KUANTITAS) dari pesanan NAMA NAMA GROUP BY AVG =========== ========== AAA 6 SEPEDA SEPEDA SEPEDA SPEC 8 jack 14 LE Shoppe 4 WHEEL TRUE 5

Ketika dikombinasikan melalui klausa HAVING, subquery menghasilkan dua baris yang memiliki rata-rata di atas KUANTITAS.

INPUT / OUTPUT:
  HAVING AVG (KUANTITAS)> 
  (SELECT AVG (KUANTITAS) 
  Dari pesanan) 

  NAMA AVG 
  =========== ========== 

  SEPEDA 8 SPEC 
  Jacks SEPEDA 14 

Berkorelasi Subqueries

Para subqueries Anda tulis sejauh ini mandiri. Tak satu pun dari mereka telah menggunakan referensi dari luar subquery yang subqueries. Terkorelasi memungkinkan Anda untuk menggunakan referensi di luar dengan beberapa hasil yang aneh dan indah. Lihat pertanyaan berikut:

INPUT:
  SELECT * 
  DARI O Pesanan 
  WHERE 'JALAN SEPEDA' = 
  (SELECT URAIAN 
  BAGIAN DARI P 
  WHERE PARTNUM P. = O. PARTNUM)
OUTPUT:
  NAMA ORDEREDON KUANTITAS PARTNUM KOMENTAR 
  =========== ========== =========== =========== ======= === 

  19-MAY-1996 WHEEL TRUE 76 3 DISETOR 
  17-JAN-1996 SEPEDA SPEC 76 11 DISETOR 
  17-JAN-1996 LE Shoppe 76 5 DISETOR 
   1-JUL-1996 SEPEDA AAA 76 4 DISETOR 

  11-JUL-1996 jack SEPEDA 76 14 DISETOR 

Query ini benar-benar menyerupai JOIN berikut:

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

  19-MAY-1996 WHEEL TRUE 76 3 DISETOR 
   1-JUL-1996 SEPEDA AAA 76 4 DISETOR 
  17-JAN-1996 LE Shoppe 76 5 DISETOR 
  17-JAN-1996 SEPEDA SPEC 76 11 DISETOR 
  11-JUL-1996 jack SEPEDA 76 14 DISETOR 
ANALISIS:

Pada kenyataannya, kecuali perintah itu, hasilnya identik. The subquery berkorelasi bertindak sangat mirip dengan bergabung. korelasi dibentuk dengan menggunakan elemen dari query di subquery itu. Dalam contoh ini korelasi didirikan oleh pernyataan

  WHERE PARTNUM P. = O. PARTNUM 

di mana Anda membandingkan P. PARTNUM, dari tabel di dalam subquery Anda, untuk O. PARTNUM, dari meja luar query Anda. Karena O. PARTNUM dapat memiliki nilai yang berbeda untuk setiap baris, yang berkorelasi subquery dijalankan untuk setiap baris dalam query. Pada contoh berikut ini setiap baris dalam tabel Perintah

INPUT / OUTPUT:
  SELECT * 
  Dari pesanan 

    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 

diproses terhadap kriteria subquery:

  SELECT URAIAN 
  BAGIAN DARI P 
  WHERE PARTNUM P. = O. PARTNUM 
ANALISIS:

Operasi ini mengembalikan URAIAN setiap baris BAGIAN mana P. PARTNUM = O. PARTNUM. Penjelasan di atas kemudian dibandingkan dalam klausa WHERE:

 WHERE 'JALAN SEPEDA' =

Karena setiap baris adalah diperiksa, subquery dalam subquery berkorelasi dapat memiliki lebih dari satu nilai. Bagaimanapun, jangan mencoba kembali beberapa kolom atau kolom yang tidak membuat akal dalam konteks klausa WHERE. Nilai kembali masih harus menyesuaikan terhadap operasi yang ditetapkan dalam klausul WHERE. Misalnya, dalam query baru saja Anda lakukan,HARGA kembali untuk membandingkan dengan JALAN SEPEDA akan memiliki hasil sebagai berikut:

INPUT / OUTPUT:
  SELECT * 
  Hai DARI Pesanan 
  WHERE 'JALAN SEPEDA' = 
  (SELECT HARGA 
  BAGIAN DARI P 
  WHERE PARTNUM P. = O. PARTNUM) 

  kesalahan konversi dari string "JALAN SEPEDA" 

Berikut contoh lain dari sesuatu yang tidak boleh dilakukan:

  SELECT * 
  DARI O Pesanan 
  WHERE 'JALAN SEPEDA' = 
  (SELECT * 
  BAGIAN DARI P 
  WHERE PARTNUM P. = O. PARTNUM) 
ANALISIS:

SELECT ini menyebabkan Jenderal Perlindungan Fault pada sistem operasi Windows saya. Mesin SQL tidak bisa berhubungan semua kolom di BAGIAN dengan operator =.

subqueries terkorelasi juga dapat digunakan dengan GROUP BY dan HAVING klausa. Permintaan berikut menggunakan subquery berkorelasi untuk menemukan urutan total rata-rata untuk bagian tertentu dan kemudian menerapkan nilai rata-rata untuk menyaring total order dikelompokkan berdasarkan PARTNUM:

INPUT / OUTPUT:
  SELECT O. PARTNUM, SUM (O. KUANTITAS * P. HARGA), COUNT (PARTNUM) 
  DARI O pesanan, P BAGIAN 
  WHERE PARTNUM P. = O. PARTNUM 
  GROUP BY O. PARTNUM 
  HAVING SUM (O. KUANTITAS * P. HARGA)> 
  (SELECT AVG (O1.QUANTITY * P1.PRICE) 
  BAGIAN DARI P1, pesanan O1 
  WHERE P1.PARTNUM = O1.PARTNUM 
  DAN P1.PARTNUM = O. PARTNUM) 

      PARTNUM COUNT SUM 
  =========== =========== =========== 

           10 8.400,00 4 
           23 4.906,30 2 
           76 19.610,00 5 
ANALISIS:

subquery tidak hanya menghitung satu

  AVG (O1.QUANTITY * P1.PRICE) 

Karena hubungan antara permintaan dan subquery itu,

  DAN P1.PARTNUM = O. PARTNUM 

rata-rata ini dihitung untuk setiap kelompok bagian dan kemudian dibandingkan:

  HAVING SUM (O. KUANTITAS * P. HARGA)> 

TIP: Bila menggunakan subqueries berkorelasi dengan GROUP BY dan HAVING, kolom dalam klausa HAVING harus ada di klausa SELECT baik atau klausa GROUP BY. Jika tidak, Anda mendapatkan pesan kesalahan di sepanjang baris kolom referensi tidak valid karena subquery yang ditimbulkan untuk masing-masing kelompok, tidak setiap baris. Anda tidak dapat membuat perbandingan yang valid untuk sesuatu yang tidak digunakan dalam pembentukan kelompok.


Menggunakan ada, APAPUN, dan SEMUA

Penggunaan kata kunci yang ada, APAPUN, dan SEMUA tidak intuitif jelas bagi pengamat biasa. Ada mengambil subquery sebagai argumen dan mengembalikan TRUE jika kembali subquery apa saja dan FALSE jika set hasil kosong. Sebagai contoh:

INPUT / OUTPUT:
  SELECT NAMA, ORDEREDON 
  Dari pesanan 
  WHERE ada 
  (SELECT * 
  Dari pesanan 
  WHERE NAMA TRUE WHEEL '=') 

  NAMA ORDEREDON 
  ========== =========== 

  TRUE WHEEL 15-MAY-1996 
  TRUE WHEEL 19-MAY-1996 
  TRUE WHEEL 2-SEP-1996 
  TRUE WHEEL 30-JUN-1996 
  SEPEDA SPEC 30-JUN-1996 
  SEPEDA SPEC 30-MAY-1996 
  SEPEDA SPEC 30-MAY-1996 
  SEPEDA SPEC 17-JAN-1996 
  LE Shoppe 17-JAN-1996 
  LE Shoppe 1-JUN-1996 
  AAA SEPEDA 1-JUN-1996 
  AAA SEPEDA 1-JUL-1996 
  AAA SEPEDA 1-JUL-1996 
  Jacks SEPEDA 11-JUL-1996 
ANALISIS:

Bukan yang Anda harapkan. The subquery dalam ada dievaluasi hanya sekali dalam contoh ini berkorelasi. Karena kembali dari subquery memiliki setidaknya satu baris, ada mengevaluasi TRUEdan semua baris dalam query dicetak. Jika Anda mengubah subquery seperti yang ditunjukkan berikutnya, Anda tidak akan mendapatkan kembali hasil apapun.

 SELECT NAMA, ORDEREDON dari pesanan ada WHERE (SELECT * FROM Orders WHERE NAME = 'kebanyakan tidak berbahaya')
ANALISIS:

Ada dievaluasi ke FALSE. subquery tidak menghasilkan hasil yang disetel karena sebagian besar tidak berbahaya tidak salah satu nama Anda.


CATATAN: Perhatikan penggunaan * SELECT di dalam subquery tidak ada. Ada tidak peduli berapa banyak kolom dikembalikan.


Anda bisa menggunakan cara ini ada untuk memeriksa keberadaan baris tertentu dan mengontrol output dari query Anda berdasarkan apakah mereka ada.

Jika Anda menggunakan ada dalam subquery berkorelasi, itu dievaluasi untuk setiap kasus yang tersirat dalam hubungan kita atur. Sebagai contoh:

INPUT / OUTPUT:
  SELECT NAMA, ORDEREDON 
  DARI O Pesanan 
  WHERE ada 
  (SELECT * 
  DARI PELANGGAN C 
  MANA NEGARA 'NE =' 
  C. NAMA DAN = O. NAMA) 

  NAMA ORDEREDON 
  ========== =========== 

  TRUE WHEEL 15-MAY-1996 
  TRUE WHEEL 19-MAY-1996 
  TRUE WHEEL 2-SEP-1996 
  TRUE WHEEL 30-JUN-1996 
  AAA SEPEDA 1-JUN-1996 
  AAA SEPEDA 1-JUL-1996 
  AAA SEPEDA 1-JUL-1996 

Ini sedikit modifikasi pertama Anda, kembali permintaan berkorelasi semua toko sepeda dari Nebraska yang membuat perintah. The subquery berikut ini dijalankan untuk setiap baris dalam query berkorelasi pada nama PELANGGAN dan nama perintah:

 (SELECT * FROM PELANGGAN WHERE C NEGARA 'NE =' DAN NAMA C. = O. NAMA)
ANALISIS:

Ada adalah TRUE bagi mereka baris yang memiliki nama yang sesuai pada PELANGGAN berlokasi di NE. Jika tidak, ia mengembalikan FALSE.

Terkait erat dengan ada adalah kata kunci APAPUN, SEMUA, dan BEBERAPA dan. APAPUN BEBERAPA adalah identik dalam fungsi. Seorang yang optimis akan mengatakan fitur ini memberikan pengguna dengan pilihan. Seorang pesimis akan melihat kondisi ini sebagai satu lagi komplikasi. Lihatlah query ini:

INPUT:
  SELECT NAMA, ORDEREDON 
  Dari pesanan 
  WHERE NAME = APAPUN 
  (SELECT NAMA 
  Dari pesanan 
  WHERE NAMA TRUE WHEEL '=')
OUTPUT:
  NAMA ORDEREDON 
  ========== =========== 

  TRUE WHEEL 15-MAY-1996 
  TRUE WHEEL 19-MAY-1996 
  TRUE WHEEL 2-SEP-1996 
  TRUE WHEEL 30-JUN-1996 
ANALISIS:

APAPUN membandingkan output dari subquery berikut untuk tiap baris dalam query, kembali TRUE untuk setiap baris dari query yang memiliki hasil dari subquery itu.

  (SELECT NAMA 
  Dari pesanan 
  WHERE NAMA TRUE WHEEL '=') 

Mengganti APAPUN dengan BEBERAPA menghasilkan hasil yang sama:

INPUT / OUTPUT:
 SELECT NAMA, ORDEREDON dari pesanan WHERE NAME = BEBERAPA SELECT NAMA (dari perintah WHERE NAMA TRUE WHEEL '=') NAMA ORDEREDON ========== =========== TRUE WHEEL 15 - MUNGKIN-1996 WHEEL TRUE 19-MUNGKIN-1996 WHEEL TRUE 2-September-1996 WHEEL TRUE 30-Juni-1996
ANALISIS:

Anda mungkin telah memperhatikan kesamaan untuk DI. Permintaan yang sama menggunakan DI adalah sebagai berikut:

INPUT / OUTPUT:
  SELECT NAMA, ORDEREDON 
  Dari pesanan 
  DI MANA NAMA 
  (SELECT NAMA 
  Dari pesanan 
  WHERE NAMA TRUE WHEEL '=') 

  NAMA ORDEREDON 
  ========== =========== 

  TRUE WHEEL 15-MAY-1996 
  TRUE WHEEL 19-MAY-1996 
  TRUE WHEEL 2-SEP-1996 
  TRUE WHEEL 30-JUN-1996 
ANALISIS:

Seperti yang Anda lihat, DALAM mengembalikan hasil yang sama seperti APAPUN dan BEBERAPA. Apakah dunia sudah gila? Belum. Dapat DALAM melakukan ini?

INPUT / OUTPUT:
  SELECT NAMA, ORDEREDON 
  Dari pesanan 
  WHERE NAMA> APAPUN 
  (SELECT NAMA 
  Dari pesanan 
  WHERE NAMA Jacks SEPEDA '=') 

  NAMA ORDEREDON 
  ========== =========== 

  TRUE WHEEL 15-MAY-1996 
  TRUE WHEEL 19-MAY-1996 
  TRUE WHEEL 2-SEP-1996 
  TRUE WHEEL 30-JUN-1996 
  LE Shoppe 17-JAN-1996 
  LE Shoppe 1-JUN-1996 

Jawabannya adalah tidak. DI bekerja seperti beberapa sama dan. APAPUN BEBERAPA dapat digunakan dengan operator relasional lain seperti lebih besar dari atau kurang dari. Tambahkan tool ini untuk kit Anda.

ALL TRUE kembali hanya jika semua hasil subquery sebuah memenuhi kondisi tersebut. Anehnya, SEMUA paling sering digunakan sebagai ganda negatif, seperti dalam query ini:

INPUT / OUTPUT:
  SELECT NAMA, ORDEREDON 
  Dari pesanan 
  WHERE NAMA <> SEMUA 
  (SELECT NAMA 
  Dari pesanan 
  WHERE NAMA Jacks SEPEDA '=') 

  NAMA ORDEREDON 
  ========== =========== 

  TRUE WHEEL 15-MAY-1996 
  TRUE WHEEL 19-MAY-1996 
  TRUE WHEEL 2-SEP-1996 
  TRUE WHEEL 30-JUN-1996 
  SEPEDA SPEC 30-JUN-1996 
  SEPEDA SPEC 30-MAY-1996 
  SEPEDA SPEC 30-MAY-1996 
  SEPEDA SPEC 17-JAN-1996 
  LE Shoppe 17-JAN-1996 
  LE Shoppe 1-JUN-1996 
  AAA SEPEDA 1-JUN-1996 
  AAA SEPEDA 1-JUL-1996 
  AAA SEPEDA 1-JUL-1996 
ANALISIS:

Ini semua orang kembali pernyataan kecuali jack SEPEDA>. <SEMUA mengevaluasi TRUE hanya jika set hasilnya tidak mengandung apa yang ada di kiri> <.

Ringkasan

Hari ini Anda melakukan latihan yang melibatkan puluhan subqueries. Anda belajar bagaimana menggunakan salah satu bagian yang paling penting dari SQL. Anda juga menangani salah satu bagian yang paling sulit dari SQL: sebuah subquery berkorelasi. The subquery berkorelasi menciptakan hubungan antara permintaan dan subquery yang dievaluasi untuk setiap instance dari hubungan itu. Jangan terintimidasi oleh panjang query. Anda dapat dengan mudah memeriksa mereka satu subquery pada satu waktu.

Iklan

SQL Gabung tabel

Tinggalkan komentar

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

SQL Klausa

Tinggalkan komentar

Tujuan

di topik Hari ini klausa – bukan jenis yang mendistribusikan menyajikan selama liburan, tapi yang Anda gunakan dengan perintah SELECT. Pada akhir hari Anda akan memahami dan dapat menggunakan klausa berikut:

  • WHERE
  • DENGAN STARTING
  • ORDER BY
  • GROUP BY
  • HAVING

Untuk mendapatkan merasakan di mana fungsi ini cocok, memeriksa sintaks umum untuk perintah SELECT:

Sintaks:
 SELECT [berbeda | ALL] (* | [(skema.] (Tabel | view | snapshot) .* | expr) [[AS] c_alias] [, ([skema.] (Tabel | view | snapshot) .* | expr ) [[AS] c_alias]] ...  DARI) [(skema.] Tabel | melihat | snapshot) [@ dblink] [t_alias] [, skema [(.] Tabel | melihat | snapshot) [@ dblink] [t_alias]] ... [WHERE kondisi] [GROUP BY expr [,] expr ...  [HAVING kondisi]] [(UNI | UNI SEMUA | INTERSECT | MINUS) perintah SELECT] [ORDER BY (expr | posisi) [ASC | DESC] [, (expr | posisi) [ASC | DESC]] ...]

CATATAN: Dalam pengalaman saya dengan SQL, standar ANSI benar-benar lebih dari ANSI “saran.” Sintaks sebelumnya biasanya akan bekerja dengan mesin SQL, namun Anda dapat menemukan beberapa variasi sedikit.

CATATAN: Anda belum harus berhadapan dengan diagram sintaks rumit. Karena banyak orang menemukan diagram sintaks lebih membingungkan daripada menerangi ketika belajar sesuatu yang baru, buku ini telah menggunakan contoh-contoh sederhana untuk mengilustrasikan poin tertentu. Namun, kita sekarang pada titik di mana sebuah diagram sintaks dapat membantu mengikat konsep-konsep materi baru dikenal hari ini.


Jangan khawatir tentang sintaks yang tepat – itu bervariasi sedikit dari implementasi untuk pelaksanaan pula. Sebaliknya, berfokus pada hubungan. Di bagian atas pernyataan ini adalah SELECT,yang telah digunakan berkali-kali dalam beberapa hari terakhir. SELECT diikuti oleh DARI, yang harus muncul dengan setiap pernyataan SELECT Anda ketik. (Anda belajar kegunaan baru untuk besok DARI WHERE.), GROUP BY, HAVING, ORDER BY dan semua mengikuti. (The klausa lain dalam diagram – UNION, UNION ALL, INTERSECT, dan MINUS – tertutup di Hari 3, “Ekspresi, Kondisi, dan Operator.”) Setiap klausul memainkan peran penting dalam memilih dan memanipulasi data.


CATATAN: Kami telah menggunakan dua implementasi dari SQL untuk mempersiapkan’s contoh hari ini. Satu implementasi memiliki SQL> prompt dan nomor baris (Personal Oracle7), dan yang lainnya (Borland ISQL) tidak. Anda juga akan melihat bahwa menampilkan output sedikit berbeda, tergantung pada pelaksanaannya.


The WHERE Klausul

Menggunakan hanya SELECT dan FROM, Anda dibatasi untuk kembali setiap baris dalam sebuah tabel. Contohnya, dengan menggunakan dua kata kunci di meja cek, Anda mendapatkan semua tujuh baris:

INPUT:
  SQL> SELECT * 
   2 dari pemeriksaan;
OUTPUT:
  JUMLAH PERIKSA Penerima Pembayaran # KOMENTAR 
  -------- -------------------- -------- -------------- ---- 
         1 Ma Bell 150 Apakah anak kali 
         2 Membaca RR 245,34 Kereta ke Chicago 
         3 Ma Bell 200,32 Telepon Seluler 
         4 Lokal Utilitas Gas 98 
         5 Joes $ Dent 150 Groceries basi 
        16 Kas 25 Wild Night Out 
        17 Joans Gas Gas 25,1 
 
  7 baris yang dipilih. 

Dengan WHERE dalam kosakata Anda, Anda dapat lebih selektif. Untuk menemukan semua cek yang Anda tulis dengan yang bernilai lebih dari 100 dolar, tulis ini:

INPUT:
  SQL> SELECT * 
    2 dari pemeriksaan 
    3 WHERE JUMLAH> 100; 

Klausa WHERE mengembalikan empat kasus dalam tabel yang memenuhi kondisi yang diperlukan:

OUTPUT:
  JUMLAH PERIKSA Penerima Pembayaran # KOMENTAR 
  -------- -------------------- -------- -------------- ---- 
         1 Ma Bell 150 Apakah anak kali 
         2 Membaca RR 245,34 Kereta ke Chicago 
         3 Ma Bell 200,32 Telepon Seluler 
         5 Joes $ Dent 150 Groceries basi 

MANA juga dapat memecahkan teka-teki populer lainnya. Dengan tabel berikut nama dan lokasi, Anda dapat meminta pertanyaan populer, mana Waldo?

INPUT:
  SQL> SELECT * 
   2 DARI PUZZLE;
OUTPUT:
  NAMA LOKASI 
  -------------- -------------- 
  TYLER Backyard 
  DAPUR UTAMA 
  RUANG HIDUP SPEEDY 
  WALDO GARASI 
  Cung UTILITAS Closet 
  ARNOLD TV RUANG 
 
  6 baris yang dipilih. 
INPUT:
  SQL> SELECT LOKASI SEBAGAI "WHERE'S WALDO?" 
    2 DARI PUZZLE 
   3 WHERE NAME 'WALDO =';
OUTPUT:
  WHERE'S WALDO? 
  -------------- 
  GARASI 

Maaf, kami tidak bisa menahan diri. Kami berjanji tidak ada permintaan yang lebih dangkal. (Kami menyelamatkan orang-orang untuk itu SQL humor kamar mandi semua buku lama ingin.) Namun demikian, pertanyaan ini menunjukkan bahwa kolom yang digunakan dalam kondisi laporan WHERE tidak harus disebutkan di klausa SELECT. Dalam contoh ini Anda memilih kolom lokasi tetapi digunakan WHERE pada nama, yang sempurna hukum. Juga perhatikan SA pada baris SELECT. SA operator tugas opsional, menempatkan alias WHERE'S WALDO.? Untuk LOKASI Anda mungkin tidak pernah melihat AS lagi, karena melibatkan mengetik ekstra. Dalam sebagian besar implementasi dari SQL Anda dapat mengetik

INPUT:
  SQL> SELECT LOKASI "WHERE'S WALDO?" 
   2 DARI PUZZLE 
   3 WHERE NAME 'WALDO ='; 

dan mendapatkan hasil yang sama dengan permintaan sebelumnya tanpa menggunakan SA:

OUTPUT:
  WHERE'S WALDO? 
  -------------- 
  GARASI 

Setelah SELECT dan FROM, WHERE adalah yang ketiga yang paling sering digunakan istilah SQL.

The DENGAN STARTING Klausul

MEMULAI DENGAN merupakan tambahan untuk klausa WHERE yang bekerja sama persis seperti SEPERTI (<exp>%). Bandingkan hasil query berikut:

INPUT:
  SELECT penerima pembayaran, AMOUNT, KOMENTAR 
  DARI Cek 
  SEPERTI MANA Penerima Pembayaran ('% Ca');
OUTPUT:
  Penerima Pembayaran JUMLAH KOMENTAR 
  ==================== =============== ============== 
  Kas Wild Night Out 25 
  Kas 60 Perjalanan ke Boston 
  Kas 34 Perjalanan ke Dayton 

dengan hasil dari query ini:

INPUT:
 SELECT penerima pembayaran, AMOUNT, KOMENTAR DARI Cek WHERE DENGAN STARTING penerima pembayaran ('Ca');
OUTPUT:
  Penerima Pembayaran JUMLAH KOMENTAR 
  ==================== =============== ============== 
  Kas Wild Night Out 25 
  Kas 60 Perjalanan ke Boston 
  Kas 34 Perjalanan ke Dayton 

Hasilnya identik. Anda bahkan dapat menggunakannya bersama-sama, seperti yang ditunjukkan di sini:

INPUT:
  SELECT penerima pembayaran, AMOUNT, KOMENTAR 
  Dari pemeriksaan 
  MANA MEMULAI DENGAN Penerima Pembayaran ('Ca') 
  ATAU 
  KOMENTAR G% 'SEPERTI';
OUTPUT:
  Penerima Pembayaran JUMLAH KOMENTAR 
  ==================== =============== =============== 
  98 Lokal Utilitas Gas 
  Joes $ Dent 150 Groceries basi 
  Kas Wild Night Out 25 
  Joans Gas Gas 25,1 
  Kas 60 Perjalanan ke Boston 
  Kas 34 Perjalanan ke Dayton 
  Joans Gas Gas 15,75 

PERINGATAN: MEMULAI DENGAN adalah fitur umum dari banyak implementasi dari SQL. Periksa pelaksanaan sebelum Anda tumbuh menyukainya.


Order dari Chaos: The ORDER BY Ayat

Dari waktu ke waktu Anda akan ingin menampilkan hasil query Anda dalam beberapa jenis urutan. Seperti yang Anda tahu, bagaimanapun, SELECT DARI memberi Anda daftar, dan kecuali Anda telah mendefinisikan kunci primer (lihat Hari ke-10, “Membuat Tampilan dan Indeks”), pertanyaan Anda keluar sesuai urutan baris yang dimasukkan. Pertimbangkan up cek meja ditingkatkan:

INPUT:
  SQL> SELECT * FROM Cek;
OUTPUT:
  JUMLAH PERIKSA Penerima Pembayaran # KOMENTAR 
  -------- -------------------- -------- -------------- ---- 
         1 Ma Bell 150 Apakah anak kali 
         2 Membaca RR 245,34 Kereta ke Chicago 
         3 Ma Bell 200,32 Telepon Seluler 
         4 Lokal Utilitas Gas 98 
         5 Joes $ Dent 150 Groceries basi 
        16 Kas 25 Wild Night Out 
        17 Joans Gas Gas 25,1 
         9 Abes Cleaners 24,35 X-Tra Pati        
        20 Abes Cleaners 10,5 Semua Kering Bersih 
         8 Kas 60 Perjalanan ke Boston 
        21 Kas 34 Trip to Dayton 
  11 baris yang dipilih. 
ANALISIS:

Kau harus percaya padaku untuk yang satu ini, tapi urutan output adalah urutan yang sama persis seperti urutan data yang dimasukkan. Setelah Anda membaca Hari 8, “Memanipulasi Data,” dan tahu cara menggunakan INSERT untuk membuat tabel, Anda dapat menguji bagaimana data disusun menurut standar Anda sendiri.

Klausa ORDER BY memberi Anda cara memesan hasil Anda. Misalnya, untuk memesan sebelumnya oleh pencatatan nomor cek, Anda akan menggunakan klausa ORDER BY berikut:

INPUT:
  SQL> SELECT * 
    2 dari pemeriksaan 
    3 ORDER BY PERIKSA #;
OUTPUT:
  JUMLAH PERIKSA Penerima Pembayaran # KOMENTAR 
  -------- -------------------- -------- -------------- ---- 
         1 Ma Bell 150 Apakah anak kali 
         2 Membaca RR 245,34 Kereta ke Chicago 
         3 Ma Bell 200,32 Telepon Seluler 
         4 Lokal Utilitas Gas 98 
         5 Joes $ Dent 150 Groceries basi 
         8 Kas 60 Perjalanan ke Boston 
         9 Abes Cleaners 24,35 X-Tra Pati 
        16 Kas 25 Wild Night Out 
        17 Joans Gas Gas 25,1 
        20 Abes Cleaners 10,5 Semua Kering Bersih 
        21 Kas 34 Trip to Dayton 
 
  11 baris yang dipilih. 

Sekarang data yang memerintahkan yang Anda inginkan, bukan cara yang dimasukkan;. Sebagai contoh berikut menunjukkan, ORDER membutuhkan OLEH OLEH tidak opsional.

INPUT / OUTPUT:
  SQL SELECT *> FROM Cek ORDER PERIKSA #; 

  SELECT * FROM # PERIKSA Cek ORDER 
                             * 
  ERROR pada baris 1: 
  ORA-00924: Kata kunci hilang BY 

Bagaimana jika Anda ingin daftar data dalam urutan terbalik, dengan jumlah tertinggi atau huruf pertama? Anda beruntung! Permintaan berikut menghasilkan daftar penerima pembayaran yang bintang s pada akhir abjad:

INPUT / OUTPUT:
  SQL> SELECT * 
  2 dari pemeriksaan 
  3 ORDER BY DESC penerima pembayaran; 

    JUMLAH PERIKSA Penerima Pembayaran # KOMENTAR 
  -------- -------------------- -------- -------------- ---- 
         2 Membaca RR 245,34 Kereta ke Chicago 
         1 Ma Bell 150 Apakah anak kali 
         200,32 3 Ma Bell Telepon Seluler 
         4 Lokal Utilitas Gas 98 
         5 Joes $ Dent 150 Groceries basi 
        17 Joans Gas Gas 25,1 
        16 Kas 25 Wild Night Out 
         8 Kas 60 Perjalanan ke Boston 
        21 Kas 34 Trip to Dayton 
         9 Abes Cleaners 24,35 X-Tra Pati 
        20 Abes Cleaners 10,5 Semua Kering Bersih 

  11 baris yang dipilih. 
ANALISIS:

The DESC pada akhir perintah ORDER BY klausa daftar dalam urutan bukan default (menaik) pesanan. Yang jarang digunakan, ASC kata kunci opsional muncul dalam pernyataan berikut:

INPUT:
  SQL> SELECT Penerima Pembayaran, JUMLAH 
    2 dari pemeriksaan 
   3 PERIKSA # ORDER BY ASC;
OUTPUT:
  JUMLAH Penerima Pembayaran 
  -------------------- --------- 
  Ma Bell 150 
  Membaca RR 245,34 
  200,32 Ma Bell 
  Utilitas Lokal 98 
  Joes basi $ Dent 150 
  60 Kas 
  Abes Cleaners 24,35 
  25 Kas 
  Joans Gas 25,1 
  Abes 10,5 Cleaners 
  34 Kas 

  11 baris yang dipilih. 
ANALISIS:

Urutan dalam daftar ini adalah identik dengan memesan dari daftar di awal bagian (tanpa asc) karena ASC adalah default. Query ini juga menunjukkan bahwa ekspresi yang digunakan setelah klausa ORDER BY tidak harus berada di pernyataan SELECT. Meskipun Anda hanya memilih penerima pembayaran dan JUMLAH, Anda masih dapat memesan daftar oleh PERIKSA #.

Anda juga dapat menggunakan ORDER BY pada lebih dari satu lapangan. Untuk memesan cek oleh penerima pembayaran dan KOMENTAR, Anda akan query sebagai berikut:

INPUT:
  SQL> SELECT * 
    2 dari pemeriksaan 
    3 ORDER BY penerima pembayaran, KOMENTAR;
OUTPUT:
  JUMLAH PERIKSA Penerima Pembayaran # KOMENTAR 
  -------- -------------------- -------- -------------- ---- 
        20 Abes Cleaners 10,5 Semua Kering Bersih 
         9 Abes Cleaners 24,35 X-Tra Pati 
         8 Kas 60 Perjalanan ke Boston 
        21 Kas 34 Trip to Dayton 
        16 Kas 25 Wild Night Out 
        17 Joans Gas Gas 25,1 
         5 Joes $ Dent 150 Groceries basi 
         98 4 Lokal Utilitas Gas 
         3 Ma Bell 200,32 Telepon Seluler 
         1 Ma Bell 150 Apakah anak kali 
         2 Membaca RR 245,34 Kereta ke Chicago 
ANALISIS:

Perhatikan entri untuk Kas di kolom penerima pembayaran. Dalam DENGAN ORDER sebelumnya, PERIKSA yang #berada di dalam, urutan 16 21 8. Menambahkan KOMENTAR lapangan ke klausaORDER BY meletakkan entri dalam urutan abjad menurut KOMENTAR. Apakah urutan beberapa kolom pada klausa ORDER BY membuat perbedaan? Coba permintaan yang sama lagi, tapi sebaliknyapenerima pembayaran dan KOMENTAR:

INPUT:
  SQL> SELECT * 
    2 dari pemeriksaan 
   3 ORDER BY KOMENTAR, penerima pembayaran;
OUTPUT:
  JUMLAH PERIKSA Penerima Pembayaran # KOMENTAR 
  -------- -------------------- -------- -------------- ------ 
        20 Abes Cleaners 10,5 Semua Kering Bersih 
         3 Ma Bell 200,32 Telepon Seluler 
        17 Joans Gas Gas 25,1 
         4 Lokal Utilitas Gas 98 
         5 Joes $ Dent 150 Groceries basi 
         1 Ma Bell 150 Apakah anak kali 
         2 Membaca RR 245,34 Kereta ke Chicago 
         8 Kas 60 Perjalanan ke Boston 
        21 Kas 34 Trip to Dayton 
        16 Kas 25 Wild Night Out 
         9 Abes Cleaners 24,35 X-Tra Pati 

  11 baris yang dipilih. 
ANALISIS:

Seperti yang mungkin Anda duga, hasilnya sama sekali berbeda. Berikut adalah cara daftar satu kolom dalam urutan abjad dan daftar kolom kedua dalam urutan abjad terbalik:

INPUT / OUTPUT:
 SQL SELECT *> 2 dari pemeriksaan 3 ORDER BY ASC penerima pembayaran, KOMENTAR DESC; PERIKSA # JUMLAH penerima pembayaran KOMENTAR -------- -------------------- - ------- ------------------ 9 Abes Cleaners 24,35 Pati X-Tra 20 Abes Cleaners 10,5 Semua Bersih Kering 16 Kas 25 Wild Night Out 21 Kas 34 Trip untuk Dayton 8 Kas 60 Perjalanan ke Boston 17 Joans Gas Gas 5 Joes 25,1 basi $ Dent 150 Groceries 4 Lokal Utilitas Gas 98 1 Ma Bell 150 Apakah anak waktu berikutnya 3 Ma Bell Telepon Seluler 200,32 2 Reading RR 245,34 Kereta ke Chicago 11 baris yang dipilih.
ANALISIS:

Dalam contoh ini adalah penerima pembayaran diurutkan menurut abjad, dan KOMENTAR muncul dalam urutan. Perhatikan bagaimana komentar dalam tiga cek dengan penerima pembayaran Kas diurut.


TIP: Jika Anda tahu bahwa kolom yang Anda ingin memesan hasil Anda dengan merupakan kolom pertama dalam tabel, kemudian Anda dapat mengetik ORDER BY 1 di tempat mengeja nama kolom. Lihat contoh berikut.


INPUT / OUTPUT:
  SQL> SELECT * 
   2 dari pemeriksaan 
    3 ORDER BY 1; 

    JUMLAH PERIKSA Penerima Pembayaran # KOMENTAR 
  -------- -------------------- -------- -------------- ---- 
         1 Ma Bell 150 Apakah anak kali 
         2 Membaca RR 245,34 Kereta ke Chicago 
         3 Ma Bell 200,32 Telepon Seluler 
         4 Lokal Utilitas Gas 98 
         5 Joes $ Dent 150 Groceries basi 
         8 Kas 60 Perjalanan ke Boston 
         9 Abes Cleaners 24,35 X-Tra Pati 
        16 Kas 25 Wild Night Out 
        17 Joans Gas Gas 25,1 
        20 Abes Cleaners 10,5 Semua Dry Clean 
        21 Kas 34 Trip to Dayton 

  11 baris yang dipilih. 
ANALISIS:

Hasil ini identik dengan hasil yang dihasilkan oleh pernyataan SELECT yang Anda gunakan sebelumnya hari ini:

  SELECT * FROM ORDER cek melalui PERIKSA #; 

The GROUP BY Klausa

Pada Hari 3 Anda belajar bagaimana menggunakan fungsi agregat (COUNT, SUM, AVG, MIN, dan MAX). Jika Anda ingin menemukan jumlah total uang yang dikeluarkan dari cek meja berubah sedikit, Anda akan ketik:

INPUT:
  SELECT * 
  Dari pemeriksaan; 

Berikut ini tabel diubah:

OUTPUT:
  JUMLAH KOMENTAR CHECKNUM Penerima Pembayaran 
  ======== =========== =============== ================ ====== 

         1 Ma Bell 150 Apakah anak kali 
         2 Membaca RR 245,34 Kereta ke Chicago 
         3 Ma Bell 200,33 Telepon Seluler 
         4 Lokal Utilitas Gas 98 
         5 Joes $ Dent 150 Groceries basi 
        16 Kas 25 Wild Night Out 
        17 Joans Gas Gas 25,1 
         9 Abes Cleaners 24,35 X-Tra Pati 
        20 Abes Cleaners 10,5 Semua Kering Bersih 
         8 Kas 60 Perjalanan ke Boston 
        21 Kas 34 Trip to Dayton 
        30 Lokal Utilitas 87,5 Air 
        31 Lokal Utilitas Sewer 34 
        25 Joans Gas Gas 15,75 

Kemudian Anda akan ketik:

INPUT / OUTPUT:
  SELECT SUM (JUMLAH) 
  Dari pemeriksaan; 

              SUM 
  =============== 

          1.159,87 
ANALISIS:

pernyataan ini mengembalikan jumlah kolom JUMLAH. Bagaimana jika Anda ingin mengetahui berapa banyak Anda telah menghabiskan waktu pada masing-masing penerima pembayaran? SQL membantu Anda dengan klausa GROUP BY. Untuk mengetahui siapa Anda telah membayar dan berapa banyak, permintaan Anda akan seperti ini:

INPUT / OUTPUT:
  SELECT penerima pembayaran, SUM (JUMLAH) 
  Dari pemeriksaan 
  GROUP BY Penerima Pembayaran; 

  Penerima Pembayaran SUM 
  ==================== =============== 

  Abes Cleaners 34.849998 
  Kas 119 
  Gas Joans 40.849998 
  Joes basi $ Dent 150 
  Lokal Utilitas 219,5 
  Ma Bell 350,33002 
  Membaca RR 245,34 
ANALISIS:

Klausa SELECT memiliki pilihan kolom normal, penerima, diikuti dengan agregat fungsi SUM (JUMLAH). Jika Anda telah mencoba query ini dengan hanya cek dari yang berikut, inilah yang akan Anda lihat:

INPUT / OUTPUT:
  SELECT penerima pembayaran, SUM (JUMLAH) 
  Dari pemeriksaan; 

  Dynamic SQL Error 
  -SQL error code = -104 
  -Kolom referensi tidak valid 
ANALISIS:

SQL mengeluh tentang kombinasi kolom normal dan fungsi agregat. Kondisi ini mengharuskan BY klausa GROUP BY. GROUP menjalankan fungsi agregat yang dijelaskan dalam laporan SELECTuntuk setiap pengelompokan kolom yang mengikuti klausa GROUP BY. Memeriksa kembali 14 baris tabel ketika query dengan SELECT DARI * cek. Permintaan di meja yang sama, SELECT penerima pembayaran, SUM (JUMLAH) FROM GROUP BY penerima pembayaran cek, mengambil 14 baris dalam tabel dan membuat tujuh kelompok, mengembalikan SUM pengelompokan masing-masing.

Misalnya, Anda ingin tahu berapa banyak yang Anda berikan kepada siapa dengan cek banyak caranya. Dapatkah Anda menggunakan lebih dari satu fungsi agregat?

INPUT / OUTPUT:
 SELECT penerima pembayaran, SUM (AMOUNT), COUNT (penerima pembayaran) dari pemeriksaan GROUP BY penerima pembayaran; COUNT SUM ==================== ========= Penerima Pembayaran ====== =========== Abes Cleaners 34.849998 2 Kas 119 3 Joans Gas 40,849998 2 Joes $ basi Dent 150 1 Utilitas Lokal 219,5 3 Ma Bell 350,33002 2 Reading RR 1 245,34
ANALISIS:

SQL ini semakin berguna! Dalam contoh sebelumnya, anda mampu melakukan fungsi kelompok pada kelompok-kelompok yang unik dengan menggunakan klausa GROUP BY. Juga perhatikan bahwa hasil diperintahkan oleh penerima pembayaran OLEH. KELOMPOK juga bertindak seperti klausa ORDER BY. Apa yang akan terjadi jika Anda mencoba ke grup oleh lebih dari satu kolom?Coba ini:

INPUT / OUTPUT:
  SELECT penerima pembayaran, SUM (JUMLAH), COUNT (Penerima Pembayaran) 
  Dari pemeriksaan 
  GROUP BY penerima pembayaran, KOMENTAR; 

  Penerima Pembayaran COUNT SUM 
  ==================== =============== =========== 

  Abes Cleaners 10,5 1 
  Abes Cleaners 24,35 1 
  Kas 60 1 
  Kas 34 1 
  Kas 25 1 
  Gas Joans 40.849998 2 
  Joes basi $ Dent 150 1 
  Utilitas Lokal 98 1 
  Utilitas Lokal 34 1 
  Utilitas Lokal 87,5 1 
  200,33 1 Ma Bell 
  Ma Bell 150 1 
  Membaca RR 1 245,34 
ANALISIS:

Outputnya sudah dari 7 kelompok dari 14 baris menjadi 13 kelompok. Apa yang berbeda tentang pengelompokan satu dengan lebih dari satu cek terkait dengannya? Lihat entri untuk Joans Gas:

INPUT / OUTPUT:
  SELECT Penerima Pembayaran, KOMENTAR 
  DARI Cek 
  MANA Penerima Pembayaran Joans Gas '='; 

  Penerima Pembayaran KOMENTAR 
  ==================== ==================== 

  Joans Gas 
  Joans Gas 
ANALISIS:

Anda lihat bahwa kombinasi penerima dan menciptakan entitas KOMENTAR identik, yang SQL kelompok bersama menjadi satu baris dengan klausa GROUP BY. Deretan lain menghasilkan kombinasi unik dari penerima dan KOMENTAR dan ditugaskan unik kelompok mereka sendiri.

Contoh berikut ini menemukan jumlah terbesar dan terkecil, dikelompokkan berdasarkan KOMENTAR:

INPUT / OUTPUT:
  SELECT MIN (JUMLAH), MAX (JUMLAH) 
  Dari pemeriksaan 
  KOMENTAR GROUP BY; 

              MIN MAX 
  =============== =============== 

           245,34 245,34 
             10,5 10,5 
           200,33 200,33 
            15,75 98 
              150 150 
              150 150 
               34 34 
               60 60 
               34 34 
             87,5 87,5 
               25 25 
            24,35 24,35 

Berikut ini apa yang akan terjadi jika Anda mencoba untuk memasukkan dalam laporan pilih kolom yang memiliki beberapa nilai yang berbeda dalam kelompok yang dibentuk oleh GROUP BY:

INPUT / OUTPUT:
  SELECT penerima pembayaran, MAX (JUMLAH), MIN (JUMLAH) 
  Dari pemeriksaan 
  KOMENTAR GROUP BY; 

  Dynamic SQL Error 
  -SQL error code = -104 
  -Kolom referensi tidak valid 
ANALISIS:

Query ini mencoba untuk cek kelompok oleh KETERANGAN. Ketika pertanyaan menemukan dua catatan dengan KETERANGAN yang sama tetapi s penerima pembayaran yang berbeda, seperti baris yang telah GAS sebagai KETERANGAN tetapi memiliki s penerima pembayaran dari LOKAL Utilitas dan JOANS GAS, itu melempar kesalahan.

Peraturannya adalah, Jangan gunakan SELECT pada kolom yang memiliki beberapa nilai untuk kolom klausa GROUP BY. sebaliknya tidak benar. Anda dapat menggunakan GROUP BY pada kolom tidak disebutkan dalam pernyataan SELECT. Sebagai contoh:

INPUT / OUTPUT:
  SELECT penerima pembayaran, COUNT (JUMLAH) 
  Dari pemeriksaan 
  GROUP BY penerima pembayaran, AMOUNT; 

  COUNT Penerima Pembayaran 
  ==================== =========== 

  Abes Cleaners 1 
  Abes Cleaners 1 
  Kas 1 
  Kas 1 
  Kas 1 
  Joans Gas 1 
  Joans Gas 1 
  Joes basi $ Dent 1 
  Lokal Utilitas 1 
  Lokal Utilitas 1 
  Lokal Utilitas 1 
  Ma Bell 1 
  Ma Bell 1 
  Membaca RR 1 
ANALISIS:

Permintaan konyol ini menunjukkan berapa banyak yang telah anda tulis cek untuk jumlah yang sama dengan penerima yang sama. tujuan sesungguhnya adalah untuk menunjukkan bahwa Anda dapat menggunakan AMOUNT pada klausa GROUP BY, meskipun tidak disebutkan di klausa SELECT. JUMLAH Cobalah keluar dari klausa GROUP BY dan masuk ke klausa SELECT, seperti ini:

INPUT / OUTPUT:
  SELECT penerima pembayaran, AMOUNT, COUNT (JUMLAH) 
  Dari pemeriksaan 
  GROUP BY Penerima Pembayaran; 

  Dynamic SQL Error 
  -SQL error code = -104 
  -Kolom referensi tidak valid 
ANALISIS:

SQL tidak dapat menjalankan query, yang masuk akal jika anda memainkan bagian dari SQL sejenak. Katakanlah Anda harus kelompok baris berikut:

INPUT / OUTPUT:
  SELECT penerima pembayaran, AMOUNT, KOMENTAR 
  Dari pemeriksaan 
  MANA Penerima Pembayaran 'Kas ='; 

  Penerima Pembayaran JUMLAH KOMENTAR 
  ==================== =============== =============== 

  Kas Wild Night Out 25 
  Kas 60 Perjalanan ke Boston 
  Kas 34 Perjalanan ke Dayton 

Jika pengguna meminta Anda untuk output semua tiga kolom dan kelompok oleh penerima pembayaran saja, di mana akan Anda letakkan komentar unik? Ingat Anda hanya memiliki satu baris per kelompok bila Anda menggunakan GROUP BY. SQL tidak dapat melakukan dua hal sekaligus, sehingga mengeluh: Kesalahan # 31: Tidak dapat melakukan dua hal sekaligus.

Klausul HAVING

Bagaimana Anda memenuhi syarat data yang digunakan dalam Anda klausa GROUP BY? Gunakan meja ORGCHART dan coba ini:

INPUT:
  ORGCHART SELECT * FROM;
OUTPUT:
  NAMA GAJI TIM SICKLEAVE ANNUALLEAVE 
  =============== ======== =========== =========== ===== ====== 

  34.000,00 PENELITIAN Adams 34 12 
  Wilkes PEMASARAN 31.000,00 40 9 
  36.000,00 PEMASARAN Stokes 20 19 
  Meza 40.000,00 KOLEKSI 30 27 
  45.000,00 PENELITIAN Merrick 20 17 
  42.000,00 PEMASARAN Richardson 25 18 
  Fury 35.000,00 KOLEKSI 22 14 
  37.500,00 PR PRECOURT 24 24 

Jika Anda ingin kelompok output ke divisi dan menunjukkan gaji rata-rata di setiap divisi, Anda akan ketik:

INPUT / OUTPUT:
 TIM SELECT, AVG (GAJI) DARI GROUP BY ORGCHART TIM; AVG =============== =========== KOLEKSI TIM PEMASARAN 37.500,00 36.333,33 37.500,00 PR PENELITIAN 39.500,00

Pernyataan berikut query ini memenuhi syarat untuk kembali hanya departemen dengan gaji rata-rata di bawah 38.000:

INPUT / OUTPUT:
  PILIH TIM, AVG (GAJI) 
  FROM ORGCHART 
  MANA AVG (GAJI) <38.000 
  GROUP BY TIM; 

  Dynamic SQL Error 
  -SQL error code = -104 

  -Agregat referensi tidak valid 
ANALISIS:

Error ini terjadi karena WHERE tidak bekerja dengan fungsi agregat. Untuk membuat ini bekerja query, Anda perlu sesuatu yang baru: klausa HAVING. Jika Anda mengetik permintaan berikut, Anda mendapatkan apa yang Anda minta:

INPUT / OUTPUT:
  PILIH TIM, AVG (GAJI) 
  DARI ORGCHART 
  GROUP BY TIM 
  HAVING AVG (GAJI) <38000; 
 
  TIM AVG 
  =============== =========== 

  KOLEKSI 37.500,00 
  PEMASARAN 36.333,33 
  PR 37.500,00 
ANALISIS:

MEMILIKI memungkinkan Anda untuk menggunakan fungsi agregat dalam sebuah pernyataan perbandingan, menyediakan untuk fungsi-fungsi agregat apa MANA menyediakan untuk baris individu. Apakah HAVING bekerja dengan ekspresi nonaggregate? Coba ini:

INPUT / OUTPUT:
 PILIH TIM, AVG (GAJI) DARI TIM GROUP BY HAVING ORGCHART GAJI <38000; TIM AVG =============== =========== PR 37.500,00
ANALISIS:

Mengapa hal ini hasil yang berbeda dari permintaan terakhir? HAVING AVG (GAJI) <38000 klausa dievaluasi setiap pengelompokan dan kembali hanya dengan gaji rata-rata di bawah 38.000,apa yang Anda harapkan,. MEMILIKI GAJI <38000, di sisi lain memiliki hasil yang berbeda. Mengambil peran mesin SQL lagi. Jika pengguna meminta Anda untuk mengevaluasi dan kembali kelompok divisi mana GAJI <38.000, Anda akan memeriksa tiap kelompok dan menolak orang-orang di mana GAJI individu lebih besar dari 38.000. Pada setiap divisi kecuali PR, Anda akan menemukan setidaknya satu gaji lebih besar dari 38.000 di:

INPUT / OUTPUT:
  SELECT NAMA, TIM, GAJI 
  DARI ORGCHART 
  ORDER BY TIM; 

  NAMA TIM GAJI 
  =============== =============== =========== 

  KOLEKSI Fury 35.000,00 
  Meza KOLEKSI 40.000,00 
  Wilkes PEMASARAN 31.000,00 
  Stokes PEMASARAN 36.000,00 
  Richardson PEMASARAN 42.000,00 
  PR PRECOURT 37.500,00 
  Adams PENELITIAN 34.000,00 
  Merrick PENELITIAN 45.000,00 
ANALISIS:

Oleh karena itu, Anda akan menolak semua kelompok lain kecuali PR. Apa Anda benar-benar bertanya itu Pilih semua kelompok di mana individu tidak membuat lebih dari 38.000.Jangan kau benci kalau komputer tidak persis apa yang Anda kirim ke?


PERINGATAN: Beberapa implementasi dari SQL kembali kesalahan jika Anda menggunakan apapun selain fungsi agregat di dalam klausa HAVING. Jangan bertaruh peternakan menggunakan contoh sebelumnya sampai Anda mengecek pelaksanaan SQL tertentu yang Anda gunakan.


Dapatkah Anda menggunakan lebih dari satu kondisi di klausa HAVING Anda? Coba ini:

INPUT:
  PILIH TIM, AVG (SICKLEAVE), AVG (ANNUALLEAVE) 
  DARI ORGCHART 
  GROUP BY TIM 
  HAVING AVG (SICKLEAVE)> 25 DAN 
  AVG (ANNUALLEAVE) <20; 
ANALISIS:

Tabel berikut ini dikelompokkan oleh TIM. Ini menunjukkan semua tim dengan rata-rata SICKLEAVE di atas 25 hari dan rata-rata di bawah 20 hari ANNUALLEAVE.

OUTPUT:
  TIM AVG AVG 
  =============== =========== =========== 

  PEMASARAN 28 15 
  PENELITIAN 27 15 

Anda juga dapat menggunakan fungsi agregat pada klausa HAVING yang tidak dalam pernyataan SELECT. Sebagai contoh:

INPUT / OUTPUT:
  PILIH TIM, AVG (SICKLEAVE), AVG (ANNUALLEAVE) 
  DARI ORGCHART 
  GROUP BY TIM 
  HAVING COUNT (TIM)> 1; 

  TIM AVG AVG 
  =============== =========== =========== 

  KOLEKSI 26 21 
  PEMASARAN 28 15 
  PENELITIAN 27 15 
ANALISIS:

query ini mengembalikan jumlah TIM s dengan anggota lebih dari satu klausa. COUNT (TIM) tidak digunakan dalam SELECT laporan tapi masih berfungsi seperti yang diharapkan dalam HAVINGtersebut.

Operator lain logis semua pekerjaan baik di dalam klausa HAVING. Pertimbangkan ini:

INPUT / OUTPUT:
  PILIH TIM, MIN (GAJI), MAX (GAJI) 
  DARI ORGCHART 
  GROUP BY TIM 
  HAVING AVG (GAJI)> 37000 
  ATAU 
  MIN (GAJI)> 32000; 

  TIM MIN MAX 
  =============== =========== =========== 

  KOLEKSI 35.000,00 40.000,00 
  PR 37.500,00 37.500,00 
  PENELITIAN 34.000,00 45.000,00 

Operator DI juga bekerja di sebuah klausa HAVING, seperti yang ditunjukkan di sini:

INPUT / OUTPUT:
  PILIH TIM, AVG (GAJI) 
  DARI ORGCHART 
  GROUP BY TIM 
  MEMILIKI TIM DALAM ('PR', 'Hasil Riset'); 

  TIM AVG 
  =============== =========== 

  PR 37.500,00 
  PENELITIAN 39.500,00 

Menggabungkan Klausul

Tidak ada dalam ruang hampa, jadi bagian ini membawa Anda komposit melalui beberapa contoh yang menunjukkan cara kombinasi klausa tampil bersama.

Contoh 5.1

Cari semua cek yang ditulis untuk Kas dan Gas di meja pemeriksaan dan menyuruh mereka oleh KOMENTAR.

INPUT:
  SELECT Penerima Pembayaran, KOMENTAR 
  Dari pemeriksaan 
  MANA Penerima Pembayaran 'Kas =' 
  ATAU KOMENTAR LIKE'Ga% ' 
  ORDER BY KOMENTAR;
OUTPUT:
  Penerima Pembayaran KOMENTAR 
  ==================== ==================== 

  Joans Gas 
  Joans Gas 
  Lokal Utilitas Gas 
  Kas Perjalanan ke Boston 
  Kas Perjalanan ke Dayton 
  Kas Wild Night Out 
ANALISIS:

Perhatikan penggunaan SEPERTI untuk menemukan KOMENTAR yang dimulai dengan Ga. Dengan menggunakan OR, data dikembalikan jika klausa WHERE bertemu salah satu dari dua kondisi.

Bagaimana jika Anda meminta informasi yang sama dan kelompok dengan penerima pembayaran? Permintaan akan terlihat seperti ini:

INPUT:
  SELECT Penerima Pembayaran, KOMENTAR 
  Dari pemeriksaan 
  MANA Penerima Pembayaran 'Kas =' 
  ATAU KOMENTAR LIKE'Ga% ' 
  GROUP BY Penerima Pembayaran 
  ORDER BY KOMENTAR; 
ANALISIS:

Query ini tidak akan bekerja karena mesin SQL tidak akan tahu apa yang harus dilakukan dengan ucapan. Ingatlah bahwa kolom apa pun yang Anda masukkan ke dalam klausa SELECT juga harus di klausa GROUP BY – kecuali jika Anda tidak menentukan setiap kolom dalam klausa SELECT.

Contoh 5.2

Menggunakan tabel ORGCHART, menemukan gaji setiap orang dengan kurang dari 25 hari cuti sakit. Orde hasil oleh NAMA.

INPUT:
  SELECT NAMA, GAJI 
  DARI ORGCHART 
  WHERE <SICKLEAVE 25 
  ORDER BY NAMA;
OUTPUT:
  NAMA GAJI 
  =============== =========== 
  Fury 35.000,00 
  Merrick 45.000,00 
  PRECOURT 37.500,00 
  Stokes 36.000,00 
ANALISIS:

Query ini sangat mudah dan memungkinkan Anda untuk menggunakan baru-menemukan kemampuan Anda dengan WHERE dan ORDER BY.

Contoh 5.3

Sekali lagi, menggunakan ORGCHART, layar TIM, AVG (GAJI), AVG (SICKLEAVE), dan AVG (ANNUALLEAVE) pada masing-masing tim:

INPUT:
  PILIH TIM, 
  AVG (GAJI), 
  AVG (SICKLEAVE), 
  AVG (ANNUALLEAVE) 
  DARI ORGCHART 
  GROUP BY TIM;
OUTPUT:
  TIM AVG AVG AVG 
  =============== =========== =========== =========== 
  37.500,00 KOLEKSI 26 21 
  36.333,33 PEMASARAN 28 15 
  PR 37.500,00 24 24 
  PENELITIAN 39.500,00 26 15 

Sebuah variasi yang menarik pada query berikut ini. Lihat jika Anda dapat mengetahui apa yang terjadi:

INPUT / OUTPUT:
  PILIH TIM, 
  AVG (GAJI), 
  AVG (SICKLEAVE), 
  AVG (ANNUALLEAVE) 
  DARI ORGCHART 
  GROUP BY TIM 
  ORDER BY NAMA; 

  TIM AVG AVG AVG 
  =============== =========== =========== =========== 
  PENELITIAN 39.500,00 27 15 
  37.500,00 KOLEKSI 26 21 
  PR 37.500,00 24 24 
 
 
  36.333,33 PEMASARAN 28 15 

Sebuah permintaan sederhana menggunakan ORDER BY mungkin menawarkan petunjuk:

INPUT / OUTPUT:
  SELECT NAMA, TIM 
  DARI ORGCHART 
  ORDER BY NAMA, TIM; 

  NAMA TIM 
  =============== =========== 
  Adams PENELITIAN 
  Fury KOLEKSI 
  Merrick PENELITIAN 
  Meza KOLEKSI 
  PRECOURT PR 
  Richardson PEMASARAN 
  Stokes PEMASARAN 
  Wilkes PEMASARAN 
ANALISIS:

Ketika mesin SQL sempat untuk memesan hasil query, itu digunakan kolom NAMA (ingat, itu adalah yang sah untuk menggunakan kolom tidak ditentukan dalam pernyataan SELECT), diabaikanTIM entri ganda, dan muncul dengan urutan PENELITIANKOLEKSI, PR, dan TIM PEMASARAN. Termasuk dalam klausa ORDER BY tidak diperlukan, karena Anda memiliki nilai unik di kolom NAMA.Anda bisa mendapatkan hasil yang sama dengan mengetikkan pernyataan ini:

INPUT / OUTPUT:
  SELECT NAMA, TIM 
  DARI ORGCHART 
  ORDER BY NAMA; 

  NAMA TIM 
  ============ =============== 
  Adams PENELITIAN 
  Fury KOLEKSI 
  Merrick PENELITIAN 
  Meza KOLEKSI 
  PRECOURT PR 
  Richardson PEMASARAN 
  Stokes PEMASARAN 
  Wilkes PEMASARAN 

Ketika Anda melihat variasi, jangan lupa Anda juga dapat membalik urutan:

INPUT / OUTPUT:
  SELECT NAMA, TIM 
  DARI ORGCHART 
  ORDER BY NAMA DESC; 

  NAMA TIM 
  ============ =============== 
  Wilkes PEMASARAN 
  Stokes PEMASARAN 
RICHARDSON      MARKETING
PRECOURT        PR
MEZA            COLLECTIONS
MERRICK         RESEARCH
FURY            COLLECTIONS
ADAMS           RESEARCH

Contoh 5.4: The Big Finale

Apakah mungkin untuk menggunakan semua yang harus Anda pelajari dalam satu query?Memang, tetapi hasilnya akan berbelit-belit karena dalam banyak cara Anda bekerja dengan apel dan jeruk – atau agregat dan nonaggregates. Misalnya, WHERE dan ORDER BY biasanya ditemukan dalam permintaan yang bertindak atas baris tunggal, seperti ini:

INPUT / OUTPUT:
  SELECT * 
FROM ORGCHART
ORDER BY NAME DESC;
 
 NAME            TEAM          SALARY   SICKLEAVE ANNUALLEAVE
=============== ======== =========== =========== ===========
WILKES          MARKETING   31000.00          40           9
STOKES          MARKETING   36000.00          20          19
RICHARDSON      MARKETING   42000.00          25          18
PRECOURT        PR          37500.00          24          24
MEZA            COLLECTIONS 40000.00          30          27
MERRICK         RESEARCH    45000.00          20          17
FURY            COLLECTIONS 35000.00          22          14
ADAMS           RESEARCH    34000.00          34          12

GROUP BY and HAVING are normally seen in the company of aggregates:

INPUT / OUTPUT:
 SELECT PAYEE,
SUM(AMOUNT) TOTAL,
COUNT(PAYEE) NUMBER_WRITTEN
FROM CHECKS
GROUP BY PAYEE
HAVING SUM(AMOUNT) > 50;

PAYEE                          TOTAL NUMBER_WRITTEN
==================== =============== ==============
Cash                             119              3
Joes Stale $ Dent                150              1
Local Utilities                219.5              3
Ma Bell                    350.33002              2
Reading RR                  245.34              1

Anda telah melihat bahwa menggabungkan kedua kelompok klausa dapat memberikan hasil yang tak terduga, termasuk yang berikut:

INPUT:
 SELECT PAYEE,
SUM(AMOUNT) TOTAL,
COUNT(PAYEE) NUMBER_WRITTEN
FROM CHECKS
WHERE AMOUNT >= 100
GROUP BY PAYEE
HAVING SUM(AMOUNT) > 50;
OUTPUT:
 PAYEE                          TOTAL NUMBER_WRITTEN
==================== =============== ==============
Joes Stale $ Dent                150              1
Ma Bell                    350.33002              2
Reading RR                  245.34              1

Compare these two result sets and examine the raw data:

INPUT / OUTPUT:
 SELECT PAYEE, AMOUNT
FROM CHECKS
ORDER BY PAYEE;

PAYEE                         AMOUNT
==================== ===============
Abes Cleaners                   10.5
Abes Cleaners                  24.35
Cash                              25
Cash                              34
Cash                              60
Joans Gas                      15.75
Joans Gas                       25.1
Joes Stale $ Dent                150
Local Utilities                   34
Local Utilities                 87.5
Local Utilities                   98
Ma Bell                          150
Ma Bell                       200.33
Reading RR                  245.34
ANALISIS:

Anda lihat bagaimana klausa WHERE disaring keluar semua cek kurang dari 100 dolar sebelum DENGAN GROUP dilakukan pada query. Kami tidak mencoba untuk memberitahu Anda tidak campuran kelompok-kelompok ini – Anda mungkin memiliki persyaratan bahwa konstruksi semacam ini akan bertemu. Namun, Anda tidak harus santai campuran fungsi agregat dan nonaggregate. Contoh sebelumnya telah tabel dengan hanya beberapa baris. (Jika tidak, Anda akan membutuhkan gerobak untuk membawa buku ini) Dalam dunia nyata Anda akan bekerja dengan beribu-ribu (atau miliaran dan miliaran) baris, dan perubahan halus yang disebabkan oleh pencampuran klausa ini mungkin tidak begitu jelas..

Ringkasan

Hari ini Anda pelajari semua klausa yang Anda butuhkan untuk memanfaatkan kekuatan perintah SELECT. Ingat untuk berhati-hati apa yang Anda minta karena Anda mungkin akan mendapatkannya. pendidikan dasar SQL Anda selesai. Anda sudah tahu cukup untuk bekerja secara efektif dengan tabel tunggal. Besok (Hari ke-6, “Bergabung Tabel”), Anda akan memiliki kesempatan untuk bekerja dengan tabel ganda.

Sumber ; http://www.webbasedprogramming.com

SQL Fungsi molding

Tinggalkan komentar

Tujuan

Hari ini kita berbicara tentang fungsi. Fungsi di SQL memungkinkan Anda untuk melakukan perbuatan seperti menentukan jumlah dari kolom atau mengubah semua karakter string ke huruf besar.Pada akhir hari, Anda akan memahami dan dapat menggunakan semua hal berikut:

  • Fungsi Agregat
  • Tanggal dan waktu fungsi
  • Fungsi aritmatika
  • Karakter fungsi
  • Fungsi Konversi
  • Miscellaneous fungsi

Fungsi ini sangat meningkatkan kemampuan Anda untuk memanipulasi informasi yang Anda diambil dengan menggunakan fungsi dasar SQL yang dijelaskan sebelumnya minggu ini. Lima pertama fungsi agregat, COUNT, SUM, AVG, MAX, dan MIN, didefinisikan dalam standar ANSI. Kebanyakan implementasi dari SQL memiliki ekstensi fungsi agregat tersebut, beberapa diantaranya meliputi hari ini. Beberapa implementasi dapat menggunakan nama yang berbeda untuk fungsi tersebut.

Fungsi Agregat

Fungsi ini juga disebut sebagai fungsi kelompok. Mereka kembali nilai berdasarkan nilai dalam kolom. (Setelah semua, Anda tidak akan meminta untuk rata-rata contoh field.) Tersebut dalam bagian ini menggunakan TEAMSTATS tabel:

INPUT:
  SQL> SELECT * FROM TEAMSTATS;
OUTPUT:
  NAMA POS HITS AB SINGLES berjalan tiga kali lipat ganda HR SO 
  --------- --- --- ---- ----- ------- ------- ------- - - 
  JONES 1B 145 45 34 31 8 1 5 10 
  DONKNOW 3B 175 65 23 50 10 1 4 15 
  Worley LF 157 49 15 35 8 3 3 16 
  DAVID OF 187 70 24 48 4 0 17 42 
  HAMHOCKER 3B 50 12 10 10 2 0 0 13 
  Casey DH 1 0 0 0 0 0 0 1 

  6 baris yang dipilih. 

COUNT

COUNT kembali fungsi jumlah baris yang memenuhi kondisi di klausa WHERE. Katakanlah Anda ingin tahu berapa banyak pemain memukul bola di bawah 350. Anda akan ketik

INPUT / OUTPUT:
  SQL> SELECT COUNT (*) 
   2 DARI TEAMSTATS 
  3 WHERE HITS / AB <0,35; 

  COUNT (*) 
  -------- 
         4 

Untuk membuat kode lebih mudah dibaca, cobalah alias:

INPUT / OUTPUT:
  SQL> SELECT COUNT (*) NUM_BELOW_350 
  2 DARI TEAMSTATS 
  3 WHERE HITS / AB <0,35; 

  NUM_BELOW_350 
  ------------- 
              4 

Apakah ada bedanya jika Anda mencoba nama kolom bukannya nama bintang? (Perhatikan penggunaan tanda kurung di sekitar kolom ini.) Coba:

INPUT / OUTPUT:
  SQL> SELECT COUNT (NAMA) NUM_BELOW_350 
  2 DARI TEAMSTATS 
  3 WHERE HITS / AB <0,35; 

  NUM_BELOW_350 
  ------------- 
              4 

Jawabannya adalah tidak. NAMA kolom yang Anda pilih tidak terlibat dalam laporan WHERE. Jika Anda menggunakan COUNT tanpa klausa WHERE, ia mengembalikan jumlah record dalam tabel.

INPUT / OUTPUT:
  SQL> SELECT COUNT (*) 
  2 DARI TEAMSTATS; 

   COUNT (*) 
  --------- 
          6 

SUM

SUM tidak hanya itu. Ia mengembalikan jumlah semua nilai dalam kolom. Untuk mengetahui berapa banyak single sudah terkena, jenis

INPUT:
  SQL SELECT SUM> (SINGLES) TOTAL_SINGLES 
    2 DARI TEAMSTATS;
OUTPUT:
  TOTAL_SINGLES 
  ------------- 
            174 

Untuk mendapatkan beberapa jumlah, gunakan

INPUT / OUTPUT:
  SQL SELECT SUM> (SINGLES) TOTAL_SINGLES, SUM (Doubles) TOTAL_DOUBLES, 
  SUM (tiga kali lipat) TOTAL_TRIPLES, SUM (SDM) TOTAL_HR 
   2 DARI TEAMSTATS; 

  TOTAL_SINGLES TOTAL_DOUBLES TOTAL_HR TOTAL_TRIPLES 
  ------------- ------------- ------------- -------- 
            174 32 5 29 

Untuk mengumpulkan informasi yang sama pada semua 300 atau pemain yang lebih baik, jenis

INPUT / OUTPUT:
  SQL SELECT SUM> (SINGLES) TOTAL_SINGLES, SUM (Doubles) TOTAL_DOUBLES, 
  SUM (tiga kali lipat) TOTAL_TRIPLES, SUM (SDM) TOTAL_HR 
    2 DARI TEAMSTATS 
    3 WHERE HITS / AB> = 0,300; 

  TOTAL_SINGLES TOTAL_DOUBLES TOTAL_HR TOTAL_TRIPLES 
  ------------- ------------- ------------- -------- 
            164 30 5 29 

Untuk menghitung rata-rata tim yang memukul, jenis

INPUT / OUTPUT:
  SQL> SELECT SUM (HITS) / SUM (AB) TEAM_AVERAGE 
    2 DARI TEAMSTATS; 

  TEAM_AVERAGE 
  ------------ 
     .33706294 

SUM bekerja hanya dengan angka. Jika anda mencobanya di lapangan nonnumerical, Anda mendapatkan

INPUT / OUTPUT:
  SQL> SELECT SUM (NAMA) 
   2 DARI TEAMSTATS; 

  ERROR: 
  ORA-01722: nomor yang tidak valid 
  ada baris yang dipilih 

Pesan kesalahan ini adalah logis karena Anda tidak dapat jumlah kelompok nama.

AVG

Fungsi AVG menghitung rata-rata kolom. Untuk menemukan jumlah rata-rata out mogok, gunakan ini:

INPUT:
  SQL> SELECT AVG (SO) AVE_STRIKE_OUTS 
   2 DARI TEAMSTATS;
OUTPUT:
  AVE_STRIKE_OUTS 
  --------------- 
        16.166667 

Contoh berikut menggambarkan perbedaan antara SUM dan AVG:

INPUT / OUTPUT:
  SQL> SELECT AVG (HITS / AB) TEAM_AVERAGE 
    2 DARI TEAMSTATS; 

  TEAM_AVERAGE 
  ------------ 
     .26803448 
ANALISIS:

Tim itu memukul lebih dari 300 pada contoh sebelumnya! Apa yang terjadi dihitung? AVG rata-rata dari kolom gabungan hits dibagi dengan pada kelelawar, sedangkan contoh SUM dibagi dengan jumlah hit dengan jumlah pada kelelawar. Sebagai contoh, pemain A mendapatkan 50 hit dalam 100 pada kelelawar untuk sebuah. 500 rata-rata. Player B mendapatkan 0 hit dalam 1 pada kelelawar untuk rata-rata 0,0. Rata-rata 0,0 dan 0,5 adalah 0,250. Jika Anda menghitung rata-rata gabungan dari 50 hits di 101 pada kelelawar, jawabannya adalah 0,495 terhormat. Kembali pernyataan berikut benar batting rata-rata:

INPUT / OUTPUT:
  SQL> SELECT AVG (HITS) / AVG (AB) TEAM_AVERAGE 
   2 DARI TEAMSTATS; 
  TEAM_AVERAGE 
  ------------ 
     .33706294 

Seperti fungsi SUM, AVG bekerja hanya dengan angka.

MAX

Jika Anda ingin mencari nilai terbesar dalam kolom, MAX digunakan. Sebagai contoh, apa adalah jumlah tertinggi hits?

INPUT:
  SQL> SELECT MAX (HITS) 
   2 DARI TEAMSTATS;
OUTPUT:
  MAX (HITS) 
  --------- 
         70 

Dapatkah Anda mencari tahu yang memiliki hits paling?

INPUT / OUTPUT:
  SQL> SELECT NAME 
  2 DARI TEAMSTATS 
  3 WHERE HITS = MAX (HITS); 

  ERROR pada baris 3: 
  ORA-00934: fungsi kelompok tidak diperkenankan di sini 

Sayangnya, Anda tidak bisa. Pesan kesalahan adalah pengingat bahwa fungsi kelompok (ingat bahwa fungsi agregat juga disebut fungsi kelompok) tidak bekerja di klausa WHERE. Jangan putus asa, Hari 7, “Subqueries: The Embedded SELECT Pernyataan,” mencakup konsep subqueries dan menjelaskan cara untuk mencari yang memiliki hits MAX.

Apa yang terjadi jika Anda mencoba kolom nonnumerical?

INPUT / OUTPUT:
  SQL> SELECT MAX (NAMA) 
   2 DARI TEAMSTATS; 
  MAX (NAMA) 
  --------------- 
  Worley 

Ini sesuatu yang baru. MAX kembali yang tertinggi (paling dekat dengan Z) string,. Akhirnya fungsi yang bekerja dengan baik karakter dan angka.

MIN

MIN melakukan hal yang diharapkan dan bekerja seperti MAX kecuali ia mengembalikan anggota terendah kolom. Untuk mengetahui paling sedikit di kelelawar, jenis

INPUT:
  SQL> SELECT MIN (AB) 
    2 DARI TEAMSTATS;
OUTPUT:
  MIN (AB) 
  --------- 
          1 

Kembali pernyataan berikut nama yang paling dekat ke awal abjad:

INPUT / OUTPUT:
  SQL> SELECT MIN (NAMA) 
  2 DARI TEAMSTATS; 

  MIN (NAMA) 
  --------------- 
  Casey 

Anda dapat menggabungkan dengan MIN MAX memberikan rentang nilai. Sebagai contoh:

INPUT / OUTPUT:
  SQL> MIN SELECT (AB), MAX (AB) 
   2 DARI TEAMSTATS; 

   MIN (AB) MAX (AB) 
  -------- -------- 
         1 187 

Informasi semacam ini dapat berguna bila menggunakan fungsi statistik.


CATATAN: Seperti yang telah disebutkan dalam pendahuluan, lima pertama fungsi agregat dijelaskan dalam standar ANSI. Fungsi-fungsi agregat yang tersisa telah menjadi standar de facto, hadir dalam semua implementasi penting dari SQL. Kami menggunakan Oracle7 nama untuk fungsi tersebut. implementasi lain mungkin menggunakan nama yang berbeda.


VARIANS

VARIANS menghasilkan kuadrat dari standar deviasi, nomor penting untuk perhitungan statistik banyak. Cara kerjanya seperti ini:

INPUT:
  SQL> SELECT VARIANS (HITS) 
   2 DARI TEAMSTATS;
OUTPUT:
  
  VARIANS (HITS) 
  -------------- 
       802,96667 

Jika Anda mencoba string

INPUT / OUTPUT:
  SQL> SELECT VARIANS (NAMA) 
  2 DARI TEAMSTATS; 

  ERROR: 
  ORA-01722: nomor yang tidak valid 
  ada baris yang dipilih 

Anda menemukan bahwa VARIANS fungsi lain yang bekerja secara eksklusif dengan angka.

STDDEV

Fungsi kelompok terakhir, STDDEV, menemukan deviasi standar dari kolom angka, seperti yang ditunjukkan oleh contoh ini:

INPUT:
  SQL> SELECT STDDEV (HITS) 
   2 FROM TEAMSTATS;
OUTPUT:
  
  STDDEV (HITS) 
  ------------ 
     28.336666 

Ini juga mengembalikan sebuah kesalahan ketika berhadapan dengan string:

INPUT / OUTPUT:
  SQL> SELECT STDDEV (NAMA) 
  2 DARI TEAMSTATS; 

  ERROR: 
  ORA-01722: nomor yang tidak valid 
  ada baris yang dipilih 

Fungsi-fungsi agregat dapat juga digunakan dalam berbagai kombinasi:

INPUT / OUTPUT:
  SQL> SELECT COUNT (AB), 
   2 AVG (AB), 
    3 MIN (AB), 
    4 MAX (AB), 
   5 STDDEV (AB), 
    6 VARIANS (AB), 
   7 SUM (AB) 
   8 DARI TEAMSTATS; 

  COUNT (AB) AVG (AB) MIN (AB) MAX (AB) STDDEV (AB) VARIANS (AB) SUM (AB) 
  --------- ------- ------- ------- ---------- ---------- - ------- 
  6 187 75,589 119,167 1 5.712 0,97 715 

Lain kali Anda mendengar statistik olah raga menggunakan untuk mengisi waktu antara bermain, Anda akan tahu bahwa SQL sedang bekerja di balik layar.

Fungsi Tanggal dan Waktu

Kita hidup dalam peradaban diatur oleh waktu dan tanggal, dan utama sebagian besar implementasi dari SQL memiliki fungsi untuk mengatasi konsep-konsep ini. Bagian ini menggunakan mejaPROYEK untuk menunjukkan fungsi waktu dan tanggal.

INPUT:
  SQL> SELECT * FROM PROJECT;
OUTPUT:
  
  TUGAS STARTDATE ENDDATE 
  -------------- --------- --------- 
  Kickoff MTG 01-April-95 01-April-95 
  SURVEY TECH 02-April-95 01-MEI-95 
  PENGGUNA MTGS 15-MUNGKIN-95 30-MEI-95 
  DESIGN widget 01-Juni-95 30-Juni-95 
  Kode Widget 01-Juli-95 02-September-95 
  PENGUJIAN 03-September-95 17-JAN-96 
  6 baris yang dipilih. 

CATATAN: Tabel ini digunakan tipe data Date, Paling. implementasi dari SQL memiliki data Tanggal jenis tetapi sintaks yang tepat dapat bervariasi.


ADD_MONTHS

Fungsi ini menambah beberapa bulan ke tanggal tertentu. Sebagai contoh, katakanlah sesuatu yang luar biasa terjadi, dan proyek sebelumnya tergelincir ke kanan oleh dua bulan. Anda bisa membuat jadwal baru dengan mengetikkan

INPUT:
  SQL> SELECT TUGAS, 
   2 STARTDATE, 
  3 ENDDATE ORIGINAL_END, 
  4 ADD_MONTHS (ENDDATE, 2) 
   5 DARI PROYEK;
OUTPUT:
  TUGAS STARTDATE ORIGINAL_ ADD_MONTH 
  -------------- --------- --------- --------- 
  Kickoff MTG 01-April-95 01-April-95 01-Juni-95 
  SURVEY TECH 02-April-95 01-May-95 01-Juli-95 
  PENGGUNA MTGS 15-MUNGKIN-95 30-May-95 30-Juli-95 
  DESIGN widget 01-Juni-95 30-Juni-95 31-Agustus-95 
  Kode Widget 01-Juli-95 02-September-95 02-November-95 
  PENGUJIAN 03-September-95 17-JAN-96 17-MAR-96 

  6 baris yang dipilih. 

Bukan berarti slip seperti ini adalah mungkin, tapi itu baik untuk memiliki fungsi yang membuatnya begitu mudah. ADD_MONTHS juga bekerja di luar klausa SELECT. Ketikan

INPUT:
  SQL> SELECT TUGAS TASKS_SHORTER_THAN_ONE_MONTH 
  2 DARI PROYEK 
   3 WHERE ADD_MONTHS (STARTDATE, 1)> ENDDATE; 

menghasilkan hasil sebagai berikut:

OUTPUT:
  TASKS_SHORTER_THAN_ONE_MONTH 
  ---------------------------- 
  Kickoff MTG 
  TECH SURVEY 
  PENGGUNA MTGS 
  DESAIN widget 
ANALISIS:

Anda akan menemukan bahwa semua fungsi dalam bagian ini bekerja di lebih dari satu tempat. Namun, ADD BULAN tidak bekerja dengan tipe data lain seperti karakter atau nomor tanpa bantuan fungsi TO_CHAR dan TO_DATE, yang akan dibahas nanti.

LAST_DAY

LAST_DAY mengembalikan hari terakhir dari bulan tertentu. Ini adalah bagi kita yang belum menguasai “Tiga puluh hari telah September …” sajak – atau setidaknya mereka yang belum mengajarkannya kepada komputer kita. Jika, misalnya, Anda perlu tahu apa yang pada hari terakhir dari bulan tersebut di kolom ENDDATE, Anda akan ketik

INPUT:
  SQL> SELECT ENDDATE, LAST_DAY (ENDDATE) 
    2 DARI PROYEK; 

Berikut hasilnya:

OUTPUT:
  ENDDATE LAST_DAY (ENDDATE) 
  --------- ----------------- 
  01-April-95 30-April-95 
  01-MEI-95 31-MEI-95 
  30-MEI-95 31-MEI-95 
  30-Juni-95 30-Juni-95 
  02-September-95 30-September-95 
  17-JAN-96 31-JAN-96 
  6 baris yang dipilih. 

Bagaimana menangani HARI TERAKHIR tahun kabisat?

INPUT / OUTPUT:
  SQL> SELECT LAST_DAY ('1-Februari-95 ') NON_LEAP, 
    2 LAST_DAY ('1-Februari-96 ') LEAP 
   3 DARI PROYEK; 

  NON_LEAP LEAP 
  --------- --------- 
  28-Februari-95 29-Februari-96 
  28-Februari-95 29-Februari-96 
  28-Februari-95 29-Februari-96 
  28-Februari-95 29-Februari-96 
  28-Februari-95 29-Februari-96 
  28-Februari-95 29-Februari-96 
  6 baris yang dipilih. 
ANALISIS:

Anda mendapatkan hasil yang tepat, tapi mengapa begitu banyak baris kembali? Karena Anda tidak menentukan kolom yang ada atau kondisi, mesin SQL menerapkan fungsi tanggal dalam pernyataan untuk setiap baris yang ada. Mari kita mendapatkan sesuatu yang kurang berlebihan dengan menggunakan berikut:

INPUT:
  SQL> SELECT LAST_DAY berbeda ('1-Februari-95 ') NON_LEAP, 
   2 LAST_DAY ('1-Februari-96 ') LEAP 
    3 DARI PROYEK; 

Pernyataan ini menggunakan kata yang berbeda (lihat Hari 2, “Pengantar Permintaan: Pernyataan SELECT") untuk memproduksi hasil tunggal

OUTPUT:
  NON_LEAP LEAP 
  --------- --------- 
  28-Februari-95 29-Februari-96 

Tidak seperti saya, fungsi ini tahu siapa yang tahun adalah tahun kabisat. Tapi sebelum Anda percaya Anda sendiri atau keuangan di masa depan perusahaan Anda untuk ini atau fungsi lainnya, memeriksa pelaksanaan Anda!

MONTHS_BETWEEN

Jika Anda perlu tahu berapa bulan jatuh antara bulan x dan y bulan, gunakan MONTHS_BETWEEN seperti ini:

INPUT:
  SQL SELECT TUGAS>, STARTDATE, ENDDATE, MONTHS_BETWEEN (STARTDATE, ENDDATE) 
       MASA 
   2 DARI PROYEK;
OUTPUT:
  TUGAS STARTDATE MASA ENDDATE 
  -------------- --------- --------- --------- 
  Kickoff MTG 01-April-95 01-April-95 0 
  SURVEY TECH 02-April-95 01-MEI-95 -. 9.677.419 
  PENGGUNA MTGS 15-MUNGKIN-95-30-95 -. MUNGKIN 483.871 
  DESIGN widget 01-Juni-95 30-Juni-95 -. 9354839 
  Kode Widget 01-Juli-95 02-September-95 -2,032258 
  PENGUJIAN 03-September-95 17-JAN-96 -4,451613 
  6 baris terpilih. 

Tunggu sebentar – yang tidak terlihat benar. Coba ini:

INPUT / OUTPUT:
  SQL SELECT TUGAS>, STARTDATE, ENDDATE, 
    2 MONTHS_BETWEEN (ENDDATE, STARTDATE) MASA 
   3 DARI PROYEK; 

  TUGAS STARTDATE MASA ENDDATE 
  -------------- --------- --------- --------- 
  Kickoff MTG 01-April-95 01-April-95 0 
  SURVEY TECH 02-April-95 01-MEI-95 ,96774194 
  PENGGUNA MTGS 15-MUNGKIN-95 30-MEI-95 ,48387097 
  DESIGN widget 01-Juni-95 30-Juni-95 ,93548387 
  Kode Widget 01-Juli-95 02-September-95 2,0322581 
  PENGUJIAN 03-September-95 17-JAN-96 4,4516129 
  6 baris yang dipilih. 
ANALISIS:

Itu lebih baik. Anda lihat bahwa MONTHS_BETWEEN sensitif dengan cara Anda memesan bulan. bulan negatif tidak mungkin buruk. Sebagai contoh, Anda dapat menggunakan hasil negatif untuk menentukan apakah satu tanggal terjadi sebelum yang lain. Sebagai contoh, pernyataan berikut menunjukkan semua tugas-tugas yang dimulai sebelum 19 Mei 1995:

INPUT:
  SQL> SELECT * 
    2 DARI PROYEK 
   MANA MONTHS_BETWEEN ('19 MUNGKIN 95 '3, STARTDATE)> 0;
OUTPUT:
  TUGAS STARTDATE ENDDATE 
  -------------- --------- --------- 
  Kickoff MTG 01-April-95 01-April-95 
  SURVEY TECH 02-April-95 01-MEI-95 
  PENGGUNA MTGS 15-MUNGKIN-95 30-MEI-95 

NEW_TIME

Jika Anda perlu menyesuaikan waktu sesuai dengan zona waktu Anda berada, fungsi New_TIME adalah untuk Anda. Berikut adalah zona waktu, Anda dapat digunakan dengan fungsi ini:

Singkatan Wilayah waktu
AST atau ADT Atlantik standar atau daylight
BST atau BDT Bering standar atau daylight
CST atau CDT standar Pusat atau daylight
EST atau EDT standar Timur atau daylight
GMT Berarti waktu Greenwich
HST atau HDT Alaska-Hawaii standar atau daylight
MST atau MDT Gunung standar atau daylight
NST Newfoundland standar waktu
PST atau PDT Pasifik standar atau daylight
YST atau YDT Yukon standar atau daylight

Anda dapat mengatur waktu Anda seperti ini:

INPUT:
  SQL> SELECT EDT ENDDATE, 
   2 NEW_TIME (ENDDATE, 'EDT', 'PDT') 
  3 DARI PROYEK;
OUTPUT:
  NEW_TIME EDT (ENDDATE 
  ---------------- ---------------- 
  01-April-95 1200AM 31-MAR-95 0900PM 
  01-MEI-95 1200AM 30-April-95 0900PM 
  30-MEI-95 1200AM 29-MUNGKIN-95 0900PM 
  30-Juni-95 1200AM 29-Juni-95 0900PM 
  02-September-95 1200AM 01-September-95 0900PM 
  17-JAN-96 16-JAN 1200AM-96 0900PM 
  6 baris yang dipilih. 

Seperti sihir, semua waktu dalam zona waktu yang baru dan tanggal disesuaikan.

NEXT_DAY

NEXT_DAY menemukan nama hari pertama dari minggu yang sama dengan atau lebih dari tanggal yang ditentukan lain. Misalnya, untuk mengirim laporan pada hari Jumat setelah hari pertama setiap peristiwa, Anda akan ketik

INPUT:
  SQL> SELECT STARTDATE, 
  2 NEXT_DAY (STARTDATE, 'Jumat') 
   3 DARI PROYEK; 

yang akan kembali

OUTPUT:
  STARTDATE NEXT_DAY ( 
  --------- --------- 
  01-April-95 07-April-95 
  02-April-95 07-April-95 
  15-MEI-95 19-MEI-95 
  01-Juni-95 02-Juni-95 
  01-Juli-95 07-Juli-95 
  03-September-95 08-September-95 
  6 baris yang dipilih. 
ANALISIS:

Output memberitahu Anda tanggal Jumat pertama yang terjadi setelah STARTDATE Anda.

SYSDATE

SYSDATE mengembalikan sistem waktu dan tanggal:

INPUT:
  SQL> SELECT berbeda SYSDATE 
  2 DARI PROYEK;
OUTPUT:
  SYSDATE 
  ---------------- 
  18-Juni-95 1020PM 

Jika Anda ingin melihat di mana Anda berdiri saat ini dalam proyek tertentu, Anda bisa mengetik

INPUT / OUTPUT:
  SQL> SELECT * 
   2 DARI PROYEK 
   3 WHERE STARTDATE SYSDATE>; 

  TUGAS STARTDATE ENDDATE 
  -------------- --------- --------- 
  Kode Widget 01-Juli-95 02-September-95 
  PENGUJIAN 03-September-95 17-JAN-96 

Sekarang Anda dapat melihat apa bagian awal proyek setelah hari ini.

Fungsi Aritmatika

Banyak yang Anda miliki untuk menggunakan data Anda mengambil melibatkan matematika. Kebanyakan implementasi dari SQL menyediakan fungsi aritmatika mirip dengan fungsi dibahas di sini.Contoh dalam bagian ini menggunakan ANGKA tabel:

INPUT:
  SQL> SELECT * 
  2 DARI ANGKA;
OUTPUT:
  AB 
  --------- --------- 
     3,1415 4 
        -45 0,707 
          5 9 
    -57,667 42 
         15 55 
       5,3 -7,2 
  6 baris yang dipilih. 

ABS

Fungsi ABS mengembalikan nilai absolut dari nomor yang menunjuk ke. Misalnya:

INPUT:
  SQL> SELECT ABS (A) ABSOLUTE_VALUE 
  2 DARI ANGKA;
OUTPUT:
  ABSOLUTE_VALUE 
  -------------- 
          3,1415 
              45 
               5 
          57,667 
              15 
             7,2 
  6 baris yang dipilih. 

ABS perubahan semua angka negatif ke positif dan daun bilangan positif saja.

Ceil dan LANTAI

Ceil mengembalikan integer terkecil yang lebih besar dari atau sama dengan argumen. LANTAI tidak hanya sebaliknya, mengembalikan integer terbesar sama dengan atau kurang dari argumen.Sebagai contoh:

INPUT:
  SQL> SELECT B, ceil (B) PLAFON 
  2 DARI ANGKA;
OUTPUT:
  B PLAFON 
  --------- --------- 
          4 4 
       0,707 1 
          9 9 
         42 42 
         55 55 
        5,3 6 
  6 baris yang dipilih. 

Dan

INPUT / OUTPUT:
  SQL> SELECT A, LANTAI (A LANTAI) 
   2 DARI ANGKA; 

          A LANTAI 
  --------- --------- 
     3,1415 3 
        -45 -45 
          5 5 
    -57,667 -58 
         15 15 
       -8 -7,2 
  6 baris terpilih. 

COS, biaya murah, SIN, Sinh, TAN, dan TANH

The COS, SIN, dan TAN fungsi memberikan dukungan untuk berbagai konsep trigonometri. Mereka semua bekerja pada asumsi bahwa n adalah dalam radian. Pernyataan berikut kembali beberapa nilai yang tak terduga jika Anda tidak menyadari COS mengharapkan A, yang dalam radian.

INPUT:
  SQL> SELECT A, COS (A) 
   2 ANGKA DARI;
OUTPUT:
  A COS (A) 
  --------- --------- 
     3,1415 -1 
        -45 ,52532199 
          5 .28366219 
    -57,667 0,437183 
         15 -. 7596879 
       ,60835131 -7,2 
ANALISIS:

Anda akan mengharapkan COS dari 45 derajat berada di sekitar 0,707, bukan 0,525. Untuk membuat fungsi ini bekerja dengan cara yang Anda harapkan untuk di dunia berorientasi derajat, Anda perlu mengkonversi derajat ke radian giliran. (Kapan terakhir kali Anda mendengar berita menyiarkan laporan yang telah dilakukan politikus-pi radian sebuah? Anda mendengar tentang derajat berubah 180 radian.) Karena 360 pi = 2 derajat, Anda dapat menulis

INPUT / OUTPUT:
  SQL> SELECT A, COS (A * 0,01745329251994) 
   2 ANGKA DARI; 
  A COS (A * 0,01745329251994) 
  --------- ----------------------- 
     0,99849724 3,1415 
        -45 ,70710678 
          5 .9961947 
    -57,667 0,5348391 
         15 .96592583 
       -7,2 0,9921147 
ANALISIS:

Perhatikan bahwa jumlah 0,01745329251994 adalah radian dibagi dengan derajat. Fungsi trigonometri bekerja sebagai berikut:

INPUT / OUTPUT:
  SQL> SELECT A, COS (A * 0,017453), tongkat pendek (A * 0,017453) 
   2 DARI ANGKA; 
  A COS (A * 0,017453) tongkat pendek (A * 0,017453) 
  --------- --------------- ---------------- 
     1,0015035 0,99849729 3,1415 
        -45 0,70711609 1,3245977 
          5 .99619483 1,00381 
    -57,667 0,53485335 1,5507072 
         15 .96592696 1.0344645 
       -7,2 0,99211497 1,0079058 
  6 baris yang dipilih. 

Dan

INPUT / OUTPUT:
  SQL> SELECT A, SIN (A * 0,017453), Sinh (A * 0,017453) 
   2 ANGKA DARI; 
  A SIN (A * 0,017453) Sinh (A * 0,017453) 
  --------- --------------- ---------------- 
     0,05485607 0,05480113 3,1415 
        -45 -. -. 7.070.975 8.686.535 
          5 .08715429 .0873758 
    -57,667 -1,185197 -. 8449449 
         15 .25881481 .26479569 
       -. -. -7,2 1.253.311 1.259.926 
  6 baris yang dipilih. 

Dan

INPUT / OUTPUT:
  SQL> SELECT A, TAN (A * 0,017453), TANH (A * 0,017453) 
   2 ANGKA DARI; 

          A TAN (A * 0,017453) TANH (A * 0,017453) 
  --------- --------------- ---------------- 
     0,05477372 0,05488361 3,1415 
        -45 -. -. 9.999.737 6.557.867 
          5 .08748719 .08704416 
    -57,667 -1,579769 -. 7642948 
         15 .26794449 .25597369 
       -. -. -7,2 1.263.272 1.250.043 
  6 baris yang dipilih. 

EXP

EXP memungkinkan Anda untuk meningkatkan e (e adalah konstanta matematika yang digunakan dalam berbagai rumus) untuk kekuatan. Berikut adalah cara menaikkan EXP e oleh nilai-nilai dalam kolom A:

INPUT:
  SQL> SELECT A, EXP (A) 
   2 DARI ANGKA;
OUTPUT:
  A EXP (A) 
  --------- --------- 
     3,1415 23,138549 
        -45 2.863E-20 
          5 148,41316 
    -57,667 9.027E-26 
         15 3.269.017,4 
       -7,2 ,00074659 
  6 baris yang dipilih. 

LN dan LOG

Fungsi-fungsi pusat dua pada logaritma. LN mengembalikan logaritma alami argumen. Sebagai contoh:

INPUT:
  SQL> SELECT A, LN (A) 
   2 ANGKA DARI;
OUTPUT:
  ERROR: 
  ORA-01428: argumen '-45' adalah di luar jangkauan 

Apakah kita mengabaikan untuk menyebutkan bahwa argumen itu harus positif? Menulis

INPUT / OUTPUT:
  SQL> SELECT A, LN (ABS (A)) 
   2 DARI ANGKA; 

          Sebuah LN (ABS (A)) 
  --------- ---------- 
     3,1415 1,1447004 
        -45 3,8066625 
          5 1.6094379 
    -57,667 4,0546851 
         15 2.7080502 
       -7,2 1,974081 
  6 baris yang dipilih. 
ANALISIS:

Perhatikan bagaimana Anda dapat menanamkan ABS fungsi bagian dalam panggilan LN,. Mic lain logarith-Fungsi LOG, membutuhkan dua argumen, kembali logaritma dari argumen pertama di dasar kedua. Kembali query berikut logaritma B kolom dalam basis 10.

INPUT / OUTPUT:
  SQL> SELECT B, LOG (B, 10) 
   2 ANGKA DARI; 

            B LOG (B, 10)  
  ----------- --------- 
            4 1.660964 
         0,707 -6,640962 
            9 1.0479516 
           42 .61604832 
           55 .57459287 
          5,3 1,3806894 
  6 baris yang dipilih. 

MOD

Anda telah menemukan MOD sebelumnya. Pada Hari 3, “Ekspresi, Kondisi, dan Operator,” Anda melihat bahwa standar ANSI untuk operator modulo% kadang-kadang diimplementasikan sebagai fungsi MOD. Berikut ini adalah query yang mengembalikan sebuah tabel yang menunjukkan sisa A dibagi oleh B:

INPUT:
  SQL> SELECT A, B, MOD (A, B) 
   2 DARI ANGKA;
OUTPUT:
  AB MOD (A, B) 
  --------- --------- --------- 
     3,1415 4 3,1415 
        0,707 -45 -. 459 
          5 9 5 
    -57,667 -15,667 42 
         15 55 15 
       5,3 -7,2 -1,9 
  6 baris yang dipilih. 

POWER

Untuk meningkatkan satu nomor ke kekuatan lain, gunakan POWER. Dalam fungsi ini argumen pertama adalah pangkat yang kedua:

INPUT:
  SQL> SELECT A, B, POWER (A, B) 
   2 ANGKA DARI;
OUTPUT:
  ERROR: 
  ORA-01428: argumen '-45' adalah di luar jangkauan 
ANALISIS:

Pada pandangan pertama Anda cenderung berpikir bahwa argumen pertama tidak boleh negatif kekuasaan. Bahwa Tapi dapat kesan tidak benar, karena nomor seperti -4 dapat dinaikkan ke. Oleh karena itu, jika nomor pertama dalam fungsi POWER negatif, yang kedua harus integer. Anda dapat bekerja di sekitar masalah ini dengan menggunakan ceil (atau LANTAI):

INPUT:
  SQL> SELECT A, ceil (B), POWER (A, ceil (B)) 
    2 DARI ANGKA;
OUTPUT:
  A ceil (B) POWER (A, ceil (B)) 
  --------- --------- ---------------- 
     97,3976 4 3,1415 
        -45 1 -45 
          5 9 1953125 
    -57,667 42 9.098E 73 
         15 55 64 4.842E 
       -7,2 6 139.314,07 
  6 baris yang dipilih. 

Itu lebih baik!

MASUK

MASUK kembali -1 jika argumen yang kurang dari 0, 0 jika argumen adalah sama dengan 0 dan 1, jika argumen yang lebih besar dari 0, seperti ditunjukkan pada contoh berikut:

INPUT:
  SQL> SELECT A, MASUK (A) 
  2 DARI ANGKA;
OUTPUT:
  A MASUK (A) 
  --------- --------- 
     1 3,1415 
        -45 -1 
          5 1 
    -57,667 -1 
         15 1 
       -7,2 -1 
          0 0 
  7 baris yang dipilih. 

Anda juga dapat menggunakan MASUK dalam klausa WHERE SELECT seperti ini:

INPUT:
  SQL> SELECT A 
   2 DARI ANGKA 
   3 MANA MASUK (A 1 =);
OUTPUT:
  A 
  --------- 
     3,1415 
          5 
         15 

Sqrt

The sqrt mengembalikan fungsi akar kuadrat dari argumen. Karena akar kuadrat dari angka negatif tidak terdefinisi, Anda tidak dapat menggunakan sqrt pada angka negatif.

INPUT / OUTPUT:
  SQL> SELECT A, sqrt (A) 
   2 ANGKA DARI; 
  ERROR: 
  ORA-01428: argumen '-45' adalah di luar jangkauan 

Namun, Anda dapat memperbaiki keterbatasan ini dengan ABS:

INPUT / OUTPUT:
  SQL> SELECT ABS (A), sqrt (ABS (A)) 
   2 ANGKA DARI; 

     ABS (A) sqrt (ABS (A)) 
  ------------ --------- 
     3,1415 1,7724277 
         45 6.7082039 
          5 2.236068 
     57,667 7,5938791 
         15 3.8729833 
        7,2 2,6832816 
          0 0 
  7 baris yang dipilih. 

Fungsi Karakter

Banyak implementasi dari SQL menyediakan fungsi untuk memanipulasi karakter dan string karakter. Bagian ini meliputi fungsi karakter yang paling umum. Contoh dalam bagian ini menggunakanTOKOH tabel.

INPUT / OUTPUT:
  SQL> SELECT * DARI TOKOH; 
  NamaBelakang NamaDepan M KODE 
  --------------- --------------- - --------- 
  Purvis KELLY A 32 
  J CHUCK TAYLOR 67 
  LAURA CHRISTINE C 65 
  Adams bernanah M 87 
  COSTALES Armando A 77 
  KONG UTAMA G 52 
  6 baris yang dipilih. 

CHR

CHR mengembalikan karakter setara jumlah menggunakan sebagai argumen. Karakter itu kembali tergantung pada karakter set database. Untuk contoh ini database diatur ke ASCII. Kolom KODEtermasuk nomor.

INPUT:
  SQL> SELECT KODE, CHR (KODE) 
  2 DARI TOKOH;
OUTPUT:
  KODE CH 
  --------- - 
         32 
         67 C 
         65 A 
         87 W 
         77 M 
         52 4 
  6 baris yang dipilih. 

Ruang sebaliknya 32 menunjukkan bahwa 32 adalah ruang dalam ASCII karakter ditetapkan.

Penggabungan strings

Anda menggunakan setara dengan fungsi ini pada Hari 3, ketika Anda belajar tentang operator. The | simbol | splices dua string bersama-sama, seperti halnya penggabungan strings. Cara kerjanya seperti ini:

INPUT:
  SQL> SELECT penggabungan strings (Nama depan, NamaBelakang) "NAMA PERTAMA DAN TERAKHIR" 
   2 DARI TOKOH;
OUTPUT:
  PERTAMA DAN NAMA LAST 
  ------------------------ 
  KELLY Purvis 
  CHUCK TAYLOR 
  LAURA CHRISTINE 
  Bernanah Adams 
  Armando COSTALES 
  UTAMA KONG 
  6 baris yang dipilih. 
ANALISIS:

Quotation menandai mengelilingi beberapa kata alias PERTAMA DAN TERAKHIR NAMA. Sekali lagi, paling aman untuk memeriksa implementasi Anda untuk melihat apakah hal itu memungkinkan-kata beberapa alias.

Juga perhatikan bahwa meskipun meja terlihat seperti dua kolom terpisah, apa yang Anda lihat merupakan satu kolom. Nilai pertama yang Anda concatenated, Nama depan, adalah 15 karakter lebar. Operasi ini mempertahankan semua karakter di lapangan.

INITCAP

INITCAP mengkapitalisasi huruf pertama kata dan membuat semua karakter huruf kecil lainnya.

INPUT:
  SQL> SELECT NamaDepan SEBELUM, INITCAP (Nama depan) SETELAH 
   2 DARI TOKOH;
OUTPUT:
  SEBELUM SESUDAH 
  ---------- -------------- 
  Kelly Kelly 
  CHUCK Chuck 
  LAURA Laura 
  Membusuk bernanah 
  Armando Armando 
  Mayor UTAMA 
  6 baris yang dipilih. 

LOWER dan UPPER

Seperti yang mungkin Anda harapkan, perubahan BAWAH semua karakter huruf kecil; UPPER tidak hanya sebaliknya.

Contoh berikut ini dimulai dengan melakukan keajaiban kecil dengan fungsi UPDATE (Anda mempelajari lebih lanjut tentang ini minggu depan) untuk mengubah salah satu nilai ke huruf kecil:

INPUT:
  SQL> UPDATE TOKOH 
   2 SET Nama_belakang = 'kelly' 
   3 WHERE Nama depan 'KELLY =';
OUTPUT:
  1 baris diperbarui. 
INPUT:
  SQL> SELECT Nama depan 
   2 DARI TOKOH;
OUTPUT:
  Nama depan 
  --------------- 
  kelly 
  CHUCK 
  LAURA 
  Bernanah 
  Armando 
  UTAMA 
  6 baris yang dipilih. 

Kemudian Anda menulis

INPUT:
  SQL> SELECT Nama depan, UPPER (Nama depan), LOWER (Nama depan) 
    2 DARI TOKOH;
OUTPUT:
  NamaDepan UPPER (Nama depan LOWER (Nama depan 
  --------------- --------------- --------------- 
  KELLY kelly kelly 
  CHUCK CHUCK chuck 
  LAURA LAURA laura 
  Bernanah membusuk bernanah 
  Armando Armando Armando 
  UTAMA UTAMA utama 
  6 baris yang dipilih. 

Sekarang Anda melihat perilaku yang diinginkan.

LPAD dan RPAD

LPAD dan RPAD memakan waktu minimal dua dan maksimal tiga argumen. Argumen pertama adalah string karakter yang harus dioperasi. Yang kedua adalah jumlah karakter untuk pad dengan, dan argumen opsional ketiga adalah karakter untuk pad dengan. Default argumen ketiga kosong, atau bisa menjadi karakter tunggal atau string karakter. Pernyataan berikut menambahkan lima karakter pad, dengan asumsi bahwa bidang NamaBelakang didefinisikan sebagai karakter bidang 15:

INPUT:
  SQL> SELECT NamaBelakang, LPAD (NamaBelakang, 20 ,'*') 
   2 DARI TOKOH;
OUTPUT:
  NamaBelakang LPAD (NamaBelakang, 20, '*' 
  -------------- -------------------- 
  Purvis ***** Purvis 
  ***** TAYLOR TAYLOR 
  ***** CHRISTINE CHRISTINE 
  Adams ***** Adams 
  ***** COSTALES COSTALES 
  ***** KONG KONG 
  6 baris yang dipilih. 
ANALISIS:

Mengapa hanya lima karakter pad ditambahkan? Ingatlah bahwa kolom NamaBelakang adalah 15 karakter lebar dan yang NamaBelakang termasuk kosong di sebelah kanan karakter yang membentuk nama. kolom tipe data Beberapa menghilangkan karakter padding jika lebar kolom nilai kurang dari jumlah lebar dialokasikan untuk kolom. Periksa pelaksanaan Anda. Sekarang coba sisi kanan:

INPUT:
  SQL> SELECT NamaBelakang, RPAD (NamaBelakang, 20 ,'*') 
   2 DARI TOKOH;
OUTPUT:
  NamaBelakang RPAD (NamaBelakang, 20, '*' 
  -------------------- --------------- 
  Purvis Purvis ***** 
  TAYLOR TAYLOR ***** 
  CHRISTINE CHRISTINE ***** 
  Adams Adams ***** 
  COSTALES COSTALES ***** 
  KONG KONG ***** 
  6 baris yang dipilih. 
ANALISIS:

Di sini Anda melihat bahwa titik-titik yang dianggap sebagai bagian dari nama field untuk operasi ini. Kedua fungsi berikutnya akan sangat berguna dalam situasi semacam ini.

LTRIM dan RTRIM

LTRIM dan RTRIM mengambil minimal satu dan paling banyak dua argumen,. Pertama argumen seperti LPAD dan RPAD, adalah string karakter. Opsional Elemen kedua adalah salah satu karakter atau karakter string atau defaultnya kosong. Jika Anda menggunakan argumen kedua yang tidak kosong, fungsi-fungsi trim akan memangkas karakter bahwa cara yang sama mereka memangkas kosong pada contoh berikut.

INPUT:
  SQL> SELECT NamaBelakang, RTRIM (NamaBelakang) 
   2 DARI TOKOH;
OUTPUT:
  NamaBelakang RTRIM (NamaBelakang) 
  --------------- --------------- 
  Purvis Purvis 
  TAYLOR TAYLOR 
  CHRISTINE CHRISTINE 
  Adams Adams 
  COSTALES COSTALES 
  KONG KONG 
  6 baris yang dipilih. 

Anda dapat memastikan bahwa karakter yang telah dipangkas dengan pernyataan berikut:

INPUT:
  SQL> SELECT NamaBelakang, RPAD (RTRIM (NamaBelakang), 20 ,'*') 
   2 DARI TOKOH;
OUTPUT:
  NamaBelakang RPAD (RTRIM (NamaBelakang) 
  -------------------- --------------- 
  Purvis Purvis ************** 
  TAYLOR TAYLOR ************** 
  CHRISTINE CHRISTINE *********** 
  Adams Adams *************** 
  COSTALES COSTALES ************ 
  **************** KONG KONG 
  6 baris yang dipilih. 

Outputnya trim membuktikan bahwa bekerja. Sekarang coba LTRIM:

INPUT:
  SQL> SELECT NamaBelakang, LTRIM (NamaBelakang, 'C') 
  2 DARI TOKOH;
OUTPUT:
  NamaBelakang LTRIM (NamaBelakang, 
  --------------- --------------- 
  Purvis Purvis 
  TAYLOR TAYLOR 
  CHRISTINE HRISTINE 
  Adams Adams 
  COSTALES OSTALES 
  KONG KONG 
  6 baris yang dipilih. 

Perhatikan Cs hilang di baris ketiga dan kelima.

REPLACE

REPLACE tidak hanya itu. Dari tiga argumen, yang pertama adalah string yang akan dicari. Yang kedua adalah kunci pencarian. Yang terakhir adalah string pengganti opsional. Jika argumen ketiga adalah ditinggalkan atau NULL, setiap kemunculan tombol pencarian di string yang akan dicari akan dihapus dan tidak diganti dengan apa pun.

INPUT:
  SQL SELECT NamaBelakang>, REPLACE (NamaBelakang, 'ST') PENGGANTIAN 
   2 DARI TOKOH;
OUTPUT:
  NamaBelakang PENGGANTIAN 
  --------------- --------------- 
  Purvis Purvis 
  TAYLOR TAYLOR 
  CHRISTINE CHRIINE 
  Adams Adams 
  COSTALES COALES 
  KONG KONG 
  6 baris yang dipilih. 

Jika Anda memiliki argumen ketiga, maka digantikan untuk setiap kemunculan tombol pencarian di string target. Sebagai contoh:

INPUT:
  SQL SELECT NamaBelakang>, REPLACE (NamaBelakang, 'ST','**') PENGGANTIAN 
  2 DARI TOKOH;
OUTPUT:
  NamaBelakang PENGGANTIAN 
  ------------ --------------- 
  Purvis Purvis 
  TAYLOR TAYLOR 
  CHRISTINE Chri ** Ine 
  Adams Adams 
  CO COSTALES ** ALES 
  KONG KONG 
  6 baris yang dipilih. 

Jika argumen kedua adalah NULL, string target adalah kembali dengan tidak ada perubahan.

INPUT:
  SQL SELECT NamaBelakang>, REPLACE (NamaBelakang, NULL) PENGGANTIAN 
  2 DARI TOKOH;
OUTPUT:
  NamaBelakang PENGGANTIAN 
  --------------- --------------- 
  Purvis Purvis 
  TAYLOR TAYLOR 
  CHRISTINE CHRISTINE 
  Adams Adams 
  COSTALES COSTALES 
  KONG KONG 
  6 baris yang dipilih. 

Substr

Argumen ini-fungsi tiga memungkinkan Anda untuk mengambil sepotong keluar dari sebuah string target. Argumen pertama adalah string target. Argumen kedua adalah posisi karakter pertama yang menjadi output. Argumen ketiga adalah jumlah karakter untuk menunjukkan.

INPUT:
  SQL> SELECT Nama depan, substr (Nama depan, 2,3) 
  2 DARI TOKOH;
OUTPUT:
 
  NamaDepan SUB 
  --------------- --- 
  kelly ela 
  CHUCK HUC 
  LAURA Aur 
  Bernanah EST 
  Armando RMA 
  Ajo UTAMA 
  6 baris yang dipilih. 

Jika Anda menggunakan angka negatif sebagai argumen kedua, titik awal ditentukan dengan menghitung mundur dari akhir, seperti ini:

INPUT:
  SQL> SELECT Nama depan, substr (Nama depan, -13,2) 
   2 DARI TOKOH;
OUTPUT:
  Nama depan SU 
  --------------- - 
  kelly ll 
  CHUCK UC 
  LAURA UR 
  Bernanah ST 
  Armando MA 
  UTAMA JO 
  6 baris yang dipilih. 
ANALISIS:

Ingat lapangan NamaDepan karakter dalam contoh ini adalah 15 karakter. Itu sebabnya Anda menggunakan -13 untuk mulai karakter ketiga. Menghitung kembali dari 15 menempatkan Anda pada awal karakter ketiga, bukan pada awal kedua. Jika Anda tidak memiliki argumen ketiga, gunakan pernyataan berikut ini sebagai gantinya:

INPUT:
  SQL> SELECT Nama depan, substr (Nama depan, 3) 
   2 DARI TOKOH;
OUTPUT:
  NamaDepan substr (FIRSTN 
  ------------- --------------- 
  kelly lly 
  CHUCK UCK 
  LAURA URA 
  Bernanah Ster 
  Armando MANDO 
  UTAMA Jor 
  6 baris yang dipilih. 

Sisa dari target string dikembalikan.

INPUT:
  SQL> SELECT * FROM SSN_TABLE;
OUTPUT:
  SSN__________ 
  300541117 
  301457111 
  459789998 
  3 baris yang dipilih. 
ANALISIS:

Membaca hasil output sebelumnya sulit – nomor Jaminan Sosial biasanya memiliki tanda hubung. Sekarang coba mewah sesuatu dan melihat apakah Anda menyukai hasilnya:

INPUT:
  SQL> SELECT substr (SSN, 1,3 )||'-'|| substr (SSN, 4,2 )||'-'|| substr (SSN, 6,4) SSN 
   2 DARI SSN_TABLE;
OUTPUT:
  SSN_________ 
  300-54-1117 
  301-45-7111 
  459-78-9998 
  3 baris yang dipilih. 

CATATAN: Khusus ini menggunakan fungsi substr bisa datang sangat berguna dengan jumlah besar dengan menggunakan koma seperti 1343178128 dan kode area dan nomor telepon seperti 317-787-2915 menggunakan tanda hubung.


Berikut ini adalah baik penggunaan fungsi substr. Misalkan Anda menulis laporan dan beberapa kolom lebih dari 50 karakter lebar. Anda dapat menggunakan fungsi substr untuk mengurangi lebar kolom ke ukuran diatur lebih jika Anda tahu sifat dari data aktual. Perhatikan dua contoh berikut:

INPUT:
  SQL> SELECT NAMA, JOB, DEPARTEMEN DARI JOB_TBL;
OUTPUT:
  NAME______________________________________________________________ 
  JOB_______________________________DEPARTMENT______________________ 
  ALVIN SMITH 
  VICEPRESIDENT PEMASARAN 

  1 ROW DIPILIH. 
ANALISIS:

Perhatikan bagaimana membungkus kolom, yang membuat membaca hasil agak terlalu sulit. Sekarang coba pilih ini:

INPUT:
  SQL> SELECT substr (NAMA, 1,15) NAMA, substr (JOB, 1,15) JOB, 
              DEPARTEMEN 
   2 DARI JOB_TBL;
OUTPUT:
  NAME________________JOB_______________DEPARTMENT_____ 
  ALVIN VICEPRESIDENT PEMASARAN SMITH 

Jauh lebih baik!

Menterjemahkan

Fungsi Terjemahkan mengambil tiga argumen: string target, string DARI, dan TO string. Unsur dari string target yang terjadi dalam string DARI dijabarkan pada unsur terkait di TO string.

INPUT:
  SQL SELECT NamaDepan>, menerjemahkan (Nama depan 
    2 '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 
    3 'NNNNNNNNNNAAAAAAAAAAAAAAAAAAAAAAAAAA) 
   4 DARI TOKOH;
OUTPUT:
  Terjemahkan Nama depan (PERTAMA 
  --------------- --------------- 
  kelly kelly 
  CHUCK AAAAA 
  LAURA AAAAA 
  Bernanah AAAAAA 
  Armando AAAAAAA 
  AAAAA UTAMA 
  6 baris yang dipilih. 

Perhatikan bahwa fungsi adalah kasus sensitif.

InStr

Untuk mencari tahu di mana dalam sebuah string pola tertentu terjadi, InStr digunakan. Argumen pertama adalah string target. Argumen kedua adalah pola untuk mencocokkan. Yang ketiga dan sebagainya adalah nomor mewakili mana harus mulai mencari dan yang cocok dengan laporan. Contoh ini return angka mewakili kemunculan awal O dimulai dengan karakter kedua:

INPUT:
  SQL> SELECT NamaBelakang, InStr (NamaBelakang, 'O', 2, 1) 
    2 DARI TOKOH;
OUTPUT:
  NamaBelakang InStr (NamaBelakang, 'O', 2,1) 
  --------------- ----------------------- 
  Purvis 0 
  TAYLOR 5 
  CHRISTINE 0 
  Adams 0 
  COSTALES 2 
  KONG 2 
  6 baris yang dipilih. 
ANALISIS:

Default untuk argumen ketiga dan keempat adalah 1. Jika argumen ketiga adalah negatif, pencarian dimulai di posisi yang ditentukan dari akhir string, bukan dari awal.

LENGTH

LENGTH mengembalikan argumen panjang karakter satunya perusahaan. Sebagai contoh:

INPUT:
  SQL> SELECT Nama depan, LENGTH (RTRIM (Nama depan)) 
   2 DARI TOKOH;
OUTPUT:
  NamaDepan LENGTH (RTRIM (Nama depan)) 
  --------------- ------------------------ 
  kelly 5 
  CHUCK 5 
  LAURA 5 
  Bernanah 6 
  Armando 7 
  MAYOR 5 
  6 baris yang dipilih. 
ANALISIS:

Perhatikan penggunaan fungsi RTRIM. Jika tidak, LENGTH akan kembali 15 untuk setiap nilai.

Fungsi Konversi

Ketiga fungsi konversi menyediakan cara mudah untuk mengubah satu jenis data yang lain. Contoh-contoh ini menggunakan KONVERSI tabel.

INPUT:
  SQL> SELECT * FROM KONVERSI;
OUTPUT:
  NAMA TESTNUM 
  --------------- --------- 
  40 95 
  13 23 
  74 68 

Kolom NAMA adalah suatu string karakter 15 karakter lebar, dan TESTNUM adalah angka.

TO_CHAR

Penggunaan utama adalah untuk mengkonversi TO_CHAR angka menjadi karakter. implementasi yang berbeda-beda juga dapat menggunakannya untuk mengkonversi data jenis lain, seperti Date, menjadi sebuah karakter, atau untuk memasukkan argumen format yang berbeda. Contoh berikut menggambarkan penggunaan utama TO_CHAR:

INPUT:
  SQL> SELECT TESTNUM, TO_CHAR (TESTNUM) 
   2 DARI CONVERT;
OUTPUT:
  TESTNUM TO_CHAR (TESTNUM) 
  --------- ---------------- 
         95 95 
         23 23 
         68 68 

Tidak terlalu menarik, atau meyakinkan. Berikut adalah cara untuk memverifikasi bahwa fungsi kembali string karakter:

INPUT:
  SQL> SELECT TESTNUM, LENGTH (TO_CHAR (TESTNUM)) 
  2 CONVERT DARI;
OUTPUT:
  TESTNUM LENGTH (TO_CHAR (TESTNUM)) 
  --------- ------------------------ 
         95 2 
         23 2 
         68 2 
ANALISIS:

LENGTH angka akan kembali kesalahan. Perhatikan perbedaan antara ATAS CHAR dan fungsi CHR dibahas sebelumnya. CHR akan berpaling jumlah ini menjadi karakter atau simbol, tergantung pada karakter set.

TO_NUMBER

TO_NUMBER adalah fungsi pendamping untuk TO_CHAR, dan tentu saja, itu mengkonversi string ke nomor. Sebagai contoh:

INPUT:
  SQL> SELECT NAMA, TESTNUM, TESTNUM * TO_NUMBER (NAMA) 
  2 DARI CONVERT;
OUTPUT:
  NAMA TESTNUM TESTNUM * TO_NUMBER (NAMA) 
  --------------- -------- ----------------------- 
  40 95 3800 
  13 23 299 
  74 68 5032 
ANALISIS:

Tes ini akan kembali kesalahan jika TO_NUMBER telah kembali karakter.

Miscellaneous Fungsi

Berikut adalah tiga fungsi lain-lain Anda mungkin menemukan berguna.

Terbesar dan TERENDAH

Fungsi ini menemukan Terbesar atau anggota KUADRAT dari serangkaian ekspresi. Sebagai contoh:

INPUT:
  SQL> SELECT Terbesar ('ALPHA', 'BRAVO', 'Foxtrot', 'DELTA') 
    2 DARI CONVERT;
OUTPUT:
  Terbesar 
  ------- 
  Foxtrot 
  Foxtrot 
  Foxtrot 
ANALISIS:

Perhatikan Terbesar menemukan kata yang paling dekat ke ujung abjad. Perhatikan juga tidak perlu DARI tampaknya dan tiga kejadian dari Foxtrot. Jika DARI hilang, Anda akan mendapatkan pesan kesalahan. Setiap SELECT kebutuhan DARI sebuah. Tabel khusus yang digunakan dalam DARI memiliki tiga baris, sehingga fungsi dalam klausa SELECT dilakukan untuk masing-masing.

INPUT:
  SQL> SELECT KUADRAT (34, 567, 3, 45, 1090) 
  2 DARI CONVERT;
OUTPUT:
  KUADRAT (34,567,3,45,1090) 
  ----------------------- 
                        3 
                        3 
                        3 

Seperti yang Anda lihat, Terbesar dan KUADRAT juga bekerja dengan angka.

PENGGUNA

PENGGUNA mengembalikan karakter nama pengguna saat ini database.

INPUT:
  SQL SELECT PENGGUNA> DARI CONVERT;
OUTPUT:
  PENGGUNA 
  ------------------------------ 
  PERKINS 
  PERKINS 
  PERKINS 

Ada benar-benar hanya satu dari saya. Sekali lagi, gema terjadi karena jumlah baris dalam tabel. PENGGUNA mirip dengan fungsi tanggal hari ini dijelaskan sebelumnya. Meskipun PENGGUNA bukan kolom aktual dalam tabel, maka dipilih untuk setiap baris yang terdapat dalam tabel.

Ringkasan

Ini telah menjadi hari yang panjang. Kami meliput 47 fungsi – dari agregat untuk konversi). Anda tidak perlu mengingat setiap fungsi – hanya mengetahui secara umum jenis agregat (fungsi, tanggal waktu dan fungsi aritmatika, fungsi karakter, fungsi konversi, fungsi, aneka dan fungsi ini cukup untuk mengarahkan Anda ke arah yang benar ketika Anda membangun sebuah query yang memerlukan fungsi.

Sumber ; http://www.webbasedprogramming.com

SQL Operator

Tinggalkan komentar

“Pengantar Permintaan: Pernyataan SELECT," digunakan SELECT dan FROM Anda untuk memanipulasi data dalam menarik (dan berguna) cara. Hari ini Anda mempelajari lebih lanjut tentang SELECT dan FROM dan memperluas query dasar dengan beberapa istilah baru untuk pergi dengan query, tabel, dan baris, serta klausul baru dan sekelompok barang berguna yang disebut operator. Ketika matahari terbenam pada hari 3, Anda akan

  • ahu apa ekspresi dan bagaimana untuk menggunakannya
  • Tahu kondisi apa dan bagaimana menggunakannya
  • klausa Jadilah akrab dengan dasar penggunaan WHERE yang
  • Dapat menggunakan aritmatika, perbandingan, karakter, logis, dan menetapkan operator
  • Memiliki pengetahuan tentang beberapa operator miscellaneous

CATATAN: Kami menggunakan Oracle Pribadi Oracle7 untuk menghasilkan’s contoh hari ini. implementasi lain dari SQL mungkin sedikit berbeda dengan cara di mana perintah dimasukkan atau output ditampilkan, tetapi hasilnya pada dasarnya sama untuk semua implementasi yang sesuai dengan standar ANSI.


Ekspresi

Definisi dari sebuah ekspresi sederhana: Sebuah ekspresi hasil nilai. Jenis Ekspresi yang sangat luas, meliputi berbagai jenis data seperti String, Numeric, dan Boolean. Bahkan, banyak hal cukup mengikuti ayat (SELECT atau DARI, misalnya) adalah sebuah ekspresi. Dalam jumlah contoh berikut adalah ekspresi yang mengembalikan nilai yang terkandung dalam jumlah kolom.

  cek jumlah SELECT FROM; 

Dalam laporan berikut NAMA, ALAMAT, TELEPON dan AddressBook adalah ekspresi:

 SELECT NAMA, ALAMAT, TELEPON DARI AddressBook;

Sekarang, periksa ekspresi berikut:

  WHERE NAME = 'BROWN' 

Ini mengandung kondisi, sebuah ekspresi Boolean NAME = "BROWN", yang merupakan contoh '. NAME = BROWN' akan baik TRUE atau FALSE, tergantung pada kondisi =.

Kondisi

Jika Anda ingin mencari barang tertentu atau sekelompok item dalam database Anda, Anda perlu satu atau lebih kondisi. Kondisi yang terkandung dalam klausa WHERE. Pada contoh sebelumnya, kondisi ini

  NAME = 'BROWN' 

Untuk menemukan setiap orang dalam organisasi Anda yang bekerja lebih dari 100 jam bulan lalu, kondisi Anda akan

  NUMBEROFHOURS> 100 

Kondisi memungkinkan Anda untuk membuat kueri selektif. Dalam bentuknya yang paling umum, kondisi terdiri dari variabel, konstanta, dan operator perbandingan. Pada contoh pertama variabel adalah NAME, konstanta adalah 'Brown', dan operator perbandingan adalah =. Dalam contoh kedua variabel adalah NUMBEROFHOURS, konstanta adalah 100, dan operator perbandingan ini>.Anda perlu tahu tentang dua lebih elemen sebelum Anda dapat menulis permintaan bersyarat: klausa WHERE dan operator.

The WHERE Klausul

Sintaks klausa WHERE adalah

Sintaks:
  WHERE <SEARCH CONDITION> 

SELECT, FROM, dan WHERE adalah tiga yang paling sering digunakan klausa dalam SQL. WHERE hanya menyebabkan pertanyaan Anda akan lebih selektif. Tanpa klausa WHERE, yang berguna paling Anda bisa lakukan dengan query menampilkan semua catatan dalam tabel yang dipilih ( s). Sebagai contoh:

INPUT:
  SQL> SELECT * FROM bikes; 

daftar semua baris data dalam tabel sepeda.

OUTPUT:
  KOMPOSISI NAMA JENIS FRAMESIZE MILESRIDDEN 
  -------------- --------- ------------ ----------- ---- --- 
  Trek 2.300 3.500 22,5 SERAT KARBON RACING 
  Burley 22 BAJA 2000 Tandem 
  GIANT 19 BAJA 1500 komuter 
  FUJI 20 BAJA 500 Touring 
  Khusus 16 BAJA 100 GUNUNG 
  Cannondale 22,5 ALUMINIUM RACING 3000 

  6 baris yang dipilih. 

Jika Anda ingin sepeda tertentu, Anda bisa mengetik

INPUT / OUTPUT:
  SQL> SELECT * 
       DARI Bikes 
       WHERE NAME 'Burley ='; 

yang akan menghasilkan hanya satu record:

  KOMPOSISI NAMA JENIS FRAMESIZE MILESRIDDEN 
  -------------- -------------- ----------- --------- - ----- 
  Burley 22 BAJA 2000 Tandem 
ANALISIS:

Contoh sederhana ini menunjukkan bagaimana Anda dapat kondisi tempat pada data yang Anda ingin mengambil.

Operator

Operator adalah elemen yang Anda gunakan dalam sebuah ekspresi untuk mengartikulasikan bagaimana Anda ingin kondisi tertentu untuk mengambil data. Operator jatuh ke dalam enam kelompok: aritmatika, perbandingan, karakter, logis, mengatur, dan lain-lain.

Operator Aritmatika

Operator aritmatika adalah plus (+), minus (-), bagi (/), kalikan (*), dan modulo (%). Empat pertama adalah jelas. Modulo mengembalikan sisa integer dari divisi. Berikut adalah dua contoh:

  5% 2 = 1 
  6% 2 = 0 

Operator modulo tidak bekerja dengan tipe data yang memiliki desimal, seperti Real atau Nomor.

Jika Anda menempatkan beberapa dari operator aritmetika dalam ekspresi tanpa tanda kurung, operator diselesaikan dalam urutan ini: perkalian, pembagian, modulo, penambahan, dan pengurangan. Sebagai contoh, ekspresi

  2 * 6 +9 / 3 

sama dengan

  12 + 3 = 15 

Namun, ekspresi

  2 * (6 + 9) / 3 

sama dengan

 2 * 15 / 3 = 10

Perhatikan di mana Anda menempatkan mereka kurung! Kadang ekspresi tidak persis apa yang Anda kirim ke lakukan, bukan apa yang ingin Anda lakukan.

Bagian berikut memeriksa operator aritmetika dalam beberapa detail dan memberikan Anda kesempatan untuk menulis beberapa permintaan.

Plus (+)

Anda dapat menggunakan tanda plus dalam beberapa cara. Ketik pernyataan berikut untuk menampilkan tabel HARGA:

INPUT:
  SQL> SELECT * FROM HARGA;
OUTPUT:
  WHOLESALE ITEM 
  ---------- -------------- 
  TOMAT 0,34 
  KENTANG 0,51 
  Pisang 0,67 
  Lobak 0,45 
  CHEESE 0,89 
  APEL 0,23 

  6 baris yang dipilih. 

Sekarang ketik:

INPUT / OUTPUT:
  SQL> SELECT ITEM, WHOLESALE, + WHOLESALE 0,15 
      DARI HARGA; 

Di sini + menambah 15 sen untuk setiap harga untuk memproduksi berikut:

 WHOLESALE WHOLESALE ITEM 0,15 ---------- ---- --------- -------------- TOMAT KENTANG 0,34 0,49 0,51 0,66 0,67 0,82 pisang lobak 0,45 0,60 0,89 1,04 CHEESE APEL 0,23 0,38
  6 baris yang dipilih. 
ANALISIS:

Apa ini kolom terakhir dengan kolom pos WHOLESALE 0,15 menarik? Ini bukan dalam tabel asli. (Ingat, Anda digunakan * dalam klausa SELECT, yang menyebabkan semua kolom yang akan ditampilkan SQL.) Memungkinkan Anda untuk membuat atau diturunkan kolom virtual dengan menggabungkan atau memodifikasi kolom yang ada.

Ketik ulang entri asli:

INPUT / OUTPUT:
  SQL> SELECT * FROM HARGA; 

Hasil tabel berikut:

  WHOLESALE ITEM 
  -------------- --------- 
  TOMAT 0,34 
  KENTANG 0,51 
  Pisang 0,67 
  Lobak 0,45 
  CHEESE 0,89 
  APEL 0,23 

  6 baris yang dipilih. 
ANALISIS:

Output menegaskan bahwa data asli belum berubah dan bahwa kolom judul WHOLESALE 0,15 bukan bagian permanen dari itu. Bahkan, kolom pos adalah sangat tidak menarik yang harus Anda lakukan sesuatu tentang hal ini.

Ketik berikut:

INPUT / OUTPUT:
  SQL> SELECT ITEM, WHOLESALE, (WHOLESALE + 0,15) ECERAN 
      DARI HARGA; 

Berikut hasilnya:

  WHOLESALE ITEM ECERAN 
  -------------- --------- ------ 
  TOMAT 0,34 0,49 
  KENTANG 0,51 0,66 
  Pisang 0,67 0,82 
  Lobak 0,45 0,60 
  CHEESE 0,89 1,04 
  APEL 0,23 0,38 

  6 baris yang dipilih. 
ANALISIS:

Hal ini indah! Anda tidak hanya dapat membuat kolom baru, namun Anda juga bisa merubah nama mereka dengan cepat. Anda dapat merubah nama kolom menggunakan alias column_namesintaks (perhatikan ruang antara column_name dan alias).

Misalnya, pertanyaan

INPUT / OUTPUT:
  SQL SELECT ITEM> PRODUCE, WHOLESALE, WHOLESALE + 0,25 ECERAN 
       DARI HARGA; 

mengganti nama kolom sebagai berikut:

  WHOLESALE PRODUCE ECERAN 
  -------------- --------- --------- 
  TOMAT 0,34 0,59 
  KENTANG 0,51 0,76 
  Pisang 0,67 0,92 
  Lobak 0,45 0,70 
  CHEESE 0,89 1,14 
  APEL 0,23 0,48 

CATATAN: Beberapa implementasi dari SQL menggunakan nama <column sintaks = alias>. Contoh sebelumnya akan ditulis sebagai berikut:

  SQL SELECT ITEM> = PRODUCE, 
       WHOLESALE, 
       WHOLESALE + 0,25 = ECERAN, 
       HARGA DARI;

Periksa pelaksanaan Anda untuk sintaks yang tepat.


Anda mungkin bertanya-tanya apa gunanya aliasing adalah jika Anda tidak menggunakan perintah SQL-line. Cukup adil. Apakah Anda pernah membayangkan bagaimana laporan kerja pembangun? Suatu hari, ketika Anda diminta untuk menulis sebuah generator laporan, Anda akan ingat ini dan tidak menghabiskan minggu menemukan kembali apa yang Dr Codd dan IBM telah tempa.

Sejauh ini, Anda telah melihat dua penggunaan tanda plus. Contoh pertama adalah penggunaan tanda plus pada klausa SELECT untuk melakukan perhitungan pada data dan menampilkan perhitungan. Penggunaan kedua tanda plus berada di klausa WHERE. Menggunakan operator pada klausa WHERE memberi Anda fleksibilitas yang lebih ketika Anda menetapkan kondisi untuk mengambil data.

Dalam beberapa implementasi dari SQL, tanda plus melakukan tugas ganda sebagai operator karakter. Anda akan melihat sisi plus hari ini kemudian sedikit.

Minus (-)

Minus juga memiliki dua kegunaan. Pertama, bisa mengubah tanda nomor. Anda dapat menggunakan meja HILOW untuk menunjukkan fungsi ini.

INPUT:
  SQL> SELECT * FROM HILOW;
OUTPUT:
  NEGARA HIGHTEMP LOWTEMP 
  ---------- -------- --------- 
  CA -50 120 
  FL 20 110 
  LA 15 99 
  ND -70 101 
  -60 NE 100 

Sebagai contoh, berikut ini adalah cara untuk memanipulasi data:

INPUT / OUTPUT:
  SQL> SELECT NEGARA,-HIGHTEMP lows,-LOWTEMP Highs 
       DARI HILOW; 

  NEGARA highs lows 
  ---------- -------- --------- 
  CA 50 -120 
  FL -20 -110 
  LA -15 -99 
  ND 70 -101 
  NE 60 -100 

Yang kedua (dan jelas) penggunaan tanda minus adalah untuk mengurangi satu kolom dari yang lain. Sebagai contoh:

INPUT / OUTPUT:
  SQL> SELECT NEGARA, 
  2 HIGHTEMP lows, 
  3 LOWTEMP tertinggi, 
  4 (LOWTEMP - HIGHTEMP) SELISIH 
  5 DARI HILOW; 

  PERBEDAAN NEGARA highs lows 
  ---------- -------- -------- ---------- 
  CA -50 120 170 
  FL 20 110 90 
  LA 15 99 84 
  ND -70 101 171 
  NE -60 100 160 

Perhatikan penggunaan alias untuk memperbaiki data yang dimasukkan salah. Obat ini hanyalah patch sementara, meskipun, dan bukan memperbaiki permanen. Anda harus memastikan bahwa data tersebut dikoreksi dan dimasukkan dengan benar di masa mendatang. Pada Hari 21, “Kesalahan umum SQL / Kesalahan dan Penyelesaian,” Anda akan belajar bagaimana memperbaiki data yang buruk.

Query ini tidak hanya tetap (setidaknya secara visual) data yang salah, tetapi juga menciptakan kolom baru yang mengandung perbedaan antara pasang surut masing-masing negara.

Jika Anda tanpa sengaja menggunakan tanda minus di lapangan karakter, Anda mendapatkan sesuatu seperti ini:

INPUT / OUTPUT:
  SQL> SELECT-NEGARA DARI HILOW; 

  ERROR: 
  ORA-01722: nomor yang tidak valid 
  ada baris yang dipilih 

Pesan kesalahan yang tepat bervariasi dengan pelaksanaan, tapi hasilnya sama.

Bagi (/)

Operator divisi hanya memiliki satu arti yang jelas. Menggunakan meja HARGA, ketik berikut:

INPUT:
  SQL> SELECT * FROM HARGA;
OUTPUT:
  WHOLESALE ITEM 
  -------------- --------- 
  TOMAT 0,34 
  KENTANG 0,51 
  Pisang 0,67 
  Lobak 0,45 
  CHEESE 0,89 
  APEL 0,23 

  6 baris yang dipilih. 

Anda dapat menunjukkan efek dari penjualan dua-untuk-satu dengan mengetik pernyataan berikutnya:

INPUT / OUTPUT:
 SQL SELECT ITEM>, WHOLESALE, (WHOLESALE / 2) SALEPRICE 2 DARI HARGA; ITEM WHOLESALE SALEPRICE -------------- --------- ------- - TOMAT KENTANG 0,34 0,17 0,51 0,255 0,67 0,335 pisang lobak Cheese 0,225 0,45 0,89 0,115 0,23 0,445 APEL
  6 baris yang dipilih. 

Penggunaan divisi dalam laporan SELECT sebelumnya sangatlah mudah (kecuali yang datang dengan uang setengah dapat sulit).

Kalikan (*)

Operator multiplikasi juga langsung. Sekali lagi, menggunakan tabel HARGA, ketik berikut:

INPUT:
  SQL> SELECT * FROM HARGA;
OUTPUT:
  WHOLESALE ITEM 
  -------------- --------- 
  TOMAT 0,34 
  KENTANG 0,51 
  Pisang 0,67 
  Lobak 0,45 
  CHEESE 0,89 
  APEL 0,23 

  6 baris yang dipilih. 

Perubahan permintaan ini meja untuk mencerminkan-di papan-diskon 10 persen:

INPUT / OUTPUT:
  SQL> SELECT ITEM, WHOLESALE, WHOLESALE * 0.9 NEWPRICE 
       DARI HARGA; 

  WHOLESALE ITEM NEWPRICE 
  -------------- --------- -------- 
  TOMAT 0,34 0,306 
  KENTANG 0,51 0,459 
  Pisang 0,67 0,603 
  Lobak 0,45 0,405 
  0,89 Cheese 0,801 
  APEL 0,23 0,207 

  6 baris yang dipilih. 

Operator ini memungkinkan Anda untuk melakukan perhitungan kuat dalam sebuah pernyataan SELECT.

Modulo (%)

Operator mengembalikan sisa integer modulo operasi divisi. Menggunakan TETAP meja, ketik berikut:

INPUT:
  SQL SELECT *> FROM TETAP;
OUTPUT:
  Pembilang penyebut 
  ------------ --------- 
         10 5 
          8 3 
         23 9 
         40 17 
       16 1024 
         85 34 

  6 baris yang dipilih. 

Anda juga dapat membuat kolom baru, sisanya, untuk memegang nilai-nilai pembilang% penyebut:

INPUT / OUTPUT:
  SQL> SELECT pembilang, 
       Penyebut, 
       Pembilang% penyebut sisa 
       DARI TETAP; 

  Pembilang penyebut sisa 
  --------- ----------- --------- 
         10 5 0 
          8 3 2 
         23 9 5 
         40 17 6 
       1024 16 0 
         85 34 17 

  6 baris yang dipilih. 

Beberapa implementasi dari SQL menerapkan modulo sebagai fungsi disebut MOD (lihat Hari 4, “Fungsi: Molding Data Anda Ambil”). Pernyataan berikut menghasilkan hasil yang identik dengan hasil pada laporan sebelumnya:

  SQL> SELECT pembilang, 
       Penyebut, 
       MOD (pembilang, penyebut) sisa 
       DARI TETAP; 

Diutamakan

Bagian ini membahas penggunaan protokoler dalam sebuah pernyataan SELECT. Menggunakan database diutamakan, ketik berikut:

  SQL> SELECT * FROM didahulukan; 
         N1 N2 N3 N4 
  --------- --------- --------- --------- 
          1 2 3 4 
         13 24 35 46 
          9 3 23 5 
         63 2 45 3 
          7 2 1 4 

Gunakan segmen kode berikut untuk menguji didahulukan:

INPUT / OUTPUT:
  SQL> SELECT 
    2 N1 + N2 * N3/N4, 
    3 (N1 + N2) * N3/N4, 
    4 N1 + (N2 * N3) / N4 
    5 DARI didahulukan; 

  N1 + N2 * N3/N4 (N1 + N2) * N3/N4 N1 + (N2 * N3) / N4 
  ----------- ------------- ------------- 
          2,5 2,25 2,5 
     28,152174 31,26087 31,26087 
         22,8 55,2 22,8 
           93 93 975 
          7,5 2,25 7,5 

Perhatikan bahwa kolom pertama dan terakhir adalah identik. Jika Anda menambahkan kolom keempat * N1 + N2 (N3/N4), nilai-nilai perusahaan juga akan sama dengan yang pertama kolom terakhir dan saat ini.

Operator Perbandingan

Sesuai dengan namanya, operator perbandingan membandingkan ekspresi dan kembali satu dari tiga nilai: TRUE, FALSE, atau Unknown. Tunggu sebentar?! Unknown TRUE dan FALSE yang cukup jelas, tetapi apa yang tidak diketahui?

Untuk memahami bagaimana Anda bisa mendapatkan Unknown, Anda perlu tahu sedikit tentang konsep NULL. Dalam istilah database NULL adalah tidak adanya data di lapangan. Ini tidak berarti kolom memiliki nol atau kosong di dalamnya. Sebuah nol atau kosong adalah nilai berarti. NULL tidak ada yang dalam bidang itu. Jika Anda membuat perbandingan seperti Lapangan = 9 dan nilai hanya untuk Lapangan adalah NULL, perbandingan itu akan kembali Unknown. Karena tidak diketahui adalah kondisi tidak nyaman, rasa sebagian besar dari SQL perubahan tidak diketahuike FALSE dan menyediakan operator khusus, IS NULL, untuk menguji kondisi NULL.

Berikut ini adalah contoh NULL: Misalkan sebuah entri di dalam tabel HARGA tidak mengandung nilai untuk WHOLESALE. Hasil query dapat terlihat seperti ini:

INPUT:
  SQL> SELECT * FROM HARGA;
OUTPUT:
 WHOLESALE ITEM ---------- -------------- TOMAT KENTANG 0,34 0,51 0,67 pisang lobak APEL 0,89 0,45 0,23 CHEESE Jeruk

Perhatikan bahwa tidak ada yang dicetak dalam posisi bidang WHOLESALE untuk jeruk. Nilai untuk WHOLESALE lapangan untuk jeruk adalah NULL. The NULL terlihat dalam kasus ini karena dalam kolom numerik. Namun, jika NULL muncul di kolom ITEM, mustahil untuk membedakan antara NULL dan kosong.

Cobalah untuk menemukan NULL:

INPUT / OUTPUT:
  SQL> SELECT * 
  2 DARI HARGA 
   3 WHERE IS WHOLESALE NULL; 

  WHOLESALE ITEM 
  ---------- -------------- 
  Jeruk 
ANALISIS:

Seperti yang dapat Anda lihat dengan output, jeruk adalah hanya item yang nilainya untuk WHOLESALE adalah NULL atau tidak mengandung nilai. Bagaimana jika Anda menggunakan tanda sama dengan (=) bukan?

INPUT / OUTPUT:
  SQL> SELECT * 
       HARGA DARI 
       WHERE WHOLESALE = NULL; 

  ada baris yang dipilih 
ANALISIS:

Anda tidak menemukan apa pun karena perbandingan WHOLESALE = NULL kembali FALSE sebuah – hasilnya tidak diketahui. Itu akan lebih tepat untuk menggunakan IS NULL bukannya =,mengubah pernyataan untuk MANA WHERE IS WHOLESALE NULL. Dalam hal ini Anda akan mendapatkan semua baris mana NULL ada.

Contoh ini juga menggambarkan kedua penggunaan operator perbandingan yang paling umum, tanda sama dengan (=), dan taman bermain dari semua operator perbandingan, klausa WHERE.Anda sudah tahu tentang klausa WHERE, jadi inilah sekilas tanda sama.

Equal (=)

Sebelumnya hari ini Anda melihat bagaimana beberapa implementasi dari SQL menggunakan sign sama dalam klausa SELECT untuk menetapkan sebuah alias. Dalam klausa WHERE, tanda sama adalah perbandingan digunakan operator yang paling umum. Digunakan sendiri, tanda sama adalah cara yang sangat mudah memilih satu nilai dari banyak. Coba ini:

INPUT:
  SQL> SELECT * FROM FRIENDS;
OUTPUT:
  NamaBelakang NamaDepan AREACODE ST ZIP PHONE 
  -------------- -------- -------------- --------- - --- - 
  AL Bundy 100 555-1111 IL 22333 
  Meza AL Inggris 200 555-2222 
  Merrick BUD 300 555-6666 CO 80212 
  Mast JD 381 555-6767 LA 23456 
  Ferris BULHER 345 555-3223 IL 23332 

Mari kita cari baris JD itu. (Pada daftar singkat tugas ini tampak sepele, tetapi Anda mungkin memiliki lebih banyak teman daripada kita – atau Anda mungkin memiliki daftar dengan ribuan catatan.)

INPUT / OUTPUT:
  SQL> SELECT * 
       DARI TEMAN 
       WHERE Nama_belakang = 'JD'; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE 
  -------------- -------------- -------- --------- - --- - 
  Mast JD 381 555-6767 LA 23456 

Kami mendapat hasil yang kami harapkan. Coba ini:

INPUT / OUTPUT:
  SQL> SELECT * 
       DARI TEMAN 
       WHERE Nama depan 'AL ='; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE 
  -------------- -------------- -------- --------- - --- - 
  AL Bundy 100 555-1111 IL 22333 
  Meza AL Inggris 200 555-2222 

CATATAN: Di sini Anda melihat bahwa = dapat menarik beberapa catatan. Perhatikan bahwa ZIP kosong pada catatan kedua. ZIP adalah bidang karakter (Anda mempelajari cara membuat dan mengisi tabel pada Hari 8, “Memanipulasi Data”), dan dalam catatan khususnya NULL NULL menunjukkan bahwa dalam bidang karakter mustahil untuk membedakan dari bidang kosong.


Inilah pelajaran lain yang sangat penting tentang kasus kepekaan:

INPUT / OUTPUT:
 SQL> SELECT * FROM FRIENDS WHERE Nama depan = 'BUD'; NamaDepan -------------- BUD 1 baris yang dipilih.

Sekarang coba ini:

INPUT / OUTPUT:
  SQL> * pilih dari teman-teman 
       mana NamaDepan = 'Bud'; 

  ada baris yang dipilih. 
ANALISIS:

Meskipun sintaks SQL tidak bersifat case sensitive, data. Kebanyakan perusahaan lebih memilih untuk menyimpan data dalam huruf besar untuk menyediakan konsistensi data. Anda harus selalu menyimpan data baik dalam huruf besar semua atau huruf kecil semua. Mencampur kasus menciptakan kesulitan ketika Anda mencoba untuk mengambil data akurat.

Greater Than (>) dan lebih besar dari atau sama Untuk (> =)

Operator dari yang lebih besar (>) bekerja seperti ini:

INPUT:
  SQL> SELECT * 
       DARI TEMAN 
       MANA AREACODE> 300;
OUTPUT:
  NamaBelakang NamaDepan AREACODE ST ZIP PHONE 
  -------------- -------------- -------- --------- - --- - 
  Mast JD 381 555-6767 LA 23456 
  BULHER Ferris 345 555-3223 IL 23332 
ANALISIS:

Contoh ini ditemukan semua kode area lebih besar dari (tapi tidak termasuk) 300. Untuk menyertakan 300, jenis ini:

INPUT / OUTPUT:
  SQL> SELECT * 
  2 DARI TEMAN 
  3 WHERE AREACODE> = 300; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE 
  -------------- -------------- -------- --------- - --- - 
  Merrick BUD 300 555-6666 CO 80212 
  Mast JD 381 555-6767 LA 23456 
  Ferris BULHER 345 555-3223 IL 23332 
ANALISIS:

Dengan perubahan ini Anda mendapatkan kode area 300 dan mulai naik. Anda bisa mencapai hasil yang sama dengan pernyataan AREACODE> 299.


CATATAN: Perhatikan bahwa tidak ada kutipan mengelilingi 300 dalam pernyataan SQL. -Didefinisikan bidang-didefinisikan fieldsnumber Jumlah tidak memerlukan tanda kutip.


Kurang dari (<) dan Kurang dari atau sama dengan (<=)

Seperti yang Anda duga, ini pekerjaan operator perbandingan cara yang sama seperti> dan> bekerja =, hanya secara terbalik:

INPUT:
  SQL> SELECT * 
  2 DARI TEMAN 
  3 NEGARA MANA <'LA';
OUTPUT:
 NamaBelakang NamaDepan AREACODE ZIP PHONE ST -------------- -------------- --------- ------- - - ------ AL Bundy IL 22333 100 555-1111 300 555-6666 Merrick BUD CO BULHER 80.212 Ferris 345 555-3223 IL 23332

CATATAN: Bagaimana NEGARA bisa berubah menjadi ST? Karena kolom hanya memiliki dua karakter, nama kolom disingkat menjadi dua karakter di baris kembali. Jika nama kolom yang KK telah, akan keluar CO. Lebar dari AREACODE dan TELEPON adalah lebih lebar dari kolom nama mereka, sehingga mereka tidak terpotong.


ANALISIS:

Tunggu sebentar. Apakah Anda hanya menggunakan <di lapangan karakter? Tentu saja Anda lakukan. Anda dapat menggunakan salah satu operator pada setiap tipe data. Hasil bervariasi menurut tipe data. Misalnya, gunakan huruf kecil dalam pencarian negara berikut:

INPUT / OUTPUT:
  SQL> SELECT * 
  2 DARI TEMAN 
  3 MANA NEGARA <'la'; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE 
  -------------- -------------- --------- -------- - --- - 
  AL Bundy 100 555-1111 IL 22333 
  Meza AL Inggris 200 555-2222 
  Merrick BUD 300 555-6666 CO 80212 
  Mast JD 381 555-6767 LA 23456 
  Ferris BULHER 345 555-3223 IL 23332 
ANALISIS:

Huruf besar biasanya disortir sebelum huruf kecil, sehingga kode huruf besar kembali kurang dari 'la'. Sekali lagi, aman, periksa implementasi Anda.


TIP: Untuk memastikan bagaimana operator akan berperilaku, periksa tabel bahasa Anda. implementasi Kebanyakan PC menggunakan tabel ASCII. Beberapa platform lainnya menggunakan EBCDIC.


Untuk memasukkan negara bagian Louisiana dalam pencarian asli, jenis

INPUT / OUTPUT:
  SQL> SELECT * 
   2 DARI TEMAN 
  3 WHERE <NEGARA = 'LA'; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE 
  -------------- -------------- --------- -------- - --- - 
  AL Bundy 100 555-1111 IL 22333 
  Merrick BUD 300 555-6666 CO 80212 
  Mast JD 381 555-6767 LA 23456 
  Ferris BULHER 345 555-3223 IL 23332 

Ketimpangan (<> atau! =)

Bila Anda perlu menemukan segala sesuatu kecuali data tertentu, gunakan simbol ketimpangan, yang dapat berupa <> atau! = Tergantung pada implementasi SQL Anda. Sebagai contoh, untuk menemukan semua orang yang tidak AL, ketik ini:

INPUT:
  SQL> SELECT * 
  2 DARI TEMAN 
  3 WHERE NamaDepan <> 'AL';
OUTPUT:
 NamaBelakang NamaDepan AREACODE ZIP PHONE ST -------------- -------------- --------- ------- - - Merrick ----- BUD CO 80212 300 555-6666 381 555-6767 Mast JD LA BULHER 23.456 Ferris 345 555-3223 IL 23332

Untuk mencari semua orang tidak tinggal di California, ketik ini:

INPUT / OUTPUT:
  SQL> SELECT * 
  2 DARI FRIENDS 
  3 MANA NEGARA '! =' CA; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE 
  -------------- -------------- -------- --------- - --- - 
  AL Bundy 100 555-1111 IL 22333 
  Meza AL Inggris 200 555-2222 
  Merrick BUD 300 555-6666 CO 80212 
  Mast JD 381 555-6767 LA 23456 
  Ferris BULHER 345 555-3223 IL 23332 

CATATAN: Perhatikan bahwa kedua simbol, <> dan! =, Dapat mengungkapkan “tidak sama.”


Karakter Operator

Anda dapat menggunakan operator untuk memanipulasi string karakter karakter cara diwakili, baik dalam output data dan dalam proses menempatkan kondisi pada data yang akan diambil.Bagian ini menjelaskan dua karakter operator: operator LIKE dan | operator |, yang menyampaikan konsep Rangkaian karakter.

Aku Ingin Seperti SEPERTI

Bagaimana jika Anda ingin memilih bagian dari database yang sesuai dengan pola, tetapi tidak cukup tepat sama? Anda bisa menggunakan tanda yang sama dan dijalankan melalui semua kasus mungkin, tapi proses itu akan membosankan dan menyita waktu. Sebaliknya, Anda dapat menggunakan SEPERTI. Pertimbangkan hal berikut:

INPUT:
  SQL> SELECT * FROM PARTS;
OUTPUT:
  NAMA LOKASI PARTNUMBER 
  -------------- -------------- ---------- 
  MID-PERUT LAMPIRAN 1 
  Adams APPLE Tenggorokan 2 
  HATI DADA 3 
  Spine BACK 4 
  Landasan EAR 5 
  GINJAL MID-BACK 6 

Bagaimana Anda bisa menemukan semua bagian yang terletak di belakang? Sebuah inspeksi visual cepat dari tabel sederhana ini menunjukkan bahwa ia memiliki dua bagian, tapi sayangnya lokasi yang memiliki nama berbeda sedikit. Coba ini:

INPUT / OUTPUT:
  SQL> SELECT * 
  2 DARI PARTS 
   3 MANA LOKASI LIKE '% KEMBALI%'; 

  NAMA LOKASI PARTNUMBER 
  -------------- -------------- ---------- 
  Spine BACK 4 
  GINJAL MID-BACK 6 
ANALISIS:

Anda dapat melihat penggunaan tanda persen (%) dalam laporan setelah SEPERTI. Ketika digunakan di dalam ekspresi SEPERTI,% merupakan wildcard. Apa yang Anda minta adalah setiap kejadian BACK di kolom lokasi. Jika Anda tanya

INPUT:
  SQL> SELECT * 
       DARI PARTS 
       LOKASI DI MANA SEPERTI 'BACK%'; 

Anda akan mendapatkan kejadian yang dimulai dengan BACK:

OUTPUT:
  NAMA LOKASI PARTNUMBER 
  -------------- -------------- ---------- 
  Spine BACK 4 

Jika Anda tanya

INPUT:
  SQL> SELECT * 
       DARI PARTS 
      WHERE NAMA LIKE '% A'; 

Anda akan mendapatkan nama yang dimulai dengan A:

OUTPUT:
  NAMA LOKASI PARTNUMBER 
  -------------- -------------- ---------- 
  MID-PERUT LAMPIRAN 1 
  Adams APPLE Tenggorokan 2 
  Landasan EAR 5 

Apakah kasus SEPERTI sensitif? Coba permintaan berikutnya untuk mencari tahu.

INPUT / OUTPUT:
  SQL> SELECT * 
       DARI PARTS 
       WHERE NAME LIKE '% a'; 

  ada baris yang dipilih 
ANALISIS:

Jawabannya adalah ya. Referensi data selalu kasus sensitif.

Bagaimana jika Anda ingin mencari data yang cocok semua kecuali satu karakter dalam pola tertentu? Dalam hal ini Anda dapat menggunakan berbagai jenis wildcard: ini garis bawah.

Underscore (_)

Ini menggarisbawahi adalah karakter wildcard tunggal. Menggunakan versi modifikasi dari TEMAN tabel, jenis ini:

INPUT:
  SQL> SELECT * FROM FRIENDS;
OUTPUT:
  NamaBelakang NamaDepan AREACODE ST ZIP PHONE 
  -------------- -------------- -------- --------- - --- - 
  AL Bundy 100 555-1111 IL 22333 
  Meza AL Inggris 200 555-2222 
  UD Merrick 300 555-6666 CO 80212 
  Mast JD 381 555-6767 LA 23456 
  Ferris BULHER 345 555-3223 IL 23332 
  Alton PERKINS CA 95633 911 555-3116 
  BOSS SIR 204 555-2345 CT 95633 

Untuk menemukan semua catatan di mana NEGERI dimulai dengan C, ketik berikut:

INPUT / OUTPUT:
  SQL> SELECT * 
    2 DARI TEMAN 
  3 MANA NEGARA SEPERTI 'C_';
  NamaBelakang NamaDepan AREACODE ST ZIP PHONE 
  -------------- -------------- -------- --------- - --- - 
  Merrick BUD 300 555-6666 CO 80212 
  Alton PERKINS CA 95633 911 555-3116 
  BOSS SIR 204 555-2345 CT 95633 

Anda dapat menggunakan beberapa garis bawah dalam sebuah pernyataan:

INPUT / OUTPUT:
  SQL> SELECT * 
   2 DARI TEMAN 
   3 WHERE TELEPON LIKE'555-6_6_ '; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE 
  -------------- -------------- -------- --------- - --- - 
  Merrick BUD 300 555-6666 CO 80212 
  Mast JD 381 555-6767 LA 23456 

Pernyataan sebelumnya juga dapat ditulis sebagai berikut:

INPUT / OUTPUT:
  SQL> SELECT * 
    2 DARI TEMAN 
   3 MANA SEPERTI TELEPON '555-6% '; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE 
  -------------- -------------- -------- --------- - --- - 
  Merrick BUD 300 555-6666 CO 80212 
  Mast JD 381 555-6767 LA 23456 

Perhatikan bahwa hasil adalah identik. Kedua wildcard dapat dikombinasikan. Contoh berikut menemukan semua catatan dengan L sebagai karakter kedua:

INPUT / OUTPUT:
 SQL> SELECT * FROM FRIENDS 2 3 WHERE NamaDepan LIKE '_L%'; AREACODE NamaBelakang NamaDepan TELEPON ST ZIP -------------- -------------- --------- -------- - ----- Bundy AL IL 22333 100 555-1111 200 555-2222 Meza AL Inggris PERKINS Alton CA 95633 911 555-3116

Rangkaian (| |)

The | | (pipa ganda) simbol concatenates dua string. Coba ini:

INPUT:
  SQL> SELECT NamaDepan | | NamaBelakang ENTIRENAME 
    2 DARI TEMAN;
OUTPUT:
  ENTIRENAME 
  ---------------------- 
  AL Bundy 
  AL Meza 
  BUD Merrick 
  JD Mast 
  Ferris BULHER 
  Alton PERKINS 
  SIR BOSS 

  7 baris yang dipilih. 
ANALISIS:

Perhatikan bahwa | | digunakan bukan +. Jika Anda menggunakan + untuk mencoba menyatukan string, penafsir SQL digunakan untuk contoh (Personal Oracle7) mengembalikan kesalahan berikut:

INPUT / OUTPUT:
  SQL> SELECT Nama depan + NamaBelakang ENTIRENAME 
       DARI TEMAN; 

  ERROR: 
  ORA-01722: nomor yang tidak valid 

Ini adalah mencari dua nomor untuk menambahkan dan melempar kesalahan nomor yang tidak valid ketika tidak menemukan apapun.


CATATAN: Beberapa implementasi dari SQL menggunakan tanda plus untuk menyatukan string. Periksa pelaksanaan Anda.


Here’s a more practical example using concatenation:

INPUT / OUTPUT:
 SQL> SELECT LASTNAME || ',' || FIRSTNAME NAME
     FROM FRIENDS;

NAME
------------------------------------------------------
BUNDY    , AL
MEZA     , AL
MERRICK  , BUD
MAST     , JD
BULHER   , FERRIS
PERKINS  , ALTON
BOSS     , SIR

  7 baris yang dipilih. 
ANALISIS:

This statement inserted a comma between the last name and the first name.


CATATAN: Notice the extra spaces between the first name and the last name in these examples. These spaces are actually part of the data. With certain data types, spaces are right-padded to values less than the total length allocated for a field. See your implementation. Data types will be discussed on Day 9, “Creating and Maintaining Tables.”


So far you have performed the comparisons one at a time. That method is fine for some problems, but what if you need to find all the people at work with last names starting with P who have less than three days of vacation time?

Logical Operators

logical operatorsLogical operators separate two or more conditions in the WHERE clause of an SQL statement.

Vacation time is always a hot topic around the workplace. Say you designed a table called VACATION for the accounting department:

INPUT:
 SQL> SELECT * FROM VACATION;
OUTPUT:
 LASTNAME       EMPLOYEENUM    YEARS  LEAVETAKEN
-------------- ----------- --------- ----------
ABLE                   101        2           4
BAKER                  104        5          23
BLEDSOE                107        8          45
BOLIVAR                233        4          80
BOLD                   210       15         100
COSTALES               211       10          78

  6 baris yang dipilih. 

Misalkan perusahaan Anda setiap karyawan memberikan cuti 12 hari setiap tahun. Menggunakan apa yang Anda pelajari dan operator logis, menemukan semua karyawan yang namanya mulai dengan B dan yang memiliki lebih dari 50 hari cuti datang.

INPUT / OUTPUT:
 SQL> SELECT LASTNAME,
   2   YEARS * 12 - LEAVETAKEN REMAINING
   3   FROM VACATION
   4   WHERE LASTNAME LIKE 'B%'
  5   AND
  6  YEARS * 12 - LEAVETAKEN > 50;

LASTNAME       REMAINING
-------------- ---------
BLEDSOE               51
BOLD                  80
ANALISIS:

Query ini adalah yang paling rumit yang telah Anda lakukan selama ini. Klausa SELECT (baris 1 dan 2) menggunakan operator aritmatika untuk menentukan berapa hari cuti tiap karyawan memiliki sisa. Yang diutamakan normal menghitung TAHUN * 12 - LEAVETAKEN (. (Lebih jelas Pendekatan akan menulis TAHUN * 12) - LEAVETAKEN.)

SEPERTI yang digunakan sesuai dengan 4% wildcard untuk menemukan semua nama B. Line 6 menggunakan> untuk menemukan semua kejadian yang lebih besar dari 50.

Unsur baru pada baris 5. Anda menggunakan operator logika AND untuk memastikan bahwa Anda menemukan catatan yang memenuhi kriteria di baris 4 dan 6.

DAN

DAN berarti bahwa ekspresi kedua belah pihak harus benar mengembalikan TRUE. Jika ekspresi baik adalah palsu, DAN kembali FALSE. Misalnya, untuk mengetahui karyawan telah dengan perusahaan selama 5 tahun atau kurang dan telah mengambil lebih dari 20 hari cuti, coba ini:

INPUT:
  SQL> SELECT NamaBelakang 
  2 dari liburan 
  3 WHERE TAHUN <= 5 
  4 DAN 
   5 LEAVETAKEN> 20;
OUTPUT:
  NamaBelakang 
  -------- 
  BAKER 
  Bolivar 

Jika Anda ingin tahu yang telah karyawan dengan perusahaan selama 5 tahun atau lebih dan telah diambil kurang dari 50 persen meninggalkan mereka, Anda bisa menulis:

INPUT / OUTPUT:
  SQL> SELECT NamaBelakang workaholics 
  2 dari liburan 
   3 TAHUN WHERE> = 5 
   4 DAN 
   5 ((TAHUN * 12) -LEAVETAKEN) / (TAHUN * 12) <0,50; 

  Workaholics 
  --------------- 
  BAKER 
  Bledsoe 

Periksa orang-orang untuk pemadaman. Juga memeriksa bagaimana kita menggunakan AND untuk menggabungkan dua kondisi.

ATAU

Anda juga dapat menggunakan OR untuk meringkas serangkaian kondisi. Jika salah satu perbandingan adalah benar, kembali OR TRUE. Untuk menggambarkan perbedaan itu, conditionsrun permintaan terakhir dengan OR bukannya dengan DAN:

INPUT:
  SQL> SELECT NamaBelakang workaholics 
    2 dari liburan 
    3 WHERE TAHUN> = 5 
   4 OR 
  5 ((TAHUN * 12) -LEAVETAKEN) / (TAHUN * 12)> = 0,50;
OUTPUT:
  Workaholics 
  --------------- 
  MAMPU 
  BAKER 
  Bledsoe 
  BOLD 
  COSTALES 
ANALISIS:

Nama asli masih dalam daftar, namun Anda memiliki tiga entri baru (yang mungkin akan membenci yang pecandu kerja yang disebut). Ketiga membuat daftar nama-nama baru karena mereka puas salah satu kondisi. ATAU membutuhkan bahwa hanya satu dari kondisi benar agar data yang akan dikembalikan.

TIDAK

TIDAK berarti hanya itu. Jika kondisi ini berlaku untuk mengevaluasi ke TRUE, TIDAK membuat FALSE. Jika kondisi setelah NOT FALSE, itu menjadi TRUE. Sebagai contoh, kembali SELECT berikut hanya dua nama, bukan dimulai dengan B dalam tabel:

INPUT:
  SQL> SELECT * 
  2 dari liburan 
    3 WHERE NamaBelakang TIDAK LIKE 'B%';
OUTPUT:
  TAHUN EMPLOYEENUM NamaBelakang LEAVETAKEN 
  -------------- ----------- -------- ---------- 
  MAMPU 101 2 4 
  COSTALES 211 10 78 

TIDAK juga dapat digunakan dengan operator IS bila diterapkan ke NULL. Ingat meja BIAYA mana kita menempatkan nilai NULL di kolom WHOLESALE sebaliknya jeruk item.

INPUT / OUTPUT:
  SQL> SELECT * FROM HARGA; 

  WHOLESALE ITEM 
  -------------- --------- 
  TOMAT 0,34 
  KENTANG 0,51 
  Pisang 0,67 
  Lobak 0,45 
  CHEESE 0,89 
  APEL 0,23 
  Jeruk 

  7 baris yang dipilih. 

Untuk menemukan item non-NULL, ketik ini:

INPUT / OUTPUT:
SQL> SELECT * 2 FROM PRICE 3 WHERE WHOLESALE IS NOT NULL; ITEM           WHOLESALE -------------- --------- TOMATOES             .34 POTATOES             .51 BANANAS              .67 TURNIPS              .45 CHEESE               .89 APPLES               .23
  6 baris yang dipilih. 

Set Operators

On Day 1, “Introduction to SQL,” you learned that SQL is based on the theory of sets. The following sections examine set operators.

UNION and UNION ALL

UNION returns the results of two queries minus the duplicate rows. The following two tables represent the rosters of teams:

INPUT:
 SQL> SELECT * FROM FOOTBALL;
OUTPUT:
  NAMA 
--------------------
  MAMPU 
BRAVO
CHARLIE
DECON
EXITOR
FUBAR
GOOBER

  7 baris yang dipilih. 
INPUT:
 SQL> SELECT * FROM SOFTBALL;
OUTPUT:
  NAMA 
--------------------
  MAMPU 
BAKER
CHARLIE
DEAN
EXITOR
FALCONER
GOOBER

  7 baris yang dipilih. 

How many different people play on one team or another?

INPUT / OUTPUT:
SQL> SELECT NAME FROM SOFTBALL 2 UNION 3 SELECT NAME FROM FOOTBALL; NAME -------------------- ABLE BAKER BRAVO CHARLIE DEAN DECON EXITOR FALCONER FUBAR GOOBER
 10 rows selected.

UNION returns 10 distinct names from the two lists. How many names are on both lists (including duplicates)?

INPUT / OUTPUT:
 SQL> SELECT NAME FROM SOFTBALL
  2   UNION ALL
  3  SELECT NAME FROM FOOTBALL;

  NAMA 
--------------------
  MAMPU 
BAKER
CHARLIE
DEAN
EXITOR
FALCONER
GOOBER
  MAMPU 
BRAVO
CHARLIE
DECON
EXITOR
FUBAR
GOOBER

 14 rows selected.
ANALISIS:

Daftar gabungan – milik UNION ALL pernyataan – memiliki 14 nama. UNION ALL bekerja seperti UNI kecuali ia tidak menghilangkan duplikasi. Sekarang tunjukkan daftar pemain yang berada di kedua tim. Anda tidak dapat melakukannya dengan UNI – Anda perlu belajar INTERSECT.

INTERSECT

INTERSECT kembali hanya baris ditemukan oleh kedua permintaan. Pernyataan SELECT berikutnya menampilkan daftar pemain yang bermain di kedua tim:

INPUT:
 SQL> SELECT * FROM FOOTBALL
  2  INTERSECT
  3   SELECT * FROM SOFTBALL;
OUTPUT:
NAME -------------------- ABLE CHARLIE EXITOR GOOBER
ANALISIS:

Dalam contoh ini INTERSECT menemukan daftar pendek pemain yang berada di kedua tim dengan menggabungkan hasil dari dua pernyataan SELECT.

MINUS (Difference)

Minus mengembalikan baris dari query pertama yang tidak hadir pada urutan kedua. Sebagai Contoh:

INPUT:
 SQL> SELECT * FROM FOOTBALL
  2  MINUS
  3  SELECT * FROM SOFTBALL;
OUTPUT:
  NAMA 
--------------------
BRAVO
DECON
FUBAR
ANALISIS:

Permintaan sebelumnya menunjukkan tiga pemain sepak bola yang tidak di tim softball. Jika Anda membalik urutan, Anda mendapatkan tiga pemain softball yang tidak berada pada tim sepak bola:

INPUT:
 SQL> SELECT * FROM SOFTBALL
  2  MINUS
  3  SELECT * FROM FOOTBALL;
OUTPUT:
  NAMA 
--------------------
BAKER
DEAN
FALCONER

Miscellaneous Operators: IN and BETWEEN

Kedua operator IN dan ANTARA memberikan singkatan untuk fungsi Anda sudah tahu bagaimana melakukannya. Jika Anda ingin menemukan teman-teman di Colorado, California, dan Louisiana, Anda bisa mengetik berikut:

INPUT:
  SQL> SELECT * 
   2   FROM FRIENDS
  3  WHERE STATE= 'CA'
   4  OR
   5  STATE ='CO'
  6   OR
  7  STATE = 'LA';
OUTPUT:
 LASTNAME       FIRSTNAME       AREACODE PHONE    ST ZIP
-------------- -------------- --------- -------- -- -----
MERRICK        BUD                  300 555-6666 CO 80212
MAST           JD                   381 555-6767 LA 23456
PERKINS        ALTON                911 555-3116 CA 95633

Or you could type this:

INPUT / OUTPUT:
  SQL> SELECT * 
  2   FROM FRIENDS
   3   WHERE STATE IN('CA','CO','LA');
 LASTNAME       FIRSTNAME       AREACODE PHONE    ST ZIP
-------------- -------------- --------- -------- -- -----
MERRICK        BUD                  300 555-6666 CO 80212
MAST           JD                   381 555-6767 LA 23456
PERKINS        ALTON                911 555-3116 CA 95633
ANALISIS:

Contoh kedua yang lebih pendek dan lebih mudah dibaca daripada yang pertama. Anda tidak pernah tahu kapan Anda mungkin harus kembali dan mengerjakan sesuatu yang Anda tulis bulan lalu. DI juga bekerja dengan angka. Pertimbangkan yang berikut ini, di mana kolom AREACODE adalah angka:

INPUT / OUTPUT:
 SQL> SELECT * 2    DARI TEMAN 
  3 AREACODE DI MANA (100.381.204); AREACODE NamaBelakang NamaDepan ZIP PHONE ST -------------- -------------- -------- - -------- - ----- Bundy AL IL 22333 100 555-1111 381 555-6767 Mast JD LA BOSS SIR 23.456 95.633 204 555-2345 CT

Jika Anda membutuhkan berbagai hal dari meja HARGA, Anda bisa menulis hal berikut:

INPUT / OUTPUT:
  SQL> SELECT * 
   2 DARI HARGA 
   3 WHERE 0,25> WHOLESALE 
  4 DAN 
  5 WHOLESALE <0,75; 

ITEM           WHOLESALE
-------------- ---------
TOMATOES             .34
POTATOES             .51
BANANAS              .67
TURNIPS              .45

Or using BETWEEN , you would write this:

INPUT / OUTPUT:
  SQL> SELECT * 
  2  FROM PRICE
  3   WHERE WHOLESALE BETWEEN 0.25 AND 0.75;

ITEM            WHOLESALE
-------------- ---------
TOMATOES              .34
POTATOES              .51
BANANAS               .67
TURNIPS               .45

Sekali lagi, contoh kedua adalah solusi, bersih lebih mudah dibaca daripada yang pertama.

Catatan: Jika nilai WHOLESALE sebesar 0.25 ada dalam tabel HARGA, yang merekam akan diambil juga. Parameter yang digunakan dalam operator ANTARA adalah parametersinclusive inklusif.

Ringkasan

Pada Latihan selanjutnya Anda tahu bagaimana menggunakan SELECT dasar dan klausa FROM. Sekarang Anda tahu bagaimana menggunakan sejumlah operator yang memungkinkan Anda untuk menyempurnakan permintaan Anda ke database. Anda belajar bagaimana menggunakan aritmatika, perbandingan, karakter, logis, dan operator ditetapkan. Set alat kuat memberikan landasan pengetahuan SQL Anda.

Pengantar Permintaan: Pernyataan SELECT," digunakan Anda SELECT dan FROM untuk memanipulasi data dalam menarik (dan berguna) cara. Hari ini Anda mempelajari lebih tentangSELECT dan FROM dan memperluas query dasar dengan beberapa istilah baru untuk pergi dengan query, tabel, dan baris, serta klausul baru dan sekelompok barang berguna yang disebut operator.

  • Kenal apa ekspresi itu dan bagaimana menggunakannya
  • Kenal kondisi apa dan bagaimana menggunakannya
  • Jadilah akrab dengan dasar penggunaan WHERE
  • Dapat menggunakan aritmatika, perbandingan, karakter, logis, dan menetapkan operator
  • Memiliki pengetahuan tentang beberapa operator miscellaneous

Definisi dari sebuah ekspresi sederhana: Sebuah ekspresi hasil nilai. Jenis Ekspresi yang sangat luas, meliputi berbagai jenis data seperti String, Numeric, dan Boolean. Bahkan, banyak hal cukup mengikuti ayat (SELECT atau DARI, misalnya) adalah sebuah ekspresi. Dalam jumlah contoh berikut adalah ekspresi yang mengembalikan nilai yang terkandung dalam jumlah kolom.

  cek jumlah SELECT FROM;

Dalam laporan berikut NAMA, ALAMAT, TELEPON dan AddressBook adalah ekspresi:

  SELECT NAMA, ALAMAT, TELEPON
  DARI AddressBook;

Sekarang, periksa ekspresi berikut:

  WHERE NAME = 'BROWN'

Ini berisi kondisi, sebuah ekspresi Boolean NAME = "BROWN", yang merupakan contoh '. NAME = BROWN' akan baik TRUE atau FALSE, tergantung pada kondisi =.

Kondisi

Jika Anda ingin mencari barang tertentu atau sekelompok item dalam database Anda, Anda perlu satu atau lebih kondisi. Kondisi yang terkandung dalam klausa WHERE. Dalam contoh sebelumnya, kondisi ini

  NAME = 'BROWN'

Untuk menemukan setiap orang dalam organisasi Anda yang bekerja lebih dari 100 jam bulan lalu, kondisi Anda akan

  NUMBEROFHOURS> 100

Kondisi memungkinkan Anda untuk membuat kueri selektif. Dalam bentuknya yang paling umum, kondisi terdiri dari variabel, konstanta, dan operator perbandingan. Dalam contoh pertama variabel adalah NAMA, konstanta adalah 'Brown', dan operator perbandingan adalah =. Dalam contoh kedua variabel adalah NUMBEROFHOURS, konstanta adalah 100, dan operator perbandinganini>. Anda perlu tahu tentang dua lebih elemen sebelum Anda dapat menulis permintaan bersyarat: klausa WHERE dan operator.

The WHERE Klausul

Sintaks klausa WHERE adalah

Sintaks:
  WHERE <SEARCH CONDITION>

SELECT, FROM, dan WHERE adalah tiga yang paling sering digunakan klausa dalam SQL. WHERE hanya menyebabkan pertanyaan Anda ke lebih selektif. Tanpa klausa WHERE, hal yang paling bermanfaat yang dapat Anda lakukan dengan query menampilkan semua catatan dalam tabel yang dipilih ( s). Sebagai contoh:

INPUT:
  SQL> SELECT * FROM bikes;

Daftar semua baris data dalam tabel sepeda.

OUTPUT:
  KOMPOSISI NAMA JENIS FRAMESIZE MILESRIDDEN
  -------------- --------- ------------ ----------- ---- ---
  Trek 2.300 3.500 22,5 SERAT KARBON RACING
  Burley 22 BAJA 2000 Tandem
  19 BAJA 1500 GIANT Komuter
  FUJI 20 BAJA 500 Touring
  Khusus 16 BAJA 100 GUNUNG
  Cannondale 22,5 ALUMINIUM RACING 3000 

  6 baris yang dipilih.

Jika Anda ingin sepeda tertentu, Anda bisa mengetik

INPUT / OUTPUT:
  SQL> SELECT *  
       DARI Bikes   
       WHERE NAME 'Burley ='; 

yang akan menghasilkan hanya satu record:

  KOMPOSISI NAMA JENIS FRAMESIZE MILESRIDDEN
  -------------- -------------- ----------- --------- - -----
  Burley 22 BAJA 2000 Tandem
ANALISIS:

Contoh sederhana ini menunjukkan bagaimana Anda dapat menempatkan kondisi pada data yang Anda inginkan untuk mengambil.

Operator

Operator adalah elemen yang Anda gunakan dalam sebuah ekspresi untuk mengartikulasikan bagaimana Anda ingin kondisi tertentu untuk mengambil data. Operator jatuh ke dalam enam kelompok: aritmatika, perbandingan, karakter, logis, mengatur, dan lain-lain.

Operator Aritmatika

Operator aritmatika adalah plus (+), minus (-), bagi (/), kalikan (*), dan modulo (%). Empat pertama adalah jelas. Modulo mengembalikan sisa integer dari divisi. Berikut adalah dua contoh:

  5% 2 = 1
  6% 2 = 0

Operator modulo tidak bekerja dengan tipe data yang memiliki desimal, seperti Real atau Nomor.

Jika Anda menempatkan beberapa dari operator aritmetika dalam ekspresi tanpa kurung, operator diselesaikan dalam urutan ini: perkalian, divisi, modulo, penambahan, dan pengurangan.Sebagai contoh, ekspresi

  2 * 6 +9 / 3

sama dengan

  12 + 3 = 15

Namun, ekspresi

  2 * (6 + 9) / 3

sama dengan

  2 * 15 / 3 = 10

Perhatikan di mana Anda menempatkan mereka kurung! Kadang ekspresi tidak persis apa yang Anda kirim ke lakukan, bukan apa yang ingin Anda lakukan.

Bagian berikut memeriksa operator aritmetika dalam beberapa detail dan memberikan Anda kesempatan untuk menulis beberapa permintaan.

Plus (+)

Anda dapat menggunakan tanda plus dalam beberapa cara. Ketik pernyataan berikut untuk menampilkan tabel HARGA:

INPUT:
  SQL> * SELECT DARI HARGA;
OUTPUT:
  WHOLESALE ITEM
  ---------- --------------
  TOMAT 0,34
  KENTANG 0,51
  Pisang 0,67
  Lobak 0,45
  CHEESE 0,89
  APEL 0,23 

  6 baris yang dipilih.

Sekarang ketik:

INPUT / OUTPUT:
  SQL> SELECT ITEM, WHOLESALE, + WHOLESALE 0,15  
      DARI HARGA; 

Di sini + menambah 15 sen untuk setiap harga untuk menghasilkan berikut:

  WHOLESALE WHOLESALE ITEM 0,15
  -------------- --------- --------------
  TOMAT 0,34 0,49
  KENTANG 0,51 0,66
  Pisang 0,67 0,82
  Lobak 0,45 0,60
  CHEESE 0,89 1,04
  APEL 0,23 0,38 

  6 baris yang dipilih.
ANALISIS:

Apa ini kolom terakhir dengan kolom pos WHOLESALE 0,15 menarik? Ini bukan dalam tabel asli. (Ingat, Anda digunakan * dalam klausa SELECT, yang menyebabkan semua kolom yang akan ditampilkan SQL.) Memungkinkan Anda untuk membuat atau diturunkan kolom virtual dengan menggabungkan atau memodifikasi kolom yang ada.

Ketik ulang entri asli:

INPUT / OUTPUT:
  SQL> * SELECT DARI HARGA;

Hasil tabel berikut:

  WHOLESALE ITEM
  -------------- ---------
  TOMAT 0,34
  KENTANG 0,51
  Pisang 0,67
  Lobak 0,45
  CHEESE 0,89
  APEL 0,23 

  6 baris yang dipilih.
ANALISIS:

Output menegaskan bahwa data asli belum berubah dan bahwa kolom judul WHOLESALE 0,15 bukan bagian permanen dari itu. Bahkan, kolom pos adalah sangat tidak menarik yang harus Anda lakukan sesuatu tentang hal ini.

Ketik berikut:

INPUT / OUTPUT:
  SQL> SELECT ITEM, WHOLESALE, (WHOLESALE + 0,15) ECERAN  
      DARI HARGA; 

Berikut hasilnya:

  WHOLESALE ITEM ECERAN
  -------------- --------- ------
  TOMAT 0,34 0,49
  KENTANG 0,51 0,66
  Pisang 0,67 0,82
  Lobak 0,45 0,60
  CHEESE 0,89 1,04
  APEL 0,23 0,38 

  6 baris yang dipilih.
ANALISIS:

Hal ini indah! Anda tidak hanya dapat membuat kolom baru, namun Anda juga bisa merubah nama mereka dengan cepat. Anda dapat merubah nama kolom menggunakan alias column_namesintaks (perhatikan ruang antara column_name dan alias).

Misalnya, pertanyaan

INPUT / OUTPUT:
  SQL SELECT ITEM> PRODUCE, WHOLESALE, WHOLESALE + 0,25 ECERAN  
       DARI HARGA; 

mengganti nama kolom sebagai berikut:

  WHOLESALE PRODUCE ECERAN
  -------------- --------- ---------
  TOMAT 0,34 0,59
  KENTANG 0,51 0,76
  Pisang 0,67 0,92
  Lobak 0,45 0,70
  CHEESE 0,89 1,14
  APEL 0,23 0,48

CATATAN: Beberapa implementasi dari SQL menggunakan nama <column sintaks = alias>. Contoh sebelumnya akan ditulis sebagai berikut:

  SQL SELECT ITEM> = PRODUCE,  
       WHOLESALE,   
       WHOLESALE + 0,25 = ECERAN,   
       DARI HARGA; 

Periksa pelaksanaan Anda untuk sintaks yang tepat.


Anda mungkin bertanya-tanya apa gunanya aliasing adalah jika Anda tidak menggunakan perintah SQL-line. Cukup adil. Apakah Anda pernah bertanya-tanya bagaimana laporan kerja pembangun? Suatu hari, ketika Anda diminta untuk menulis sebuah generator laporan, Anda akan ingat ini dan tidak menghabiskan minggu menemukan kembali apa yang Dr Codd dan IBM telah tempa.

Sejauh ini, Anda telah melihat dua penggunaan tanda plus. Contoh pertama adalah penggunaan tanda plus pada klausa SELECT untuk melakukan perhitungan pada data dan menampilkan perhitungan. Penggunaan kedua tanda plus berada di klausa WHERE. Menggunakan operator pada klausa WHERE memberi Anda fleksibilitas yang lebih ketika Anda menetapkan kondisi untuk mengambil data.

Dalam beberapa implementasi dari SQL, tanda plus melakukan tugas ganda sebagai operator karakter. Anda akan melihat sisi plus hari ini kemudian sedikit.

Minus (-)

Minus juga memiliki dua kegunaan. Pertama, bisa mengubah tanda nomor. Anda dapat menggunakan meja HILOW untuk menunjukkan fungsi ini.

INPUT:
  SQL> SELECT * FROM HILOW;
OUTPUT:
  NEGARA HIGHTEMP LOWTEMP
  ---------- -------- ---------
  CA -50 120
  FL 20 110
  LA 15 99
  ND -70 101
  -60 NE 100

Sebagai contoh, berikut ini adalah cara untuk memanipulasi data:

INPUT / OUTPUT:
  SQL> SELECT NEGARA,-HIGHTEMP lows,-LOWTEMP Highs  
       DARI HILOW;  

  NEGARA highs lows
  ---------- -------- ---------
  CA 50 -120
  FL -20 -110
  LA -15 -99
  ND 70 -101
  NE 60 -100

Yang kedua (dan jelas) penggunaan tanda minus adalah untuk mengurangi satu kolom dari yang lain. Sebagai contoh:

INPUT / OUTPUT:
  SQL> SELECT NEGARA,  
  2 HIGHTEMP lows,  
  3 LOWTEMP tertinggi,  
  4 (LOWTEMP - HIGHTEMP) SELISIH  
  5 DARI HILOW; 

  PERBEDAAN NEGARA highs lows
  ---------- -------- -------- ----------
  CA -50 120 170
  FL 20 110 90
  LA 15 99 84
  ND -70 101 171
  NE -60 100 160

Perhatikan penggunaan alias untuk memperbaiki data yang dimasukkan salah. Obat ini hanyalah patch sementara, meskipun, dan bukan memperbaiki permanen. Anda harus memastikan bahwa data tersebut dikoreksi dan dimasukkan dengan benar di masa mendatang. Pada hari 21, “Kesalahan umum SQL / Kesalahan dan Penyelesaian,” Anda akan belajar bagaimana memperbaiki data yang buruk.

Query ini tidak hanya tetap (setidaknya secara visual) data yang salah, tetapi juga menciptakan kolom baru yang mengandung perbedaan antara pasang surut masing-masing negara.

Jika Anda tanpa sengaja menggunakan tanda minus di lapangan karakter, Anda mendapatkan sesuatu seperti ini:

INPUT / OUTPUT:
  SQL> SELECT-NEGARA DARI HILOW; 

  ERROR:
  ORA-01722: nomor yang tidak valid
  ada baris yang dipilih

Pesan kesalahan tepat bervariasi dengan pelaksanaan, tapi hasilnya sama.

Bagi (/)

Operator divisi hanya memiliki satu arti yang jelas. Menggunakan meja HARGA, ketik berikut:

INPUT:
  SQL> * SELECT DARI HARGA;
OUTPUT:
  WHOLESALE ITEM
  -------------- ---------
  TOMAT 0,34
  KENTANG 0,51
  Pisang 0,67
  Lobak 0,45
  CHEESE 0,89
  APEL 0,23 

  6 baris yang dipilih.

Anda dapat menunjukkan efek dari penjualan dua-untuk-satu dengan mengetik pernyataan berikutnya:

INPUT / OUTPUT:
  SQL> SELECT ITEM, WHOLESALE, (WHOLESALE / 2) SALEPRICE  
    2 DARI HARGA;  

  WHOLESALE ITEM SALEPRICE
  -------------- --------- ---------
  TOMAT 0,34 0,17
  KENTANG 0,51 0,255
  Pisang 0,67 0,335
  Lobak 0,45 0,225
  CHEESE 0,89 0,445
  APEL 0,23 0,115 

  6 baris yang dipilih.

Penggunaan divisi dalam laporan SELECT sebelumnya sangatlah mudah (kecuali yang datang dengan uang setengah dapat sulit).

Kalikan (*)

Operator multiplikasi juga langsung. Sekali lagi, menggunakan tabel HARGA, ketik berikut:

INPUT:
  SQL> * SELECT DARI HARGA;
OUTPUT:
  WHOLESALE ITEM
  -------------- ---------
  TOMAT 0,34
  KENTANG 0,51
  Pisang 0,67
  Lobak 0,45
  CHEESE 0,89
  APEL 0,23 

  6 baris yang dipilih.

Perubahan permintaan ini meja untuk mencerminkan-di papan-diskon 10 persen:

INPUT / OUTPUT:
  SQL> SELECT ITEM, WHOLESALE, WHOLESALE * 0.9 NEWPRICE  
       DARI HARGA;  

  WHOLESALE ITEM NEWPRICE
  -------------- --------- --------
  TOMAT 0,34 0,306
  KENTANG 0,51 0,459
  Pisang 0,67 0,603
  Lobak 0,45 0,405
  CHEESE 0,89 0,801
  APEL 0,23 0,207 

  6 baris yang dipilih.

Operator ini memungkinkan Anda untuk melakukan perhitungan kuat dalam sebuah pernyataan SELECT.

Modulo (%)

Operator mengembalikan sisa integer modulo operasi divisi. Menggunakan TETAP meja, ketik berikut:

INPUT:
  SQL SELECT *> FROM TETAP;
OUTPUT:
  Pembilang penyebut
  ------------ ---------
         10 5
          8 3
         23 9
         40 17
       16 1024
         85 34 

  6 baris yang dipilih.

Anda juga dapat membuat kolom baru, sisanya, untuk memegang nilai-nilai pembilang% penyebut:

INPUT / OUTPUT:
  SQL> pembilang SELECT,  
       Penyebut,   
       Pembilang% penyebut sisa   
       DARI TETAP;  

  Pembilang penyebut sisa
  --------- ----------- ---------
         10 5 0
          8 3 2
         23 9 5
         40 17 6
       1024 16 0
         85 34 17 

  6 baris yang dipilih.

Beberapa implementasi dari SQL menerapkan modulo sebagai fungsi disebut MOD (lihat Hari 4, “Fungsi: Molding Data Anda Ambil”). Pernyataan berikut menghasilkan hasil yang identik dengan hasil pada laporan sebelumnya:

  SQL> pembilang SELECT,  
       Penyebut,   
       MOD (pembilang, penyebut) sisa   
       DARI TETAP; 

Diutamakan

Bagian ini membahas penggunaan protokoler dalam sebuah pernyataan SELECT. Menggunakan database diutamakan, ketik berikut:

  SQL> SELECT * FROM didahulukan;
         N1 N2 N3 N4
  --------- --------- --------- ---------
          1 2 3 4
         13 24 35 46
          9 3 23 5
         63 2 45 3
          7 2 1 4

Gunakan segmen kode berikut untuk menguji didahulukan:

INPUT / OUTPUT:
  SQL> SELECT  
    2 N1 + N2 * N3/N4,   
    3 (N1 + N2) * N3/N4,   
    4 N1 + (N2 * N3) / N4   
    5 DARI didahulukan;  

  N1 + N2 * N3/N4 (N1 + N2) * N3/N4 N1 + (N2 * N3) / N4
  ----------- ------------- -------------
          2,25 2,5 2,5
     28,152174 31,26087 31,26087
         22,8 55,2 22,8
           93 93 975
          7,5 2,25 7,5

Perhatikan bahwa kolom pertama dan terakhir adalah identik. Jika Anda menambahkan kolom keempat * N1 + N2 (N3/N4), nilai-nilai perusahaan juga akan sama dengan yang pertama kolom terakhir dan saat ini.

Operator Perbandingan

Sesuai dengan namanya, operator perbandingan membandingkan ekspresi dan kembali satu dari tiga nilai: TRUE, FALSE, atau Unknown. Tunggu sebentar?! Unknown TRUE dan FALSE yang cukup jelas, tetapi apa yang tidak diketahui?

Untuk memahami bagaimana Anda bisa mendapatkan Unknown, Anda perlu tahu sedikit tentang konsep NULL. Dalam istilah database NULL adalah tidak adanya data di lapangan. Ini tidak berarti kolom memiliki nol atau kosong di dalamnya. Sebuah nol atau kosong adalah nilai berarti. NULL tidak ada yang dalam bidang itu. Jika Anda membuat perbandingan seperti Lapangan = 9 dan nilai hanya untuk Lapangan adalah NULL, perbandingan itu akan kembali Unknown. Karena tidak diketahui adalah kondisi tidak nyaman, rasa sebagian besar dari SQL perubahan tidak diketahuike FALSE dan menyediakan operator khusus, IS NULL, untuk menguji kondisi NULL.

Berikut ini adalah contoh NULL: Misalkan sebuah entri di dalam tabel HARGA tidak mengandung nilai untuk WHOLESALE. Hasil query dapat terlihat seperti ini:

INPUT:
  SQL> * SELECT DARI HARGA;
OUTPUT:
  WHOLESALE ITEM
  ---------- --------------
  TOMAT 0,34
  KENTANG 0,51
  Pisang 0,67
  Lobak 0,45
  CHEESE 0,89
  APEL 0,23
  Jeruk

Perhatikan bahwa tidak ada yang dicetak dalam posisi bidang WHOLESALE untuk jeruk. Nilai untuk WHOLESALE lapangan untuk jeruk adalah NULL. The NULL terlihat dalam kasus ini karena dalam kolom numerik. Namun, jika NULL muncul di kolom ITEM, mustahil untuk membedakan antara NULL dan kosong.

Cobalah untuk menemukan NULL:

INPUT / OUTPUT:
  SQL> SELECT *  
  2 DARI HARGA  
   3 WHERE IS WHOLESALE NULL; 

  WHOLESALE ITEM
  ---------- --------------
  Jeruk
ANALISIS:

Seperti yang dapat Anda lihat dengan output, jeruk adalah hanya item yang nilainya untuk WHOLESALE adalah NULL atau tidak mengandung nilai. Bagaimana jika Anda menggunakan tanda sama dengan (=) bukan?

INPUT / OUTPUT:
  SQL> SELECT *  
       HARGA DARI   
       WHERE WHOLESALE = NULL;  

  ada baris yang dipilih
ANALISIS:

Anda tidak menemukan apa-apa karena perbandingan WHOLESALE = NULL kembali FALSE sebuah – hasilnya tidak diketahui. Itu akan lebih tepat untuk menggunakan IS NULL bukannya =,mengubah pernyataan untuk MANA WHERE IS WHOLESALE NULL. Dalam hal ini Anda akan mendapatkan semua baris mana NULL ada.

Contoh ini juga menggambarkan kedua penggunaan operator perbandingan yang paling umum, tanda sama dengan (=), dan taman bermain dari semua operator perbandingan, klausa WHERE.Anda sudah tahu tentang klausa WHERE, jadi inilah sekilas tanda sama.

Equal (=)

Sebelumnya hari ini Anda melihat bagaimana beberapa implementasi dari SQL menggunakan tanda sama dengan di klausa SELECT untuk menetapkan sebuah alias. Dalam klausa WHERE, tanda sama adalah perbandingan digunakan operator yang paling umum. Digunakan sendiri, tanda sama adalah cara yang sangat mudah memilih satu nilai dari banyak. Coba ini:

INPUT:
  SQL> SELECT * FROM FRIENDS;
OUTPUT:
  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  AL Bundy 100 555-1111 IL 22333
  Meza AL Inggris 200 555-2222
  Merrick BUD 300 555-6666 CO 80212
  Mast JD 381 555-6767 LA 23456
  Ferris BULHER 345 555-3223 IL 23332

Mari kita cari baris JD’s. (Pada daftar singkat tugas ini tampak sepele, tetapi Anda mungkin memiliki lebih banyak teman daripada kita – atau Anda mungkin memiliki daftar dengan ribuan catatan.)

INPUT / OUTPUT:
  SQL> SELECT *  
       DARI TEMAN   
       WHERE Nama_belakang = 'JD';  

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  Mast JD 381 555-6767 LA 23456

Kami mendapat hasil yang kami harapkan. Coba ini:

INPUT / OUTPUT:
  SQL> SELECT *  
       DARI TEMAN  
       WHERE Nama depan 'AL ='; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  AL Bundy 100 555-1111 IL 22333
  Meza AL Inggris 200 555-2222

CATATAN: Di sini Anda melihat bahwa = dapat menarik beberapa catatan. Perhatikan bahwa ZIP kosong pada catatan kedua. ZIP adalah bidang karakter (Anda mempelajari cara membuat dan mengisi tabel pada Hari 8, “Memanipulasi Data”), dan dalam catatan khususnya NULL NULL menunjukkan bahwa dalam bidang karakter mustahil untuk membedakan dari bidang kosong.


Inilah pelajaran lain yang sangat penting tentang kasus sensitivitas:

INPUT / OUTPUT:
  SQL> SELECT * FROM FRIENDS 
       WHERE Nama depan "BUD = '; 

  Nama depan
  --------------
  BUD
  1 baris yang dipilih.

Sekarang coba ini:

INPUT / OUTPUT:
  SQL> * pilih dari sahabat 
       mana NamaDepan = 'Bud'; 

  ada baris yang dipilih.
ANALISIS:

Meskipun sintaks SQL tidak bersifat case sensitive, data. Kebanyakan perusahaan lebih memilih untuk menyimpan data dalam huruf besar untuk menyediakan konsistensi data. Anda harus selalu menyimpan data baik dalam huruf besar semua atau huruf kecil semua. Mencampur kasus menciptakan kesulitan ketika Anda mencoba untuk mengambil data akurat.

Greater Than (>) dan lebih besar dari atau sama Untuk (> =)

Operator dari yang lebih besar (>) bekerja seperti ini:

INPUT:
  SQL> SELECT * 
       DARI TEMAN 
       MANA AREACODE> 300;
OUTPUT:
  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  Mast JD 381 555-6767 LA 23456
  Ferris BULHER 345 555-3223 IL 23332
ANALISIS:

Contoh ini menemukan semua kode area lebih besar dari (tapi tidak termasuk) 300. Untuk menyertakan 300, jenis ini:

INPUT / OUTPUT:
  SQL> SELECT * 
  2 DARI TEMAN 
  3 WHERE AREACODE> = 300; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  Merrick BUD 300 555-6666 CO 80212
  Mast JD 381 555-6767 LA 23456
  Ferris BULHER 345 555-3223 IL 23332
ANALISIS:

Dengan perubahan ini Anda mendapatkan kode area 300 dan mulai naik. Anda bisa mencapai hasil yang sama dengan pernyataan AREACODE> 299.


CATATAN: Perhatikan bahwa tidak ada kutipan mengelilingi 300 dalam pernyataan SQL. -Didefinisikan bidang-didefinisikan fieldsnumber Jumlah tidak memerlukan tanda kutip.


Kurang dari (<) dan Kurang dari atau sama dengan (<=)

Seperti yang mungkin Anda harapkan, operator perbandingan ini bekerja dengan cara yang sama seperti> dan> bekerja =, hanya secara terbalik:

INPUT:
  SQL> SELECT * 
  2 DARI TEMAN 
  3 MANA NEGARA <'LA';
OUTPUT:
  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- ---
  AL Bundy 100 555-1111 IL 22333
  Merrick BUD 300 555-6666 CO 80212
  Ferris BULHER 345 555-3223 IL 23332

CATATAN: Bagaimana bisa berubah menjadi NEGARA ST? Karena kolom hanya memiliki dua karakter, nama kolom disingkat menjadi dua karakter di baris kembali. Jika nama kolom yang KK telah, akan keluar CO. Lebar dari AREACODE dan TELEPON adalah lebih lebar dari kolom nama mereka, sehingga mereka tidak terpotong.


ANALISIS:

Tunggu sebentar. Apakah Anda hanya menggunakan <di lapangan karakter? Tentu saja Anda lakukan. Anda dapat menggunakan salah satu operator pada setiap tipe data. Hasil bervariasi menurut tipe data. Misalnya, gunakan huruf kecil dalam pencarian negara berikut:

INPUT / OUTPUT:
  SQL> SELECT * 
  2 DARI TEMAN 
  3 MANA NEGARA <'la'; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  AL Bundy 100 555-1111 IL 22333
  Meza AL Inggris 200 555-2222
  Merrick BUD 300 555-6666 CO 80212
  Mast JD 381 555-6767 LA 23456
  Ferris BULHER 345 555-3223 IL 23332
ANALISIS:

Huruf besar biasanya disortir sebelum huruf kecil, sehingga kode huruf besar kembali kurang dari "la". Sekali lagi, aman, periksa pelaksanaan Anda.


TIP: Untuk memastikan bagaimana operator akan berperilaku, periksa tabel bahasa Anda. implementasi Kebanyakan PC menggunakan tabel ASCII. Beberapa platform lainnya menggunakan EBCDIC.


Untuk memasukkan negara bagian Louisiana dalam pencarian asli, jenis

INPUT / OUTPUT:
  SQL> SELECT * 
   2 DARI TEMAN 
  3 WHERE <NEGARA = 'LA'; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  AL Bundy 100 555-1111 IL 22333
  Merrick BUD 300 555-6666 CO 80212
  Mast JD 381 555-6767 LA 23456
  Ferris BULHER 345 555-3223 IL 23332

Ketidaksetaraan (<> atau! =)

Bila Anda perlu menemukan segala sesuatu kecuali data tertentu, gunakan simbol ketimpangan, yang dapat berupa <> atau! = Tergantung pada implementasi SQL Anda. Sebagai contoh, untuk menemukan semua orang yang tidak AL, ketik ini:

INPUT:
  SQL> SELECT * 
  2 DARI TEMAN 
  3 WHERE NamaDepan <> 'AL';
OUTPUT:
  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  Merrick BUD 300 555-6666 CO 80212
  Mast JD 381 555-6767 LA 23456
  Ferris BULHER 345 555-3223 IL 23332

Untuk mencari semua orang tidak tinggal di California, ketik ini:

INPUT / OUTPUT:
  SQL> SELECT * 
  2 DARI TEMAN 
  3 MANA NEGARA '! =' CA; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  AL Bundy 100 555-1111 IL 22333
  Meza AL Inggris 200 555-2222
  Merrick BUD 300 555-6666 CO 80212
  Mast JD 381 555-6767 LA 23456
  Ferris BULHER 345 555-3223 IL 23332

CATATAN: Perhatikan bahwa kedua simbol, <> dan! =, Dapat mengungkapkan “tidak sama.”


Karakter Operator

Anda dapat menggunakan operator untuk memanipulasi string karakter karakter cara diwakili, baik dalam output data dan dalam proses menempatkan kondisi pada data yang akan diambil.Bagian ini menjelaskan dua karakter operator: operator LIKE dan | operator |, yang menyampaikan konsep Rangkaian karakter.

Aku Ingin Seperti SEPERTI

Bagaimana jika Anda ingin memilih bagian dari database yang sesuai dengan pola, tetapi tidak cukup tepat sama? Anda bisa menggunakan tanda yang sama dan dijalankan melalui semua kasus mungkin, tapi proses itu akan membosankan dan menyita waktu. Sebaliknya, Anda dapat menggunakan SEPERTI. Pertimbangkan hal berikut:

INPUT:
  SQL> SELECT * FROM PARTS;
OUTPUT:
  NAMA LOKASI PARTNUMBER
  -------------- -------------- ----------
  MID-PERUT LAMPIRAN 1
  Adams APPLE Tenggorokan 2
  HATI DADA 3
  Spine BACK 4
  Landasan EAR 5
  GINJAL MID-BACK 6

Bagaimana Anda bisa menemukan semua bagian yang terletak di belakang? Sebuah inspeksi visual cepat dari tabel sederhana ini menunjukkan bahwa ia memiliki dua bagian, tapi sayangnya lokasi yang memiliki nama berbeda sedikit. Coba ini:

INPUT / OUTPUT:
  SQL> SELECT * 
  2 DARI PARTS 
   3 MANA LOKASI LIKE '% KEMBALI%'; 

  NAMA LOKASI PARTNUMBER
  -------------- -------------- ----------
  Spine BACK 4
  GINJAL MID-BACK 6
ANALISIS:

Anda dapat melihat penggunaan tanda persen (%) dalam laporan setelah SEPERTI. Ketika digunakan di dalam ekspresi SEPERTI,% merupakan wildcard. Apa yang Anda minta adalah setiap kejadian BACK di kolom lokasi. Jika Anda tanya

INPUT:
  SQL> SELECT * 
       DARI PARTS
       LOKASI DI MANA SEPERTI 'BACK%';

Anda akan mendapatkan kejadian yang dimulai dengan BACK:

OUTPUT:
  NAMA LOKASI PARTNUMBER
  -------------- -------------- ----------
  Spine BACK 4

Jika Anda tanya

INPUT:
  SQL> SELECT * 
       DARI PARTS
      WHERE NAMA LIKE '% A';

Anda akan mendapatkan nama yang dimulai dengan A:

OUTPUT:
  NAMA LOKASI PARTNUMBER
  -------------- -------------- ----------
  MID-PERUT LAMPIRAN 1
  Adams APPLE Tenggorokan 2
  Landasan EAR 5

Apakah kasus SEPERTI sensitif? Coba permintaan berikutnya untuk mencari tahu.

INPUT / OUTPUT:
  SQL> SELECT * 
       DARI PARTS 
       WHERE NAMA LIKE '% a'; 

  ada baris yang dipilih
ANALISIS:

Jawabannya adalah ya. Referensi data selalu kasus sensitif.

Bagaimana jika Anda ingin mencari data yang cocok semua kecuali satu karakter dalam pola tertentu? Dalam hal ini Anda dapat menggunakan berbagai jenis wildcard: ini garis bawah.

Underscore (_)

Ini menggarisbawahi adalah karakter wildcard tunggal. Menggunakan versi modifikasi dari TEMAN tabel, jenis ini:

INPUT:
  SQL> SELECT * FROM FRIENDS;
OUTPUT:
  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  AL Bundy 100 555-1111 IL 22333
  Meza AL Inggris 200 555-2222
  UD Merrick 300 555-6666 CO 80212
  Mast JD 381 555-6767 LA 23456
  Ferris BULHER 345 555-3223 IL 23332
  Alton PERKINS CA 95633 911 555-3116
  BOSS SIR 204 555-2345 CT 95633

Untuk menemukan semua catatan di mana NEGERI dimulai dengan C, ketik berikut:

INPUT / OUTPUT:
  SQL> SELECT * 
    2 DARI TEMAN 
  3 MANA NEGARA SEPERTI 'C_';
  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  Merrick BUD 300 555-6666 CO 80212
  Alton PERKINS CA 95633 911 555-3116
  BOSS SIR 204 555-2345 CT 95633

Anda dapat menggunakan beberapa garis bawah dalam sebuah pernyataan:

INPUT / OUTPUT:
  SQL> SELECT * 
   2 DARI TEMAN 
   3 MANA TELEPON LIKE'555-6_6_ '; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  Merrick BUD 300 555-6666 CO 80212
  Mast JD 381 555-6767 LA 23456

Pernyataan sebelumnya juga dapat ditulis sebagai berikut:

INPUT / OUTPUT:
  SQL> SELECT * 
    2 DARI TEMAN 
   3 MANA SEPERTI TELEPON '555-6% '; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  Merrick BUD 300 555-6666 CO 80212
  Mast JD 381 555-6767 LA 23456

Perhatikan bahwa hasil adalah identik. Kedua wildcard bisa digabungkan. Contoh berikut menemukan semua catatan dengan L sebagai karakter kedua:

INPUT / OUTPUT:
  SQL> SELECT * 
  2 DARI TEMAN 
   3 WHERE NamaDepan LIKE '_L%'; 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  AL Bundy 100 555-1111 IL 22333
  Meza AL Inggris 200 555-2222
  Alton PERKINS CA 95633 911 555-3116

Rangkaian (| |)

The | | (pipa ganda) simbol concatenates dua string. Coba ini:

INPUT:
  SQL> SELECT NamaDepan | | NamaBelakang ENTIRENAME 
    2 DARI TEMAN;
OUTPUT:
  ENTIRENAME
  ----------------------
  AL Bundy
  AL Meza
  BUD Merrick
  JD Mast
  Ferris BULHER
  Alton PERKINS
  SIR BOSS 

  7 baris yang dipilih.
ANALISIS:

Perhatikan bahwa | | digunakan bukan +. Jika Anda menggunakan + untuk mencoba menyatukan string, penafsir SQL digunakan untuk contoh (Personal Oracle7) mengembalikan kesalahan berikut:

INPUT / OUTPUT:
  SQL> SELECT Nama depan + NamaBelakang ENTIRENAME 
       DARI TEMAN; 

  ERROR:
  ORA-01722: nomor yang tidak valid

Ini adalah mencari dua nomor untuk menambahkan dan melempar kesalahan nomor yang tidak valid ketika tidak menemukan apapun.


CATATAN: Beberapa implementasi dari SQL menggunakan tanda plus untuk menyatukan string. Periksa pelaksanaan Anda.


Berikut adalah contoh yang lebih praktis menggunakan Rangkaian:

INPUT / OUTPUT:
  SQL> SELECT NamaBelakang | | ',' | | NAMA NamaDepan 
       DARI TEMAN; 

  NAMA
  -------------------------------------------------- ----
  Bundy, AL
  Meza, AL
  Merrick, BUD
  Mast, JD
  BULHER, Ferris
  PERKINS, Alton
  BOSS, SIR 

  7 baris yang dipilih.
ANALISIS:

Pernyataan ini disisipkan koma antara nama belakang dan nama pertama.


CATATAN: Perhatikan spasi ekstra antara nama pertama dan nama terakhir dalam contoh ini. Ruang ini sebenarnya bagian dari data. Dengan tipe data tertentu, ruang benar-melangkah ke nilai kurang dari total panjang dialokasikan untuk ladang. Lihat penerapan Anda. jenis data akan dibahas pada Hari 9, “Menciptakan dan Mempertahankan Tabel.”


Sejauh ini Anda telah melakukan perbandingan satu per satu. metode Itu bagus untuk beberapa masalah, tetapi bagaimana jika Anda perlu untuk menemukan semua orang di tempat kerja dengan nama terakhir dimulai dengan P yang memiliki kurang dari tiga hari waktu liburan?

Logical Operator

operator operatorsLogical logis memisahkan dua atau lebih kondisi pada klausa WHERE dari pernyataan SQL.

Liburan waktu selalu menjadi topik hangat di sekitar tempat kerja. Katakanlah Anda merancang sebuah tabel yang disebut liburan untuk departemen akuntansi:

INPUT:
  SQL> SELECT * FROM Liburan;
OUTPUT:
  TAHUN EMPLOYEENUM NamaBelakang LEAVETAKEN
  -------------- ----------- --------- ----------
  MAMPU 101 2 4
  BAKER 104 5 23
  Bledsoe 107 8 45
  Bolivar 233 4 80
  BOLD 210 15 100
  COSTALES 211 10 78 

  6 baris yang dipilih.

Misalkan perusahaan Anda setiap karyawan memberikan cuti 12 hari setiap tahun. Menggunakan apa yang Anda pelajari dan operator logis, menemukan semua karyawan yang namanya mulai dengan B dan yang memiliki lebih dari 50 hari cuti datang.

INPUT / OUTPUT:
  SQL> SELECT NamaBelakang, 
    2 TAHUN * 12 - LEAVETAKEN sisa 
    3 dari liburan 
    4 WHERE NamaBelakang LIKE 'B%' 
  5 DAN 
  6 TAHUN * 12 - LEAVETAKEN> 50; 

  NamaBelakang Tersisa
  -------------- ---------
  Bledsoe 51
  80 BOLD
ANALISIS:

Query ini adalah yang paling rumit yang telah Anda lakukan selama ini. Klausa SELECT (baris 1 dan 2) menggunakan operator aritmatika untuk menentukan berapa hari cuti tiap karyawan memiliki sisa. Yang diutamakan normal menghitung TAHUN * 12 - LEAVETAKEN (. (Lebih jelas Pendekatan akan menulis TAHUN * 12) - LEAVETAKEN.)

SEPERTI yang digunakan sesuai dengan 4% wildcard untuk menemukan semua nama B. Line 6 menggunakan> untuk menemukan semua kejadian yang lebih besar dari 50.

Unsur baru pada baris 5. Anda menggunakan operator logika AND untuk memastikan bahwa Anda menemukan catatan yang memenuhi kriteria di baris 4 dan 6.

DAN

DAN berarti bahwa ekspresi kedua belah pihak harus benar mengembalikan TRUE. Jika ekspresi baik adalah palsu, DAN kembali FALSE. Misalnya, untuk mengetahui karyawan telah dengan perusahaan selama 5 tahun atau kurang dan telah mengambil lebih dari 20 hari cuti, coba ini:

INPUT:
  SQL> SELECT NamaBelakang 
  2 dari liburan 
  3 WHERE TAHUN <= 5  
  4 DAN 
   5 LEAVETAKEN> 20;
OUTPUT:
  NamaBelakang
  --------
  BAKER
  Bolivar

Jika Anda ingin tahu yang karyawan telah dengan perusahaan selama 5 tahun atau lebih dan telah diambil kurang dari 50 persen meninggalkan mereka, Anda bisa menulis:

INPUT / OUTPUT:
  SQL> SELECT NamaBelakang workaholics 
  2 dari liburan 
   3 WHERE TAHUN> = 5 
   4 DAN 
   5 ((TAHUN * 12) -LEAVETAKEN) / (TAHUN * 12) <0,50; 

  Workaholics
  ---------------
  BAKER
  Bledsoe

Periksa orang-orang untuk pemadaman. Juga memeriksa bagaimana kita menggunakan AND untuk menggabungkan dua kondisi.

ATAU

Anda juga dapat menggunakan OR untuk meringkas serangkaian kondisi. Jika salah satu perbandingan adalah benar, kembali OR TRUE. Untuk menggambarkan perbedaan, conditionsrun permintaan terakhir dengan OR bukannya dengan DAN:

INPUT:
  SQL> SELECT NamaBelakang workaholics 
    2 dari liburan 
    3 WHERE TAHUN> = 5 
   4 OR 
  5 ((TAHUN * 12) -LEAVETAKEN) / (TAHUN * 12)> = 0,50;
OUTPUT:
  Workaholics
  ---------------
  MAMPU
  BAKER
  Bledsoe
  BOLD
  COSTALES
ANALISIS:

Nama asli masih dalam daftar, namun Anda memiliki tiga entri baru (yang mungkin akan membenci yang pecandu kerja yang disebut). Ketiga membuat daftar nama-nama baru karena mereka puas salah satu kondisi. ATAU membutuhkan bahwa hanya satu dari kondisi benar agar data yang akan dikembalikan.

TIDAK

TIDAK berarti hanya itu. Jika kondisi ini berlaku untuk mengevaluasi ke TRUE, TIDAK membuat FALSE. Jika kondisi setelah NOT FALSE, itu menjadi TRUE. Sebagai contoh, kembali SELECT berikut hanya dua nama, bukan dimulai dengan B dalam tabel:

INPUT:
  SQL> SELECT * 
  2 dari liburan 
    3 WHERE NamaBelakang TIDAK LIKE 'B%';
OUTPUT:
  TAHUN EMPLOYEENUM NamaBelakang LEAVETAKEN
  -------------- ----------- -------- ----------
  MAMPU 101 2 4
  COSTALES 211 10 78

TIDAK juga dapat digunakan dengan operator IS bila diterapkan ke NULL. Ingat meja BIAYA mana kita menempatkan nilai NULL di kolom WHOLESALE sebaliknya jeruk item.

INPUT / OUTPUT:
  SQL> * SELECT DARI HARGA; 

  WHOLESALE ITEM
  -------------- ---------
  TOMAT 0,34
  KENTANG 0,51
  Pisang 0,67
  Lobak 0,45
  CHEESE 0,89
  APEL 0,23
  Jeruk 

  7 baris yang dipilih.

Untuk menemukan item non-NULL, ketik ini:

INPUT / OUTPUT:
  SQL> SELECT * 
    2 DARI HARGA 
  3 WHERE IS WHOLESALE NOT NULL; 

  WHOLESALE ITEM
  -------------- ---------
  TOMAT 0,34
  KENTANG 0,51
  Pisang 0,67
  Lobak 0,45
  CHEESE 0,89
  APEL 0,23 

  6 baris yang dipilih.

Set Operator

Pada Hari ke-1, “Pengenalan ke SQL,” belajar Anda bahwa SQL didasarkan pada teori himpunan. Bagian berikut memeriksa ditetapkan operator.

UNION dan UNION ALL

UNI mengembalikan hasil dari dua pertanyaan minus duplikasi baris. Dua tabel berikut mewakili rosters tim:

INPUT:
  SQL> SELECT * FROM sepak bola;
OUTPUT:
  NAMA
  --------------------
  MAMPU
  BRAVO
  CHARLIE
  DECON
  EXITOR
  Fubar
  GOOBER 

  7 baris yang dipilih.
INPUT:
  SQL> SELECT * FROM softball;
OUTPUT:
  NAMA
  --------------------
  MAMPU
  BAKER
  CHARLIE
  DEAN
  EXITOR
  Pemburu yg menggunakan elang sbg alat bantu
  GOOBER 

  7 baris yang dipilih.

Berapa banyak orang yang berbeda bermain di satu tim atau yang lain?

INPUT / OUTPUT:
  SQL> SELECT NAMA DARI softball 
    2 UNI 
  3 SELECT NAMA dari sepak bola; 

  NAMA
  --------------------
  MAMPU
  BAKER
  BRAVO
  CHARLIE
  DEAN
  DECON
  EXITOR
  Pemburu yg menggunakan elang sbg alat bantu
  Fubar
  GOOBER 

  10 baris yang dipilih.

UNION kembali 10 nama berbeda dari dua daftar. Berapa banyak nama pada kedua daftar (termasuk duplikat)?

INPUT / OUTPUT:
  SQL> SELECT NAMA DARI softball 
   2 UNION ALL 
   3 PILIH NAMA dari sepak bola; 

  NAMA
  --------------------
  MAMPU
  BAKER
  CHARLIE
  DEAN
  EXITOR
  Pemburu yg menggunakan elang sbg alat bantu
  GOOBER
  MAMPU
  BRAVO
  CHARLIE
  DECON
  EXITOR
  Fubar
  GOOBER 

  14 baris yang dipilih.
ANALISIS:

Daftar gabungan – milik UNION ALL pernyataan – memiliki 14 nama bekerja. UNION ALL seperti UNI kecuali ia tidak menghilangkan duplikasi. Sekarang tunjukkan daftar pemain yang berada di kedua tim. Anda tidak dapat melakukannya dengan UNI – Anda perlu belajar INTERSECT.

INTERSECT

INTERSECT kembali hanya baris ditemukan oleh kedua permintaan. Pernyataan SELECT berikutnya menampilkan daftar pemain yang bermain di kedua tim:

INPUT:
  SQL> SELECT * FROM Football 
  2 INTERSECT 
  3 SELECT * FROM softball;
OUTPUT:
  NAMA
  --------------------
  MAMPU
  CHARLIE
  EXITOR
  GOOBER
ANALISIS:

Dalam contoh ini INTERSECT menemukan daftar pendek pemain yang berada di kedua tim dengan menggabungkan hasil dari dua pernyataan SELECT.

MINUS (Perbedaan)

Minus mengembalikan baris dari query pertama yang tidak hadir pada urutan kedua. Sebagai contoh:

INPUT:
  SQL> SELECT * FROM Football 
   2 MINUS 
  3 SELECT * FROM softball;
OUTPUT:
  NAMA
  --------------------
  BRAVO
  DECON
  Fubar
ANALISIS:

Permintaan sebelumnya menunjukkan tiga pemain sepak bola yang tidak di tim softball. Jika Anda membalik urutan, Anda mendapatkan tiga pemain softball yang tidak berada pada tim sepak bola:

INPUT:
  SQL> SELECT * FROM softball 
  2 MINUS 
   3 SELECT * FROM Football;
OUTPUT:
  NAMA
  --------------------
  BAKER
  DEAN
  Pemburu yg menggunakan elang sbg alat bantu

Miscellaneous Operator: DI dan ANTARA

Kedua operator IN dan ANTARA memberikan singkatan untuk fungsi Anda sudah tahu bagaimana melakukannya. Jika Anda ingin menemukan teman-teman di Colorado, California, dan Louisiana, Anda bisa mengetik berikut:

INPUT:
  SQL> SELECT * 
    2 DARI TEMAN 
   3 MANA NEGARA 'CA =' 
    4 OR 
    5 NEGARA = 'CO' 
   6 OR 
   7 NEGARA = 'LA';
OUTPUT:
  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  Merrick BUD 300 555-6666 CO 80212
  Mast JD 381 555-6767 LA 23456
  Alton PERKINS CA 95633 911 555-3116

Atau Anda bisa mengetik ini:

INPUT / OUTPUT:
  SQL> SELECT * 
   2 DARI TEMAN 
    3 NEGARA DI MANA ('CA', 'CO', 'LA');
  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  Merrick BUD 300 555-6666 CO 80212
  Mast JD 381 555-6767 LA 23456
  Alton PERKINS CA 95633 911 555-3116
ANALISIS:

Contoh kedua yang lebih pendek dan lebih mudah dibaca daripada yang pertama. Anda tidak pernah tahu kapan Anda mungkin harus kembali dan bekerja di sesuatu yang Anda tulis bulan lalu. DIjuga bekerja sama dengan nomor. Pertimbangkan yang berikut ini, di mana kolom AREACODE adalah angka:

INPUT / OUTPUT:
  SQL> SELECT * 
   2    DARI TEMAN 
  3 AREACODE DI MANA (100.381.204); 

  NamaBelakang NamaDepan AREACODE ST ZIP PHONE
  -------------- -------------- -------- --------- - --- -
  AL Bundy 100 555-1111 IL 22333
  Mast JD 381 555-6767 LA 23456
  BOSS SIR 204 555-2345 CT 95633

Jika Anda membutuhkan berbagai hal dari meja HARGA, Anda bisa menulis hal berikut:

INPUT / OUTPUT:
  SQL> SELECT * 
   2 HARGA DARI 
   3 WHERE 0,25> WHOLESALE 
  4 DAN 
  5 WHOLESALE <0,75; 

  WHOLESALE ITEM
  -------------- ---------
  TOMAT 0,34
  KENTANG 0,51
  Pisang 0,67
  Lobak 0,45

Atau ANTARA menggunakan, Anda akan menulis ini:

INPUT / OUTPUT:
  SQL> SELECT * 
  2 DARI HARGA 
   3 WHERE WHOLESALE ANTARA 0,25 DAN 0,75; 

  WHOLESALE ITEM
  -------------- ---------
  TOMAT 0,34
  KENTANG 0,51
  Pisang 0,67
  Lobak 0,45

Sekali lagi, contoh kedua adalah solusi, bersih lebih mudah dibaca daripada yang pertama.


CATATAN: Jika nilai WHOLESALE sebesar 0.25 ada dalam tabel HARGA, yang merekam akan diambil juga. Parameter yang digunakan dalam operator ANTARA adalah parametersinclusive inklusif.


Ringkasan

Pada awal Hari 3, Anda tahu bagaimana menggunakan SELECT dasar dan klausa FROM. Sekarang Anda tahu bagaimana menggunakan sejumlah operator yang memungkinkan Anda untuk menyempurnakan permintaan Anda ke database. Anda belajar bagaimana menggunakan aritmatika, perbandingan, karakter, logis, dan operator ditetapkan. Set alat yang kuat memberikan landasan pengetahuan SQL Anda.

Sumber ; http://www.webbasedprogramming.com

SQL Query

Tinggalkan komentar

Tujuan

Selamat Belajar Otodidak  SQL Hari ke 2 ! Pada akhir hari ini Anda akan dapat melakukan hal berikut:

  • Menulis query SQL
  • Pilih dan daftar semua baris dan kolom dari tabel
  • Pilih dan daftar kolom yang dipilih dari tabel
  • Pilih dan kolom dari tabel daftar beberapa

Latar belakang

Untuk sepenuhnya menggunakan kekuatan suatu relational database seperti yang dijelaskan secara singkat pada Hari 1, “Pengenalan ke SQL,” Anda perlu berkomunikasi dengannya. Komunikasi utama akan beralih ke komputer Anda dan berkata dengan jelas, suara jelas, “Tunjukkan semua kidal, bermata coklat kacang-counter yang telah bekerja untuk perusahaan ini selama paling sedikit 10 tahun.” Beberapa dari Anda mungkin sudah melakukannya (berbicara ke komputer Anda, bukan daftar kacang counter). Semua orang membutuhkan cara yang lebih konvensional mengambil informasi dari database. Anda dapat membuat link ini penting melalui nama tengah itu SQL, “Query.”

Seperti yang disebutkan pada Hari 1, Permintaan nama sebenarnya adalah keliru dalam konteks ini. Sebuah query SQL tidak selalu pertanyaan ke database. Hal ini dapat perintah untuk melakukan salah satu dari berikut:

  • Membangun atau menghapus tabel
  • Menyisipkan, memodifikasi, atau menghapus baris atau kolom
  • Cari beberapa tabel untuk informasi spesifik dan mengembalikan hasil dalam urutan tertentu
  • Ubah keamanan informasi

Aturan Umum Sintaks

Ketika Anda akan menemukan, sintaks SQL cukup fleksibel, walaupun ada aturan untuk mengikuti seperti di bahasa pemrograman. Sebuah pertanyaan sederhana ini menggambarkan sintaks dasar dari sebuah pernyataan SQL pilih. Perhatikan dengan kasus ini, jarak, dan pemisahan logis dari masing-masing komponen SQL query dengan kata kunci.

  SELECT NAMA, STARTTERM, ENDTERM 
  Dari presiden 
  WHERE NAME 'Lincoln =';

Dalam semua contoh ini dikapitalisasi, tetapi tidak harus. Permintaan sebelumnya akan bekerja sama dengan baik jika ditulis seperti ini:

  pilih nama, startterm, endterm 
  dari presiden 
  mana nama = 'LINCOLN';

Perhatikan bahwa Lincoln muncul dalam huruf besar dalam contoh kedua. Meskipun sebenarnya SQL tidak case sensitive, referensi untuk data dalam database adalah. Sebagai contoh, banyak perusahaan menyimpan data mereka dalam huruf besar. Dalam contoh sebelumnya, berasumsi bahwa kolom nama toko isinya dalam huruf besar. Oleh karena itu, pertanyaan yang mencari ‘Lincoln’ pada kolom nama tidak akan menemukan data apapun untuk kembali. Periksa pelaksanaan dan / atau kebijakan perusahaan untuk persyaratan kasus.


CATATAN: Perintah dalam SQL tidak case sensitive.


Lihatlah lain pada query sampel. Apakah ada sesuatu yang ajaib di spasi jawaban? Lagi adalah tidak. Kode berikut akan bekerja dengan baik:

  pilih nama, startterm, endterm dari presiden di mana nama = 'LINCOLN';

Namun, beberapa hal untuk spasi dan kapitalisasi membuat laporan Anda lebih mudah untuk dibaca. Hal ini juga membuat laporan Anda lebih mudah untuk mempertahankan ketika mereka menjadi bagian dari proyek Anda.

Fitur lain yang penting; (titik koma) koma (;) permintaan sampel adalah titik koma pada akhir dari ekspresi. Tanda baca ini menceritakan program-baris perintah SQL query Anda selesai.

Jika sihir itu tidak dalam kapitalisasi atau format, maka hanya yang unsur penting? Jawabannya adalah kata kunci, atau kata-kata dalam SQL yang dicadangkan sebagai bagian dari sintaks.(Tergantung pada pernyataan SQL, kata kunci dapat berupa elemen wajib atau opsional laporan contoh.) Kata kunci dalam saat ini adalah

  • SELECT
  • DARI
  • WHERE

Periksa daftar isi untuk melihat beberapa kata kunci SQL Anda akan belajar dan pada hari apa.

The Bangunan Blok Data Retrieval: SELECT dan FROM

Seperti pengalaman Anda dengan SQL tumbuh, Anda akan melihat bahwa Anda mengetik kata-kata SELECT dan FROM lebih dari kata lain dalam kosakata SQL. Mereka tidak glamor seperti CREATEatau kejam seperti DROP, tetapi mereka juga sangat diperlukan untuk percakapan apapun Anda berharap untuk memiliki dengan komputer tentang pengambilan data. Dan bukankah pengambilan data alasan yang dimasukkan pegunungan informasi ke database Anda sangat mahal di tempat pertama?

Diskusi ini dimulai dengan SELECT karena sebagian besar laporan Anda juga akan mulai dengan SELECT:

Sintaks:
  SELECT <COLUMN NAMES>

Perintah, lihat juga statementsbasic SELECT tidak bisa sederhana. Namun, SELECT tidak bekerja sendirian. Jika Anda mengetik saja SELECT ke dalam sistem Anda, Anda mungkin mendapatkan respon berikut:

INPUT:
  SQL> SELECT;
OUTPUT:
  SELECT 
       * 
  ERROR pada baris 1: 
  ORA-00936: ekspresi hilang

Asterisk bawah garis menyinggung menunjukkan mana Oracle7 menganggap pelanggaran terjadi. Pesan kesalahan memberitahu Anda bahwa ada sesuatu yang hilang. sesuatu itu adalah klausaDARI:

Sintaks:
  DARI <table>

Bersama-sama, laporan SELECT dan FROM mulai membuka kekuatan di balik database Anda.


CATATAN: keywordsclausesAt titik ini Anda mungkin bertanya-tanya apa perbedaan antara kata kunci, pernyataan, dan ayat kata kunci. SQL lihat elemen SQL individu, seperti SELECTdan FROM. klausa adalah bagian dari pernyataan SQL, misalnya, SELECT column1, column2, … adalah klausa. menggabungkan klausa SQL untuk membentuk sebuah pernyataan SQL lengkap. Sebagai contoh, Anda dapat menggabungkan klausa SELECT dan klausa FROM untuk menulis pernyataan SQL.



CATATAN: Masing-masing implementasi dari SQL memiliki cara unik untuk menunjukkan kesalahan. Microsoft Query, misalnya, mengatakan tidak dapat menunjukkan permintaan, meninggalkan Anda untuk menemukan masalah. Borland’s Interbase muncul kotak dialog dengan kesalahan. Personal Oracle7, mesin yang digunakan dalam contoh sebelumnya, memberikan Anda nomor kesalahan (sehingga Anda dapat melihat penjelasan rinci dalam manual Anda) dan penjelasan singkat mengenai masalah tersebut.


Contoh

Sebelum melangkah lebih jauh, lihat di database contoh yang menjadi dasar untuk contoh-contoh berikut. Database ini mengilustrasikan fungsi dasar dari SELECT dan FROM. Dalam dunia nyata Anda akan menggunakan teknik yang dijelaskan pada Hari 8, “Memanipulasi Data,” untuk membangun database ini, tapi untuk tujuan menggambarkan cara menggunakan SELECTdan FROM,menganggap itu sudah ada. Contoh ini menggunakan tabel pemeriksaan untuk mengambil informasi tentang pemeriksaan bahwa seseorang telah menulis.

Memeriksa tabel:

 JUMLAH KOMENTAR PERIKSA Penerima Pembayaran # --------- -------------------- ------ ---------- 1 ----------- Ma Bell 150 Apakah anak waktu berikutnya 2 Reading RR 245,34 Kereta ke Chicago 3 Ma Bell Telepon Seluler 200,32 4 Lokal Utilitas 98 Gas 5 Joes basi $ Dent 150 Groceries 6 Cash 25 Wild Night Out 7 Joans Gas Gas 25,1

Permintaan Anda Pertama

INPUT:
  SQL> * pilih dari cek;
OUTPUT:
  queriesCHECK # Penerima Pembayaran JUMLAH KOMENTAR 
  ------ -------------------- ------- ----------------- ---- 

  1 Ma Bell 150 Apakah anak kali 
       2 Membaca RR 245,34 Kereta ke Chicago 
       3 Ma Bell 200,32 Telepon Seluler 
       4 Lokal Utilitas Gas 98 
       5 Joes $ Dent 150 Groceries basi 
       6 Cash 25 Wild Night Out 
       7 Joans Gas Gas 25,1 

  7 baris yang dipilih.
ANALISIS:

output ini terlihat seperti kode di contoh. Perhatikan bahwa kolom 1 dan 3 di laporan output benar-dibenarkan dan yang kolom 2 dan 4 adalah kiri-dibenarkan. Format ini mengikuti konvensi keselarasan di mana tipe data numerik benar-dibenarkan dan data karakter yang tersisa-jenis dibenarkan. Data jenis dibahas pada Hari 9, “Menciptakan dan Mempertahankan Tabel.”

Asterisk (*) dalam * pilih memberitahu database untuk mengembalikan semua kolom yang terkait dengan tabel diberikan dijelaskan dalam klausa FROM. Database menentukan urutan untuk mengembalikan kolom.

Mengakhiri sebuah Pernyataan SQL

Dalam beberapa implementasi dari SQL, titik koma pada akhir pernyataan mengatakan penafsir bahwa Anda sudah selesai menulis pertanyaan. Sebagai contoh, Oracle SQL * PLUS tidak akan mengeksekusi query sampai menemukan titik koma (atau garis miring). Di sisi lain, beberapa implementasi dari SQL tidak menggunakan titik koma sebagai sebuah terminator. Sebagai contoh, Microsoft Query dan Borland ISQL tidak memerlukan terminator, karena query Anda ketik dalam kotak edit dan dijalankan ketika Anda menekan tombol.

Mengubah Orde Kolom

Contoh sebelumnya pernyataan SQL digunakan * untuk memilih semua kolom dari tabel, urutan penampilan mereka dalam output ditentukan oleh database. Untuk menentukan urutan kolom, Anda bisa mengetik sesuatu seperti:

INPUT:
  SQL> SELECT penerima pembayaran, komentar, jumlah, cek # dari cek;

Perhatikan bahwa setiap nama kolom terdaftar di klausa SELECT. Urutan kolom terdaftar adalah urutan di mana mereka akan muncul dalam output keduanya. Perhatikan koma yang memisahkan nama kolom dan ruang antara nama kolom terakhir dan ayat berikutnya (dalam hal ini DARI). Outputnya akan terlihat seperti ini:

OUTPUT:
  Penerima Pembayaran PERIKSA # JUMLAH KOMENTAR 
  -------------------- ------------------ --------- --- ------ 
  Apakah anak Ma Bell 150 1 kali 
  Membaca Kereta RR ke Chicago 2 245,34 
  Telepon Seluler Ma Bell 200,32 3 
  Lokal Utilitas Gas 98 4 
  Joes basi Dent $ Groceries 150 5 
  Kas Wild Night Out 25 6 
  Joans Gas 25,1 7 

  7 baris yang dipilih.

Cara lain untuk menulis laporan yang sama berikut.

INPUT:
  SELECT penerima pembayaran, komentar, jumlah, cek # 
  DARI pemeriksaan;

Perhatikan bahwa klausa DARI telah dilakukan ke lini kedua. Konvensi ini adalah soal selera pribadi saat menulis kode SQL. Outputnya akan terlihat seperti ini:

OUTPUT:
  Penerima Pembayaran JUMLAH KOMENTAR PERIKSA # 
  -------------------- -------------------- --------- - ------- 
  Apakah anak Ma Bell 150 1 kali 
  Membaca Kereta RR ke Chicago 245,34 2 
  Telepon Seluler Ma Bell 200,32 3 
  Lokal Utilitas Gas 98 4 
  Joes basi Dent $ Groceries 150 5 
  Kas Wild Night Out 25 6 
  Joans Gas 25,1 7 

  7 baris yang dipilih.
ANALISIS:

Outputnya adalah identik karena hanya format pernyataan tersebut berubah. Sekarang bahwa Anda telah membuat kontrol atas urutan kolom, Anda akan dapat menentukan kolom mana yang ingin Anda lihat.

Memilih Kolom Individu

Misalkan Anda tidak ingin melihat setiap kolom dalam database. SELECT * Anda digunakan untuk mengetahui informasi apa yang tersedia, dan sekarang Anda ingin berkonsentrasi pada nomor cek dan jumlahnya. Anda mengetik

INPUT:
  SQL> SELECT CHECK #, nilai dari cek;

yang mengembalikan

OUTPUT:
  PERIKSA # JUMLAH 
  --------- --------- 
          1 150 
          2 245,34 
          3 200,32 
          4 98 
          5 150 
          6 25 
          7 25,1 

  7 baris yang dipilih.
ANALISIS:

Sekarang Anda memiliki kolom ingin Anda lihat. Perhatikan penggunaan atas dan huruf kecil-dalam query. Ini tidak mempengaruhi hasil.

Bagaimana jika Anda membutuhkan informasi dari tabel yang berbeda?

Memilih Tabel yang berbeda-beda

Misalnya, Anda memiliki tabel yang disebut SIMPANAN dengan struktur ini:

  DEPOSIT # JUMLAH WHOPAID KOMENTAR 
  -------- ---------------------- ------ -------------- ----- 
         1 Rich Uncle 200 Take off Xmas daftar 
         2 Majikan 1000 Juni 15 hari bayaran 
         3 Credit Union 500 Loan

Anda hanya akan mengubah klausa DARI ke meja yang diinginkan dan ketik pernyataan berikut:

INPUT:
  SQL> * pilih dari deposito

Hasilnya adalah

OUTPUT:
  DEPOSIT # JUMLAH WHOPAID KOMENTAR 
  -------- ---------------------- ------ -------------- ----- 
         1 Rich Uncle 200 Take off Xmas daftar 
                2 Majikan 1000 Juni 15 hari bayaran 
                3 Credit Union 500 Loan
ANALISIS:

Dengan perubahan tunggal Anda memiliki sumber data baru.

Query dengan Distinction

Jika Anda melihat di meja asli, cek, Anda melihat bahwa beberapa mengulangi data. Misalnya, jika Anda melihat kolom AMOUNTmenggunakan

INPUT:
  SQL> pilih jumlah dari cek;

Anda akan melihat

OUTPUT:
  JUMLAH 
  --------- 
        150 
     245,34 
     200,32 
         98 
        150 
         25 
       25,1

Perhatikan bahwa jumlah 150 diulang. Bagaimana jika Anda ingin melihat bagaimana mungkin jumlah yang berbeda ada di kolom ini? Coba ini:

INPUT:
  SQL> pilih jumlah yang berbeda dari cek;

Hasil akan

OUTPUT:
  JUMLAH 
  --------- 
         25 
       25,1 
         98 
        150 
     200,32 
     245,34 

  6 baris yang dipilih.
ANALISIS:

Perhatikan bahwa hanya enam baris yang dipilih. Karena Anda ditentukan berbeda, hanya satu contoh dari data digandakan ditampilkan, yang berarti bahwa satu baris kurang dikembalikan.SEMUA adalah suatu kata kunci yang tersirat dalam laporan dasar SELECT. Anda hampir tak pernah melihat PILIH SEMUA karena <table> dan PILIH SEMUA <table> memiliki hasil yang sama.

Coba contoh ini – untuk pertama (dan satu-satunya!) Kali dalam karir SQL Anda:

INPUT:
  SQL> SELECT ALL AMOUNT 
    2 dari pemeriksaan;
OUTPUT:
  JUMLAH 
  --------- 
        150 
     245,34 
     200,32 
         98 
        150 
         25 
       25,1 

  7 baris yang dipilih.

Ini adalah sama dengan <Column> SELECT. Siapa yang memerlukan ekstra keystrokes?

Ringkasan

Kata kunci SELECT dan FROM memungkinkan query untuk mengambil data dan. Anda dapat membuat pernyataan yang luas meliputi seluruh tabel dengan pernyataan SELECT *, atau Anda dapat mengatur ulang atau mengambil tabel tertentu. Yang jelas kata kunci batas-batas keluaran, sehingga Anda tidak melihat duplikasi nilai dalam kolom. Besok Anda belajar bagaimana membuat pertanyaan Anda lebih selektif.

Sumber ; http://www.webbasedprogramming.com

SQL Pengenalan

Tinggalkan komentar

Structured Query Language (SQL)

Sejarah SQL dimulai di laboratorium IBM di San Jose, California, dimana SQL dikembangkan pada akhir 1970-an. Inisial berdiri untuk Structured Query Language, bahasa itu sendiri dan sering disebut sebagai “sekuel.” Ini pada awalnya dikembangkan untuk produk IBM DB2 (sistem manajemen basis data relasional atau RDBMS, yang masih bisa dibeli hari ini untuk berbagai platform dan lingkungan). Bahkan, SQL membuat RDBMS mungkin. SQL adalah bahasa nonprocedural, berbeda dengan atau generasi ketiga bahasa prosedural (3GLs) seperti COBOL dan C yang telah dibuat sampai saat itu.

Karakteristik bahwa membedakan DBMS dari RDBMS adalah bahwa RDBMS menyediakan database bahasa berorientasi-set. Untuk RDBMSs kebanyakan, ini bahasa berorientasi database SQLberorientasi set. Berarti Set bahwa SQL proses set data dalam kelompok.

Dua standar organisasi, American National Standards Institute (ANSI) dan International Standards Organization (ISO), saat ini mempromosikan standar SQL ke industri. The-92 standar adalah standar ANSI untuk SQL digunakan di seluruh buku ini. Meskipun pembuatan badan standar menyusun standar untuk desainer sistem database untuk diikuti, semua produk database berbeda dari standar ANSI untuk beberapa derajat. Selain itu, kebanyakan sistem menyediakan beberapa ekstensi ke SQL milik yang memperpanjang bahasa ke bahasa prosedural benar. Kami telah menggunakan berbagai RDBMSs untuk mempersiapkan contoh dalam buku ini untuk memberikan gambaran tentang apa yang diharapkan dari sistem database umum.

Sebuah Sejarah Singkat dari SQL

Sejarah SQL dimulai di laboratorium IBM di San Jose, California, dimana SQL dikembangkan pada akhir 1970-an. Inisial berdiri untuk Structured Query Language, dan bahasa itu sendiri sering disebut sebagai “sekuel.” Ini pada awalnya dikembangkan untuk produk IBM DB2 (sistem manajemen basis data relasional atau RDBMS, yang masih bisa dibeli hari ini untuk berbagai platform dan lingkungan). Bahkan, SQL membuat RDBMS mungkin. SQL adalah bahasa nonprocedural, berbeda dengan atau generasi ketiga bahasa prosedural (3GLs) seperti COBOL dan C yang telah dibuat sampai saat itu.


CATATAN: Nonprocedural berarti apa bukan bagaimana. Misalnya, SQL menjelaskan apa untuk mengambil data, menghapus, atau memasukkan, bukan bagaimana untuk melakukan operasi.


Karakteristik yang membedakan DBMS dari RDBMS adalah bahwa RDBMS menyediakan database bahasa berorientasi-set. Untuk RDBMSs kebanyakan, ini bahasa berorientasi database SQLberorientasi set. Berarti Set bahwa SQL proses set data dalam kelompok.

Dua standar organisasi, American National Standards Institute (ANSI) dan International Standar Organization (ISO), saat ini mempromosikan standar SQL untuk industri. The-92 standar adalah standar ANSI untuk SQL digunakan di seluruh buku ini. Meskipun pembuatan badan standar menyusun standar untuk desainer sistem database untuk diikuti, semua produk database berbeda dari standar ANSI untuk beberapa derajat. Selain itu, kebanyakan sistem menyediakan beberapa ekstensi ke SQL milik yang memperpanjang bahasa ke bahasa prosedural benar. Kami telah menggunakan berbagai RDBMSs untuk mempersiapkan contoh dalam buku ini untuk memberikan gambaran tentang apa yang diharapkan dari sistem database umum. (Kami membahas SQL prosedural – dikenal sebagai PL / SQL – pada Hari 18, “PL / SQL: An Introduction,” dan Transact-SQL pada 19 Hari, “Transact-SQL: Sebuah Pengantar.”)

Sejarah Singkat Database

Sebuah sedikit latar belakang pada evolusi database dan teori database akan membantu Anda memahami cara kerja SQL. Database sistem menyimpan informasi dalam setiap lingkungan bisnis yang mungkin. Dari database pelacakan besar seperti sistem reservasi maskapai untuk itu bisbol kartu koleksi anak, database toko sistem dan mendistribusikan data yang kita bergantung pada.Sampai beberapa tahun terakhir, sistem database yang besar bisa hanya berjalan pada komputer mainframe besar. Mesin-mesin secara tradisional telah mahal untuk merancang, pembelian, dan memelihara. Namun,’s generasi hari ini kuat, komputer workstation murah memungkinkan programmer untuk merancang perangkat lunak yang memelihara dan mendistribusikan data dengan cepat dan murah.

Dr Codd’s 12 Aturan untuk Model Database Relational

Model penyimpanan data yang paling populer adalah database relasional, yang tumbuh dari kertas seminalis “A Relational Model Data untuk Data Besar Bersama Bank,” ditulis oleh Dr EF Codd pada tahun 1970. SQL berevolusi ke layanan konsep model database relasional. Dr Codd didefinisikan 13 aturan, anehnya disebut’s 12 Codd Aturan, untuk model relasional:

  1. Sebuah DBMS relasional harus mampu mengelola database relasional sepenuhnya melalui kemampuan perusahaan.
  2. Informasi aturan – Semua informasi dalam sebuah database relasional (termasuk meja dan kolom nama) direpresentasikan secara eksplisit sebagai nilai dalam tabel.
  3. Akses Guaranteed – Setiap nilai dalam database relasional dijamin dapat diakses dengan menggunakan kombinasi dari nama tabel, nilai kunci primer, dan nama kolom.
  4. Sistematik nilai null dukungan DBMS menyediakan dukungan sistematis untuk pengobatan nilai null (atau diterapkan data tidak diketahui), berbeda dari nilai-nilai default, dan bebas dari domain manapun.
  5. Aktif katalog relasional online – Deskripsi tentang database dan isinya adalah mewakili pada tingkat logis sebagai tabel sehingga dapat dilihat menggunakan bahasa database.
  6. Komprehensif sublanguage – Setidaknya satu bahasa yang didukung harus memiliki sintaks yang didefinisikan dengan baik dan komprehensif. Ini harus mendukung definisi data, manipulasi, aturan integritas, otorisasi, dan Transaksi.
  7. Memperbarui. Lihat aturan – Semua tampilan yang secara teoritis dapat diupdate dapat diperbarui melalui sistem.
  8. Penyisipan. Set-tingkat, update, dan penghapusan – DBMS mendukung tidak hanya tingkat pengambilan set tetapi juga mengatur tingkat insert, update, dan menghapus.
  9. Fisik – data kemerdekaan/Independensi Aplikasi program. 8 dan program-program ad hoc secara logis tidak terpengaruh bila metode akses fisik atau struktur penyimpanan berubah.
  10. Logis – data kemerdekaan/Independensi Aplikasi program. 9 dan ad hoc program secara logis tidak terpengaruh, sejauh mungkin, jika ada perubahan pada struktur tabel.
  11. Kemerdekaan/Independensi Integritas. – Bahasa database harus mampu mendefinisikan aturan-aturan integritas. Mereka harus disimpan dalam katalog online, dan mereka tidak dapat dilewati.
  12. Distribusi. Kemerdekaan Aplikasi program dan ad hoc permintaan secara logis tidak terpengaruh saat data pertama didistribusikan atau ketika didistribusikan.
  13. Nonsubversion Tidak harus dapat untuk memotong aturan integritas yang ditetapkan melalui bahasa database dengan menggunakan tingkat bahasa lebih rendah.

Kebanyakan database memiliki orang tua “/ anak” hubungan, yaitu node orangtua akan berisi file pointer ke anak-anaknya. (Lihat Gambar 1.1.)

Gambar 1.1.
Codd’s database relasional sistem manajemen.

Metode ini memiliki beberapa kelebihan dan kekurangan banyak. Mendukung adalah fakta bahwa struktur fisik data pada disk menjadi tidak penting. programmer itu hanya menyimpan pointer ke lokasi berikutnya, sehingga data dapat diakses dengan cara ini. Selain itu, data dapat ditambahkan dan dihapus dengan mudah. Namun, kelompok yang berbeda informasi tidak dapat dengan mudah bergabung untuk membentuk informasi baru. Format data pada disk tidak bisa sewenang-wenang berubah setelah database telah dibuat. Melakukan hal tersebut akan memerlukan pembentukan struktur database baru.

Ide Codd untuk RDBMS menggunakan konsep matematika aljabar relasional untuk memecah data ke dalam set dan subset umum terkait.

Karena informasi yang secara alami dapat dikelompokkan ke dalam set yang berbeda, Dr Codd terorganisir sistem database-nya sekitar konsep ini. Berdasarkan model relasional, data dipisahkan menjadi set yang menyerupai struktur tabel. Struktur tabel ini terdiri dari unsur-unsur data individual yang disebut kolom atau field. Satu set tunggal dari kelompok bidang dikenal sebagai catatan atau baris. Sebagai contoh, untuk membuat sebuah database relasional yang terdiri dari data karyawan, Anda bisa mulai dengan tabel EMPLOYEE disebut yang berisi potongan-potongan informasi berikut: Nama, Umur, dan Pekerjaan. Ketiga bagian data yang membentuk bidang dalam tabel EMPLOYEE, ditunjukkan pada Tabel 1.1.

Tabel 1.1. Tabel EMPLOYEE.

Nama Usia Pekerjaan
Will Williams 25 Insinyur listrik
Dave Davidson 34 Kurator Museum
Jan Janis 42 Koki
Bill Jackson 19 Mahasiswa
Don DeMarco 32 Game programmer
Becky Boudreaux 25 Model

Keenam baris adalah catatan dalam tabel EMPLOYEE. Untuk mengambil catatan tertentu dari tabel ini, misalnya, Dave Davidson, pengguna akan memerintahkan sistem manajemen database untuk mengambil catatan di mana medan NAMA sama dengan Dave Davidson. Jika DBMS telah diinstruksikan untuk mengambil semua bidang dalam catatan, nama karyawan, usia, dan pekerjaan akan dikembalikan kepada pengguna. SQL adalah bahasa yang memberitahu database untuk mengambil data ini. Sebuah pernyataan SQL sampel yang membuat permintaan ini

  SELECT *
  DARI KARYAWAN

Ingat bahwa sintaks yang tepat tidak penting pada saat ini. Kami menutup topik ini dalam lebih banyak detail mulai besok.

Karena berbagai item data dapat dikelompokkan menurut hubungan jelas (seperti hubungan Nama Karyawan untuk Karyawan Umur), model database relasional database desainer memberikan banyak fleksibilitas untuk menggambarkan hubungan antara elemen data. Melalui konsep-konsep matematika dari bergabung dan serikat pekerja, database relasional dapat dengan cepat mengambil bagian data dari set yang berbeda (tabel) dan mengembalikan mereka ke pengguna atau program sebagai salah satu “bergabung dengan” pengumpulan data. (Lihat Gambar 1.2 fitur.) Yang ikut memungkinkan desainer untuk menyimpan set informasi dalam tabel terpisah untuk mengurangi pengulangan.

Gambar 1.2.
Join fitur.

Gambar 1.3 menunjukkan sebuah serikat pekerja. serikat pekerja itu akan menghasilkan data hanya umum untuk kedua sumber.

Gambar 1.3.
Fitur serikat.

Berikut adalah contoh sederhana yang menunjukkan bagaimana data dapat secara logis dibagi antara dua tabel. Tabel 1.2 disebut TANGGUNG JAWAB dan berisi dua bidang: NAMA dan TUGAS.

Tabel 1.2. Tabel TANGGUNG JAWAB.

Nama Tugas
Becky Boudreaux Senyum
Becky Boudreaux Berjalan
Bill Jackson Penelitian
Bill Jackson Wawancara pekerjaan

Ini akan menjadi tidak layak untuk menduplikasi karyawan dan bidang UMUR PEKERJAAN untuk setiap record. Seiring waktu yang tidak perlu duplikasi, data akan menghabiskan banyak ruang hard disk dan meningkatkan waktu akses untuk RDBMS. Namun, jika TUGAS NAMA dan disimpan dalam tabel terpisah bernama TANGGUNG JAWAB, pengguna bisa bergabung dengan TANGGUNG JAWABdan tabel KARYAWAN pada bidang NAMA. RDBMS menginstruksikan untuk mengambil semua kolom dari tabel KARYAWAN TANGGUNG JAWAB dan bidang NAMA mana sama Becky Boudreaux akan kembali Tabel 1.3.

Tabel 1.3. Kembali nilai dari pengambilan di mana NAMA sama dengan Becky Boudreaux.

Nama Usia Pekerjaan Tugas
Becky Boudreaux 25 Model Senyum
Becky Boudreaux 25 Model Berjalan

contoh yang lebih rinci bergabung dimulai pada Hari ke-6, “Bergabung dengan Tabel.”

Merancang Struktur Database

Yang penting keputusan paling untuk seorang desainer database, setelah platform perangkat keras dan RDBMS telah dipilih, adalah struktur dari tabel. Keputusan dibuat pada tahap desain dapat mempengaruhi kinerja dan program kemudian selama proses pembangunan. Proses memisahkan data ke dalam, yang unik adalah set disebut normalisasi berbeda.

Hari Database Lansekap

Komputasi teknologi telah membuat perubahan permanen dalam cara kerja bisnis di seluruh dunia. Informasi yang disimpan pada suatu waktu dalam gudang penuh lemari arsip kini dapat diakses cepat di klik tombol mouse. Pesanan yang ditempatkan oleh nasabah di negara-negara asing sekarang dapat langsung diproses pada lantai fasilitas manufaktur. Meskipun 20 tahun lalu banyak informasi ini telah diangkut ke mainframe database perusahaan, kantor masih beroperasi dalam lingkungan-pengolahan batch. Jika query yang perlu dilakukan, seseorang memberitahu sistem informasi manajemen (MIS) departemen, data yang diminta disampaikan secepat mungkin (walaupun sering tidak cukup cepat).

Selain perkembangan model database relasional, dua teknologi menyebabkan pertumbuhan yang cepat dari apa yang sekarang disebut database client server sistem /. Teknologi penting pertama adalah komputer pribadi. Murah, mudah digunakan aplikasi seperti Lotus 1-2-3 dan Word Perfect memungkinkan karyawan (dan rumah pengguna komputer) untuk membuat dokumen dan mengelola data dengan cepat dan akurat. Pengguna menjadi terbiasa untuk terus-menerus meningkatkan mutu sistem karena laju perubahan begitu cepat, bahkan sebagai harga dari sistem yang lebih canggih terus menurun.

Teknologi penting kedua adalah jaringan area lokal (LAN) dan integrasinya ke kantor-kantor di seluruh dunia. Meskipun pengguna sudah terbiasa dengan koneksi terminal ke mainframe korporasi, sekarang kata pemrosesan file dapat disimpan secara lokal dalam sebuah kantor dan diakses dari komputer manapun yang terpasang ke jaringan. Setelah Apple Macintosh memperkenalkan antarmuka pengguna grafis yang ramah, komputer tidak hanya murah dan kuat tetapi juga mudah digunakan. Selain itu, mereka dapat diakses dari situs remote, dan sejumlah besar data bisa off-load ke server data departemen.

Selama masa perubahan cepat dan kemajuan, tipe baru sistem aplikasi Dipanggil muncul. Klien / server pembangunan karena pengolahan dibagi antara komputer klien dan database server, baru berkembang biak ini hanyalah perubahan radikal dari aplikasi pemrograman berbasis-mainframe. Di antara banyak keuntungan dari jenis arsitektur

  • Mengurangi biaya pemeliharaan
  • Mengurangi beban jaringan (pengolahan terjadi pada server database atau komputer klien)
  • Beberapa sistem operasi yang dapat interoperate selama mereka berbagi protokol jaringan yang umum
  • Peningkatan integritas data karena data lokasi terpusat

Dalam Melaksanakan Client / Server Computing, Bernard H. Boar mendefinisikan klien / server komputasi sebagai berikut:

Klien / server komputasi model pengolahan di mana aplikasi tunggal dibagi antara beberapa prosesor (front-end dan back-end) dan prosesor bekerja sama (transparan kepada pengguna akhir) untuk menyelesaikan proses sebagai satu kesatuan tugas. Pelaksanaan Client / Server Seorang klien Komputasi / server ikatan hubungan produk prosesor sama untuk menyediakan gambar sistem tunggal (ilusi). sumber daya shareable diposisikan sebagai klien pemohon bahwa akses layanan dasar. Arsitektur ini terus-menerus rekursif, pada gilirannya, server dapat menjadi klien dan layanan permintaan server lain di jaringan, dan seterusnya dan seterusnya.

Jenis ini memerlukan pengembangan aplikasi baru yang sama sekali keterampilan pemrograman. User interface pemrograman sekarang ditulis untuk antarmuka pengguna grafis, apakah itu MS Windows, IBM OS / 2, Apple Macintosh, atau UNIX-sistem X Window. Menggunakan SQL dan koneksi jaringan, aplikasi dapat interface ke database yang berada pada remote server. Kekuatan meningkat dari perangkat keras komputer pribadi memungkinkan informasi database penting untuk disimpan pada server standalone relatif murah. Sebagai tambahan, server ini dapat diganti kemudian dengan sedikit atau tidak ada perubahan terhadap aplikasi klien.

Sebuah produk Bahasa Cross

Anda dapat menerapkan konsep-konsep dasar yang diperkenalkan dalam buku ini di banyak lingkungan – sebagai contoh, Microsoft Access berjalan pada aplikasi Windows pengguna-tunggal atau SQL Server berjalan dengan 100 koneksi pengguna. Salah satu manfaat terbesar SQL adalah bahwa hal itu benar-benar cross-platform dan bahasa-bahasa lintas produk. Karena juga apa pemrogram lihat sebagai tingkat-tinggi atau bahasa generasi keempat (4GL), sejumlah besar kerja dapat tingkat bahasa 4GL-donehigher (generasi keempat) Bahasa generasi keempat (4GL) bahasa di baris lebih sedikit kode.

Implementasi Awal

Oracle Corporation merilis RDBMS komersial pertama yang menggunakan SQL. Meskipun versi aslinya dikembangkan untuk VAX / sistem VMS, Oracle adalah salah satu vendor pertama untuk merilis versi DOS dari RDBMS nya. (Oracle sekarang tersedia di lebih dari 70 platform 1980-an.) Pada pertengahan yang-dirilis RDBMS Sybase, SQL Server. Dengan librari klien untuk mengakses database, dukungan untuk prosedur yang tersimpan (dibahas pada Hari 14, “Dynamic Penggunaan SQL”), dan interoperabilitas dengan berbagai jaringan, SQL Server menjadi produk yang sukses, khususnya di klien / server lingkungan. Salah satu poin terkuat untuk kedua sistem kuat theseSQL database Server skalabilitas mereka di seluruh platform. Kode bahasa C (dikombinasikan dengan SQL) ditulis untuk Oracle pada PC hampir identik dengan mitranya yang ditulis untuk Oracle database berjalan pada sistem VAX.

SQL dan Client / Server Application Development

Benang merah yang menjalankan seluruh klien / server pengembangan aplikasi adalah klien menggunakan / server komputasi dari SQL dan database relasional. Juga, menggunakan teknologi database dalam aplikasi bisnis single posisi pengguna aplikasi untuk pertumbuhan di masa depan.

Sebuah Tinjauan dari SQL

SQL adalah bahasa standar de facto yang digunakan untuk memanipulasi dan mengambil data dari database relasional. SQL memungkinkan seorang programmer atau database administrator untuk melakukan hal berikut:

  • Memodifikasi struktur database
  • Mengubah pengaturan keamanan sistem
  • Tambahkan akses user pada database atau tabel
  • Query database untuk informasi
  • Update isi database

CATATAN: Istilah SQL dapat membingungkan. S, untuk terstruktur, dan L, untuk Language, adalah cukup mudah, tetapi Q adalah sedikit menyesatkan,. Q tentu saja, singkatan dari “Query”, yang – jika diambil secara harfiah – akan membatasi Anda untuk meminta database pertanyaan. Tapi SQL tidak lebih dari mengajukan pertanyaan. Dengan SQL Anda juga dapat membuat tabel, menambah data, menghapus data, sambatan data bersama-sama, memicu tindakan berdasarkan perubahan ke database, dan menyimpan query Anda dalam program anda atau database.Sayangnya, tidak ada pengganti yang baik untuk Query. Jelas, Structured Tambahkan Ubah Hapus Gabung Store Trigger dan Query Language (SAMDJSTQL) agak sedikit rumit. Dalam kepentingan harmoni, kita akan tinggal dengan SQL. Bagaimanapun, Anda sekarang tahu bahwa fungsinya lebih besar dari nama.


Yang paling umum digunakan dalam pernyataan SQL adalah SELECT (lihat Hari 2, “Pengantar Permintaan: Pernyataan SELECT"),yang mengambil data dari database dan mengembalikan data ke pengguna. Contoh tabel EMPLOYEE menggambarkan satu contoh situasi SELECT. Di samping pernyataan SELECT, SQL menyediakan laporan untuk membuat database baru, tabel, field, dan indeks, serta laporan untuk menyisipkan dan menghapus catatan. ANSI SQL juga merekomendasikan kelompok inti fungsi manipulasi data. Ketika Anda akan tahu, sistem database banyak juga memiliki alat untuk memastikan integritas data dan menegakkan keamanan (lihat Hari 11, “Pengendalian Transaksi”) yang memungkinkan programmer untuk menghentikan pelaksanaan suatu kelompok perintah jika kondisi tertentu terjadi.

Implementasi SQL Populer

Bagian ini memperkenalkan beberapa implementasi yang lebih populer dari SQL, yang masing-masing memiliki kekuatan dan kelemahan. Dimana beberapa implementasi dari SQL telah dikembangkan untuk menggunakan PC dan interaktivitas pengguna mudah, yang lain telah dikembangkan untuk mengakomodasi database yang sangat besar (VLDB). Bagian ini memperkenalkan fitur kunci yang dipilih dari beberapa implementasi.


CATATAN: Selain melayani sebagai referensi SQL, buku ini juga berisi contoh pengembangan perangkat lunak praktis adalah. SQL berguna hanya ketika dunia Anda memecahkan masalah nyata, yang terjadi dalam kode Anda.


Microsoft Access

Kami menggunakan Microsoft Access, sebuah PC berbasis DBMS, untuk menggambarkan beberapa contoh dalam teks ini. Akses sangat mudah digunakan. Anda dapat menggunakan alat manual memasukkan GUI atau pernyataan SQL Anda.

Pribadi Oracle7

Kami menggunakan Oracle7 pribadi, yang merupakan database dunia usaha yang lebih besar, untuk menunjukkan baris perintah SQL dan teknik manajemen database. (Teknik ini penting karena hari mesin mandiri yang mendekati akhir, seperti hari-hari ketika mengetahui salah satu database atau satu sistem operasi sudah cukup sesuai.) Dalam perintah-REI, berdiri sederhana + [Cedilla] satu SQL dimasukkan ke dalam Oracle SQL * Plus alat. Alat ini kemudian kembali data ke layar bagi pengguna untuk melihat, atau melakukan tindakan yang sesuai di database.

Kebanyakan contoh diarahkan programmer awal atau yang pertama kali SQL pengguna. Kita mulai dengan pernyataan SQL sederhana dan maju ke topik manajemen transaksi dan prosedur yang tersimpan pemrograman. RDBMS Oracle didistribusikan dengan lengkap alat pembangunan. Ini termasuk C + + dan Visual Basic perpustakaan bahasa (Oracle Objek untuk OLE) yang dapat menghubungkan aplikasi ke database Oracle pribadi. Hal ini juga dilengkapi dengan alat-alat grafis untuk database, pengguna, dan administrasi objek, serta SQL * Loader utilitas, yang digunakan untuk impor dan ekspor data ke dan dari Oracle.


CATATAN: Pribadi Oracle7 adalah versi skala bawah dari produk-Oracle7 server penuh sesak nafas. Pribadi Oracle7 hanya membolehkan pengguna koneksi tunggal (seperti namanya).Namun, sintaks SQL yang digunakan pada produk ini adalah identik dengan yang digunakan pada lebih besar, versi yang lebih mahal dari Oracle. Selain itu, peralatan yang digunakan dalam pribadi Oracle7 memiliki banyak kesamaan dengan produk Oracle7.


Kami memilih Oracle7 RDBMS pribadi karena beberapa alasan:

  • Ini mencakup hampir semua peralatan yang diperlukan untuk menunjukkan topik yang dibahas dalam buku ini.
  • Ini tersedia di hampir semua platform yang digunakan saat ini dan merupakan salah satu produk RDBMS yang paling populer di seluruh dunia.
  • Suatu hari sidang salinan-90 dapat didownload dari Oracle Corporation World Wide Web server ( http://www.oracle.com ).

Gambar 1.4 menunjukkan SQL * Plus dari suite ini alat.

Gambar 1.4.
Oracle SQL * Plus.


TIP: Perlu diingat bahwa hampir semua kode SQL yang diberikan dalam buku ini adalah portabel untuk sistem manajemen basis data lainnya. Dalam kasus-kasus dimana sintaks sangat berbeda antara “vendor produk yang berbeda, contoh diberikan untuk menggambarkan perbedaan-perbedaan ini.


Microsoft Query

Microsoft Query (lihat Gambar 1.5) adalah alat permintaan bermanfaat yang dikemas bersama dengan Windows pembangunan alat Microsoft, Visual C + +, dan Visual Basic. Ia menggunakan standar ODBC untuk berkomunikasi dengan database yang mendasarinya. Microsoft Query lewat pernyataan SQL ke sopir, yang memproses laporan sebelum melewati mereka ke sistem database.

Gambar 1.5.
Microsoft Query.

Open Database Connectivity (ODBC)

ODBC adalah library fungsional yang dirancang untuk menyediakan umum Application Programming Interface (API) untuk sistem database. Ini berkomunikasi dengan database melalui driver perpustakaan, seperti Windows berkomunikasi dengan printer melalui driver printer. Tergantung pada database yang digunakan, driver jaringan mungkin diperlukan untuk menyambung ke basis data jauh. Arsitektur ODBC diilustrasikan pada Gambar 1.6.

Gambar 1.6.
Struktur ODBC.

Fitur unik ODBC (dibandingkan dengan Oracle atau Sybase perpustakaan) adalah bahwa tidak ada fungsi yang database-vendor tertentu. Misalnya, Anda dapat menggunakan kode yang sama untuk melakukan query terhadap sebuah tabel Microsoft Access atau database Informix dengan atau tanpa modifikasi sedikit. Sekali lagi, perlu dicatat bahwa sebagian besar vendor proprietary menambahkan beberapa ekstensi untuk standar SQL, seperti Microsoft dan Sybase’s Transact-SQL dan Oracle PL / SQL.

Anda harus selalu berkonsultasi di dokumentasi sebelum mulai bekerja dengan sumber data baru. ODBC telah berkembang menjadi standar diadopsi ke dalam berbagai produk, termasuk Visual Basic, Visual C + +, FoxPro, Borland Delphi, dan PowerBuilder. Seperti biasa, pengembang aplikasi perlu mempertimbangkan manfaat menggunakan standar ODBC muncul, yang memungkinkan Anda untuk merancang kode tanpa mempedulikan database tertentu, dibandingkan dengan kecepatan yang diperoleh dengan menggunakan fungsi library database tertentu. Dengan kata lain, menggunakan ODBC akan lebih portabel tetapi lebih lambat daripada menggunakan Oracle7 atau perpustakaan Sybase.

SQL pada Pemrograman Aplikasi

SQL pada awalnya membuat standar ANSI pada tahun 1986. 1989 ANSI standar (sering disebut SQL-89) mendefinisikan tiga jenis antarmuka dengan SQL dalam program aplikasi:

  • Modul Bahasa – Menggunakan prosedur dalam program. Prosedur-prosedur ini dapat dipanggil oleh program aplikasi dan dapat kembali nilai-nilai ke program melalui parameter yang lewat.
  • Embedded SQL – Menggunakan SQL tertanam dengan kode program sebenarnya. Metode ini sering memerlukan penggunaan precompiler untuk proses statemen SQL. Standar ini mendefinisikan laporan untuk Pascal, FORTRAN, COBOL, dan PL / 1.
  • Langsung Doa – Waktu sampai dengan pelaksana tersebut.

Sebelum konsep dari SQL dinamis berkembang, embedded SQL adalah cara yang paling populer menggunakan SQL dalam sebuah program. Embedded SQL, yang masih digunakan, menggunakan SQL statis – yang berarti bahwa pernyataan SQL dikompilasi ke dalam aplikasi dan tidak dapat diubah pada saat runtime. Prinsipnya adalah sama seperti sebuah kompiler versus penerjemah. Kinerja untuk jenis SQL adalah baik, namun tidak fleksibel – dan tidak dapat selalu memenuhi kebutuhan perubahan lingkungan usaha yang saat ini. Dynamic SQL dibahas segera.

1992 ANSI standar (SQL-92) diperpanjang bahasa dan menjadi standar internasional. Ini mendefinisikan tiga tingkat kepatuhan SQL: Catatan, menengah, dan penuh. Fitur-fitur baru yang diperkenalkan adalah sebagai berikut:

  • Koneksi ke database
  • Digulir cursors
  • Dynamic SQL
  • Luar bergabung

Buku ini tidak hanya mencakup semua ekstensi tetapi juga beberapa ekstensi eksklusif digunakan oleh vendor RDBMS. Dynamic SQL memungkinkan Anda untuk menyiapkan pernyataan SQL pada saat runtime fleksibilitas. Meskipun kinerja untuk jenis SQL tidak sebagus yang tertanam dari SQL, ia menyediakan aplikasi pengembang (dan user) dengan tingkat besar. A-level panggilan antarmuka, seperti ODBC atau Sybase’s DB-Library, adalah contoh dari SQL dinamis.

Panggil tingkat antarmuka seharusnya tidak menjadi konsep baru untuk pemrogram aplikasi. Bila menggunakan ODBC, misalnya, Anda cukup mengisi variabel dengan statemen SQL Anda dan memanggil fungsi untuk mengirimkan pernyataan SQL ke database. Kesalahan atau hasilnya dapat kembali ke program ini melalui penggunaan fungsi panggilan lain yang dirancang untuk tujuan itu. Hasil dikembalikan melalui proses yang dikenal sebagai pengikatan variabel.

Ringkasan

Hari 1 meliputi beberapa sejarah dan struktur di belakang SQL. Karena SQL dan database relasional sangat erat terkait, Hari 1 juga mencakup (meskipun singkat) sejarah dan fungsi dari database relasional. Besok dikhususkan untuk komponen yang paling penting dari SQL: query.

Sumber ; http://www.webbasedprogramming.com