Các câu lệnh trong ngôn ngữ SQL được chia thành hai loại:• Các câu lệnh định nghĩa dữ liệu cho phép tạo các thành phần trong CSDL như bảng, cột thuộc tính và các chỉ dẫn.. FROM Xác định
Trang 1CHƯƠNG III: NGÔN NGỮ SQL
SQL (Structured Query Language) – ngôn ngữ truy vấn có cấu trúc là ngôn ngữ con dữ liệu
quan hệ rất mạnh, dễ sử dụng Hiện nay SQL được được cài đặt trong hầu hết các phần mềm hệ quản trị CSDL như Oracle, Dbase,
Access, Foxpro, SQL server
Trang 2Các câu lệnh trong ngôn ngữ SQL được chia thành hai loại:
• Các câu lệnh định nghĩa dữ liệu cho phép tạo các thành phần trong CSDL như bảng, cột (thuộc tính) và các chỉ dẫn.
• Các câu lệnh thao tác dữ liệu để lấy về
các mẫu tin (bản ghi) từ cơ sở dữ liệu
Trang 33.1 Các câu lệnh định nghĩa
dữ liệu:
Trang 4Tạo bảng
Câu lệnh tạo bảng có dạng tổng quát:
CREATE TABLE Tablename(FieldName
DataType [Not null], )
Trong đó:
• FieldName là một từ đơn không có
khoảng trống, bắt đầu là chữ cái tiếp theo
là chữ cái (hoa hoặc thường) hoặc chữ số hoặc dấu nối.
• DataType là kiểu dữ liệu
Trang 5Ví dụ:
CREATE TABLE Sinhvien(Masv
smalliterger, Ho char(18), Ten char(8),
Ngsinh date, Gtinh char(3), Mtinh char(3), Mhuyen char(3), Mlop char(3), Cogiadinh logical)
Trang 6Thêm một trường mới
ALTER TABLE <Table_Name> ADD [COLUMN]
<New_Field_Name_1> DATATYPE(<width>) … ADD [COLUMN] <New_Field_Name_n>
DATATYPE(<width>)
Thêm vào bảng <Table_Name> các trường mới
có tên là < New_Field_Name_1> … <
New_Field_Name_n> có kiểu dữ liệu là
DATATYPE với độ rộng là <width> một cách
tương ứng
Ví dụ:
ALTER TABLE Sinhvien ADD Nganh char(3) ADD
Ngaynhaphoc date
Trang 7Xoá bảng
DROP TABLE TableName
Xoá bảng được chỉ định bởi tên (TableName) ra khỏi CSDL
• Ví dụ:
• DROP TABLE SINHVIEN
Trang 83.2 Các câu lệnh truy tìm
dữ liệu
Trang 9Dạng tổng quát của câu lệnh truy
tim dữ liệu có dạng:
SELECT *|[Field1|Expression1 [AS alias1],
Field2| Expression2 [AS alias2], …FieldN|
ExpressionN [AS aliasN]] [ DISTINCT ]
[ FROM Table1 | View1, Table2 | View2,
…,TableN | ViewN]
[ WHERE <Condition_Expression>]
[ GROUPE BY Field1, Field2,…,FieldN]
[ HAVING <Condition_Expression>]
[ ORDER BY <Field_Name| Field_order |
Expression> [ASC | DESC]]
Trang 10Giải thích ý nghĩa các thành phần
SELECT Xác định, tìm kiếm nội dung thông tin từ các trường:
Dấu “*” hiểu là từ tất cả các trường.
FROM Xác định nguồn thông tin:
Thông tin có thể từ các bảng hoặc các khung nhìn trong danh sách liệt kê
WHERE Xác định điều kiện:
Điều kiện là một biểu thức Boolean, chỉ các bản ghi (bộ|hàng) thoả mãn điều kiện mới được đưa ra
Mẫu câu lệnh thường dùng nhất là:
SELECT *|[Field1|Expression1 [AS alias1], Field2| Expression2 [AS alias2], …FieldN| ExpressionN [AS aliasN]] [DISTINCT]
[FROM Table1 | View1, Table2 | View2,…,TableN | ViewN]
[WHERE <Condition_Expression>]
Trang 11• GROUPE BY Phân nhóm hoặc gộp nhóm dữ liệu trong bảng:
Có nghĩa rằng các bản ghi (bộ|hàng) có cùng giá trị trường sẽ được gộp thành nhóm, trong quan hệ kết quả ta chỉ thấy các giá trị đại diện của nhóm Chú ý rằng danh sách cột sau mệnh đề GROUPE BY phải bao hàm danh sách trường sau mệnh đề SELECT
• HAVING <Condition_Expression> thường đi kèm với GROUPE BY trong đó biểu thức điều kiện <Condition_Expression>, trong quan hệ kết quả chỉ chứa các hàng thoả điều kiện <Condition_Expression> Trong biểu thức điều kiện (xem…) nếu có chứa toán hạng là một biến trường thì biến trường đó phải có mặt trong danh sách trường sau mệnh đề GROUPE BY
• ORDER BY <Field_List| Field_order | Expression> [ASC | DESC] Khi tìm kiếm thông tin, các thông tin lấy về sẽ được sắp xếp theo giá trị của các cột chỉ ra trong danh sách theo thứ tự tăng nếu dùng ASC, giảm nếu dùng DESC (mặc định là ASC), các giá trị bằng nhau được sắp liên tiếp liền kề nhau Nếu có nhiều trường thứ tự sắp xếp ưu tiên theo danh sách trường từ trái sang phải Nếu trong lệnh có dùng
GROUPE BY việc sắp xếp sẽ chỉ có tác dụng cho từng nhóm được tạo ra bởi GROUPE BY
Trang 12Câu lệnh SQL với những
tình huống phổ biến
Trang 13• SELECT * FROM <Table_Name>
Câu lệnh này có nghĩa rằng trả về tất cả các bản ghi với đầy đủ các trường của bảng chỉ ra bởi <Table_Name>.
Ví dụ: SELECT * FROM Sinhvien
• SELECT <Field_List> FROM <Table_Name>
Câu lệnh này có nghĩa rằng trả về tất cả các bản ghi với các trường chỉ ra trong danh sách <Field_List> của bảng chỉ ra bởi <Table_Name>
Ví dụ: SELECT ho, ten, lop, nganh FORM Sinhvien
• SELECT <Field_List> DISTINCT FROM <Table_Name>
Câu lệnh này có nghĩa rằng trả về bản ghi với các trường chỉ ra trong danh sách <Field_List> của bảng chỉ ra bởi <Table_Name> và không có bản ghi (bộ) nào trùng nhau.
Ví dụ: SELECT Tinh, Huyen DISTINCT FROM Sinhvien
Tìm kiếm không điều kiện
Trang 14Tìm kiếm theo điều kiện
Ví dụ:
SELECT Ho, Ten, Lop FROM Sinhvien WHERE Mtinh BETWEEN
“01” and “03” and nganh IN (“101”,”103”)
trong quan hệ kết quả gồm các cột ho, ten, lop các sinh viên có que
Trang 15Các câu lệnh truy vấn lồng
Trong câu lệnh truy vấn (chính) thành phần sau HAVING hoặc WHERE ta lại
có một câu lệnh SELECT gọi là câu
lệnh SELECT phụ và ta nói có câu lệnh
SELECT lồng
Trang 16Biểu thức so sánh sau HAVING hoặc WHERE
của các câu lệnh lồng có thể như sau:
e[ANY | ALL | SOME] (SELECT…)ANY | ALL | SOME] (SELECT…)SELECT…))
trong đó e là biểu thức, là phép so sánh nào đó, ANY hoặc SOME được hiểu là bất kỳ, ALL là tất cả
Kết quả truy vấn ta sẽ được các mẩu tin của câu lệnh
SELECT chính thoả mãn phép so sánh với bất kỳ (ANY | SOME) hoặc tất cả (ALL) mẩu tin thu được từ câu lệnh SELECT phụ
Ví dụ:
SELECT sobaodanh,hoten,nganh FROM Tuyensinh
WHERE diemtong>= ALL(SELECT diemtong FROM
Tuyensinh)
Câu lệnh trên sẽ cho kết quả là danh sách những thí
Trang 17e [ANY | ALL | SOME] (SELECT…)NOT] IN (SELECT…)SELECT…))
WHERE (MãsốDA, Sốgiờ)
Trang 18[ANY | ALL | SOME] (SELECT…)NOT] EXISTS (SELECT…)SELECT…))
Kết quả của truy vấn là những bản ghi có mặt trong kết quả của câu SELECT phụ
Trang 19Nối nhiều bảng với mệnh đề
INNER JOIN
SELECT … FROM Tablename1 INNER JOIN Tablename2 ON Tablename1.fieldname1
Tablename2.fieldname2 … [WHERE …]
Câu lệnh này tổ hợp bản ghi từ hai bảng
Tablename1và Tablename2 nếu có giá trị so khớp bởi phép so sánh các giá trị trên trường fieldname1 của bảng Tablename1 với trường fieldname2 của bảng Tablename2
Trang 20Ví dụ có hai bảng sau
KHACHHANG
Makhach Hoten Congty
001 Trần Văn Chung Hoàng Hà
002 Nguyễn Tứ Kỳ Đông Đô
003 Lê Hồng Hải Bình Minh
Trang 21Câu lệnh sau:
SELECT Makhach, Hoten, Congty, Sodonhang FROM Khachhang INNER JOINT Donhang ON Khachhang.Makhach=Donhang.Makhach
sẽ cho kết quả là:
Trang 22Các câu lệnh cập nhật dữ liệu
INSERT INTO TableName(Field1, Fiel2, Fieldn) VALUES (Val1,
Val2, Valn)
Khi các trường có vị trí cố định thì lệnh nhập có thể viết ngắn gọn:
INSERT INTO TableName VALUES (Val1, Val2, Valn)
Ví dụ:
DELETE FROM <Table_Name> [WHERE <Condition_Expression>]
Xoá bản ghi thoả mãn điều kiện của mệnh đề WHERE của bảng
<Table_Name>
Ví dụ:
UPDATE <Table_Name> SET <Field_Name1=Exp1, Field_Name1=Exp2, … Field_Name1=Exp3> WHERE <Condition_Expression>.
Các trường (sau SET) của những bản ghi thoả mãn <Condition_Expression>