Rumah >pangkalan data >tutorial mysql >Penapisan dan Isih SQL dengan Contoh Kehidupan Sebenar
Blog ini menerangkan klausa SQL seperti WHERE, HAVING, ORDER BY, GROUP BY dan klausa lain yang berkaitan menggunakan contoh kehidupan sebenar dengan jadual pekerja dan jabatan.
emp_id | name | age | department_id | hire_date | salary |
---|---|---|---|---|---|
1 | John Smith | 35 | 101 | 2020-01-01 | 5000 |
2 | Jane Doe | 28 | 102 | 2019-03-15 | 6000 |
3 | Alice Johnson | 40 | 103 | 2018-06-20 | 7000 |
4 | Bob Brown | 55 | NULL | 2015-11-10 | 8000 |
5 | Charlie Black | 30 | 102 | 2021-02-01 | 5500 |
dept_id | dept_name |
---|---|
101 | HR |
102 | IT |
103 | Finance |
104 | Marketing |
Klausa WHERE digunakan untuk menapis rekod berdasarkan syarat yang ditetapkan.
SELECT name, age, salary FROM employees WHERE age > 30;
name | age | salary |
---|---|---|
John Smith | 35 | 5000 |
Alice Johnson | 40 | 7000 |
Bob Brown | 55 | 8000 |
Penjelasan: Klausa WHERE menapis baris untuk memasukkan hanya pekerja yang berumur lebih daripada 30 tahun.
SELECT name, age, salary FROM employees WHERE age > 30 AND salary > 5000;
name | age | salary |
---|---|---|
Alice Johnson | 40 | 7000 |
Bob Brown | 55 | 8000 |
Penjelasan: Klausa WHERE menapis pekerja yang berumur lebih daripada 30 tahun dan mempunyai gaji lebih daripada 5000.
Klausa KUMPULAN OLEH digunakan untuk mengumpulkan baris yang mempunyai nilai yang sama ke dalam baris ringkasan, seperti mencari bilangan pekerja dalam setiap jabatan.
SELECT name, age, salary FROM employees WHERE age > 30;
department_id | employee_count |
---|---|
101 | 1 |
102 | 2 |
103 | 1 |
Penjelasan: Klausa GROUP BY mengelompokkan pekerja mengikut department_id dan mengira bilangan pekerja dalam setiap jabatan.
Klausa HAVING digunakan untuk menapis kumpulan yang dibuat oleh klausa GROUP BY. Ia berfungsi seperti klausa WHERE tetapi digunakan selepas pengagregatan.
SELECT name, age, salary FROM employees WHERE age > 30 AND salary > 5000;
department_id | avg_salary |
---|---|
102 | 5750 |
103 | 7000 |
Penjelasan: Klausa HAVING menapis kumpulan berdasarkan purata gaji pekerja di setiap jabatan. Hanya jabatan dengan purata gaji melebihi 5500 sahaja disertakan.
Klausa ORDER BY digunakan untuk mengisih hasil yang ditetapkan oleh satu atau lebih lajur. Secara lalai, ia disusun mengikut tertib menaik; untuk mengisih dalam tertib menurun, gunakan DESC.
SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id;
name | salary |
---|---|
John Smith | 5000 |
Charlie Black | 5500 |
Jane Doe | 6000 |
Alice Johnson | 7000 |
Bob Brown | 8000 |
Penjelasan: Keputusan disusun mengikut gaji mengikut tertib menaik.
SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id HAVING AVG(salary) > 5500;
name | salary |
---|---|
Bob Brown | 8000 |
Alice Johnson | 7000 |
Jane Doe | 6000 |
Charlie Black | 5500 |
John Smith | 5000 |
Penjelasan: Keputusan disusun mengikut gaji mengikut tertib menurun.
Klausa LIMIT digunakan untuk menentukan bilangan rekod untuk dikembalikan daripada set hasil. Ini amat berguna untuk halaman atau mengehadkan set hasil yang besar.
SELECT name, age, salary FROM employees WHERE age > 30;
name | salary |
---|---|
Bob Brown | 8000 |
Alice Johnson | 7000 |
Jane Doe | 6000 |
Penjelasan: Klausa LIMIT mengehadkan output hanya kepada 3 pekerja teratas dengan gaji tertinggi.
Klausa DISTINCT digunakan untuk mengembalikan nilai yang berbeza (berbeza) sahaja dalam set hasil, mengalih keluar pendua.
SELECT name, age, salary FROM employees WHERE age > 30 AND salary > 5000;
department_id |
---|
101 |
102 |
103 |
Penjelasan: Klausa DISTINCT mengembalikan nilai jabatan_id yang unik, menghapuskan pendua.
Pengendali DAN, ATAU dan TIDAK digunakan untuk menggabungkan berbilang syarat dalam klausa WHERE.
Operator AND digunakan untuk menggabungkan dua atau lebih keadaan. Hasilnya akan termasuk hanya baris dengan semua syarat adalah benar.
SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id;
name | age | salary |
---|---|---|
Alice Johnson | 40 | 7000 |
Bob Brown | 55 | 8000 |
Penjelasan: Klausa WHERE menapis baris yang kedua-dua syarat (umur > 30 dan gaji > 5500) adalah benar.
Operator OR digunakan apabila hanya satu daripada syarat mesti benar.
SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id HAVING AVG(salary) > 5500;
name | age | salary |
---|---|---|
Jane Doe | 28 | 6000 |
Alice Johnson | 40 | 7000 |
Bob Brown | 55 | 8000 |
Penjelasan: Klausa WHERE menapis baris yang sama ada umur < 30 atau gaji > 7000 adalah benar.
Operator NOT digunakan untuk mengecualikan baris yang keadaannya benar.
SELECT name, age, salary FROM employees WHERE age > 30;
name | age | salary |
---|---|---|
John Smith | 35 | 5000 |
Charlie Black | 30 | 5500 |
Jane Doe | 28 | 6000 |
Penjelasan: Klausa WHERE menapis baris di mana gaji > 6000 adalah palsu, bermakna ia mengembalikan pekerja yang berpendapatan 6000 atau kurang.
Blog ini menerangkan cara menapis, mengumpulkan dan mengisih data menggunakan SQL WHERE, HAVING, ORDER BY, GROUP BY, dan klausa lain dengan contoh kehidupan sebenar daripada jadual pekerja dan jabatan. Memahami klausa ini adalah asas untuk menulis pertanyaan SQL yang cekap, menganalisis data dan mengurus pangkalan data dengan berkesan.
Atas ialah kandungan terperinci Penapisan dan Isih SQL dengan Contoh Kehidupan Sebenar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!