Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

SQL Chọn phân biệt

Truy vấn SQL DISTINCT được sử dụng để tìm nạp các giá trị duy nhất từ ​​các bảng bằng cách sử dụng câu lệnh SELECT trong SQL.

Có thể có một tình huống phát sinh khi bạn muốn tìm nạp các giá trị duy nhất từ ​​các bảng, nhưng các giá trị trùng lặp cũng có bên trong bảng. Trong trường hợp đó, bạn nên sử dụng truy vấn CHỌN DISTINCT để loại bỏ các giá trị trùng lặp và tìm nạp các giá trị duy nhất từ ​​bảng.

Cú pháp của câu lệnh SELECT DISTINCT:

SELECT DISTINCT columnname1, columnname2 FROM table_name;

Hãy xem xét các bảng của nhân viên hiện có có các bản ghi sau:

EMPLOYEEID FIRST_NAME LAST_NAME TIỀN LƯƠNG THÀNH PHỐ KHOA MANAGERID
1001 VAIBHAVI MISHRA 65500 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOIDA ORACLE 1
1003 NIKHIL VANI 50500 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 ĐIỀU CHỈNH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 MUMBAI KIỂM TRA 4
3001 PRANOTI CHIA SẺ 55500 PUNE JAVA 3
3002 ANUJA DÂY 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH MỤC TIÊU 60500 MUMBAI KIỂM TRA 4
4002 ASHWINI TÚI XÁCH 54500 NOIDA JAVA 3
4003 RUCHIKA AGARWAL 60000 DELHI ORACLE 1
5001 ARCHIT SHARMA 55500 DELHI KIỂM TRA 4

Hãy hiểu rõ CHỌN DISTINCT với sự trợ giúp của một ví dụ.

Ví dụ 1: Viết truy vấn để tìm nạp thông tin chi tiết về nhân viên có mức lương của nhân viên lớn hơn 55000 mà không sử dụng từ khóa DISTINCT.

SELECT * FROM EMPLOYEES WHERE SALARY > 55000;

Trong câu lệnh trên, chúng tôi đã tìm nạp thông tin chi tiết về nhân viên từ bảng của nhân viên có mức lương của nhân viên lớn hơn 55000, bao gồm cả các giá trị trùng lặp.

Kết quả cho câu lệnh sau:

EMPLOYEEID FIRST_NAME LAST_NAME TIỀN LƯƠNG THÀNH PHỐ KHOA MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOIDA ORACLE 1
2001 PRACHI SHARMA 55500 ĐIỀU CHỈNH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
3001 PRANOTI CHIA SẺ 55500 PUNE JAVA 3
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH MỤC TIÊU 60500 MUMBAI KIỂM TRA 4
4003 RUCHIKA AGARWAL 60000 DELHI ORACLE 1
5001 ARCHIT SHARMA 55500 DELHI KIỂM TRA 4

Kết quả trên cho thấy chúng tôi đã tìm nạp thông tin chi tiết về nhân viên, bao gồm cả các giá trị trùng lặp.

Ví dụ 2: Viết truy vấn để hiển thị mức lương của nhân viên từ bảng nhân viên có mức lương của nhân viên lớn hơn 55000 bằng từ khóa DISTINCT.

SELECT DISTINCT (SALARY) FROM EMPLOYEES WHERE SALARY > 55000;

Trong câu lệnh trên, chúng tôi đang truy xuất lương của nhân viên từ bảng của nhân viên có mức lương lớn hơn 55000, nơi chúng tôi đang loại bỏ các giá trị trùng lặp. Mức lương riêng biệt sẽ hiển thị mức lương duy nhất từ ​​bảng của nhân viên.

Kết quả cho câu lệnh sau:

SALARY
65000
60000
55500
65500
58500
60500

Trong ví dụ đầu tiên, chúng tôi đã tìm nạp chi tiết nhân viên có mức lương lớn hơn 55000. Kết quả truy vấn bao gồm các giá trị trùng lặp. Nhưng trong ví dụ thứ hai, chúng tôi thực hiện cùng một truy vấn để hiển thị mức lương của nhân viên có mức lương lớn hơn 55000. Truy vấn hiển thị kết quả loại bỏ các giá trị trùng lặp vì chúng tôi đã sử dụng từ khóa DISTINCT theo sau là cột lương.

Ví dụ 3: Viết truy vấn để hiển thị thành phố của nhân viên và mức lương từ bảng nhân viên mà không sử dụng từ khóa riêng biệt.

SELECT SALARY, CITY FROM EMPLOYEES;

Chúng tôi đã hiển thị mức lương của nhân viên và tên thành phố từ bảng của nhân viên trong câu lệnh trên, bao gồm các giá trị trùng lặp.

Kết quả cho câu lệnh sau:

SALARY THÀNH PHỐ
65500 PUNE
60000 NOIDA
50500 JAIPUR
55500 ĐIỀU CHỈNH
65500 PUNE
50000 MUMBAI
55500 PUNE
50500 JAIPUR
58500 MUMBAI
60500 MUMBAI
54500 NOIDA
60000 DELHI
55500 DELHI

Ví dụ 4: Viết truy vấn để hiển thị thành phố của nhân viên và mức lương từ bảng nhân viên bằng cách sử dụng các từ khóa riêng biệt.

CHỌN TIỀN LƯƠNG DISTINCT, THÀNH PHỐ TỪ NHÂN VIÊN;

Chúng tôi đã lấy mức lương của nhân viên và thành phố từ bảng nhân viên trong câu lệnh trên. Nhưng chúng tôi đã tìm nạp một giá trị duy nhất không được lặp lại trong toàn bộ bảng bằng từ khóa DISTINCT.

Kết quả cho câu lệnh sau:

SALARY THÀNH PHỐ
65500 PUNE
60000 NOIDA
50500 JAIPUR
55500 ĐIỀU CHỈNH
50000 MUMBAI
55500 PUNE
58500 MUMBAI
60500 MUMBAI
54500 NOIDA
60000 DELHI
55500 DELHI

Ví dụ 5: Viết truy vấn để hiển thị họ của nhân viên và bộ phận từ bảng của nhân viên trong đó tên bộ phận bắt đầu bằng 'O' mà không sử dụng từ khóa DISTINCT;

SELECT LAST_NAME, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT LIKE 'O%';

Trong câu lệnh trên, chúng tôi đã tìm nạp họ của nhân viên, các phòng ban từ bảng của nhân viên gồm những nhân viên có tên phòng ban bắt đầu bằng 'O', bao gồm các giá trị trùng lặp.

Kết quả cho câu lệnh sau:

LAST_NAME KHOA
MISHRA ORACLE
SHARMA ORACLE
SHARMA ORACLE
AGARWAL ORACLE

Chỉ có bốn bản ghi được hiển thị về những nhân viên có bộ phận bắt đầu bằng chữ 'O'.

Ví dụ 6: Viết truy vấn để hiển thị họ của nhân viên và bộ phận từ bảng của nhân viên trong đó tên bộ phận bắt đầu bằng 'O' bằng cách sử dụng từ khóa DISTINCT;

SELECT DISTINCT LAST_NAME, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT LIKE 'O%';

Chúng tôi đã sử dụng cùng một truy vấn trong ví dụ 5, chỉ cần thêm từ khóa DISTINCT ngay trước tên cột sẽ hiển thị các giá trị duy nhất từ ​​bảng của nhân viên có tên bộ phận bắt đầu bằng 'O'.

Kết quả cho câu lệnh sau:

LAST_NAME KHOA
MISHRA ORACLE
SHARMA ORACLE
AGARWAL ORACLE

Cùng một truy vấn mà chúng tôi đã thực hiện trong truy vấn trên, chúng tôi đã thêm từ khóa DISTINCT ngay trước các cột. Kết quả mà chúng ta nhận được khác với ví dụ trên vì kết quả hiển thị có các giá trị duy nhất.

Ví dụ 7: Viết truy vấn để tính lương của nhân viên từ bảng nhân viên mà không sử dụng từ khóa riêng biệt.

SELECT COUNT (SALARY) AS TOTAL SALARY FROM EMPLOYEES;

Trong câu lệnh trên, chúng tôi đã đếm tổng số tiền lương từ bảng của nhân viên, bao gồm cả các giá trị trùng lặp.

Kết quả cho câu lệnh sau:

TỔNG LƯƠNG
13

Ví dụ 8: Viết truy vấn để tính lương của nhân viên từ bảng nhân viên bằng cách sử dụng từ khóa riêng biệt.

SELECT COUNT(DISTINCT SALARY) AS TOTAL SALARY FROM EMPLOYEES;

Trong câu lệnh trên, chúng tôi đã đếm tổng số tiền lương từ bảng của nhân viên, không bao gồm các giá trị trùng lặp.

Kết quả cho câu lệnh sau:

TỔNG LƯƠNG
8


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối với Lotus Notes từ Java

  2. Hợp nhất các tệp dữ liệu với Statistica, Phần 1

  3. Một trường hợp sử dụng đơn giản cho các chỉ mục trên các khóa chính

  4. Quan hệ vs cơ sở dữ liệu không quan hệ - Phần 3

  5. So sánh Hiệu suất Windows Azure VM, Phần 2