I- With Grant Option
5. PHẮT BIỂU SQL
5.5. Phát biểu SQL dạng Select với Limit N,M
P h á t biểu SQ L dạng S E L E C T cho phép truy lục chỉ m ột sô" mẩu tin tín h từ vị trí th ứ n đến vị trí thứ m trong Table (theo m ột tiêu chuẩn hay sắp xếp nào đó). Để làm điều này, trong p h á t biểu
SQ L dạng SE L E C T bạn dùng chỉ định từ khoá L IM IT với số lượng mẩu tin cần lấy từ vị trí thứ n
đến m.
Chẳng hạn, trong trường hợp bạn khai báo Select * from tblOrders lim it 0,10. K ết quả sẽ trả về 10 m ẩu tin đầu tiê n trong bảng tblOrders.
Bạn cũng có th ể sử dụng k ế t hợp L IM IT với các m ệnh đề như W HERE, ORDER B Y nhằm tạo ra k ết quă như ý muốn.
Do yêu cầu khác nhau thông qua p h á t biểu SQ L dạng SE L E C T có sử dụng LIM IT, nghĩa là k ết quả trả về số lượng 10 m ẩu tin đầu tiê n với tấ t cả các cột trong bảng tblOrders
Select *
From tblOrders Limit 0,10
K ết quả trả về như sau:
OrderlD OrderDate CustID Amount
01 2001-09-05 10 2903576 02 2001-09-05 10 48168567 03 2001-09-05 10 5107032 04 2001-09-08 10 2 .3555347 05 2001-09-08 16 1.81074847 06 2001-09-10 16 26000 07 2001-09-11 16 1867682 08 2001-09-12 16 3600000 09 2001-09-13 16 1.95713899 10 2001-09-14 16 9 . 61804228
Nếu muôn lọc ra 10 hợp đồng có sô' tiền nhiều n h ấ t, bạn chỉ cần sử dụng sắp xếp theo cột
TotalAmount hay Am ount trong bảng tblOrders.
V i dụ 8-13: P h á t b iể u SQL d ạ n g SELECT v đ i L im it N,M
Select OrderlD, OrderDate, CustID, Amount From tblOrders
Order by Amount Desc Linit 0,10
Kết quả trả về như sau:
OrderlD OrderDate CustlD Amount
06 2001-09-10 16 26000 26 2001-09-13 13 230000 25 2001-09-11 13 244904 23 2001-09-11 12 459162 31 2001-09-16 13 459525 27 2001-09-14 13 603033 28 2001-09-15 13 1452000 30 2001-09-15 13 1531200 07 2001-09-11 16 1867682 01 2001-09-05 10 2903576
Nếu muốn lọc ra 10 sản phẩm có số lượng bán nhiều n h ấ t, bạn chỉ cần sừ dụng sắp xếp theo cột số lượng Qtty. V í du 8-14: P h á t b iể u sQỊ1 d ạ n g S e le c t với L im it N,M SelectItemID,Qtty,Price,Amount from tblOrderDetails Where Amount>10 order by Qtty Limit 0,10
Kết quả trả về như sau:
ItemID Qtty Price Amount
2 1000 12000 144000003 5000 12000 72000000 3 5000 12000 72000000 3 6000 12000 86400000 4 8000 12000 15200000 4 8000 12000 15200000 4 8000 10000 15200000 5 9000 12000 29600000 5 9000 12000 129600000 5 9000 12000 129600000 5.6. P h á t b i ể u SQ L d ạ n g S E L E C T v ớ i D IS T IN C T
Nếu có m ột hay nhiều bảng k ế t nối với nhau, sẽ xảy ra trùng lặp nhiều mẩu tin. Nhưng trong trường hợp này bạn chỉ cần lấy ra m ột m ẩu tin trong tập m ẩu tin trùng lặp, bạn sử dụng p h á t biểu
SQ L dạng SE L E C T với chỉ định D ISTIN C T.
Vi dụ 8-14: P h á t b iể u SQL d ạ n g SELECT
Select ItemID,Qtty,Price,Amount from tblOrderDetails
order by Qtty
Kết quả trả về như sau:
ItemlD Qtty Price Amount
1 900 12000 12960000 2 1000 12000 14400000 3 5000 12000 72000000 3 6000 12000 86400000 4 8000 12000 115200000 4 8000 12000 115200000 4 8000 10000 115200000 5 9000 12000 129600000 5 9000 12000 129600000 5 9000 12000 129600000
V i dụ 8-15: P h á t b iể u SQL d ạ n g SELECT v ở i DISTINCT
Select Distinct ItemID, Qtty, Price, Amount From tblOrderDetails
Order by Qtty
Kết quả loại bỏ những m ẩu tin trù n g lắp như sau:
ItemID Qtty Price Amount
1 900 12000 12960000
2 1000 12000 14400000
3 6000 12000 86400000
4 8000 12000 115200000
5.7. N h ậ p d ữ l i ệ u b ằ n g p h á t b i ể u SQ L d ạ n g I n s e r t
Khi cần th êm mẩu tin vào bảng trong cơ sở dữ liệu M ySQ L, bạn có nhiều cách để thực hiện công việc này. Trong Visual Basic 6.0, VB.NET, c Sharp hay Java có những phương thức để thêm m ẩu tin vào bảng trong cơ sở dữ liệu. Tuy nhiên, để sử dụng các p h á t biểu SQL m ang tín h chuyên nghiệp trong M ySQ L, bạn cần sử dụng p h á t biểu IN S E R T .
Bạn có th ể sử dụng p h á t biểu Insert ngay trê n ứng dụng k ế t nôi với M ySQL. Trong trường hợp bạn sử dụng cơ sở dữ liệu SQ L Server hay Oracle, bạn có th ể tạo ra m ột Stored Procedure với mục đích IN S E R T dữ liệu vào bảng chỉ định trước.
Khi thêm dữ liệu, cần chú ý kiểu dữ liệu giống hoặc tương ứng kiểu dữ liệu đã khai báo của cột đó, nếu không phù hợp th ì lỗi sẽ p h át sinh.
Ngoài ra bạn cần quan tâm đến quyền của User đang truy cập cơ sở dữ liệu. User phải được cấp quyền Insert dữ liệu vào từng bảng cụ th ể (quyền này do nhà quản trị cơ sở dữ liệu phân quyền cho
User đó).
Trong p h á t biểu IN S E R T IN T O chúng tôi thực h iện trê n bảng tblOrderDetails và bảng
tblOrderDetailsHist, hai bảng này có cấu trúc như sau:
/* Băng tblOrderDetails*/
CREATE TABLE tblorderdetails (
ItemIDint(3) unsigned DEFAULT '0' , OrderID int ( 3 ) unsigned DEFAULT 'o 1 , Notinyint(3) unsigned DEFAULT '0' , Qttyint(3) unsigned DEFAULT '0' , Priceint(3) unsigned DEFAULT '0' , Discount int (3 ) unsigned DEFAULT ' 0 ' , Amount bigint(3) unsigned DEFAULT '0'
/* Bảng tblOrderDetailsHist, dùng đ ể chứa các thông tin hợp đồng chi tiết kh i hợp đồng của khách hàng này kết thúc, chưimg trình tự động xoá trong tblOrderDetails và lư trữ lại trong bảng tblOrderDetailsHist.* /
CREATE TABLE tblorderdetailshis; (
ItemIDint(3) unsigned DEFAULT '0' , Order ID int (3 ) unsigned DEFAULT ' 0 1 , Notinyint(3) unsigned DEFAULT '0' ,
Qtty int (3 ) unsigned DEFAULT ' 0 1 , Priceint(3) unsigned DEFAULT '0' , Discount int(3) unsigned DEFAULT '0' , Amount bigint (3 ) unsigned DEFAULT ' 0 '
Khi Insert dữ liệu vào bảng, có 3 trường hợp xảy ra: insert dữ liệu vào bảng từ các giá trị cụ thể, insert vào băng lấy giá tr ị từ m ột hay nhiều bảng khác, và cuối cùng là kết hợp cả hai trường hợp trên.