VietTuts

Tự Học Lập Trình Online

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • MyBatis
  • Java WS
  • C
  • C++
  • C#
  • Python
  • PHP
  • Excel
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • CSS
    • HTML
    • HTML5
    • Node.js
    • Angular 7
  • SQL
    • MySQL
    • SQL Server
  • Misc
    • Eclipse
    • Phần mềm tiện ích
    • Cấu trúc DL&GT
    • Selenium Test

SQL cơ bản

SQL là gì? SQL - RDBMS là gì? SQL - Các hệ quản trị CSDL SQL - Cú pháp SQL - Kiểu dữ liệu SQL - Toán tử SQL - Biểu thức SQL - Create Database SQL - Drop Database SQL - Select Database SQL - Create Table SQL - Drop Table SQL - Câu lệnh Insert SQL - Câu lệnh Select SQL - Mệnh đề Where SQL - Toán tử AND & OR SQL - Câu lệnh Update SQL - Câu lệnh Delete SQL - Mệnh đề Like SQL - Mệnh đề Top SQL - Mệnh đề Order By SQL - Mệnh đề Group By SQL - Từ khóa Distinct

SQL nâng cao

SQL - Các ràng buộc SQL - Mệnh đề JOIN SQL - INNER JOIN SQL - RIGHT JOIN SQL - LEFT JOIN SQL - FULL JOIN SQL - SELF JOIN SQL - Mệnh đề UNION SQL - Giá trị NULL SQL - Sử dụng Alias SQL - Sử dụng Index SQL - Lệnh Alter SQL - Lệnh Truncate Table SQL - Sử dụng View SQL - Mệnh đề Having SQL - Transaction SQL - Ký tự đại diện SQL - Các hàm xử lý Date SQL - Bảng tạm thời SQL - Clone Table SQL - Sub Querie SQL - Sequence SQL - Xử lý Duplicate
1 / 3
❮ ❯

Xử lý duplicate trong SQL


Sequence trong SQL
Các hàm Date trong SQL

Có thể có tình huống khi bạn có nhiều bản ghi trùng lặp trong một bảng. Trong khi lấy ra bản ghi như vậy, chỉ cần lấy các bản ghi duy nhất mà thôi chứ không phải lấy các bản ghi trùng lặp.

Từ khoá DISTINCT trong SQL, được sử dụng kết hợp với câu lệnh SELECT để loại bỏ tất cả các bản ghi trùng lặp và chỉ lấy ra các bản ghi duy nhất.

Nội dung chính

  • Cú pháp
  • Ví dụ
  • Check performance issue

Cú pháp

Cú pháp cơ bản của một từ khoá DISTINCT để loại bỏ các bản ghi trùng lặp như sau.

SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition]

Ví dụ

Hãy xem xét bảng CUSTOMERS có các bản ghi sau.


+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ha Anh   |  32 | Da Nang   |  2000.00 |
|  2 | Van Ha   |  25 | Ha Noi    |  1500.00 |
|  3 | Vu Bang  |  23 | Vinh      |  2000.00 |
|  4 | Thu Minh |  25 | Ha Noi    |  6500.00 |
|  5 | Hai An   |  27 | Ha Noi    |  8500.00 |
|  6 | Hoang    |  22 | Ha Noi    |  4500.00 |
|  7 | Binh     |  24 | Ha Noi    | 10000.00 |
+----+----------+-----+-----------+----------+

Trước tiên, chúng ta hãy xem cách truy vấn SELECT sau đây sẽ trả về danh sách SALARY.


SELECT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

Điều này sẽ tạo ra kết quả sau khi mức lương 2000 đã hiển thị hai lần, đó là do có bản ghi trùng lặp.

+----------+
| SALARY   |
+----------+
|  1500.00 |
|  2000.00 |
|  2000.00 |
|  4500.00 |
|  6500.00 |
|  8500.00 |
| 10000.00 |
+----------+

Bây giờ, hãy sử dụng từ khóa DISTINCT với truy vấn SELECT ở trên và xem kết quả.


SELECT DISTINCT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

Điều này sẽ tạo ra kết quả sau và không có hạng mục nào bị trùng lặp.

+----------+
| SALARY   |
+----------+
|  1500.00 |
|  2000.00 |
|  4500.00 |
|  6500.00 |
|  8500.00 |
| 10000.00 |
+----------+
Bài tiếp theo: Các hàm Date trong SQL

Check performance issue

-----------------------------------
/* QUERY CHECKING UPON SLOWNESS */
-----------------------------------
SELECT SPID, ER.percent_complete,
CAST (((DATEDIFF (s, start_time, GetDate ())) /
3600) as varchar) + 'hour (s),'
+ CAST ((DATEDIFF (s, start_time, GetDate
())% 3600) / 60 as varchar) + 'min,'
+ CAST ((DATEDIFF (s, start_time, GetDate
())% 60) as varchar) + 'sec' as running_time,
CAST ((estimated_completion_time / 3600000) as
varchar) + 'hour (s),'
+ CAST ((estimated_completion_time%
3600000) / 60000 as varchar) + 'min,'
+ CAST ((estimated_completion_time% 60000)
/ 1000 as varchar) + 'sec' as est_time_to_go,
DATEADD (second, estimated_completion_time /
1000, getdate ()) as est_completion_time,
/* End of Article Code */
ER.command, ER.blocking_session_id, SP.DBID,
LASTWAITTYPE,
DB_NAME (SP.DBID) AS DBNAME,
SUBSTRING (est.text, (ER.statement_start_offset /
2) +1,
((CASE ER.statement_end_offset
WHEN -1 THEN DATALENGTH (est.text)
ELSE ER.statement_end_offset
END - ER.statement_start_offset) / 2) +
1) as QueryText,
TEXT, CPU, HOSTNAME, LOGIN_TIME, LOGINAME,
SP.status, PROGRAM_NAME, NT_DOMAIN, NT_USERNAME
FROM SYSPROCESSES SP
INNER JOIN sys.dm_exec_requests ER
ON sp.spid = ER.session_id
CROSS APPLY SYS.DM_EXEC_SQL_TEXT (er.sql_handle)
EST
ORDER BY CPU DESC
select sqltext.Text,
req.session_id,
req.status,
req.command,
req.cpu_time,
req.total_elapsed_time
from sys.dm_exec_requests req
cross apply sys.dm_exec_sql_text(sql_handle)
as sqltext

Sequence trong SQL
Các hàm Date trong SQL

Recent Updates

Xử lý duplicate trong SQLWeb SQL Database trong HTML5Lệnh DELETE MySQL trong PythonLệnh UPDATE MySQL trong PythonLệnh SELECT MySQL trong PythonLệnh INSERT MySQL trong PythonTạo bảng MySQL trong PythonTạo new database MySQL trong PythonKết nối Python với MySQLCài đặt môi trường MySQL cho PythonVí dụ Hibernate 3 XML Mapping - SQLServer 2017Ví dụ Hibernate 4 Annotation Mapping - MySQLSắp Tết 2026 Rồi! - Còn bao nhiêu ngày nữa là đến tết 2026?

VietTuts on facebook

Học Lập Trình Online Miễn Phí - VietTuts.Vn
Danh Sách Bài Học

Học Java | Hibernate | Spring
Học Excel | Excel VBA
Học Servlet | JSP | Struts2
Học C | C++ | C#
Học Python
Học SQL

Bài Tập Có Lời Giải

Bài tập Java
Bài tập C
Bài tập C++
Bài tập C#
Bài tập Python
Ví dụ Excel VBA

Câu Hỏi Phỏng Vấn

201 câu hỏi phỏng vấn java
25 câu hỏi phỏng vấn servlet
75 câu hỏi phỏng vấn jsp
52 câu hỏi phỏng vấn Hibernate
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

Scroll back to top

Copyright © 2016 VietTuts.Vn all rights reserved. | Liên hệ | Chính sách - riêng tư | sitemap.html | sitemap_index.xml