Căn bản SQL cho người lập trình C#

SQL là cái gì ?

Nếu như bạn đã từng làm việc với hệ quản trị cơ sở dữ liệu, tất nhiên sẽ biết sử dụng SQL. SQL là ngôn ngữ database chuẩn quốc tế. Bạn có thể dùng SQL để tạo thêm dữ liệu, lấy thông tin, thay đổi hay xóa dữ liệu (và nhiều thứ khác). Tóm lại, SQL tiếng Anh là “Structured Query Language”, ngôn ngữ có cấu trúc.Được phát triển từ những năm 70, được IBM sáng tạo ra và gọi với tên là : SEQUEL “Structured English Query Language”, sau này được thay đổi đi một chút gọi là SQL nhưng có khác với SEQUEL, cần tránh nhầm lẫn. SEQUEL hiện được sử dụng trong hệ thống của IBM. Về cách phát âm, trong thế giới của Microsoft và Oracle gọi là “sequel” ( xi-quờ ). Còn trong khu vực làm việc với DB2 và MySQL thì hay gọi là “ess cue ell” ( ét-kiu-eo ). Các bạn thích gọi thế nào cũng được, tùy :D.Tớ thì hay gọi nó là “ess cue ell”. Bắt đầu về SQL cấu trúc và query.

Yêu cầu cần thiết để thực hiện các thao tác trong bài viết này :

1. Microsoft Visual C# 2005 Express Edition

2. Microsoft SQL Server 2005 Express Edition

3. Cài đặt thêm : MS SQL Server Management Studio 2005 Express

4. Database : Northwind

 

docx14 trang | Chuyên mục: SQL Server | Chia sẻ: dkS00TYs | Lượt xem: 5145 | Lượt tải: 2download
Tóm tắt nội dung Căn bản SQL cho người lập trình C#, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
bạn cần lấy dữ liệu. Chẳng hạn tớ chỉ muốn lấy tên của nhân viên trong bảng ‘Employees’ thôi thì query như sau :
[code]
 SELECT
	Lastname
FROM 
	Employees;
[/code]
Hoặc lấy số ID của nhân viên và họ tên của nhân viên :
[code]
SELECT
	employeeid,
	firstname,
	lastname
FROM
	Employees;
[/code]
Giảm bớt số lượng dữ liệu không cần thiết sẽ rất tiết kiệm tài nguyên khi bạn làm việc với một cơ sở dữ liệu lớn, đồ sộ.
Mệnh đề WHERE
Yếu tố thêm trong query này là WHERE để xác định hàng có tính chất nào đó.
Cấu trúc câu lệnh :
[code] WHERE [/code]
Trong đó : là tên 2 cột với toán tử so sánh ‘operator’.
Thử dùng WHERE trong câu query vừa viết xong nhé :
[code]
SELECT 
	employeeid,
	firstname,
lastname
FROM
	Employees
WHERE 
	country = ‘USA’;
[/code]
Rồi, ấn F5 để thực thi query hoặc phải chuột->! Execute ^_^!
Chú ý: nếu là string thì phải để trong dấu ‘ như ở trên.
Toán tử so sánh của mệnh đề WHERE
Toán tử
Giải thích
Ví dụ
=
Bằng
EmployeeID = 1
<
Nhỏ hơn
EmployeeID < 1
>
Lớn hơn
EmployeeID > 1
<=
Nhỏ hơn hoặc bằng
EmployeeID <= 1
>=
Lớn hơn hoặc bằng
EmployeeID >= 1
, !=
Khác
EmployeeID 1
!<
Không nhỏ hơn
EmployeeID !< 1
!>
Không lớn hơn
EmployeeID !> 1
Chú ý: trong chuẩn SQL không có toán tử ‘!=’; chỉ áp dụng với kiểu dữ liệu T-SQL.
Toán tử LIKE
Toán tử này đưa ra kết quả theo kiểu pattern cho trước (cái này liên quan Regular Expression). Ví dụ
[code] WHERE Title LIKE ‘Sale%’ [/code]
Sẽ lấy ra tất cả các hàng nào có cột có tiêu đề bắt đầu với cụm từ Sale , có thể là ‘Sale’ , ‘Sale0’,’Saleman’……
Có 4 trường hợp để xác định pattern :
% : bất cứ kí tự hoặc một nhóm nào đều hợp lệ kể cả rỗng (empty).
_ : một kí tự bất kì . Ví dụ : LIKE ‘_ales’ có thể là : Sales,Bales,Cales…nhưng chỉ 1 kí tự.
[ ] : Một vài kí tự xác định cho phép là hợp lệ. Ví dụ: LIKE ‘[bs]ales’ thì chỉ có 2 kết quả là : bales và sales.
[^] : kí tự không phải nhóm kí tự xác định. Ví dụ : [^a-h] thì không lấy kí tự nào từ a đến h.
Cái này giống hệt Regular Expression nha. :D
Đôi lúc bạn sẽ thấy những cột chẳng có giá trị gì được gắn cho nó cả, ta gọi là NULL (column is NULL). Vì vậy có toán tử giúp ta xác định các giá trị này :
Toán tử IS NULL và IS NOT NULL
IS NULL : Cho phép lấy ra hàng có cột chẳng có giá trị gì.
Ví dụ : WHERE Region IS NULL 
IS NOT NULL : Cho phép lấy ra hàng có cột có giá trị.
Ví dụ : WHERE Region IS NOT NULL
Một query đúng :
[code]
SELECT * FROM Employees WHERE Region IS NULL;
[/code]
Một query sai :
[code]
SELECT * FROM Employees WHERE Region = NULL;
[/code]
Tại sao sai ? Sai vì chẳng có cái gì ‘= NULL’ cả :D. Sai toán tử.
Toán tử BETWEEN và IN
Nhiều lúc muốn lấy kết quả trong một khu vực mình muốn thu hẹp lại (range), ước chừng khoảng thế nào đó. Ta dùng BETWEEN và IN
BETWEEN : trả về true nếu giá trị nằm trong một khoảng.
Ví dụ : WHERE extension BETWEEN 400 AND 500 
Lấy hàng có cột ‘extension’ có giá trị trong khoảng 400 và 500
IN : trả về true nếu giá trị nằm trong một danh sách (list). Danh sách có thể là một query con (sub-query)
Ví dụ : WHERE city IN (‘Seattle’, ‘London’) 
Lấy hàng có cột ‘city’ mang giá trị là ‘Seattle’ và ‘London’.
Toán tử Logic : AND – NOT – OR
AND : ví dụ : WHERE ( title LIKE ‘Sale%’ AND lastname = ‘Peacock’ )
NOT : ví dụ : WHERE NOT ( title LIKE ‘Sale%’ AND lastname = ‘Peacock’)
OR : ví dụ : WHERE ( title = ‘Anh Tuấn’ OR title = ‘Pete’ )
Cái này dễ hiểu khỏi giải thích. ^^!
Sắp xếp dữ liệu
Khi lọc ra được các dữ liệu muốn tìm nhưng mà nó không theo trật tự nào cả. Bạn muốn kết quả thu được tự sắp xếp theo một hướng nào đó để bạn dễ hiểu dễ nhìn.
Dùng mệnh đề ORDER BY
Cấu trúc : 
[code] ORDER BY [ASC | DESC] {, n}
ASC : Ascending
DESC : Descending
Nếu bạn không có ASC hay DESC thì mặc định (default) là ASC
Query chung mẫu :
[code]
SELECT 
FROM 
WHERE 
ORDER BY ASC | DESC
Bây giờ sử dụng những cái đã biết ở trên vào làm vài query phức tạp chơi nhé ^&^!
Viết Query phức tạp
Bây giờ tớ muốn :
Lấy các đơn đặt hàng (orders) được nhận bởi nhân viên có id là 5 (employeeid = 5 )
Đơn đặt hàng chuyển tới Pháp (France) hoặc Brazil.
Chỉ lấy thông tin : OrderID, EmployeeID, CustomerID, OrderDate và ShipCountry.
Sắp xếp theo nước nhận hàng và ngày đặt hàng
Hooooohohohoo…Nghe phức tạp chưa..Đọc mù mắt, đếch ra cái gì :D
Mở New Query và dùng code sau :
[code]
SELECT
	Orderid,
	Employeeid,
	Customerid,
	Orderdate,
	Shipcountry,
FROM
	Orders
WHERE
	Employeeid = 5
	AND
	Shipcountry IN ( ‘Brazil’ , ‘France’)
ORDER BY
	Shipcountry ASC,
	Orderdate ASC
[/code]
Bạn sẽ thu được 10 hàng có kết quả tương ứng nha.
Kết thúc mục lấy dữ liệu từ database.
Chèn thêm dữ liệu (INSERTING DATA)
Bạn đã biết cách lấy dữ liệu từ db bây giờ phải biết thêm chèn thêm dữ liệu vào db nữa chứ. Để thêm dữ liệu vào dùng câu lệnh ‘INSERT’. Rất đơn giản không phức tạp lắm vì khi thêm dữ liệu đâu cần phải lọc,sắp xếp phân loại nên không xài WHERE và ORDER BY khi thêm dữ liệu.
Cấu trúc câu lệnh INSERT :
[code]
INSERT INTO 
	( , ,… , )
VALUES
	( ,, …, <value-N)
[/code]
Bây giờ thử nha. Mở thằng ‘Northwind’ rấu đó chọn bảng ‘Shippers’. Cột đầu tiên là ‘ShippersID’ là khóa của bảng này. Tiếp theo là ‘CompanyName’ và ‘Phone’
Ta thử thêm một người ship hàng :
[code]
INSERT INTO shippers
	( CompanyName, Phone )
VALUES 
	( ‘CongDongCViet.COM’, ‘000-123456’);
[/code]
Sau đó run query này, có một Message trong reporting “ (1 row(s) affected “. Sau đó xem lại table ‘Shipper’ thì có thêm một hàng mới (new row) mà ta vừa chèn vào bảng xong. 
Kết thúc mục chèn thêm dữ liệu vào database.
Thay đổi dữ liệu (UPDATING DATA)
Bây giờ một việc quan trọng là thay đổi dữ liệu. ta dùng câu lệnh ‘UPDATE’. Khi làm việc với câu lệnh ‘UPDATE’ nên rất cẩn thận vì sự thay đổi sẽ có tác dụng ảnh hưởng tất cả các hàng trong mệnh đề WHERE; bạn nên chú ý điều này.
Cấu trúc câu lệnh UPDATE
[code]
UPDATE 
SET
	 = ,
	 = ,
	…,
	 = 
WHERE 
[/code]
Vừa nãy khi chèn thêm dữ liệu ta thêm vào một hàng, hàng đó có ‘ShipperID = 4’
với CompanyName = ‘CongDongCViet.COM’; bây giờ ta đổi cái CompanyName thành ‘Pete – Vo Danh Tieu Tot’ nhé ^~^!
[code]
UPDATE shippers
SET
	CompanyName = ‘Pete – Vo Danh Tieu Tot’
WHERE
	ShipperID = 4
[code]
Thấy reporting “ (1 row(s) affected) “. Refresh table thấy sự thay đổi ngay.
Đơn giản nhưng rất cẩn thận với câu lệnh này nhé.
Kết thúc mục thay đổi dữ liệu trong database.
Xóa dữ liệu (DELETING DATA)
Để xóa dữ liệu ta dùng câu lệnh ‘DELETE’, giống như ‘UPDATE’ bạn cần cẩn thận với query này luôn nếu không data sẽ bị xóa không tưởng đó. ^^
Cấu trúc câu lệnh ‘DELETE’
[code]
DELETE FROM 
WHERE 
[/code]
Áp dụng luôn, thử xóa luôn cái hàng mà ta vừa chèn thêm và sau đó thay đổi Companyname trong table ‘Shippers’ nhé.
[code]
DELETE FROM Shippers
WHERE ShipperID = 4
[/code]
Report “ (1 row(s) affected) “. Refresh table lại -> mất tiêu rồi. 
NHƯNG : nếu mà bạn thử xóa 3 cái ShipperID còn lại trong table Shipper dùng query trên thì sẽ gặp ERROR (lỗi). Tất nhiên là lỗi vì ở đây mỗi shipper handle nhiều đơn đặt hàng (orders) và mỗi order chỉ tồn tại khi nó được gán với một shipper. Cái này gọi là ‘Foreign-Key Relationship’ của Orders và Shippers. Vì vậy cơ sở dữ liệu sẽ chống lại sự xóa Shippers.
Nhiều lúc bạn muốn xóa từng hàng trong bảng dữ liệu thì TRUNCATE là sự lựa chọn tốt hơn là DELETE. Vì khi xóa mỗi hàng DELETE thường log lại thông tin xóa trong khi TRUNCATE thì không log lại gì. MSDN để tham khảo thêm nhé ^_@!.
Kiểu dữ liệu T-SQL
T-SQL cung cấp một cơ sở kiểu dữ liệu rất tốt – có chính xác 27 kiểu. Trong đó có cả UDT (User-defined data type : kiểu dữ liệu người dùng định nghĩa).
Dữ liệu kiểu số (Numeric Data Types)
Có 8 kiểu số trong T-SQL và tương ứng với C#.
Kiểu dữ liệu SQL
Kiểu tương ứng trong C#
Giải thích
Bigint
Long
64-bit integer
Bit
Bool
0,1 hoặc NULL
Decimal (numeric)
Decimal
128-bit signed integer
Float
Double
64-bit floating-point num
Int
Int
32-bit signed integer
Real
Float
32-bit floating-point num
Smallint
Short
16-bit signed integer
Tinyint
Byte
8-bit unsigned integer
Dữ liệu kiểu tiền tệ (Money Data Types)
Kiểu dữ liệu SQL
Kiểu tương ứng trong C#
Giải thích
Money
Decimal
Giá trị trong khoảng :
-922,337,203,685,477.5808 đến
922,337,203,685,477.5807
Smallmoney
Decimal
Giá trị trong khoảng :
-214,748.3648
Đến
214,748.3647
Kiểu dữ liệu chuỗi kí tự (Character String Data Types)
Kiểu dữ liệu SQL
Kiểu tương ứng trong C#
Giải thích
Char
String
1->8k bytes
Nchar
String
1->4k bytes
Text
String
1->231-1 characters
Ntext
String
1->230-1 bytes
Varchar
String
1->231-1 bytes
Nvarchar
String
1->231-1 bytes
Kiểu dữ liệu ngày giờ ( Date and Time Data Types )
Kiểu dữ liệu SQL
Kiểu tương ứng trong C#
Giải thích
Datetime
SqlDateTime
Từ Jan-01-1753 đến Dec-31-9999, chính xác 1/300 giây.Tương đương kiểu timestamp của chuẩn SQL
Smalldatetime
SqlDateTime
Từ Jan-01-1900 đến Jun-06-2079, chính xác đến phút.
Kiểu dữ liệu nhị phân ( Binary Data Types )
Kiểu dữ liệu SQL
Kiểu tương ứng trong C#
Giải thích
Binary
Byte[]
Fixed_1->8k bytes
Image
Byte[]
Var_0->231-1 bytes
Varbinary
Byte[]
Var_0->231-1 bytes
Kiểu dữ liệu khác (Other Data Types)
Kiểu dữ liệu SQL
Kiểu tương ứng trong C#
Giải thích
Cursor
Sử dụng trong SQL Server
Sql_variant
Object
Chứa int, binary, char
Table
Sử dụng trong SQL Server
Timestamp
Byte[]
8-byte int db unique
Uniqueidentifier
System.Guid
128-bit unique int
Xml
String
Chứa XML đến 2GB
Độ ưu tiên các kiểu dữ liệu (Data Type Precedence)
Sắp xếp theo thứ tự ưu tiên cao đến thấp
Kiểu dữ liệu SQL
UDT
Sql_variant
Xml
Datetime
Smalldatetime
Float
Real
Decimal (numeric)
Money
Smallmoney
Bigint
Int
Smallint
Tinyint
Bit
Ntext
Text
Image
Timestamp
Uniqueidentifier
Nvarchar
Nchar
Varchar
Varbinary
binary
Kết thúc loạt bài viết về SQL cơ bản cho lập trình cơ sở dữ liệu C#.

File đính kèm:

  • docxCăn bản SQL cho người lập trình C Sharp.docx
Tài liệu liên quan