Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 40 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
40
Dung lượng
1,48 MB
Nội dung
Cơ sở liệu – Database EE4253 Vũ Hải 2016 International Research Institute MICA, Hanoi University of Science and Technology Chương 3: Ngôn ngữ định nghĩa thao tác liệu Chương 3: Ngôn ngữ định nghĩa thao tác liệu • Định nghĩa & Thao tác liệu (truy vấn) CSDL biểu diễn mô hình quan hệ • cách tiếp cận: ĐSQH, tính tốn vị từ • SQL hay SEQUEL: ngơn ngữ thao tác thực sử dụng hệ QT CSDL: – mạnh, – dễ sử dụng, – phổ biến 3.2 Ngơn ngữ SQL • Khả nn SQL: – Định nghĩa cấu trúc liệu – Thay đổi CTDL – Đặc tả ràng buộc toàn vẹn • Các dạng chuẩn: SQL-86, SQL-89 SQL92, SQL-99 – Không phân biệt chữ hoa chữ thường – Một số hệ cần dấu chấm phẩy sau câu lệnh Tham khảo: – www.learn-sql-tutorial.com – www.w3schools.com/SQL/sql_syntax.asp 3.2 Ngôn ngữ SQL • Các thành phần nn SQL – Ngôn ngữ định nghĩa liệu Data Definition Language (DDL) – Ngôn ngữ thao tác liệu Data Manipulation Language (DML) – Ngôn ngữ điều khiển giao dịch 3.2 Ngôn ngữ SQL • DDL cho phép định nghĩa : – Sơ đồ quan hệ – Kiểu liệu hay miền giá trị – Ràng buộc toàn vẹn – Quyền truy cập quan hệ –… • DML cho phép: – Thêm/xóa/thay đổi vào CSDL, truy vấn dựa ĐSQH tính tốn vị từ – DML nhúng: cho phép sử dụng SQL NNLT • Điều khiển giao dịch: – Đặc tả bắt đầu/kết thúc giao dịch 3.2.1 Định nghĩa liệu • Các kiểu liệu có sẵn: – Dữ liệu xâu ký tự: – – Char(n) Varchar (n) – Dữ liệu số: – – – – Int (từ -2,147,483,648 đến 2,147,483,647) Smallint (từ -32,768 đến 32,767) Numeric (p,d): gồm d chữ số, p chữ số sau dấu thập phân Real – Dữ liệu ngày tháng – – Date: YYYY-MM-DD Time: HH:MM.SS 3.2.1 Định nghĩa liệu Tạo CSDL – create database| schema create database COMPANY Tạo miền giá trị – create domain create domain name varchar(30) 3.2.1 Định nghĩa liệu Tạo quan hệ (bảng) Ràng buộc mức thuộc tính Ràng buộc mức bảng 3.2.1 Định nghĩa liệu Tạo ràng buộc • Ràng buộc mức thuộc tính: » NOT NULL » DEFAULT » UNIQUE » PRIMARY KEY » REFERENCES 10 Phép kết nối • Kết nối có điều kiện: – SELECT * FROM [INNER] JOIN ON – SELECT * FROM employee INNER JOIN department ON employee.DepartmentID = department.DepartmentID; – SELECT * FROM employee, department WHERE employee.DepartmentID = department.DepartmentID; – SELECT * FROM employee INNER JOIN department USING (DepartmentID); • Kết nối Natural join: – SELECT * FROM employee NATURAL JOIN department; 26 Phép kết nối JOIN USING 27 Phép kết nối ngồi • Kết nối bảng A B đưa kết gồm thuộc A/B/AB không thỏa mãn điều kiện kết nối • Kết nối ngồi bên trái, bên phải, toàn – SELECT * FROM LEFT [OUTER] JOIN ON – SELECT * FROM RIGHT [OUTER] JOIN ON – SELECT * FROM FULL [OUTER] JOIN ON 28 Phép kết nối SELECT * FROM employee LEFT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID; SELECT * FROM employee RIGHT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID; SELECT * FROM employee FULL OUTER JOIN department ON employee.DepartmentID = department.DepartmentID; 29 Tự kết nối • self-join • SELECT F.EmployeeID, F.LastName, S.EmployeeID, S.LastName, F.Country FROM Employee F INNER JOIN Employee S ON F.Country = S.Country WHERE F.EmployeeID < S.EmployeeID ORDER BY F.EmployeeID, S.EmployeeID; 30 Câu lệnh lồng (nested queries) • SQL cho phép sử dụng câu lệnh (subqueries) để tăng tính linh hoạt truy vấn – select * from Song where author_id in ( select id from Author where dob < '1950-01-01'); – select * from Customer where count ( select id from Invoice where customer = Customer.id) > 0; 31 Hàm kết hợp • Các hàm kết hợp: xuất mệnh đề Select – – – – – avg(): giá trị trung bình min(): giá trị max(): giá trị max sum(): tổng count(): số lượng • Ví dụ: – tính điểm trung bình học sinh có id = 10 select avg(mark) from Mark where stid = 10; 32 Gộp nhóm • Áp dụng hàm kết hợp tập giá trị, nhóm dựa group by … • Ví dụ: – tìm số nhân cơng làm việc phịng ban select deptid, count(eid) from employee group by deptid; – tính điểm trung bình học sinh select stid, avg(mark) from Mark group by stid; – tìm danh sách sách thư viện kèm theo số lượng select title, count(*) from Book group by title; 33 Gộp nhóm với “having…” • “where…” điều kiện giá trị, cịn “having…” điều kiện với nhóm • Mệnh đề having áp dụng sau gộp nhóm • VD: – select s.id, s.name, avg(m.mark) from Mark m, Student s where m.std = s.id and s.class = 'B' group by s.id having avg(m.mark) >= 8; Danh sách sinh viên lớp B có điểm trung bình >= 34 Tốn tử exists • Dùng để kiểm tra tập hợp có rỗng hay khơng – Nếu rỗng, khơng thực query ngồi – Nếu khơng rỗng, thực query ngồi – Phủ định dùng “not exists…” • Ví dụ: select sum(sales) from store_information where exists ( select * from geography where region_name = 'west'); • Lưu ý có tương quan bên ngồi: select * from Customer where not exists ( select id from Invoice where customer = Customer.id); 35 So sánh tập hợp • Câu hỏi: liệt kê sinh viên lớp A có điểm lớn sinh viên lớp B – select * from Student where class = 'A' and mark > some ( select mark from Student where class = 'B'); • Các kiểu so sánh tập hợp: – some / any: có phần tử thoả mãn – all: so với tất 36 Biến • SQL cho phép tạo biến để lưu tạm thời giá trị • Các biến dùng theo cú pháp: @tên • Định nghĩa / thay đổi giá trị biến: – set @VAR = VALUE; – select @VAR := VALUE; • Ví dụ: – set @std = 20; – select @stddob:=dob from Student where id=@std; 37 3.2.2 Thao tác liệu Xóa liệu • Cú pháp: delete from tên-quan-hệ [where điều-kiện]; • Mệnh đề where tương tự câu lệnh select • VD: – delete from Student where regdate > '2000-01-01'; – delete from Book; • Xố tồn liệu quan hệ: – delete from quan-hệ; – truncate quan-hệ; 38 3.2.2 Thao tác liệu Sửa đổi liệu • Cú pháp: update tên-quan-hệ set thuộc-tính = giá-trị, [where điều-kiện]; • VD: – update Student set class = 'C' where name = 'Bill Gates'; – update Book set borrowed = 1, date = now() where id = 1234; 39 40