Không thuộc tiêu chuẩn ANSI Có trong hầu hết các hệ QTCSDL thương mại Tăng tốc độ truy xuất dữ liệu Không cho phép giá trị của cột rỗng tại bất kỳ hàng nào Thường dùng với khóa
Trang 1KỸ THUẬT PHẦN MỀM
Chương IV: SQL & MS ACCESS
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
Khoa Điện tử Viễn Thông – Bộ môn Điện tử Tin học
Trang 2Chương IV SQL & MS Access
Trang 34.1 SQL
1 Giới thiệu
SQL-Structure Query Language
Ngôn ngữ truy xuất CSDL quan hệ
Là phương tiện được sử dụng để trao đổi với
DBMS
Câu lệnh giống ngôn ngữ tiếng Anh (dễ đọc, dễ hiểu hơn tiếng Anh).
Trang 44.1 SQL
Là một ngôn ngữ phi thủ tục
=>NSD không cần phải quan tâm đến việc dữ liệu được lưu trữ thật sự như thế nào, ở đâu và có thể lấy ra bằng cách nào.
Cho phép truy vấn và khai thác dữ liệu một cách linh hoạt
Trang 54.1 SQL
2 cách thực hiện câu lệnh SQL:
Tương tác (Dòng lệnh)
SQL nhúng.
Trang 64.1 SQL
* Lịch sử SQL
IBM’lab, San Jose, California – 1970: phát triển một
hệ quản trị CSDL quan hệ thực nghiệm mà có thể dần dần tạo ra một sản phẩm thương mại.
Một dự án được bắt đầu từ năm 1974 – Hệ thống R
Một ngôn ngữ được gọi là Sequel (Structure English QUEry Language) được chọn là ngôn ngữ CSDL quan
hệ cho hệ thống R.
Sequel đã được viết gọn lại thành SQL
Trang 7là một sản phẩm thương mại: SQL/DS chạy trên môi
trường hệ điều hành DOS/VSE.
1983: DB2 ra đời và phát triển nhanh chóng
Trang 84.1 SQL
Oracle
ANSI
Trang 94.1 SQL
2 Phân loại SQL
DDL – Data Definition Language
Làm việc với cấu trúc CSDL
DML – Data Manipulation Language
Làm việc với dữ liệu thực sự được lưu trữ
DCL – Data Control Language
Trang 104.1 SQL
3 Các lệnh SQL
Ví dụ CSDL gồm 3 bảng:
Trang 124.1 SQL
CREATE TABLE <TableName> (
Column1 DataType [(width [,dec.])] [NOT NULL | UNIQUE |INDEX], Column2 DataType [(width [,dec.])] [NOT NULL | UNIQUE |INDEX],
……
Columnn DataType [ (width [,dec.])] [NOT NULL | UNIQUE |INDEX]
);
Trang 15 Không thuộc tiêu chuẩn ANSI
Có trong hầu hết các hệ QTCSDL thương mại
Tăng tốc độ truy xuất dữ liệu
Không cho phép giá trị của cột rỗng tại bất kỳ hàng nào
Thường dùng với khóa chính
Trang 164.1 SQL
CREATE TABLE < TableName > (
… PRIMARY KEY (columnname) );
CREATE TABLE <TableName> (
… FOREIGN KEY (columnname) REFERENCES <RefTableName> );
Trang 174.1 SQL
CREATE TABLE SPECS (
MD_NUM INTEGER , MPG INTERGER , RADIO CHAR(3) ,
ENGINE CHAR(7) );
CREATE TABLE STOCK (
MD_NUM INTEGER , QTY INTEGER , PRICE INTEGER );
Trang 184.1 SQL
Thêm cột:
ALTER TABLE <TableName>
ADD (ColumnName Datatype(width,dec)
Trang 19DROP TABLE CARS;
DROP TABLE SPECS;
Trang 204.1 SQL
Trang 214.1 SQL
Thêm DL vào bảng: CARS
Trang 224.1 SQL
Tên bảng cần thêm dữ liệu
Tên cột chứa dữ liệu
Giá trị dữ liệu cần thêm
Chú ý: kiểu dữ liệu của các cột phải đúng
INSERT INTO TABLE <TableName> (Field1, Field2, …., Fieldn) VALUES (Value1, Value2, …, Valuen)
Trang 234.1 SQL
Cú pháp rút gọn
Bỏ qua phần khai báo tên trường nếu thứ tự và số lượng trường giống cấu trúc bảng.
INSERT INTO TABLE <TableName>
VALUES (Value1, Value2, …, Valuen)
Trang 244.1 SQL
Thêm thông tin vào bảng SPECS
Trang 254.1 SQL
Trang 264.1 SQL
c Lệnh “SELECT”: Lấy thông tin từ bảng
Ví dụ: lấy thông tin từ bảng CARS
Kết quả:
Trang 284.1 SQL
Có thể lấy DL từ nhiều bảng bằng cách đặt danh sách bảng sau FROM
Kết quả: tích đề các của giữa các bản ghi của các bảng.
Xác định điều kiện WHERE
Trang 294.1 SQL
Lấy ra tất cả thông tin (giá trị của mọi cột) của bảng:
Thứ tự cột dữ liệu trả về giống thứ tự khi tạo bảng
Danh sách cột sau từ khóa SELECT:
Trang 304.1 SQL
Loại bỏ các hàng dữ liệu giống nhau
Ví dụ:
SELECT DISTINCT ma_lop FROM SinhVien
Được dùng để kiểm tra sự xuất hiện của các giá trị của cột trong bảng mà không quan tâm đến việc giá trị đó xuất hiện bao nhiêu lần
Trang 314.1 SQL
Cột tính toán:
SELECT mahs, ((D1T*2+D15+DM)/4*2+THI)/3 FROM Diem
=> Trả về danh sách mã học sinh và điểm trung bình học kỳ của từng học sinh
Trang 32SELECT * FROM SinhVien
WHERE TenSV=‘Nguyễn Văn A’
=> Lấy ra thông tin của tất cả SV có tên là ‘Nguyễn Văn A’
Trang 334.1 SQL
Các toán tử kiểm tra giá trị:
=, >=, <=, <>, >, <
SELECT * FROM DIEM WHERE diemthi BETWEEN 5 AND 9
SELECT * FROM HocSinh WHERE DaoDuc BETWEEN ‘A’ AND ‘C’ SELECT * FROM HocSinh WHERE Ten BETWEEN ‘N’ AND ‘T’
Biểu thức tương đương:
colname BETWEEN minvalue AND maxvalue
colname>=minvalue AND colname<=maxvalue
Trang 344.1 SQL
Kiểm tra là phần tử của tập hợp: IN
SELECT * FROM Diem WHERE DiemThi IN (2,3,4) SELECT * FROM Diem WHERE mahs IN (‘A1’,’B1’,’C1’)
Biểu thức tương đương:
Colname IN (value1, value2, …) Colname = value1 OR Colname = Value2 …
Trang 354.1 SQL
Toán tử so sánh theo mẫu: LIKE
LIKE được dùng để kiểm tra một cột kiểu chuỗi kỹ tự (CHAR, VCHAR) có giá trị theo một mẫu xác định nào đó.
Các ký tự đại diện:
‘_’ : đại diện cho 1 và đúng 1 ký tự
‘%’: đại diện cho một nhóm ký tự bất kỳ (kể cả chuỗi rỗng)
Trang 364.1 SQL
Ví dụ:
SELECT * FROM SinhVien WHERE malop LIKE ‘DTVT_’
SELECT * FROM SinhVien WHERE malop LIKE ‘DTVT%’
SELECT * FROM SinhVien WHERE malop LIKE ‘ VT%’
SELECT * FROM SinhVien WHERE malop LIKE ‘%’
ESCAPE: Dùng để coi các ký tự đại diện _ % là giá trị thật sự.
SELECT * FROM Subjects WHERE subname LIKE ‘$_VXL$%’
ESCAPE ‘$’
=> Trả ra danh sách môn học có giá trị cột subname là ‘_VXL%’
Trang 374.1 SQL
Xắp sếp kết quả trả về: ORDER BY
SELECT * FROM SinhVien
ORDER BY MaLop, TenSV ASC, NgaySinh DESC
=> Kết quả trả về là danh sách sinh viên được sắp xếp theo mã lớp tăng dần, tên sinh viên tăng dần và ngày sinh giảm dần.
Trang 39 SELECT COUNT(Dept_no) FROM Staffs
Đếm số lượng nhân viên đã được gán giá trị Dept_no
SELECT COUNT(DISTINCT Dept_no) FROM Staffs
Đếm số lượng mã phòng sử dụng
SELECT COUNT(*) FROM Staffs
Đếm số nhân viên (số bản ghi hiện có trong bảng Staffs)
Trang 404.1 SQL
Tính tổng giá trị của cột
Kiểu dữ liệu của cột phải là kiểu số
Đối số có thể là một biểu thức mà kết quả trả về là kiểu số.
Ví dụ:
Tính tổng giá trị cột pay trong bảng Salary
Tính tổng giá trị cột pay+1500 của bảng Salary
Trang 414.1 SQL
Tính trung bình cộng giá trị của cột
Kiểu dữ liệu của cột phải là kiểu số
Ví dụ:
Tính trung bình cộng giá trị cột pay trong bảng Salary
Trang 42 Tìm giá trị điểm nhỏ nhất trong bảng Marks
Trang 43 Tìm giá trị điểm lớn nhất trong bảng Marks
Trang 45SELECT MaSV, AVG(Diem) FROM DiemThi
GROUP BY MaSV HAVING AVG(Diem)>=50
=> Lấy ra danh sách sinh viên và điểm trung bình của những sinh viên có điểm trung bình >=50
Trang 464.1 SQL
Liên kết bảng:
Lấy dữ liệu từ nhiều bảng
Xác định liên kết bằng điều kiện WHERE
Ví dụ:
SELECT SV.TenSV, Lop.TenLop FROM SV, Lop
Trả ra tích đề các của 2 bảng
SELECT SV.TenSV, Lop.TenLop FROM SV, Lop
WHERE SV.MaLop = Lop.MaLop
Trả ra danh sách tên SV và tên lớp SV đang theo học
Trang 474.1 SQL
SELECT SV.TenSV, Lop.TenLop
FROM SV INNER JOIN Lop ON SV.MaLop = Lop.MaLop
Trang 484.1 SQL
Truy vấn lồng nhau: nested query; sub query
Ví dụ:
SELECT * FROM SanPham WHERE MaSP = (SELECT MaSP
FROM HoaDon Where MaNV=‘NV1’ AND NgayHD=’25-10-2006’)
Lấy ra thông tin về sản phẩm do nhân viên có mã ‘NV1’ bán vào ngày
’25-10-2006’ (Giả sử trong ngày hôm đó nhân viên ‘NV1’ chỉ bán được
1 sản phẩm)
SELECT * FROM SanPham WHERE MaSP IN (SELECT MaSP
FROM HoaDon Where NgayHD=’25-10-2006’)
Lấy ra danh sách và thông tin về sản phẩm được bán vào ngày 2006’ bởi tất cả nhân viên
Trang 49’25-10-4.1 SQL
SELECT * FROM Depts
WHERE DeptCode IN
(SELECT DISTINCT DeptCode FROM Staffs)
Lấy ra thông tin chi tiết của các phòng có nhân viên làm việc
Trang 504.1 SQL
Nối các kết quả của các câu truy vấn: UNION
Các câu truy vấn phải trả về kết quả có cùng cấu trúc.
Kết quả cuối cùng là hợp của tất cả kết quả của các câu truy vấn
Loại bỏ các dòng dữ liệu giống nhau
Các câu truy vấn không được có ORDER BY
Các câu truy vấn không được dùng các hàm tổng hợp
Trang 514.1 SQL
Trang 524.1 SQL
giá trị dữ liệu.
Chú ý: Where
Trang 544.1 SQL
Không có WHERE => All records affected.
DELETE [FROM] <TableName> WHERE <Expression>
Trang 554.1 SQL
e Views (Virtual tables)
Nội dung lấy từ các bảng cơ bản
Chỉ lưu trữ cấu trúc trên đĩa (không thực sự lưu trữ dữ liệu nào cả).
Khai thác DL từ View