zzz

Like trang page giúp ad nhé! THANK ALL

Thứ Năm, 5 tháng 11, 2015

1 Số lệnh SQL

Đếm số bản ghi 
Để đếm số bảng ghi của bảng dữ liệu, ta dùng hàm COUNT với cú pháp câu lệnh như sau:
SELECT COUNT(*) AS total_founds
FROM table_name
Ngoài ra để đếm số bảng ghi thỏa một điều kiện lọc nào đó ta có thể thêm vào mệnh đề WHERE trong câu truy vấn trên với cú pháp như sau:
SELECT COUNT(*) AS total_founds
 FROM table_name
 WHERE conditions
Chú ý: COUNT(*) trả về số dòng của bảng dữ liệu tính luôn ngay cả khi một cột trong dòng đó có giá trị NULL. Để đếm những bảng ghi có giá trị khác NULL trên một cột nào đó ta dùng cú pháp sau:
SELECT COUNT(column)
FROM table_name

So sánh 2 bảng

Trong lập trình CSDL, đôi khi bạn phải so sánh 2 bảng (hoặc hai bảng ảo hay nhiều hơn) để tìm ra những bảng ghi không phù hợp và sự khác biệt giữa 2 bảng ghi trong 2 bảng có cùng giá trị khóa.
Ví dụ: khi sao chuyển csdl, ta có một csdl cũ và một csdl mới. Hai csdl này có lược đồ khác nhau. Nhiệm vụ của chúng ta là chuyển toàn bộ dữ liệu từ csdl cũ sang csdl mới. Làm thế nào để chúng ta có thể kiểm chứng được kết quả? Khi ấy, chúng ta phải sử dụng  kĩ thuật được đề cập đến trong bài này để xem xét kết quả. Những bảng ghi nào thiếu trong csdl củ? những bảng ghi nào được sao chép sai trong csdl mới?
Một trong những cách nhanh nhất và dễ nhất là sử dụng UNION. Ý tưởng là ghép 2 bảng dữ liệu với tất cả các cột mà chúng ta muốn so sánh. Rồi chúng ta gộp kết quả này trên các cột mà chúng ta muốn so sánh. Nếu tất cả các cột được sao chép đúng thì CONT(*) = 2. Ngược lại, nếu có bảng ghi ở bảng dữ liệu này mà lại không xuất hiện trong bảng dữ liệu kia thì COUNT(*) = 1.
Cú pháp:
SELECT MIN (tbl_name) AS tbl_name, PK, column_list
FROM
 (
  SELECT ' source_table ' as tbl_name, S.PK, S.column_list
  FROM source_table AS S
  UNION ALL
  SELECT 'destination_table' as tbl_name, D.PK, D.column_list
  FROM destination_table AS D
)  AS alias_table
GROUP BY PK, column_list
HAVING COUNT (*) = 1
ORDER BY PK
Nếu 2 bảng đạt yêu cầu thì không có dòng dữ liệu nào được trả về trong câu truy vấn trên.

Nối xâu

Hầu hết các hệ quản trị CSDL đều cho phép chúng ta nối các xâu lại với nhau bằng cách này hay cách khác.
Ví dụ: để nối 2 xâu lại với nhau
·         MS SQL Server sử dụng toán tử +
·         Oracle sử dụng toán tử || hoặc hàm concat
·         MySQL sử dụng hàm concat
Cú pháp:
CONCAT(str1,str2,...)
Hàm này nối hai hay nhiều xâu lại với nhau và trả về một xâu kết quả duy nhất. Nếu tham số là giá trị số thì nó cũng sẽ được chuyển kiểu thành xâu. Nếu tất cả các tham số là NULL thì giá trị trả về là NULL.
Ví dụ 1:
SELECT CONCAT(contactLastname,', ',contactFirstname) fullname
 FROM customers
 LIMIT 5
(Video minh họa)
Để nối các xâu lại với nhau đồng thời chỉ định kí tự phân cách giữa các xâu (là dấu , hay khoảng trắng, .v.v.) chúng ta sử dụng hàm sau:
CONCAT_WS(seperator,str1,str2,...) 
Ghi chú: tham số đầu tiên (seperator) xác định kí tự phân cách. Tiếp theo là các xâu con sẽ được nối lại thành một xâu lớn hơn.
Ví dụ 2:
SELECT CONCAT_WS(', ',contactLastname,contactFirstname) fullname
 FROM customers
 LIMIT 5
(video minh họa)
Ví dụ 3:
SELECT CONCAT_WS(char(13),
               CONCAT_WS(' ',contactLastname,contactFirstname),
               addressLine1,
               addressLine2,
               CONCAT_WS(' ',postalCode,city),
               country,
               CONCAT_WS(char(13),'')
        ) AS Customer_Address
 FROM customers
 LIMIT 2















Không có nhận xét nào:

Đăng nhận xét