Go Back   VN-Zoom forum > Chia sẻ kiến thức > Lập trình > PHP & MySQL

 


Server Counter Strike 1.6 miễn phí cho thành viên VZ

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 05-02-2007, 11:21   #1
Rìu Chiến Bạc Chấm
 
PeMit#1's Avatar
 
Tham gia: Aug 2006
Đến từ: Hà Nội
Bài: 3.853
VZD: 321.872
Điểm: 2.428/665 bài viết
Send a message via Yahoo to PeMit#1
Default SQL căn bản

Bài 1 - Giới thiệu về SQL

SQL là chuẩn ngôn ngữ ANSI để truy cập CSDL.

SQL là gì?

SQL là viết tắt của Structured Query Language - Ngôn ngữ truy vấn cấu trúc.
SQL cho phép bạn truy cập vào CSDL.
SQL là một chuẩn ngôn ngữ của ANSI.
SQL có thể thực thi các câu truy vấn trên CSDL.
SQL có thể lấy dữ liệu từ CSDL.
SQL có thể chèn dữ liệu mới vào CSDL.
SQL có thể xoá dữ liệu trong CSDL.
SQL có thể sửa đổi dữ liệu hiện có trong CSDL.
SQL dễ học :-)

SQL là một chuẩn

SQL là một chuẩn của ANSI (American National Standards Institute - Viện tiêu chuẩn quốc gia Hoa kỳ) về truy xuất các hệ thống CSDL. Các câu lệnh SQL được sử dụng để truy xuất và cập nhật dữ liệu trong một CSDL.

SQL hoạt động với hầu hết các chương trình CSDL như MS Access, DB2, Informix, MS SQL Server, Oracle, Sybase v.v...

Lưu ý: Hầu hết các chương trình CSDL hỗ trợ SQL đều có phần mở rộng cho SQL chỉ hoạt động với chính chương trình đó.

Bảng CSDL

Một CSDL thường bao gồm một hoặc nhiều bảng (table). Mỗi bảng được xác định thông qua một tên (ví dụ Customers hoặc Orders). Bảng chứa các mẩu tin - dòng (record - row), là dữ liệu của bảng.

Dưới đây là một ví dụ về một bảng có tên là Persons (người):



Bảng ở trên bao gồm 3 mẩu tin (dòng), mỗi mẩu tin tương ứng với một người, và bốn cột (LastName, FirstName, Address và City).

Với SQL ta có thể truy vấn CSDL và nhận lấy kết quả trả về thông qua các câu truy vấn.

Một câu truy vấn như sau:

SELECT LastName FROM Persons

Sẽ trả về kết quả như sau:



Lưu ý: Một số hệ thống CSDL đòi hỏi câu lệnh SQL phải kết thúc bằng một dấu chấm phảy (;). Chúng ta sẽ không dùng dấu chấm phảy trong bài viết này.

SQL là ngôn ngữ thao tác dữ liệu (DML - Data Manipulation Language)


SQL là cú pháp để thực thi các câu truy vấn. SQL cũng bao gồm cú pháp để cập nhật - sửa đổi, chèn thêm và xoá các mẩu tin.

Sau đây là danh sách các lệnh và truy vấn dạng DML của SQL:

SELECT - lấy dữ liệu từ một bảng CSDL.
UPDATE - cập nhật/sửa đổi dữ liệu trong bảng.
DELETE - xoá dữ liệu trong bảng.
INSERT INTO - thêm dữ liệu mới vào bảng.

SQL là ngôn ngữ định nghĩa dữ liệu (DDL - Data Definition Language)

Phần DDL của SQL cho phép tạo ra hoặc xoá các bảng. Chúng ta cũng có thể định nghĩa các khoá (key), chỉ mục (index), chỉ định các liên kết giữa các bảng và thiết lập các quan hệ ràng buộc giữa các bảng trong CSDL.

Các lệnh DDL quan trọng nhất của SQL là:

CREATE TABLE - tạo ra một bảng mới.
ALTER TABLE - thay đổi cấu trúc của bảng.
DROP TABLE - xoá một bảng.
CREATE INDEX - tạo chỉ mục (khoá để tìm kiếm - search key).
DROP INDEX - xoá chỉ mục đã được tạo.
__________________
Tong Hua: http://www.vn-zoom.com/f10/tong-hua-15792.html
PeMit#1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-02-2007, 11:36   #2
Rìu Chiến Bạc Chấm
 
PeMit#1's Avatar
 
Tham gia: Aug 2006
Đến từ: Hà Nội
Bài: 3.853
VZD: 321.872
Điểm: 2.428/665 bài viết
Send a message via Yahoo to PeMit#1
Default

Bài 2 - Câu lệnh SELECT

Câu lệnh SELECT được dùng để truy xuất dữ liệu từ một bảng. Kết quả trả về dưới dạng bảng được lưu trong 1 bảng, gọi là bảng kết quả - result table (còn được gọi là tập kết quả - result set).

Cú pháp

Cú pháp của câu lệnh SELECT như sau:

SELECT tên_các_cột
FROM tên_bảng

Truy xuất nhiều cột

Để truy xuất các cột mang tên LastNameFirstName, ta dùng một câu lệnh SELECT như sau:

SELECT LastName, FirstName FROM Persons

Bảng Persons:



Kết quả trả về:



Truy xuất tất cả các cột

Để truy xuất tất cả các cột từ bảng Persons, ta dùng ký hiệu * thay cho danh sách các cột:

SELECT * FROM Persons

Kết quả trả về:



Tập kết quả

Kết quả trả về từ một câu truy vấn SQL được lưu trong 1 tập kết quả (result set). Hầu hết các hệ thống chương trình CSDL cho phép duyệt qua tập kết quả bằng các hàm lập trình như Move-To-First-Record, Get-Record-Content, Move-To-Next-Record v.v...

Dấu chẩm phảy ( ; ) phía sau câu lệnh

Dấu chẩm phảy là một cách chuẩn để phân cách các câu lệnh SQL nếu như hệ thống CSDL cho phép nhiều câu lệnh SQL được thực thi thông qua một lời gọi duy nhất.

Các câu lệnh SQL trong bài viết này đều là các câu lệnh đơn (mỗi câu lệnh là một và chỉ một lệnh SQL). MS Access và MS SQL Server không đỏi hỏi phải có dấu chấm phảy ngay sau mỗi câu lệnh SQL, nhưng một số chương trình CSDL khác có thể bắt buộc bạn phải thêm dấu chấm phảy sau mỗi câu lệnh SQL (cho dù đó là câu lệnh đơn). Xin nhắc lại, trong bài viết này chúng ta sẽ không dùng dấu chấm phảy ở cuối câu lệnh SQL.
__________________
Tong Hua: http://www.vn-zoom.com/showthread.php?t=15792
PeMit#1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-02-2007, 14:28   #3
Rìu Chiến Bạc Chấm
 
PeMit#1's Avatar
 
Tham gia: Aug 2006
Đến từ: Hà Nội
Bài: 3.853
VZD: 321.872
Điểm: 2.428/665 bài viết
Send a message via Yahoo to PeMit#1
Default

Bài 3 -Mệnh đề WHERE

Mệnh đề WHERE được dùng để thiết lập điều kiện truy xuất.

Mệnh đề WHERE

Để truy xuất dữ liệu trong bảng theo các điều kiện nào đó, một mệnh đề WHERE có thể được thêm vào câu lệnh SELECT.

Cú pháp

Cú pháp mệnh đề WHERE trong câu lệnh SELECT như sau:

SELECT tên_cột FROM tên_bảng
WHERE tên_cột phép_toán giá_trị


Trong mệnh đề WHERE, các phép toán được sử dụng là

Phép toán ---- Mô tả
= ------ So sánh bằng
<> ------ So sánh không bằng
> ------ Lớn hơn
< ------ Nhỏ hơn
>= ------ Lớn hơn hoặc bằng
<= ------ Nhỏ hơn hoặc bằng
BETWEEN ------ Nằm giữa một khoảng
LIKE ------ So sánh mẫu chuỗi

Lưu ý: Trong một số phiên bản của SQL, phép toán <> có thể được viết dưới dạng !=

Sử dụng mệnh đề WHERE

Để lấy danh sách những người sống ở thành phố Sandnes, ta sử dụng mệnh đề WHERE trong câu lệnh SELECT như sau:

SELECT * FROM Persons
WHERE City = 'Sandnes'


Bảng Persons:



Kết quả trả về:



Sử dụng dấu nháy

Lưu ý rằng ở ví dụ trên ta đã sử dụng hai dấu nháy đơn (') bao quanh giá trị điều kiện 'Sandnes'.

SQL sử dụng dấu nháy đơn bao quanh các giá trị ở dạng chuỗi văn bản (text). Nhiều hệ CSDL còn cho phép sử dụng dấu nháy kép ("). Các giá trị ở dạng số không dùng dấu nháy để bao quanh.

Với dữ liệu dạng chuỗi văn bản:

Câu lệnh đúng:
SELECT * FROM Persons WHERE FirstName = 'Tove'

Câu lệnh sai:
SELECT * FROM Persons WHERE FirstName = Tove

Với dữ liệu dạng số:

Câu lệnh đúng:
SELECT * FROM Persons WHERE Year > 1965

Câu lệnh sai:
SELECT * FROM Persons WHERE Year > '1965'

Phép toán điều kiện LIKE

Phép toán LIKE được dùng để tìm kiếm một chuỗi mẫu văn bản trên một cột.

Cú pháp

Cú pháp của phép toán LIKE như sau:

SELECT tên_cột FROM tên_bảng
WHERE tên_cột LIKE mẫu


Một ký hiệu % có thể được sử dụng để định nghĩa các ký tự đại diện. % có thể được đặt trước và/hoặc sau mẫu.

Sử dụng LIKE

Câu lệnh SQL sau sẽ trả về danh sách những người có tên bắt đầu bằng chữ O:

SELECT * FROM Persons
WHERE FirstName LIKE 'O%'


Câu lệnh SQL sau sẽ trả về danh sách những người có tên kết thúc bằng chữ a:

SELECT * FROM Persons
WHERE FirstName LIKE '%a'


Câu lệnh SQL sau sẽ trả về danh sách những người có tên chứa chuỗi la:

SELECT * FROM Persons
WHERE FirstName LIKE '%la%'
__________________
Tong Hua: http://www.vn-zoom.com/showthread.php?t=15792
PeMit#1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-02-2007, 23:18   #4
Rìu Chiến Bạc Chấm
 
PeMit#1's Avatar
 
Tham gia: Aug 2006
Đến từ: Hà Nội
Bài: 3.853
VZD: 321.872
Điểm: 2.428/665 bài viết
Send a message via Yahoo to PeMit#1
Default

Bài 4 - Toán tử lô-gic AND và OR

AND và OR

Hai toán tử ANDOR nối hai hoặc nhiều điều kiện trong mệnh đề WHERE lại với nhau.

Toán tử AND sẽ hiển thị 1 dòng nếu TẤT CẢ các điều kiện đều thoả mãn.
Toán tử OR hiển thị một dòng nếu BẤT KỲ điều kiện nào được thoả.

Bảng dữ liệu dùng trong ví dụ



Ví dụ 1

Sử dụng AND để tìm những người có tên là Tove và họ là Svendson:

SELECT * FROM Persons
WHERE FirstName = 'Tove'
AND LastName = 'Svendson'


Kết quả trả về:



Ví dụ 2

Sử dụng OR để tìm những người có tên là Tove hoặc họ là Svendson:

SELECT * FROM Persons
WHERE firstname = 'Tove'
OR lastname = 'Svendson'


Kết quả trả về:



Ví dụ 3

Bạn cũng có thể sử dụng kết hợp ANDOR cùng với dấu ngoặc đơn để tạo nên các câu truy vấn phức tạp:

SELECT * FROM Persons WHERE
(FirstName = 'Tove' OR FirstName = 'Stephen')
AND LastName = 'Svendson'


Kết quả trả về:

__________________
Tong Hua: http://www.vn-zoom.com/showthread.php?t=15792
PeMit#1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-02-2007, 13:43   #5
Búa Gỗ
 
vuhai8525's Avatar
 
Tham gia: Dec 2006
Đến từ: hà nội
Bài: 14
VZD: 840
Điểm: 1/1 bài viết
Default

rất hay đấy cảm ơn nhé
mong bạn tiếp tục bổ sung thêm nhiều bài viết hay như thế
vuhai8525 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-03-2007, 00:01   #6
Rìu Chiến Bạc Chấm
 
PeMit#1's Avatar
 
Tham gia: Aug 2006
Đến từ: Hà Nội
Bài: 3.853
VZD: 321.872
Điểm: 2.428/665 bài viết
Send a message via Yahoo to PeMit#1
Default

Bài 5 - Toán tử BETWEEN...AND
Toán tử BETWEEN...AND lấy ra một miền dữ liệu nằm giữa hai giá trị. Hai giá trị này có thể là số, chuỗi văn bản hoặc ngày tháng.

SELECT tên_cột FROM tên_bảng
WHERE tên_cột
BETWEEN giá_trị_1 AND giá_trị_2


Bảng dữ liệu dùng trong ví dụ


Ví dụ 1

Tìm tất cả những người có họ (sắp xếp theo ABC) nằm giữa Hansen (tính luôn Hansen) và Pettersen (không tính Pettersen):

SELECT * FROM Persons WHERE LastName
BETWEEN 'Hansen' AND 'Pettersen'


Kết quả trả về:



Lưu ý quan trọng: Toán tử BETWEEN...END sẽ trả về những kết quả khác nhau trên các hệ CSDL khác nhau. Với một số hệ CSDL, toán tử BETWEEN...END sẽ trả về các dòng mà có giá trị thực sự "nằm giữa" hai khoảng giá trị (tức là bỏ qua không tính đến các giá trị trùng với giá trị của hai đầu mút). Một số hệ CSDL thì sẽ tính luôn các giá trị trùng với hai đầu mút. Trong khi đó một số hệ CSDL khác lại chỉ tính các giá trị trùng với đầu mút thứ nhất mà không tính đầu mút thứ hai (như ở ví dụ phía trên). Do vậy, bạn phải kiểm tra lại hệ CSDL mà bạn đang dùng khi sử dụng toán tử BETWEEN...AND.

Ví dụ 2

Để tìm những người có họ (sắp xếp theo ABC) nằm ngoài khoảng hai giá trị ở ví dụ 1, ta dùng thêm toán tử NOT:

SELECT * FROM Persons WHERE LastName
NOT BETWEEN 'Hansen' AND 'Pettersen'


Kết quả trả về:
__________________
Tong Hua: http://www.vn-zoom.com/showthread.php?t=15792
PeMit#1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-03-2007, 20:02   #7
Rìu Chiến Bạc Chấm
 
PeMit#1's Avatar
 
Tham gia: Aug 2006
Đến từ: Hà Nội
Bài: 3.853
VZD: 321.872
Điểm: 2.428/665 bài viết
Send a message via Yahoo to PeMit#1
Default

Bài 6 - Từ khoá DISTINCT

Từ khoá DISTINCT được dùng để lọc ra các giá trị khác nhau.

Từ khoá DISTINCT


Câu lệnh SELECT sẽ trả về thông tin về các cột trong bảng. Nhưng nếu chúng ta không muốn lấy về các giá trị trùng nhau thì sau?

Với SQL, ta chỉ cần thêm từ khoá DISTINCT vào câu lệnh SELECT theo cú pháp sau:

SELECT DISTINCT tên_cột FROM tên_bảng

Ví dụ: Tìm tất cả các công ty trong bảng đặt hàng

Bảng đặt hàng Orders của ta như sau:



Câu lệnh SQL sau:

SELECT Company FROM Orders

Sẽ trả về kết quả:



Tên công ty W3Schools xuất hiện hai lần trong kết quả, đôi khi đây là điều chúng ta không muốn.

Ví dụ: Tìm tất cả các công ty khác nhau trong bảng đặt hàng

Câu lệnh SQL sau:

SELECT DISTINCT Company FROM Orders

Sẽ trả về kết quả:


Tên công ty W3Schools bây giờ chỉ xuất hiện 1 lần, đôi khi đây là điều chúng ta mong muốn.
__________________
Tong Hua: http://www.vn-zoom.com/showthread.php?t=15792
PeMit#1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-03-2007, 00:54   #8
Rìu Chiến Bạc Chấm
 
PeMit#1's Avatar
 
Tham gia: Aug 2006
Đến từ: Hà Nội
Bài: 3.853
VZD: 321.872
Điểm: 2.428/665 bài viết
Send a message via Yahoo to PeMit#1
Default

Bài 7 - Từ khoá ORDER BY

Từ khoá ORDER BY được sử dụng để sắp xếp kết quả trả về.

Sắp xếp các dòng


Mệnh đề ORDER BY được dùng để sắp xếp các dòng.

Ví dụ bảng Orders:



Ví dụ:

Để lấy danh sách các công ty theo thứ tự chữ cái (tăng dần):

SELECT Company, OrderNumber FROM Orders
ORDER BY Company


Kết quả trả về:
__________________
Tong Hua: http://www.vn-zoom.com/showthread.php?t=15792
PeMit#1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Thành viên đã cám ơn bài viết này của PeMit#1:
thientanchuong (02-03-2008)
Old 20-12-2007, 20:33   #9
Búa Đá Đôi
 
ningia25's Avatar
 
Tham gia: Sep 2007
Bài: 82
VZD: 3.289
Điểm: 44/17 bài viết
Default

'co bai tap sql lam cho vi du luon nha
cam thay rat tuyet voi con gi nua cho luon di ban
ningia25 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-12-2007, 09:19   #10
Gà Con
 
luuquangtienls's Avatar
 
Tham gia: Dec 2007
Bài: 3
VZD: 164
Điểm: 0/0 bài viết
Default

ban co bai tap thi lam vd luon ho minh voi, minh rat thich mon SQL. cam on ban nhieu
luuquangtienls vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-03-2008, 02:26   #11
Búa Đá
 
thientanchuong's Avatar
 
Tham gia: Jul 2007
Bài: 74
VZD: 2.084
Điểm: 28/8 bài viết
Default

bạn có bài giảng nào nữa thỉ tiếp đi bro, các bài trên rất hay, ngắn gọn súc tích và có sample minh họa
thientanchuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-05-2008, 18:31   #12
Gà Con
 
hongty_12's Avatar
 
Tham gia: May 2008
Bài: 3
VZD: 153
Điểm: 0/0 bài viết
Default

bài giảng thì cũng được nhưng không có ví dụ rất khó hình dung !!!!!!!bạn có thể cho vài ví dụ cụ thể không ?cám ơn
hongty_12 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-06-2008, 14:10   #13
Gà Con
 
vietthuan836's Avatar
 
Tham gia: Feb 2008
Bài: 5
VZD: 243
Điểm: 0/0 bài viết
Default

Mình đồng ý với bạn HongTy_12 là bạn PeMit#1 nên có những ví dụ cụ thể. Ở đây mình muốn nói là các bài tập mang tính logic và thực tế. Có như thế thì nhiều người có thể tiếp cận bài giảng của bạn cũng như là môn
SQl hơn. Nhưng dù sao, cũng phải cảm ơn bạn PeMit#1 đã mang những cái hay này chia sẻ cho mọi người. Đây là một điều đáng khen và khuyến khích. Phát huy nha, bạn PeMit#1
vietthuan836 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt
Trackbacks are Tắt
Pingbacks are Tắt
Refbacks are Tắt
Chuyển đến


Múi giờ GMT +7. Hiện tại là 03:47.


Powered by vBulletin® Version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
Từ điển được cung cấp bởi VDict.com - Hosting được tài trợ bởi Rao vặt 123