-
27-07-2007, 11:17 AM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Cơ bản về SQL cho người mới bắt đầu
Căn bản SQL cho người lập trình C#
Bài này mình giới thiệu cho các bạn các thành phần cơ bản của SQL mà bạn cần biết để có thể viết một chương trình làm việc với cơ sở dữ liệu bằng C#.
· Query
· Câu lệnh INSERT
· Câu lệnh UPDATE
· Câu lệnh DELETE
· Kiểu dữ liệu T-SQL
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 [IMG]images/smilies/biggrin.png[/IMG]..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
Các bạn có thể download free trong trang Downloads của Microsoft.
Sau đó cài đặt tất cả và bắt đầu vào thao tác trong database.
Lấy dữ liệu (RETRIEVING DATA)
Một query của SQL dùng để lấy thông tin từ database. Dữ liệu được chứa trong các hàng (rows) của bảng (tables). Hàng (Rows) gồm một nhóm các cột (Columns) chứa dữ liệu tương ứng. Biểu thức query lấy dữ liệu có cấu trúc :
· Một danh sách SELECT (lựa chọn), tại vị trí các cột được gọi để lấy dữ liệu chỉ định.
· Một mệnh đề WHERE, xác định bảng (tables) cần truy cập để lấy dữ liệu.
Bây giờ những từ nào tiếng Anh cần thiết thì tớ viết tiếng Anh nhé để khi lập trình đỡ bị loạn giữa Anh và Việt. Khi viết các query SQL thì viết hoa, đơn giản là để xác định nó là từ khóa của SQL; SQL không phân biệt chữ hoa chữ thường cho nên nếu viết thường không ảnh hưởng gì cả; chẳng qua viết hoa tránh nhầm lẫn. Cái này theo chuẩn lập trình ANSI để phân biệt thôi.
Viết một query đơn giản
Mã:SELECT * FROM Employees;
Chú ý: khi bạn làm việc với cơ sở dữ liệu của SQL Server 2k5 thì dùng GUI dễ xác định các thành phần và đặc điểm của cấu trúc khi làm việc với cơ sở dữ liệu. Query có thể hiểu là làm việc theo kiểu code. Thực tế để code với cơ sở dữ liệu một cách chuẩn thì câu lệnh sẽ rất phức tạp và tốn nhiều dòng (có khi lên đến hàng trăm dòng code.
Nếu bạn chưa biết thực thi (! Execute) query như thế nào thì làm như sau :
1. Mở Mircrosoft SQL Server Management Studio 2005 Express ra.
2. Chọn db ‘Northwind’.
3. Chọn nút ‘New Query’ trên Toolbar (thanh công cụ).
4. Viết query vào.
5. Phải chuột và chọn ‘! Execute’.
6. Sẽ thấy kết quả tại tab ‘Results’ ngay bên dưới phần mà bạn vừa code query xong.
Giải thích câu query
Câu query vừa thực hiện là :
Mã:SELECT * FROM Employees;
Giả sử muốn lấy dữ liệu của một số columns thôi vì có nhiều cột không cần thiết, lấy vào chỉ tốn tài nguyên khi thực thi thì query như sau :
Mã:SELECT <column 1>, <column 2>, …. <column n> FROM Employees;
Mã:SELECT Lastname FROM Employees;
Mã:SELECT employeeid, firstname, lastname FROM Employees;
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 :
Mã:WHERE <column1> <operator> <column2>
Thử dùng WHERE trong câu query vừa viết xong nhé :
Mã:SELECT employeeid, firstname, lastname FROM Employees WHERE country = ‘USA’;
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
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ụ
Mã:WHERE Title LIKE ‘Sale%’
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. [IMG]images/smilies/biggrin.png[/IMG]
Đô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 :
Mã:SELECT * FROM Employees WHERE Region IS NULL;
Mã:SELECT * FROM Employees WHERE Region = NULL;
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 :
Mã:ORDER BY <column_name> [ASC | DESC] {, n}
· DESC : Descending
Nếu bạn không có ASC hay DESC thì mặc định (default) là ASC
Query chung mẫu :
Mã:SELECT <column_list> FROM <table> WHERE <predicate> ORDER BY <column_name> ASC | DESC
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ì [IMG]images/smilies/biggrin.png[/IMG]
Mở New Query và dùng code sau :
Mã:SELECT Orderid, Employeeid, Customerid, Orderdate, Shipcountry, FROM Orders WHERE Employeeid = 5 AND Shipcountry IN ( ‘Brazil’ , ‘France’) ORDER BY Shipcountry ASC, Orderdate ASC
Kết thúc mục lấy dữ liệu từ database.
Mục lục:
1. Giới thiệu cơ bản ngôn ngữ SQL
2. Giới thiệu cơ bản về ADO.NET
3. Tạo kết nối tới database
4. Thực thi câu lệnh SQL
5. Xử lý kết quả với Data Reader
6. Cách xử lý dữ liệu với Data Adapter và DataSet
7. Giới thiệu về DataBindingView more random threads:
- tính tổng
- Công ty tnhh kloon đang tuyển dụng 2 kiểm thử viên trung cấp
- Sử Dụng Dll Trong lập trình C#
- Export datatable to Excel with Format in C#
- Cần giúp đỡ về Tạo bảng gõ tắt c#.
- Viết Xe tăng biết bắn bằng XNA
- XXX.tab already registrered. This file not registrered for access.
- Tạo 1 chuỗi ngẫu nhiên cực mạnh trong lập trình C#
- Phân Quyền (Phần I : Phân quyền trên Menu)
- Phím tắt trong Visual Studio 2008 | Tài liệu dạng pdf.
-
27-07-2007, 11:19 AM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
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 :
Mã:INSERT INTO <table_name> ( <colum-1>, <column-2>,… , <column-N>) VALUES ( <value-1>,<value-2>, …, <value-N)
Ta thử thêm một người ship hàng :
Mã:INSERT INTO shippers ( CompanyName, Phone ) VALUES ( ‘CongDongCViet.COM’, ‘000-123456’);
Kết thúc mục chèn thêm dữ liệu vào database.
-
27-07-2007, 11:20 AM #3Junior Member
- Ngày tham gia
- Sep 2015
- Đang ở
- hà nội
- Bài viết
- 0
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
Mã:UPDATE <table_name> SET <col-1> = <val-1>, <col-2> = <val-2>, …, <col-N> = <val-N> WHERE <predicate>
với CompanyName = ‘CongDongCViet.COM’; bây giờ ta đổi cái CompanyName thành ‘Pete – Vo Danh Tieu Tot’ nhé ^~^!
Mã:UPDATE shippers SET CompanyName = ‘Pete – Vo Danh Tieu Tot’ WHERE ShipperID = 4
Đơ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.
-
27-07-2007, 11:21 AM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
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’
Mã:DELETE FROM <table_name> WHERE <predicate>
Mã:DELETE FROM Shippers WHERE ShipperID = 4
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é ^_@!.
-
27-07-2007, 11:22 AM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
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#.
Dữ liệu kiểu tiền tệ (Money Data Types)
Kiểu dữ liệu chuỗi kí tự (Character String Data Types)
Kiểu dữ liệu ngày giờ ( Date and Time Data Types )
Kiểu dữ liệu nhị phân ( Binary Data Types )
Kiểu dữ liệu khác (Other Data Types)
Độ ư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
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#.
Thay mặt các member của cộng đồng C Việt gửi lời cảm ơn tới Xcross87 (Posted by Dreaminess)
-
28-07-2007, 04:32 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
sonhn bổ sung 1 chút, để các bạn khỏi nhầm lẫn:
- SQL: là ngôn ngữ truy xuất & quản lý cơ sở dữ liệu, và được công nhận bởi cả ANSI và ISO. Nó được dùng trong tất cả các hệ quản trị CSDL như một ngôn ngữ giao tiếp phổ biến nhất.
- T-SQL: (Transact-SQL) là một sự mở rộng của SQL do Microsoft định nghĩa, và được sử dụng trong sản phẩm SQL-Server của họ.
- PL/SQL: cũng là một sự mở rộng khác của SQL do Oracle định nghĩa, và chỉ được dùng trong hệ quản trị CSDL Oracle (nghĩa là, nếu bạn chỉ làm việc với SQL Server thì không cần quan tâm tới nó, và ngược lại).
Cả T-SQL và PL/SQL được bổ sung thêm nhiều kiểu dữ liệu mới và một cấu trúc lập trình mạnh như một ngôn ngữ lập trình thủ tục thứ thiệt. Bạn có thể khai báo biến biến, dùng lệnh rẽ nhánh, vòng lặp, viết thủ tục, trigger...
Các bạn có thể xem thêm thông tin tại:
SQL : http://en.wikipedia.org/wiki/SQL
PL/SQL : http://en.wikipedia.org/wiki/PL/SQL
T-SQL : http://en.wikipedia.org/wiki/Transact-SQL
Cảm ơn sonhn đã bổ sung! (Posted by Dreaminess)
-
27-11-2007, 01:00 PM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Một vài câu lệnh truy vấn điều kiện (if... then....)
==============================================
Mã:use master go if exists(select* from dbo.sysdatabases where name='DEMO') drop database DEMO else print 'Không có Database này trong SQL Server 2000' go
Mã:use master go if not exists (select * from dbo.sysdatabases where name = 'DEMO') begin create database DEMO use DEMO end else use DEMO go create table CaNhan ( _id int primary key, First_Name nvarchar(50), Last_Name nvarchar(50), Gender char(1), Marital_Status char(1) ) go insert into CaNhan values (1,'John','Smith','m','S') insert into CaNhan values (2,'James','Bond','m','M') insert into CaNhan values (3,'Alexa','Mantena','f','M') insert into CaNhan values (4,'Shui','Qui','f','M') insert into CaNhan values (5,'William','Hsu','m','S') insert into CaNhan values (6,'Danielle','Stewart','F','M') insert into CaNhan values (7,'Martha','Mcgrath','F','M') insert into CaNhan values (8,'Henry','Fayol','m','S') insert into CaNhan values (9,'Dick','Watson','m','M') insert into CaNhan values (10,'Helen','Foster','F','M') go
- Tạo database và table này để phục vụ cho việc thể hiện lệnh case trong SQL.
- Mấy câu lệnh trên sẽ kiểm tra xem trong SQL đã có database DEMO chưa? Nếu chưa sẽ tạo mới, nếu rồi thì sử dụng nó để tạo table CaNhan (thông tin cá nhân) vào trong database đó.
- Chú ý câu lệnh GO dùng để phân tách các bó câu lệnh
Dùng hàm CASE để lọc dữ liệu rồi thêm một số kiểu hiển thị:
Ví dụ: Trong table CaNhan(_id, First_Name, Last_Name, Gender, Marital_Status) chúng ta muốn hiển thị Full_Name với phân biệt là đàn ông thì thêm Mr đằng trước còn phụ nữ thì Miss. (Tạm thời vậy đi ).
Mã:select _id,FullName=case(Gender) when 'm' then 'Mr. '+ First_Name+ ' ' + Last_Name when 'f' then 'Miss. '+ First_Name + ' ' + Last_Name end from CaNhan Kết Quả: _id FullName --------- -------------------------------------------------------1 Mr. John Smith 2 Mr. James Bond 3 Miss. Alexa Mantena 4 Miss. Shui Qui 5 Mr. William Hsu 6 Miss. Danielle Stewart 7 Miss. Martha Mcgrath 8 Mr. Henry Fayol 9 Mr. Dick Watson 10 Miss. Helen Foster (10 row(s) affected)
-
27-11-2007, 01:02 PM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Dùng các câu lệnh truy vấn điều kiện (if ... then...) trong CSDL là rất hay. Khi bạn viết chương trình quản lý, với cách như trên bạn có thể backup, restore, attach database vào SQL Server một cách tự động rất tuyệt vời.
-
29-11-2007, 09:45 AM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Sao không ai nói thêm về Join, Inner join và Outer join nhỉ?
So sánh 3 loại đó với nhau và so sánh chúng với mệnh đề where trong câu select để thấy được điểm mạnh của Join chứ.
Thiếu cái này rồi pà kon.
-
26-01-2008, 01:07 PM #10Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
OK, chúng ta tiếp tục nhé.
Thực ra thì không có gì phức tạp cả, nhưng JOIN là một vấn đề căn bản không thể bỏ qua được. Dùng code SQL do trình designer tự sinh luôn có những hạn chế không thể vượt qua được. Do đó, để thực sự làm chủ Database bắt buộc phải hiểu thật sâu về SQL (cũng giống như muốn cr@ck phần mềm thì phải biết ASM vậy, chứ chỉ dùng tool để chọc ngoáy thì không thể tiến xa được).
1. JOIN là cái gì?
Đơn giản JOIN dùng để liên kết nhiều bảng (table) dữ liệu lại với nhau. Tại sao lại phải liên kết? Bởi vì khi thiết kế cơ sở dữ liệu cho một ứng dụng, dư thừa dữ liệu (redundance) là vấn đề đáng trách nhất. Để tối ưu, các cột hay các trường dữ liệu (field) giống hệt nhau không được phép lặp đi lặp lại trên nhiều bảng. Thay vào đó, phải tích cực dùng quan hệ (relation) giữa các bảng thông qua một (hoặc vài trường) chung để truy xuất dữ liệu trên các bảng này khi cần.
2. Các loại quan hệ:
Nói đến mô hình quan hệ trong database tức là nói đến mối liên hệ giữa HAI BÊN - bên phải và bên trái, cụ thể là bảng bên phải và bảng bên trái. Một cách tự nhiên, có thể thấy ngay 4 loại quan hệ sau:
* Một - Một: Một dòng hay một bản ghi (record) của bảng bên TRÁI tương ứng với một dòng duy nhất của bảng bên PHẢI.
* Một - Nhiều
* Nhiều - Một
* Nhiều - Nhiều
Rõ ràng, Nhiều - Nhiều là thứ quan hệ tổng quát nhất. Cho nên khi nói đến JOIN ta hiểu ngầm với nhau đó là trường hợp này, ba trường hợp trên không cần quan tâm.
3. Khi nào dùng JOIN?
Chủ yếu dùng JOIN khi muốn truy xuất dữ liệu RA để xem. Khái niệm quen thuộc ở đây là View. View không chứa dữ liệu mà nó chỉ chứa câu lệnh (thường gọi là câu query, hay câu truy vấn) định nghĩa cách lấy dữ liệu từ các bảng. Nói cách khác, View - Select - Join là ba khái niệm (hay 3 từ khóa) thường xuyên đi kèm với nhau.
Stored Procedure mạnh mẽ hơn View nhiều lần (và tất nhiên cũng phức tạp hơn nhiều lần): Làm cả 4 việc, vừa lấy dữ liệu ra để xem, vừa thêm (insert), vừa sửa (update), vừa xóa (delete). Mặc dù khi sửa, xóa đôi khi vẫn thấy xuất hiện JOIN dùng chung với FROM để tạo câu lệnh điều kiện cho thao tác sửa, xóa nhưng nói chung cách làm này không được ưa chuộng. Cách phổ biến hơn mà các lập trình viên thường làm là dùng subquery (câu truy vấn phụ) cùng với WHERE.
Với sự đa dạng và phong phú về mẫu mã và giá cả, choxeonline.vn hứa hẹn sẽ là địa chỉ tin cậy cho những ai đang tìm kiếm chiếc xe ô tô ưng ý. Từ những mẫu xe hạng sang đến những chiếc xe gia đình...
Khám Phá Đa Dạng Sản Phẩm Xe Ô Tô...