Tuy là các hệ csdl này dùng chuẩn SQL nhưng ngoài các thành phần chính có phát triển thêm vài thành phần mang nét riêng của nó, nói là vậy nhưng không có gì đáng lo ngại cả !
(Cuối bài sẽ cập nhật một video hướng dẫn thao tác với các lệnh cụ thể)
- DATE
- - Dùng để định dang ngày tháng
- Định dạng ngày tháng trong các hệ quản trị CSDL có thể khác định dạng trong các ngôn ngữ lập trình như : C#, Java ...
- Nếu nhập vào định dạng ngày tháng không phù hợp sẽ xảy ra lỗi
Các phương thức chính của Date Functions :
MySQL
NOW() : Trả về ngày giờ hiện tại.
CURDATE() : Trả về ngày hiện tại.
CURTIME() : Trả về giờ hiện tại
DATE() : Lấy ra phần ngày của một ngày hoặc biểu thức ngày giờ
EXTRACT() : Trả về một phần duy nhất của ngày/giờ
DATE ADD() : Bổ sung một khoảng thời gian quy định cho một ngày
DATE SUB() : Trừ một khoảng thời gian quy định cho một ngày
DATEDIFF() : Trả về tổng số ngày giữa hai ngày
DATE FORMAT() : Hiện thị ngày/giờ trong các định dạng khác nhau
SQL Server:
GETDATE() : Trả về ngày giờ hiện tại
DATEPART() : Trả về một phần của ngày giờ
DATEADD() : Cộng hoặc trừ một khoảng thời gian quy định từ Ngày
DATEDIFF() : Trả về khoảnh thời gian giữa 2 ngày.
CONVERT() : Hiển thị ngày giờ trong định dạng khác nhau
Chi tiết - NULL Values
- - Các cột trong một bảng csdl có thể được thiết lập là IS NULL (Có thể để trống)
- Nó đối lập với IS NOT NULL (Không được để trống)
Chi tiết - NULL Func
- - Dùng để kiểm tra các giá trị là NULL hay không :
ISNULL(), NVL(), IFNULL() và COALESCE()
Các hàm này được dùng trong các hệ csdl khác nhau nhưng có chung một ý nghĩa
Chi tiết - H.Tập Hợp
- - Chỉ trả về một giá trị duy nhất
- Tính các giá trị trong một cột
AVG() : Tính giá trị trung bình
COUNT() : Tính số hàng (rows)
FIRST() : Trả về giá trị đầu tiên
LAST() : Trả vể giá trị cuối cùng
MAX() : Lấy kết quả lớn nhất
MIN() : Lấy kết quả nhỏ nhất
SUM() : Lấy tổng các giá trị trong cột đó
Chi tiết - H.Vô Hướng
- - Trả về một giá trị duy nhất dựa trên giá trị đầu vào
UCASE() - Converts một field thành chữ HOA
LCASE() - Converts một field thành chữ thường
MID() - Cắt các ký tự từ một field văn bản
LEN() - Trả về độ dài của một trường văn bản (bao gồm khoảng cách _)
ROUND() - Trả về giá trị quy định trước của số thập phân
NOW() - Trả về giờ hiện tại của Hệ thống
FORMAT() - Định dạng một field đang hiển thị
Chi tiết - Lệnh Khác
- - GROUP BY & HAVING được dùng trong hàm tập hợp để thay thế cho SUM, WHERE . . . vì 2 lệnh này đáp ứng cho các nhu cầu cao hơn
Chi tiết
- A1 :
- DATE FUNCTONS
NOW(): Trả về ngày giờ hiện tại.
Cú pháp:
SELECT NOW() FROM tableName
Example:
SELECT ProductName, // Lấy dữ liệu cột ProductName
Price, // Và cột Price
Now() AS PerDate// Và thêm cột mới tên là: PerDate
FROM Products;// Từ bảng Products
and more . . .
Các định dạng ngày tháng:
DATE - format YYYY-MM-DD
DATETIME - format: YYYY-MM-DD HH:MM:SS
TIMESTAMP - format: YYYY-MM-DD HH:MM:SS
YEAR - format YYYY or YY
----------------------------------------------------------------------
Các lệnh trong SQL Server :
Định Dạng:
DATE - format YYYY-MM-DD
DATETIME - format: YYYY-MM-DD HH:MM:SS
SMALLDATETIME - format: YYYY-MM-DD HH:MM:SS
TIMESTAMP - format: a unique number
---------------------------------------------------------------------
Test lệnh:
Lệnh query với SQL
- SELECT * FROM Orders WHERE OrderDate='1997-11-11'
To Top
- A2 :
- NULL VALUES
- Bạn có thể dùng 2 toán tử này để áp đặt điều kiện trả về cho câu truy vấn như dưới đây
SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NOT NULL;
To Top
- A3 :
- NULL FUNCTIONS
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0)) FROM Products;
Oracle : NVL()
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0)) FROM Products;
MySQL:IFNULL() / COALESCE()
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0)) FROM Products;
hoặc
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0)) FROM Products ;
To Top
- A4 :
- Hàm Tập Hợp
SQL Server:
- SELECT AVG(Price) AS PriceAverage FROM Products;
- SELECT ProductName, Price FROM Products
WHERE Price>(SELECT AVG(Price) FROM Products);
COUNT():Tính số hàng (rows)
SELECT COUNT(CustomerID) AS OrdersFromCustomerID7 FROM Orders WHERE CustomerID=7;// Đếm số giá trị cao trong cột (Không đếm giá trị NULL)
SELECT COUNT(*) AS NumberOfOrders FROM Orders;// Đếm số rows có trong bảng
SELECT COUNT(DISTINCT CustomerID) AS NumberOfCustomers FROM Orders;// Đếm giá trị của cột được chỉ định (bỏ qua các giá trị trùng)
FIRST() : Trả về giá trị đầu tiên
MS Access
- SELECT FIRST(ContactName ) AS FirstCustomer FROM Customers;
SQL Server
- SELECT TOP 1 ContactName FROM Customers ORDER BY CustomerID ASC;
MySQL
- SELECT ContactName FROM Customer ORDER BY CustomerID ASC LIMIT 1;
Oracle
-SELECT ContactName FROM Customers ORDER BY CustomerID ASC WHERE ROWNUM <=1;
LAST() : Trả vể giá trị cuối cùng
MS Access
- SELECT LAST(CustomerName) AS FirstCustomer FROM Customers;
SQL Server
- SELECT TOP 1 CustomerName FROM Customers ORDER BY CustomerID DESC;
MySQL
- SELECT CustomerName FROM Customers ORDER BY CustomerID DESC LIMIT 1;
Oracle
- SELECT CustomerName FROM Customers ORDER BY CustomerID DESC WHERE ROWNUM <=1;
MAX() : Lấy kết quả lớn nhất
SELECT MAX(Price) AS HighestPrice FROM Products;
MIN() : Lấy kết quả nhỏ nhất
SELECT MIN(Price) AS SmallestOrderPrice FROM Products;
SUM() : Tính tổng
SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;
To Top
- A5 :
- Hàm Vô Hướng
SQL Server
- SELECT UCASE(CustomerName) AS Customer, City FROM Customers;
LCASE() : Converts một field thành chữ thường
SQL Server
- SELECT LCASE(CustomerName) AS Customer, City FROM Customers;
MID() : Cắt các ký tự từ một field văn bản
SELECT MID(City,1,4) AS ShortCity FROM Customers;
LEN() : Trả về độ dài của một trường văn bản (bao gồm khoảng cách _)
SELECT ContactName,LEN(Address) as LengthOfAddress FROM Customers;
ROUND() : Trả về giá trị quy định trước của số thập phân
SELECT ProductName, ROUND(Price,0) AS RoundedPrice FROM Products;
NOW() : Trả về giờ hiện tại của Hệ thống
SELECT ProductName, Price, Now() AS PerDate FROM Products;
FORMAT() : Định dạng một field đang hiển thị
SELECT ProductName, Price, FORMAT(Now(),'YYYY-MM-DD') AS PerDate FROM Products;
To Top
- A6 :
- GROUP BY & HAVING
Có 2 bảng như sau trong csdl NorthWind :
Bảng : Categories |
Bảng : Products |
Từ Bảng Products
Dùng lệnh query sau:
SELECT SUM(UnitsInStock) AS NumberOfOrders FROM Products;
Kết quả này chính là tổng tất cả giá trị tại cột UnitsInStock
Ta thử lại lệnh trên với GROUP BY
SELECT SUM(UnitsInStock) AS NumberOfOrders, ProductName FROM Products GROUP BY ProductName;
- Điều này lệnh SUM không thể làm được nếu không có sự trợ giúp của lệnh GROUP BY
- Lệnh Group By còn có thể nhóm nhiều bảng và nhiều cột cùng lúc như ví dụ dưới . . .
Xin lấy làm mẫu một đoạn lệnh Query như sau:
SELECT Categories.CategoryName,COUNT(Products.ProductID)
AS NumberOfOrders
FROM Products
LEFT JOIN Categories
ON Products.CategoryID = Categories.CategoryID
GROUP BY CategoryName;
// Đoạn lệnh trên lấy ra 2 cột và có nghĩa như sau :
Lấy Products LEFT JOIN với Categories (xem lại bài 2)
Và lấy ra 2 giá trị sau:
CategoryName ( Trong bảng Categories )
NumberOfOrders
(Tổng số hàng của ProductID trong bảng Products )
Điều kiện tiến quyết CategoryID bằng nhau
Và GROUP BY bởi giá trị CategoryName
Bây giờ chúng ta tiếp một ví dụ nữa đó là GROUP BY 2 cột trong bảng Products
SELECT SUM(UnitsInStock) AS NumberOfOrders,ProductID, ProductName FROM Products GROUP BY ProductID,ProductName;
- Nhóm cho 2 cột và 2 bảng trở lên bạn tự test xem nhé . . .
2. HAVING
- Nếu ta sử dụng các hàm tập hợp và đặc biệt là có sử dụng Group By thì Where không thể phát huy tác dụng của nó. Nên SQL mới sinh ra lệnh HAVING
- Chúng ta sẽ lấy lại ví dụ ở trên nhé:
(Tôi thêm lệnh Having vào cuối như dưới)
SELECT SUM(UnitsInStock)
AS NumberOfOrders, ProductName
FROM Products GROUP BY ProductName
Having SUM(UnitsInStock) > 100;
Kick vào để xem ảnh lớn hơn |
Nhìn kết quả bạn có kết luận gì ? Thì ở đây đơn giản là sau khi tính toán chỉ hiển thị những nhóm có giá trị lớn hơn 100.
(Vì vấn đề thời gian bài viết này sẽ được cập nhật video demo với các lệnh SQL trên SQL Server trong thời gian tới)
:ahhyes:
Thank you for reading !
Nguồn: Tự Học IT Online - http://tuhocit.net
Im' dead :dead:
Trả lờiXóaIm' là gì? =))
Trả lờiXóa:yawndoodle: Viết nhanh quá ấy mà. Nhìn mặt gian thấy sợ :doubt:
Trả lờiXóaSân nhà mà ku phết 8/10 start á :run:
Trả lờiXóa2 đứa tự sướng với nhau :ahhyes:
Trả lờiXóaMà hình watermark cái bravohex.com rồi à @@
Trả lờiXóaA mà mua tên miền đó, muốn mua lại a bán 500K là ít =))
Rảnh mà :big_smile:
Trả lờiXóaĐục nước béo anh hả :burning:
Trả lờiXóawatermark đâu. Dùng PTS, làm sẵn cái templ kéo thả phát cho tiện ;))
Trả lờiXóa