SQL bermaksud Bahasa Permintaan Terstruktur ; ia adalah bahasa pangkalan data komprehensif atau deklaratif yang digunakan untuk mengakses data dari pangkalan data.
Carta Perbandingan
Asas untuk perbandingan | WHERE | HAVING |
---|---|---|
Asas | Dilaksanakan dalam operasi baris. | Dilaksanakan dalam operasi lajur. |
Dipohon kepada | Baris tunggal | Baris atau kumpulan diringkaskan. |
Pengambilan data | Ia hanya mengambil data tertentu dari baris tertentu mengikut keadaan. | Pada mulanya, data yang lengkap diambil kemudian dipisahkan mengikut keadaan. |
Fungsi Agregat | Tidak dapat muncul dalam klausa WHERE. | Boleh muncul dalam klausa HAVING. |
Digunakan dengan | PILIH dan pernyataan lain seperti UPDATE, DELETE atau salah satu dari mereka. | Tidak boleh digunakan tanpa pernyataan SELECT. |
Bertindak sebagai | Pra-penapis | Post-filter |
KUMPULAN OLEH | Datang selepas DI MANA. | Datang selepas HAVING. |
Definisi Di Mana Fasal
Fasal SQL WHERE digunakan untuk menggambarkan keadaan pada saat mengambil data dari satu jadual atau dengan bergabung dengan beberapa jadual. Ia hanya mengembalikan nilai tertentu dari jadual jika syarat yang diberikan telah dipenuhi. Fasal WHERE digunakan untuk menyerap rekod dan mengambil hanya rekod yang diperlukan.
SQL juga melaksanakan sambungan logik dan, atau dan bukan dalam klausa WHERE yang juga dikenali sebagai keadaan boolean ; keadaan mesti benar untuk mengambil tuple. Operan ekspresi sambungan logik melibatkan pengendali perbandingan seperti <, <=, >, > =, =, dan . Pengendali perbandingan ini membandingkan rentetan dan ungkapan aritmetik. Ia boleh digunakan dalam pernyataan SELECT, serta dalam UPDATE, pernyataan DELETE .
Mari ambil contoh. Jadual yang ditunjukkan di bawah yang dinamakan jadual ' Jualan ' terdiri daripada atribut ' Produk ' dan ' Sales_amount '.
PILIH Produk, jumlah (Sales_amount) AS Total_sales FROM Sales WHERE Product in ('Telefon', 'Speaker') KUMPULAN OLEH Produk;
Takrifan Mempunyai Fasal
SQL menyediakan klausa HAVING yang boleh digunakan bersama dengan klausa GROUP BY . Klausa HAVING ini membantu mendapatkan semula nilai untuk kumpulan yang memenuhi syarat-syarat tertentu. Klausa WHERE juga boleh digunakan bersama dengan Klausa HAVING semasa pemilihan, klausa WHERE menapis baris individu. Baris kemudian dikumpulkan, dan pengiraan agregat dilakukan, akhirnya Klausa HAVING menyaring kumpulan.
Ia berkelakuan sama seperti WHERE apabila kata kunci GROUP BY tidak digunakan. Fungsi Kumpulan seperti min, max, avg, jumlah, dan kiraan boleh muncul dalam hanya dua klausa: SELECT dan HAVING clause. Ia memberikan syarat pada tupel yang sepadan dengan setiap nilai dalam kumpulan atribut. Satu set rekod yang memenuhi syarat akan ditunjukkan sebagai hasilnya.
Di sini juga kita mengambil contoh yang sama seperti klausa WHERE dan mempertimbangkan jadual ' Jualan ' yang sama. Apabila kami ingin mengira Jumlah_sales telefon dan pembesar suara menggunakan klausa HAVING, kami akan menulis pertanyaan berikut.
PILIH Produk, jumlah (Sales_amount) AS Total_sales DARI KUMPULAN KUMPULAN OLEH Produk HAVING Produk dalam ('telefon', 'Pembicara');
Pertanyaannya menghasilkan output berikut di mana produk diperoleh terlebih dahulu, maka fungsi agregat (jumlah) dilakukan dan pada kumpulan terakhir ditapis tidak seperti klausa WHERE.
Apabila kami ingin mencari hanya produk-produk di mana Total_sales lebih besar daripada 1000. Pertanyaan itu boleh ditulis sebagai:
PILIH Produk, jumlah (Sales_amount) AS Total_sales DARI KUMPULAN KUMPULAN OLEH PENYAMBUNGAN Produk (Sales_amount)> 1000;
Keluaran yang dihasilkan ialah:
Ini tidak boleh dilakukan menggunakan klausa WHERE walaupun terdapat HAVING dan ia menghasilkan mesej ralat kerana fasal WHERE tidak boleh digunakan dengan fungsi agregat.
Perbezaan Utama Antara Di Mana dan Mempunyai Fasal
- Klausa WHERE digunakan dalam operasi baris dan diterapkan pada baris tunggal sedangkan fasal HAVING digunakan dalam operasi lajur dan boleh digunakan untuk meringkaskan baris atau kumpulan.
- Di WHERE klausa data yang dikehendaki diambil mengikut keadaan yang digunakan. Sebaliknya, klausa HAVING mengambil data keseluruhan maka pemisahan dilakukan mengikut keadaan.
- Fungsi agregat seperti min, jumlah, maksima, avg tidak boleh muncul bersama dengan klausa WHERE. Sebaliknya, fungsi-fungsi ini boleh muncul dalam klausa HAVING.
- Klausa HAVING tidak boleh digunakan tanpa pernyataan SELECT. Sebaliknya, WHERE boleh digunakan dengan SELECT, UPDATE, DELETE, dll.
- Klausa WHERE bertindak sebagai pra-penapis sementara Klausa HAVING bertindak sebagai penapis pasca.
- Klausa WHERE apabila digunakan dengan GROUP BY, datang sebelum GROUP BY. Ini menandakan bahawa baris penapis WHERE sebelum pengiraan agregat dilakukan. Sebaliknya, HAVING datang selepas KUMPULAN OLEH, yang bermakna ia menapis selepas pengiraan agregat dilakukan.
Kesimpulannya
Klausa WHERE dan HAVING berfungsi dengan cara yang sama kecuali ciri tambahan yang Klausa HAVING popular. Klausa HAVING dapat berfungsi dengan berkesan dengan fungsi agregat sementara WHERE tidak boleh dikendalikan dengan fungsi agregat.