Hướng Dẫn Thực Hành Cơ Sở Dữ Liệu Phần 4
4 Topic TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN Khoa Công nghệthông tin – Bộmôn Hệthống thông tin - Nhập môn Cơ sởdữ liệu Script truy vấn đơn giản NHẬ P MÔN CƠ SỞ DƢ̃ LIỆ U Script truy vấ n đơn giản Giảng viên Lương Vi ̃ Minh Hồ Thi ̣Hoàng Vy Tiết Gia Hồng 2011 -Trường đa ̣i ho ̣c Khoa ho ̣c tự nhiên 227 Nguyễn Văn Cừ Tp.Hồ Chí Minh– Viê ̣t Nam Phone (08) 38.354.266 • Fax (08) 38.324.467 Mục Lục A B C Mụ c tiê u Phầ n hƣớng dẫn thƣ̣c hành Phầ n bài tâ ̣p về nhà 11 Hình thƣ́c nô ̣p và Thời gian làm bài 11 Quy đinh ̣ đă ̣t tên 11 Nô ̣i dung & yêu cầ u bài tâ ̣p 11 T HS TÀI LIỆU THỰC HAN L Ƣ Ơ N G VĨ MINH – H CSDL HỒ THI ̣ - LƢU HÀNH NỘI BỘ HOÀNG VY - T IẾT A Mụ c tiêu - Tr uy vấn có điều kiện - Tr uy vấn sử dụng hàm - Tr uy vấn có xếp G IA HỒNG T HS TÀI LIỆU THỰC HAN L Ƣ Ơ N G VĨ MINH – - LƢU HÀNH NỘI BỘ HOÀNG VY - T IẾT H CSDL HỒ THI ̣ G IA HỒNG B Phầ n hƣớng dẫn thƣ ̣c hành Tổng quát Một cách tổng quát, khối select gồm có mệnh đề chính: Select: Xác định cột cần đưa kết From: Xác định bảng cần lấy thông tin Where: Xác định mẫu tin thỏa yêu cầu chọn lọc để đưa kết Ngoài ra, để mở rộng khả ngơn ngữ, khối select-from-where cịn bổ sung thêm mệnh đề group by, having, order by, hàm hỗ trợ tính tốn: max, min, count, sum, avg Sau cú pháp tổng quát câu truy vấn liệu: SELECT [tính chất] FROM [WHERE ] [GROUP BY ] [HAVING ] [ORDER BY Diễn giải : Tính chất : Một từ khóa: ALL (chọn tất dòng bảng), DISTINCT (lọai bỏ cột trùng lắp thơng tin), DISTINCTROW (lọai bỏ dịng trùng lắp thơng tin), TOP (chọn n dòng thỏa mãn điều kiện) Danh sách thuộc tính_1: tên thuộc tính cho biết thơng tin cần lấy Chú ý: Các thuộc tính cách dấu „,‟ Nếu lấy tất thuộc tính bảng tbl dùng: tbl.* Nếu sau FROM có table lấy tất field table dùng select * Nếu tồn thuộc tính sau select xuất table sau FROM phải định rõ thuộc tính thuộc table T HS TÀI LIỆU THỰC HAN L Ƣ Ơ N G VĨ MINH – H CSDL HỒ THI ̣ - LƢU HÀNH NỘI BỘ HOÀNG VY - T IẾT G IA HỒNG Danh sách table: table chứa thông tin cần lấy Khi tìm kiếm thơng tin nhiều table phải kết table lại với (điều kiện kết đặt sau where) Alias: bí danh (tên tắt) bảng dùng cho bảng có tên dài Điều kiện_1: điều kiện để lọc liệu Danh sách thuộc tính_2: liệu gom nhóm theo cột này, ưu tiên từ trái sang Điều kiện_2: điều kiện lọc lại liệu sau thực tính tóan liệu Điều kiện áp dụng liệu thỏa mãn điều kiện_1 Danh sách thuộc tính_3:sắp xếp liệu theo cột nào, thứ tự tăng (ASC) giảm (DESC) Mặc định liệu theo thứ tự tăng dần Việc xếp thực theo thứ tự ưu tiên từ trái qua phải Truy vấn đơn giản SELECT FROM tên_bảng Sau select, * dùng với ý nghĩa lấy toàn cột bảng Dùng từ khoá distinct để loại bỏ trùng all để lấy tất liệu Mặc định khơng để có dùng từ khóa all Sau select dùng biểu thức số học như: +, -, *, /, thực tốn tử thuộc tính VD: Cho biết danh sách tất nhân viên với tất thơng tin Tìm kiếm có xếp Để xếp thứ tự liệu, ta sử dụng mệnh đề ORDER BY: SELECT… FROM… ORDER BY thuộc_ tính_1[ASC|DESC], thuộc_tính_2[ASC|DESC], T HS TÀI LIỆU THỰC HAN L Ƣ Ơ N G VĨ MINH – H CSDL HỒ THI ̣ - LƢU HÀNH NỘI BỘ HOÀNG VY - T IẾT G IA HỒNG Tập_thuộc_tính gồm thuộc tính nhiều thuộc tính độ ưu tiên tính từ trái sang phải VD: Với câu lệnh: select * from Table1 order by B desc,A asc bảng đây: A B An Binh Chi Hung 10 Ta kết sau: A B Hung 10 Chi An Binh Đầu tiên xếp thứ tự theo B trước, sau đó, với giá trị B ngang xếp theo A VD: Cho biết danh sách nhân viên tên theo thứ tự Alphabet Cho biết danh sách nhân viên theo phòng ban, phòng ban tên nhân viên theo thứ tự T HS TÀI LIỆU THỰC HAN L Ƣ Ơ N G VĨ MINH – H CSDL HỒ THI ̣ - LƢU HÀNH NỘI BỘ HOÀNG VY - T IẾT G IA HỒNG Tìm kiếm với điều kiện đơn giản Để hỗ trợ tìm kiếm có điều kiện, sử dụng mệnh đề WHERE câu lệnh SELECT với vị trí sau: AND OR SELECT… FROM… WHERE (điều_kiện_1) AND/OR (điều_kiện_n) VD: SINHVIEN (MASV, HOTEN, NGSINH, LOP) Cho danh sách sinh viên lớp TH01 Lưu ý: Khi thuộc tính nhận giá trị null, cần cẩn thận sử dụng để so sánh với nhiều điều kiện liên tiếp BETWEEN AND , NOT BETWEEN … AND Cho biết nhân viên sinh khoảng năm 1955 đến 1960 Hoặc Hoặc T HS TÀI LIỆU THỰC HAN L Ƣ Ơ N G VĨ MINH – H CSDL HỒ THI ̣ - LƢU HÀNH NỘI BỘ HOÀNG VY - T IẾT G IA HỒNG IS NULL IS NOT NULL IS NULL IS NOT NULL : Để kiểm tra giá trị có phải NULL | NOT NULL hay không Cho biết nhân viên khơng có người quản lý trực tiếp Cho biết nhân viên có người quản lý trực tiếp IN NOT IN IN NOT IN dùng để kiểm tra giá trị nằm hay không nằm tập hợp hay khơng Cho biết đơn đặt hàng có đặt mặt hàng H1, H2, H3 Tìm kiếm có xử lý xâu ký tự Để xử lý với liệu thuộc dạng xâu ký tự, ngơn ngữ SQL có hỗ trợ phép LIKE Thơng thường so sánh thuộc tính có kiểu liệu thuộc dạng xâu ký tự người ta thường dùng LIKE không dùng phép = VD: Hiện sinh viên tên Trang % : dùng để đại diện cho nhiều ký tự đứng trước từ „Trang‟ Ngồi cịn có ký tự sau để mơ tả mẫu cần tìm: T HS TÀI LIỆU THỰC HAN L Ƣ Ơ N G VĨ MINH – H CSDL HỒ THI ̣ - LƢU HÀNH NỘI BỘ HOÀNG VY - T IẾT G IA HỒNG _ thay cho ký tự Chú ý: Like “ab\%cd%” cho chuỗi bắt đầu với “ab%cd” Like “ab\\cd%” cho chuỗi bắt đầu với “ab\cd” Tìm kiếm có điều kiện liên quan đến ngày tháng VD: DDH(MADH, NGAYDH, MAKH) CTDH(MADH, MAHH, SOLUONG, DONGIA) Cho biết đơn đặt hàng đặt trước ngày 01/01/2001 Cho biết đơn đặt hàng đặt trước ngày 01/01/2001 tuần Lưu ý : Cho biết nhân viên sinh ngày 30/4/1975 Cách : Cách : Cách : Chính xác Sử dụng hàm tìm kiếm - Sử dụng hàm mệnh đề where T HS - TÀI LIỆU THỰC HAN L Ƣ Ơ N G VĨ MINH – - LƢU HÀNH NỘI BỘ HOÀNG VY - T IẾT H CSDL HỒ THI ̣ G IA HỒNG Sử dụng hàm mệnh đề select : Trong mệnh đề select việc sử dụng toán tử +, -, *, / ta cịn sử dụng hàm thuộc tính o Các hàm ngày tháng : DateDiff (d|M|yy , NgàyBĐ, NgayKT) tính khoảng cách ngày VD: Khoảng cách ngày 1/1/2000 23/1/2000 DateDiff( d, „1/1/2000‟, „23/1/2000‟) 22 ngày DateDiff( M, „1/1/2000‟, „23/1/2000‟) tháng DateDiff( yy, „1/1/2000‟, „23/1/2000‟) năm DatePart (d|M|yy , Ngày) lấy phần ngày DatePart( d, „1/1/2000‟) DatePart( M, „1/1/2000‟) DatePart( yy, „1/1/2000‟) 2000 GetDate() lấy ngày Year (Ngay) lấy phần năm Month (Ngay) lấy phần tháng Day (Ngay) lấy phần ngày DateAdd (d|M|yy, số ngày , Ngày) công thêm ngày DateAdd (d, 10, „1/1/2000‟) 11/1/2000 DateAdd (M, 10, „1/1/2000‟) 1/11/2000 DateAdd (yy, 10, „1/1/2000‟) 1/1/2011 o Các hàm chuổi Left(chuỗi, n) lấy n kí tự từ trái sang Right(chuỗi, n) lấy n kí tự từ phải sang Len(chuỗi) chiều dài chuỗi Lower (chuỗi) đổi chữ hoa thành chữ thường T HS TÀI LIỆU THỰC HAN L Ƣ Ơ N G VĨ MINH – H CSDL HỒ THI ̣ - LƢU HÀNH NỘI BỘ HOÀNG VY - T IẾT G IA HỒNG Upper(chuỗi) đỗi chữ thường thành chữ hoa Replace (chuỗi, str1, str2) đổi tất str1trong chuỗi str2 Reverse (chuỗi) đảo chuỗi Space(n) thêm n khoảng trắng Stuff(str1, p, n, str2) chèn chuỗi thay chuỗi taị vị trí p VD: SELECT STUFF('Notebook',5,0, ' in a ') = 'Note in a book' SELECT STUFF('Notebook',1,4, 'Hand') = 'Handbook' SubString( str, p, n) lấy chuỗi str vị trí p, lấy n kí tự o Các hàm chuyển đổi kiểu liệu Str(số) đổi số thành chuỗi Cast (dữ liệu as kiểu) chuyển đổi kiểu liêụ Convert (kiểu lieu, liêu) chuyển đổi kiểu liêu (nhiều cast) IsNull (a, value) trả giá trị a kết null Để xem thông tin chi tiết hàm sử dụng Book Onlines Cho biết họ tên nhân viên tuổi nhân viên Power Cho biết năm sinh nhân viên Cho biết họ tên đầy đủ nhân viên 10 T HS TÀI LIỆU THỰC HAN L Ƣ Ơ N G VĨ MINH – H CSDL HỒ THI ̣ - LƢU HÀNH NỘI BỘ HOÀNG VY - T IẾT G IA HỒNG Dùng toán tử some, all, exists, not exists Lƣu ý: some not in, all = not in C Phầ n bài tâ ̣p về nhà Hình thức nộp Thời gian làm - Hình thức làm : Làm theo cá nhân - Hình thức nơ ̣p: Nơ ̣p trực triế p - Thời gian nô ̣p (Deadline): 23:55 ngày 28/3/2011 Quy đinh ̣ đă ̣t tên - Đặt tên file nơ ̣p theo: TVDG_MSSV.sql - Ví dụ: TVDG_9912043.sql Nô ̣i dung& yêu cầ u bài tâ ̣p Sinh viên viế t câu truy vấ n theo yêu cầ u sau: Cho biết thông tin khách hàng nợ khoảng [30000, 70000] Cho biết tên lót tên (để riêng cột) khách hàng có mã 000001 Cho biết thông tin chi tiết đơn nhập có số lượng > 15 có đơn giá < 50000 Cho biết họ tên, số tiền nợ khách hàng có họ Trương Cho biết thơng tin đơn hàng khách hàng 000005 nhập gần Liệt kê danh sách khách hàng nợ 50000 Trừ khách hàng tên Hiếu Cho biết phiếu mượn có tình trạng True ngày mượn khơng q 30 ngày Xuất thơng tin sách có lượng tồn >200 mả thể loại TT Thay tên cột MaTheLoai = TenTheLoai giá trị TT = Trinh Thám Xuất tên thể loại (viết hoa), chiều dài tên số lượng sách hai thể loại có tên dài 10 Tăng ngày ngày nhập cho đơn hàng có mã > Ngược lại giảm ngày 11 Xuất danh sách chi tiết mượn mã sách (TDDV, TWIL, ANDT) Xếp giảm theo mã PM 12 Xuất chi tiết nhập có số lượng > 15 mã sách có chứa kí tự N 13 Cho biết đơn hàng nhập trước năm 2010 11 ... điều kiện để lọc liệu Danh sách thuộc tính_2: liệu gom nhóm theo cột này, ưu tiên từ trái sang Điều kiện_2: điều kiện lọc lại liệu sau thực tính tóan liệu Điều kiện áp dụng liệu thỏa mãn điều... STUFF(''Notebook'',1 ,4, ''Hand'') = ''Handbook'' SubString( str, p, n) lấy chuỗi str vị trí p, lấy n kí tự o Các hàm chuyển đổi kiểu liệu Str(số) đổi số thành chuỗi Cast (dữ liệu as kiểu) chuyển... thỏa mãn điều kiện_1 Danh sách thuộc tính_3:sắp xếp liệu theo cột nào, thứ tự tăng (ASC) giảm (DESC) Mặc định liệu theo thứ tự tăng dần Việc xếp thực theo thứ tự ưu tiên từ trái qua phải Truy vấn