5.1 MEMILIKI pernyataan

Ada operator lain yang berguna dalam SQL yang digunakan dengan GROUP BY, namanya HAVING.

Artinya, ini sepenuhnya analog dengan operator WHERE. Ini hanya WHEREmemungkinkan Anda menyetel filter baris sebelum pengelompokan, dan dengan bantuan HAVINGAnda dapat menyetel filter yang diterapkan ke rekaman setelah pengelompokan.

Tampilan umum kueri saat menggunakan pengelompokan dan pemfilteran hasil pengelompokan adalah sebagai berikut:

SELECT columns
FROM table
WHERE condition
GROUP BY columns
HAVING condition

HAVINGhanya dapat digunakan jika permintaan berisi GROUP BY.

Mari tulis kueri di mana kami menampilkan jumlah karyawan yang direkrut berdasarkan tahun.

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

Dan hasil dari kueri ini:

sewa_tahun total
2012 1
2013 1
2014 1
2015 2
2018 1

Dan sekarang kami mengecualikan tahun-tahun ketika satu atau lebih sedikit karyawan dipekerjakan. Contoh:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
HAVING total > 1

Dan hasil dari kueri ini:

sewa_tahun total
2015 2

5.3 Urutan pelaksanaan pernyataan

Untuk menulis kueri SQL yang benar dan efisien, Anda perlu memahami bagaimana kueri dijalankan oleh server SQL.

Prosedur untuk melakukan tindakan diatur secara ketat dan tidak bergantung pada keinginan Anda. Anda tidak dapat mengatur ulang operator dan mendapatkan urutan yang berbeda.

Kueri SQL dijalankan dalam beberapa tahap dalam urutan ini.

  1. Tahap 1 - mengambil baris
    • Pertama, semua baris dari tabel yang ditentukan dipilih.
    • Kemudian bidang terhitung ditambahkan ke dalamnya.
    • Dan kemudian dari semua baris, hanya yang memenuhi syarat yang tersisaWHERE
  2. Tahap 2 - pengelompokan
    • Pengelompokan kemudian diterapkan pada hasil.
    • Selama pengelompokan, bidang seperti COUNT(*).
    • Terakhir, filter diterapkan ke hasil pengelompokan HAVING.
  3. Tahap 3 - menyortir
    • Baris yang diperoleh pada langkah sebelumnya diurutkan menggunakan ORDER BY.

Terakhir, hasilnya dapat dipangkas dengan LIMITdan OFFSET.