Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Cara menggunakan klausa HAVING dalam SQL

Pada artikel ini, kita akan belajar tentang konsep klausa HAVING dan cara menggunakannya dalam SQL.

Apakah klausa HAVING itu?

Dalam Structured Query Language, HAVING Clause yang digunakan dengan GROUP BY Clause menentukan kondisi yang menyaring hasil yang muncul di output. Ini hanya mengembalikan data dari grup, yang memenuhi persyaratan.

Dengan klausa HAVING, kita dapat menggunakan klausa WHERE juga dalam kueri. Jika kita menggunakan Kedua Klausa bersama-sama, klausa WHERE akan dieksekusi terlebih dahulu di mana ia akan memfilter setiap baris, kemudian baris dikelompokkan dan pada akhirnya, HAVING Clause memfilter grup.

Kondisi klausa HAVING ditempatkan setelah klausa GROUP BY. Klausa HAVING berperilaku sama dengan klausa WHERE dalam Structured Query Language tidak menggunakan klausa GROUP BY. Kita dapat menggunakan fungsi agregat seperti MIN, MAX, SUM, AVG, dan COUNT. Fungsi ini hanya digunakan dengan klausa SELECT dan klausa HAVING.

Sintaks klausa HAVING:

SELECT COLUMNS, AGGREGATE FUNCTION, FROM TABLENAME WHERE CONDITION GROUP BY COLUMN HAVING CONDITIONS; 

Ada beberapa langkah yang harus kita pelajari tentang cara menggunakan klausa HAVING dalam kueri SQL:

1. Buat database baru atau gunakan database yang sudah ada dengan memilih database menggunakan kata kunci USE diikuti dengan nama database.

2. Buat tabel baru di dalam database yang dipilih, atau Anda dapat menggunakan tabel yang sudah dibuat.

3. Jika tabel dibuat baru, masukkan catatan dalam database yang baru dibuat menggunakan kueri INSERT dan lihat data yang dimasukkan menggunakan kueri SELECT tanpa klausa HAVING.

4. Sekarang, kita siap untuk menggunakan klausa HAVING dalam kueri SQL.

Langkah 1:Buat database baru atau gunakan database yang sudah dibuat.

Saya sudah membuat database. Saya akan menggunakan nama database yang sudah saya buat.

USE SCHOOL;

Sekolah adalah nama databasenya.

Bagi yang belum membuat database, ikuti query di bawah ini untuk membuat database:

CREATE DATABASE database_name;

Setelah membuat database, pilih database menggunakan kata kunci USE diikuti dengan nama database.

Langkah 2:Buat tabel baru atau gunakan tabel yang sudah ada:

Saya sudah membuat tabel. Saya akan menggunakan tabel yang ada bernama Siswa.

Untuk membuat tabel baru ikuti sintaks CREATE TABLE di bawah ini:

CREATE TABLE table_name(

columnname1 datatype(column size),

columnname2 datatype(column size),

columnname3 datatype(column size)

);

Langkah 3:Sisipkan rekaman ke dalam tabel yang baru dibuat menggunakan kueri INSERT dan lihat rekaman menggunakan kueri SELECT.

Gunakan sintaks di bawah ini untuk menyisipkan catatan baru ke dalam tabel:

INSERT INTO table_name VALUES(value1, value2, value3);

Untuk melihat record dari tabel menggunakan sintaks di bawah ini:

SELECT * FROM table_name;

Kueri berikut akan menampilkan catatan Karyawan

SELECT * FROM Student;

Output dari query SELECT di atas adalah:

STUDENT_ID STUDENT_NAME PHYSICS_MARKS CHEMISTRY_MARKS MATHS_MARKS TOTAL_MARKS
1 NEHA 85 88 100 273
2 VISHAL 70 90 82 242
3 SAMKEET 75 88 96 259
4 NIKHIL 60 75 80 215
5 YOGESH 56 65 78 199
6 ANKITA 95 85 96 276
7 SONAM 98 89 100 287
8 VINEET 85 90 100 275
9 SANKET 86 78 65 229
10 PRACHI 90 80 75 245

Langkah 4:Kami siap menggunakan klausa HAVING dalam Bahasa Kueri Terstruktur.

Sekarang kita akan mendalami klausa HAVING dengan bantuan contoh.

Kami memiliki tabel bernama Siswa yang berisi catatan berikut.

STUDENT_ID STUDENT_NAME PHYSICS_MARKS CHEMISTRY_MARKS MATHS_MARKS TOTAL_MARKS
1 NEHA 85 88 100 273
2 VISHAL 70 90 82 242
3 SAMKEET 75 88 96 259
4 NIKHIL 60 75 80 215
5 YOGESH 56 65 78 199
6 ANKITA 95 85 96 276
7 SONAM 98 89 100 287
8 VINEET 85 90 100 275
9 SANKET 86 78 65 229
10 PRACHI 90 80 75 245

Contoh 1: Tulis kueri untuk menampilkan jumlah nilai fisika di mana jumlah nilai fisika lebih besar dari 60 kelompok berdasarkan id siswa.

SELECT STUDENT_ID, STUDENT_NAME, SUM(PHYSICS_MARKS) AS PHYSICS_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING SUM(PHYSICS_MARKS) > 60;

Dalam kueri di atas, kami telah mengambil fungsi agregat bernama SUM() diikuti dengan nama kolom Physics_marks, yang akan menjumlahkan kolom. Sum(physics_marks) pertama dieksekusi, kemudian kondisi klausa HAVING dieksekusi di akhir, dan hasil akhir akan ditampilkan. Kami telah menggunakan klausa GROUP BY diikuti dengan nama kolom Student_Id untuk mengelompokkan nilai yang sama dan menganggapnya sebagai satu grup. Jika nilainya tidak sama, tidak ada grup yang akan dibentuk untuk nilai. Dan pada akhirnya, kami telah menggunakan klausa HAVING di mana kami menempatkan kondisi yang akan membantu menampilkan hanya rincian siswa di mana jumlah nilai fisika lebih besar dari 60. Jika nilai fisika siswa kurang dari 60, itu tidak akan menampilkan catatan.

Output dari query di atas adalah:

STUDENT_ID STUDENT_NAME PHYSICS_MARKS
1 NEHA 85
2 VISHAL 70
3 SAMKEET 75
6 ANKITA 95
7 SONAM 98
8 VINEET 85
9 SANKET 86
10 PRACHI 90

Seperti yang dapat kita lihat di output, hanya ID siswa, nama, dan nilai fisika yang ditampilkan di mana jumlah nilai fisika lebih besar dari 60. Karena kami menggunakan klausa GROUP BY dan tidak ada nilai yang serupa, mereka dihitung sebagai satu grup .

Contoh 2: Tulis kueri untuk menampilkan nilai maksimum nilai kimia di mana nilai maksimum nilai kimia kurang dari 90 kelompok berdasarkan id siswa.

SELECT STUDENT_ID, STUDENT_NAME, MAX(CHEMISTRY_MARKS) AS CHEMISTRY_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING MAX(CHEMISTRY_MARKS) < 90;  

Dalam kueri di atas, kami telah mengambil fungsi agregat bernama MAX() diikuti dengan nama kolom chemistry_marks, yang akan menemukan nilai maksimum kolom. Kami telah menggunakan klausa GROUP BY diikuti dengan nama kolom Student_Id untuk mengelompokkan nilai yang sama dan menganggapnya sebagai satu grup. Jika nilainya tidak sama, maka grup terpisah akan dibentuk untuk nilai. Dan pada akhirnya, kami telah menggunakan klausa HAVING di mana kami menempatkan kondisi yang akan membantu menampilkan hanya rincian siswa di mana nilai maksimum nilai kimia kurang dari 90. Jika nilai kimia siswa lebih besar dari 90, itu tidak akan menampilkan catatan. Pertama, MAX(chemistry_marks) dieksekusi, kemudian kondisi klausa HAVING dieksekusi di akhir, dan hasil akhir akan ditampilkan. Output dari query di atas adalah:

STUDENT_ID STUDENT_NAME CHEMISTRY_MARKS
1 NEHA 88
3 SAMKEET 88
4 NIKHIL 75
5 YOGESH 65
6 ANKITA 85
7 SONAM 89
9 SANKET 78
10 PRACHI 80

Seperti yang dapat kita lihat pada output, hanya ID siswa, nama, dan nilai kimia yang ditampilkan di mana nilai maksimum nilai kimia kurang dari 90. Karena kami menggunakan klausa GROUP BY dan tidak ada nilai yang serupa, nilai tersebut dihitung sebagai satu grup.

Contoh 3: Tulis kueri untuk menampilkan nilai matematika di mana nilai minimal nilai matematika lebih besar dari 70 kelompok berdasarkan id siswa.

SELECT STUDENT_ID, STUDENT_NAME, MIN(MATHS_MARKS) AS MATHS_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING MIN(MATHS_MARKS) >70;

Dalam kueri di atas, kami telah mengambil fungsi agregat bernama MIN() diikuti dengan nama kolom maths_marks, yang akan menemukan tanda minimum kolom. Kami telah menggunakan klausa GROUP BY diikuti dengan nama kolom Student_Id untuk mengelompokkan nilai yang sama dan menganggapnya sebagai satu grup. Jika nilainya tidak sama, maka grup terpisah akan dibentuk untuk nilai. Dan pada akhirnya, kami telah menggunakan klausa HAVING di mana kami menempatkan kondisi yang akan membantu menampilkan hanya rincian siswa di mana nilai minimum nilai matematika lebih besar dari 70. Jika nilai matematika Siswa kurang dari 70, itu tidak akan menampilkan catatan. Pertama, MIN(maths_marks) dieksekusi, kemudian kondisi klausa HAVING dieksekusi di akhir, dan hasil akhir akan ditampilkan.

Keluaran dari kueri di atas adalah:

STUDENT_ID STUDENT_NAME MATHS_MARKS
1 NEHA 100
2 VISHAL 82
3 SAMKEET 96
4 NIKHIL 80
5 YOGESH 78
6 ANKITA 96
7 SONAM 100
8 VINEET 100
10 PRACHI 75

Seperti yang dapat kita lihat di output, hanya ID siswa, nama, dan nilai matematika yang ditampilkan di mana nilai minimum nilai matematika lebih besar dari 70. Karena kami menggunakan klausa GROUP BY dan tidak ada nilai yang serupa, nilai tersebut dihitung sebagai satu grup.

Contoh 4: Tulis kueri untuk menampilkan detail siswa di mana nilai fisika minimum lebih besar dari 56, DAN nilai matematika maksimum kurang dari 98.

SELECT STUDENT_ID, STUDENT_NAME, MIN(PHYSICS_MARKS) AS PHYSICS_MARKS , MAX(MATHS_MARKS) AS MATHS_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING MIN(PHYSICS_MARKS) >58 AND MAX(MATHS_MARKS)<98;

Kami menggunakan fungsi agregat ganda dalam satu kueri min() dan max() dalam kueri di atas. Min() digunakan untuk mengetahui nilai minimum fisika, dan Max() digunakan untuk mengetahui nilai matematika maksimum. Pertama, kueri akan menemukan tanda min() dan max() fisika dan matematika dari tabel siswa. Karena kami menggunakan klausa GROUP BY, nilai yang sama dipetakan sebagai satu grup, nilai lain akan dipisahkan. Karena tidak ada nilai yang serupa dalam tabel, semua nilai telah dipisahkan. Tidak ada nilai yang akan dipetakan sebagai satu grup. Selanjutnya, kami menggunakan klausa HAVING, yang berfungsi sebagai perbedaan klausa WHERE hanya klausa HAVING yang dipetakan ke dalam grup. Pertama, kondisinya adalah MIN(PHYSICS_MARKS)> 58. Karena tidak ada nilai yang serupa, setiap nilai akan dianggap sebagai nilai minimum, dan dibandingkan dengan kondisinya, pendekatan yang sama digunakan untuk MAX(MATHS_MARKS). Saat kami menggunakan operator AND dalam kueri, kondisi tersebut memenuhi kedua kondisi tersebut. Hanya catatan siswa tersebut yang ditampilkan di hasil akhir.

Output dari query di atas adalah:

STUDENT_ID STUDENT_NAME PHYSICS_MARKS MATHS_MARKS
2 VISHAL 70 82
3 SAMKEET 75 96
4 NIKHIL 60 80
6 ANKITA 95 96
9 SANKET 86 65
10 PRACHI 90 75

Seperti yang bisa kita lihat di output, hanya catatan siswa yang ditampilkan di mana nilai minimum fisika lebih besar dari 56, DAN nilai matematika maksimum kurang dari 98.

Pada contoh di atas, jika menggunakan operator OR sebagai ganti operator AND, maka sepuluh record ditampilkan karena operator OR mengatakan jika satu kondisi gagal dan kondisi lainnya benar, maka record tabel memenuhi kondisi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Untuk terakhir kalinya, TIDAK, Anda tidak dapat mempercayai IDENT_CURRENT()

  2. Tips Wawancara Administrator Database SQL

  3. Bagaimana Cara Mengganti Nama Kolom di SQL?

  4. Cara menggunakan klausa HAVING dalam SQL

  5. Cara Mencapai Failover Otomatis untuk TimescaleDB