Tải bản đầy đủ (.ppt) (22 trang)

Bài giảng quản trị cơ sở dữ liệu chương 3 ngôn ngữ SQL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (113.89 KB, 22 trang )

CHƯƠ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


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.
• 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


3.1. Các câu lệnh định nghĩa
dữ liệu:


Tạ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


Ví 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)


Thê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


Xoá 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


3.2. Các câu lệnh truy tìm
dữ liệu


Dạ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 Expression> [ASC | DESC]]


Giả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>]


• 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.



Câu lệnh SQL với những
tình huống phổ biến


Tìm kiếm không điều kiện


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 theo điều kiện.
dùng mệnh đề WHERE

Ví dụ:
SELECT Ho, Ten, Lop FROM Sinhvien WHERE nganh=404
Ví dụ:
SELECT Ho, Ten, Lop FROM Sinhvien WHERE Mtinh BETWEEN
“01” and “03”
Ví dụ:
SELECT Ho, Ten, Lop FROM Sinhvien WHERE nganh IN
(“101”,”102”,”103”)
Các phép so sánh, các phép toán BETWEEN, LIKE, IN được tổ hợp
bởi các phép toán logic sẽ cho ta những mệnh đề logic biểu diễn
các điều kiện phức tạp hơn trong phép lọc với mệnh đề WHERE.
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
quán thuộc các tỉnh có mã là 01, 02 hoặc 03 và có mã ngành học là
101 hoặc 103.


Cá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.


Biể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…)

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í
sinh đạt điểm cao nhất


e [NOT] IN (SELECT…)
ở đây e cũng là biểu thức.
Kết quả của truy vấn là những bản ghi có giá trị bằng
một giá trị trong kết quả của câu SELECT phụ.
Ví dụ:
SELECT DISTINCT MãsốNV
FROM NHÂNVIÊN_DỰ ÁN
WHERE (MãsốDA, Sốgiờ)
IN (SELECT MãsốDA, Sốgiờ
FROM NHÂNVIÊN_DỰ ÁN
WHERE MãsốNV = ‘NV001’);
Truy vấn này lấy ra mã nhân viêncủa tất cả các nhân
viên có cặp (mãsốDA, Sốgiờ) bằng với nhân viên
MãsốNV = ‘NV001’.



[NOT] EXISTS (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ụ


Nố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.


Ví dụ có hai bảng sau


Câ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à:


Các câu lệnh cập nhật dữ liệu


Nhập 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ụ:


Xoá bản ghi
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ụ:



Sửa đổi dữ liệu
UPDATE <Table_Name> SET Field_Name1=Exp3> WHERE <Condition_Expression>.
Các trường (sau SET) của những bản ghi thoả mãn <Condition_Expression>
của bảng <Table_Name> được thay thế bằng các giá trị của biểu thức tương
ứng.



×