Bài tập về SQL

MỤC TIÊU CỦA BÀI NÀY GIÚP NGƯỜI HỌCHiểu và phân biệt 3 nhóm lệnh của ngôn ngữ SQLGiải một số bài tập thao tác trên quan hệ có sử dụng 3 nhóm lệnh trên.Vận dụng giải quyết các bài toán tổng hợp. A/ NHẮC LẠI LÝ THUYẾTI. CÁC NHÓM LỆNH CỦA NGÔN NGỮ SQL Phân biệt các nhóm câu lệnh sau: - Các lệnh DDL: CREATE, ALTER, DROP. a. Lệnh CREATE Lệnh này dùng để tạo ra các quan hệ như TABLE,VIEW,INDEX CREATE TABLE -Bảng là một cấu trúc c bn để cất giữ trong hệ thống quan hệ.Có khuôn dạng hai chiều gồm có các cột và hàng.Nó là yếu tố cơ bản cho các thao tác khác nhau.Có thể nói việc tạo bảng là bước đầu tiên quan trọng nhất để thiết lập CSDL. -Cú pháp của lệnh này: CREATE TABLE table-name(colom_name type(size) ) Khi tạo ra bảng chúng ta phải chỉ ra kiểu dữ liệu của cột và mỗi cột chỉ có thể có môt kiểu dữ liệu duy nhất.Khi tạo bảng ta có thể đưa ra các ràng buộc Các ràng buộc của các trường có thể là : primary key,foreign key ,unique,not null . VD:Tạo bảng nhân viên CREATE TABLE NHAN_VIEN (#NV varchar(4) constraint NV_Primary key,ho_tên Varchar(25),Ng_sinh date,chứcvụ varchar(20),đia_chỉ varchar(30).lưng number(7)); trong VD trên ta tạo ra một ràng buộc là #NV được định nghĩa là primary key -Ta cũng có thể tạo ra bảng mới với cấu trúc và dữ liệu từ 1 bảng khác. Cú pháp: CREATE TABLE TABLE_name[(colum_name )]AS SELECT statement; VD:Tạo ra 1 bảng mới có tên là NVN (#NV,họ_tên) từ bảng NHAN_VIEN CREATE TABLE NVN AS SELECT #NV,họ_tên FROM NHAN_VIEN; b. Lệnh ALTER -Dùng để hoặc là thêm một hay nhiều trường vào bng hoặc sửa đổi một cột hiện tại.SQL ANSI chuẩn không cho phép huỷ bỏ các cột. -Cú pháp: ALTER TABLE TABLE_name ADD | MODIFY | DROP option (colum Datatype ) +ADD:thêm cột mới +MODIFY:sửa đổi cột +DROP option xoá bỏ các ràng buộc VD1:thêm trường gia đình kiểu char(1) vào R1 ALTER TABLE R1 ADD gia đình char(1); VD2:Thay đổi trường Địa_chỉ Varchar(30) trong R1 thành Địa_Chỉ(20): ALTER TABLE R1 MODIFY Địa_Chỉ varchar(20); VD3:Huỷ bỏ ràng buộc trường khoá #NV trong R1 ALTER TABLE R1 DROP constraint NV_prim

doc13 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 3389 | Lượt tải: 3download
Bạn đang xem nội dung tài liệu Bài tập về SQL, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
4. BµI TËP VÒ sql MỤC TIÊU CỦA BÀI NÀY GIÚP NGƯỜI HỌC Hiểu và phân biệt 3 nhóm lệnh của ngôn ngữ SQL Giải một số bài tập thao tác trên quan hệ có sử dụng 3 nhóm lệnh trên. Vận dụng giải quyết các bài toán tổng hợp. A/ NHẮC LẠI LÝ THUYẾT I. CÁC NHÓM LỆNH CỦA NGÔN NGỮ SQL Phân biệt các nhóm câu lệnh sau: - Các lệnh DDL: CREATE, ALTER, DROP. a. Lệnh CREATE Lệnh này dùng để tạo ra các quan hệ như TABLE,VIEW,INDEX CREATE TABLE -Bảng là một cấu trúc c bn để cất giữ trong hệ thống quan hệ.Có khuôn dạng hai chiều gồm có các cột và hàng.Nó là yếu tố cơ bản cho các thao tác khác nhau.Có thể nói việc tạo bảng là bước đầu tiên quan trọng nhất để thiết lập CSDL. -Cú pháp của lệnh này: CREATE TABLE table-name(colom_name type(size)..) Khi tạo ra bảng chúng ta phải chỉ ra kiểu dữ liệu của cột và mỗi cột chỉ có thể có môt kiểu dữ liệu duy nhất.Khi tạo bảng ta có thể đưa ra các ràng buộc Các ràng buộc của các trường có thể là : primary key,foreign key ,unique,not null ... VD:Tạo bảng nhân viên CREATE TABLE NHAN_VIEN (#NV varchar(4) constraint NV_Primary key,ho_tên Varchar(25),Ng_sinh date,chứcvụ varchar(20),đia_chỉ varchar(30).lưng number(7)); trong VD trên ta tạo ra một ràng buộc là #NV được định nghĩa là primary key -Ta cũng có thể tạo ra bảng mới với cấu trúc và dữ liệu từ 1 bảng khác. Cú pháp: CREATE TABLE TABLE_name[(colum_name..)]AS SELECT statement; VD:Tạo ra 1 bảng mới có tên là NVN (#NV,họ_tên) từ bảng NHAN_VIEN CREATE TABLE NVN AS SELECT #NV,họ_tên FROM NHAN_VIEN; b. Lệnh ALTER -Dùng để hoặc là thêm một hay nhiều trường vào bng hoặc sửa đổi một cột hiện tại.SQL ANSI chuẩn không cho phép huỷ bỏ các cột. -Cú pháp: ALTER TABLE TABLE_name ADD | MODIFY | DROP option (colum Datatype..) +ADD:thêm cột mới +MODIFY:sửa đổi cột +DROP option xoá bỏ các ràng buộc VD1:thêm trường gia đình kiểu char(1) vào R1 ALTER TABLE R1 ADD gia đình char(1); VD2:Thay đổi trường Địa_chỉ Varchar(30) trong R1 thành Địa_Chỉ(20): ALTER TABLE R1 MODIFY Địa_Chỉ varchar(20); VD3:Huỷ bỏ ràng buộc trường khoá #NV trong R1 ALTER TABLE R1 DROP constraint NV_prim c. Lệnh DROP -Dùng để xoá bỏ một quan hệ,khi ta xoá bỏ một bng c sở thì tất c các VIEW,INDEX được định nghĩa trên bng đó sẽ bị xoá bỏ . Cú phap: DROP TABLE/VIEW/INDEX Name; VD:Xoá bỏ Nhân_viên_id; DROP INDEX Nhân_viên_id; - Các lệnh DML: SELECT, UPDATE, INSERT, DELETE, … a. Lệnh SELECT Mệnh đề SELECT tương ứng với toán tử project(phép chiếu p) của đại số quan hệ. Khối lệnh SELECT gồm có ba mệnh đề chính: +SELECT:xác định nội dung của các cột cấn đưa ra. +FROM:danh sách các quan hệ được quét qua +WHERE:ứng với một khẳng định lựa chọn của đại số quan hệ. -Lệnh SELECT thường có dạng: SELECT [distinct]*/A1..An FROM R1, R2 ...,Rm [WHERE p]; Trong đó : Ai là các thuộc tính Rj là các quan hệ (có thể là các TABLEs,VIEWs..)Ta có thể dùng các bí danh cho các Ai,rj. p:là điều kiện ràng buộc. ở đây WHERE có thể có hoặc không. Dùng *để chỉ tất cả các thuộc tính của các quan hệ được chọn -Hỏi đáp này tương đưng với biểu diễn sau trong đại số quan hệ: pA1..An[S p(r1..rm)] -Để loại bỏ các bộ giá trị (các hàng) trùng nhau ta thêm từ khoá Distinct vào sau SELECT (trước đây SQL thêm từ khoá unique). -Trong khẳng định p:ta có thể dùng các liên từ logic and,or,not khi kết hợp nhiều điều kiện VD1:Để hiện các thông tin về một nhân viên nào đó gồm(#,Họ_tên,N_sinh,Chức_vụ,địa_chỉ,lưng) SELECT Distinc * FROM R1; Đưa ra (họ_tên,Nsinh,chức_vụ,địa_chỉ,lưng,tên_phòng) với điều kiện lưng. 500.000 và đia_chỉ không ở Hà nội SELECT Ho_tên,Nsinhn,chức_vụ,địa_chỉ,lưng,tên_phòng FROM Nhânviên R1,Liênkêt R2,Phong R3 WHERE (R1.lưng. 500.000) and (not R1.địa_chỉ=’Hà nội’) and (R1.#NV=R2.#NV) and (R2.#MP=R3.#MP); -Trong lệnh trên ta đã dùng R1,R2,R3 làm bí danh cho Nhânviên, Liênkêt,Phong Các bí danh đó chỉ có tác dụng trong một câu lệnh b. Nhóm lệnh INSERT,UPDATE,DELETE: Thêm một bộ vào quan hệ Cú pháp: INSERT INTO Tên_Bảng(Danh sách tên cột) VALUES(Danh sách các trị) [câuu hỏi con] VD:chèn 1 hàng (‘020’,’Nguyễn trọng Nghĩa’,Bảo vệ’,’Hà nội’,’800.000’) vào R1 INSERT INTO R1 VALUES(‘020’,’Nguyễn trọng Nghĩa’,Bảo vệ’,’Hà nội’,800.000); Xó́a các bảng Dùng để xoá bỏ 1 hoặc nhiều bộ trong quan hệ DELETE FROM R[WHERE P] Những bộ nào tho mãn đk P thì mới bị huỷ bỏ khỏi quan hệ R VD: DELETE FROM R1 WHERE ng_sinh. ’01-01-1935’; Xoá bỏ tất cả các nhân viên ta dùng lệnh: DELETE FROM R1; Sửa dữ liệu Cú pháp: UPDATE [Tên_bảng] SET [Tên_cột=Biểu thức,...] [FROM Tên_Bảng] [WHERE btđk] - Các lệnh DCL: GRANT, REVOKE. GRANT Quyền truy cập ON Tên_bảng/view TO Tên_User [ with GRANT option] - Các quyền truy nhập CSDL gồm: +Read(đọc) + SELECT(chọn) + Write(ghi) + INSERT(bổ sung) + UPDATE(sửa đổi) + DELETE,run. - Tên người sử dụng:Tên của một người ,một nhóm người hoặc danh sách người public:cho tất c mọi người cùng được sử dụng. - Từ khoá :with grant OPTION:đm bo để người sử dụng có thể tiếp tục trao quyền sử dụng cho người khác. VD:Cho phép SELECT,INSERT,UPDATE trên bảng R1 cho Nghĩa,Khôi GRANT SELECT,INSERT,UPDATE ON R1 TO Nghĩa,Khôi with grant option; Tức là Nghĩa,Khôi có thể trao quyền trên cho người khác. *Để huỷ bỏ quyền truy nhập REVOKE privileges ON object FROM user VD: Để huỷ bỏ quyền UPDATE từ Nghĩa: REVOKE UPDATE ON R1 FROM Nghĩa; II. CÁC VÍ DỤ Ví dụ 1: Cho quan hệ SINHVIEN (#masv char(10), hoten char(25), ngaysinh datetime, d1 double, d2 double, d3 double). Trong đó, masv là thuộc tính khóa của quan hệ trên. a) Hãy tạo lập cấu trúc trên. b) Chèn một cột gt boolean vào bảng trên. Lời giải: a) Create Table SINHVIEN (MaSV Char(10), Hoten Char(25) not null, Ngaysinh Date, d1 double, d2 double, d3 double, CONSTRAINT [khoa] Primary Key ([MaSV])) b) Alter table sinhvien add gt yesno; Ví dụ 2: Cho CSDL gồm 2 quan hệ: LOP (#Malop char (10), tenlop char(20)) SINHVIEN (malop char (10), #masv char(10), hoten char(20), ngaysinh datetime, d1 double, d2 double, d3 double) a) Hãy đưa ra các thông tin của các sinh viên bao gồm: tenlop, masv, hoten, dtb của mỗi sinh viên. b) Đưa ra tổng số sinh viên của mỗi lớp. Lời giải: a) SELECT lop.tenlop, sv.masv, ([d1]+[d2]+[d3])/3 AS dtb FROM lop, sv WHERE lop.malop = sv.malop; b) SELECT lop.tenlop, Count(sv.masv) AS CountOfmasv FROM lop, sv WHERE lop.malop = sv.malop GROUP BY lop.tenlop; III. MỘT SỐ LƯU Ý Các câu lệnh này có thể thử nghiệm trên một số hệ quản trị CSDL như SQL, Access,.. Phân biệt điều kiện sau mệnh đề Where và sau mệnh đề Having. B/ BÀI TẬP MẪU Bài số 1: Cho CSDL của hệ thống Quản lý nhân sự: DONVI(MaDV C(3), TenDV C(20), Diachi C(20), MaNPT C(4)) NHANVIEN(MaNV C(4), Hoten C(20), NHVu C(20), Luong N(8), Phucap N(6), MaDV C(3)) Hãy đưa ra danh sách tất cả các đơn vị có trong tổ chức này. Hướng dẫn: Ta thấy các thông tin lấy trong bảng đơn vị và câu lệnh thuộc nhóm khai thác dữ liệu. Lời giải: SELECT TenDV, Diachi FROM DONVI Bài số 2: Để quản lý kinh doanh dùng các bảng sau: + HH(hàng hoá): MaHH C(3), TenHH C(20), Qcach C(20), DVT C(5), DGIA N(10) + CH(cửa hàng): MaCH C(3), TenCH C(20), DDiem C(20), PTrach C(4) + KH(khách hàng): MaKH C(4), TenKH C(20), Loai C(2), Diachi C(20) + CT(chứng từ): Sohieu C(12), Ngay D, LoaiCT C(1), MaKH C(4), MaCH C(3), MaHH C(3), SoLuong N(6). a) Xem trong bng CT có những loại hàng hoá nào được xuất. Hướng dẫn: Ta thấy trong bảng CT, mỗi chứng từ có thể bao gồm nhiều MaHH khác nhau, như vậy trong bảng CT sẽ có nhiều MaHH giống nhau, với yêu cầu trên ta chỉ cần đưa ra các MaHH khác nhau. Lời giải: SELECT DISTINCT MaHH FROM CT SELECT DISTINCT CT.MaHH, TenHH FROM CT, HH WHERE CT.MaHH = HH.MaHH b) Đưa ra danh sách các nhân viên có lưng >=200000 SELECT * FROM NHANVIEN WHERE Luong >= 200000 c) Cho xem danh sách gồm 3 cột Mã đơn vị, họ tên, nhiệm vụ từ bảng nhân viên và được sắp xếp theo mã đơn vị, cùng đơn vị theo nhiệm vụ: SELECT MaDV, Hoten, NHVu FROM NHANVIEN ORDER BY MaDV, NHVu Mã đơn vị, họ tên, lương từ bảng NHANVIEN được sắp xếp theo mã đơn vị, cùng đơn vị theo lương gim dần: SELECT MaDV, Hoten, Luong FROM NHANVIEN ORDER BY MaDV, Luong DESC Chú ý: 1. Tên các cột trong sau WHERE không nhất thiết phi có sau SELECT, các cột này không nhất thiết phải có trong bảng kết quả. 2. Tên các cột sau ORDER BY… bắt buộc phải có sau SELECT, tức là các cột này bắt buộc phải có trong bảng kết quả. *) GROUP BY : Nếu có dùng để nhóm các hàng có cùng giá trị của tên cột đối với mỗi nhóm thì cùng thực hiện một thao tác tính toán nào đó. 3. Cho xem mã hàng hoá, tên hàng hoá và tổng số tiền bán được của từng mặt hàng: SELECT MaCT, MaHH, TenHH, SUM(Soluong*Dongia) FROm CT, HH WHERE CT.MaHH = HH.MaHH And Loai = “X” GROUP BY CT.MaHH Cho xem m• đn vị, tên đn vị, mức lưng bình quân và số nhân viên của từng đn vị: SELECT a.MaDV, TenDV, AGV(Luong), Cont (A.*) FROM NHANVIEN a, DONVI b WHERE a.MaDV = b.MaDV GROUP BY a.MaDV *) Phần HAVING chỉ phục vụ cho GROUP BY Bài số 3: R1=Nhân viên (#NV, Ho_tên, Nsinh, nghề nghiệp, Địa chỉ, lương) R2=Liên kết (#NV, #MP) R3=Phong (#Mp, Tên_phong, tel) 1. Để hiện các thông tin về một nhân viên nào đó gồm(#NV , Họ_tên, N_sinh, Chức_vụ, địa_chỉ, lương) SELECT Distinc * FROM R1; 2. Đưa ra (họ_tên,Nsinh,chức_vụ,địa_chỉ,lưng,tên_phòng) với đIều kiện lương. 500.000 và đia_chỉ không ở Hà nội. SELECT Ho_tên,Nsinhn,chức_vụ,địa_chỉ,lưng,tên_phòng FROM Nhânviên R1,Liênkêt R2,Phong R3 WHERE (R1.lưng. 500.000) and (not R1.địa_chỉ=’Hà nội’) and (R1.#NV=R2.#NV) and (R2.#MP=R3.#MP); - Trong lệnh trên ta đã dùng R1,R2,R3 làm bí danh cho Nhânviên, Liênkêt, Phong Các bí danh đó chỉ có tác dụng trong một câu lệnh Các ví dụ sau này ta dùng R1,R2,R3 để thay cho các bảng trên cho gọn Có 4 toán tử hay được dùng với các kiểu dữ liệu.Trong mệnh đề WHERE là: In (not In) Between..and..(not between..) Like(not like) Is null (not is Null). + Toán tử In (not In):Dùng để kiểm tra giá trị trong (không nằm trong) một danh sách được chỉ ra. 3. Đưa ra những người có đia_chỉ ở Hà nội và Hà tây. SELECT * FROM R1 WHERE đia_chỉ in (‘Hà nội’,’Hà tây’); +Toán tử Between..and..(not ..) : kiểm tra giá trị nằm giữa (không nằm giữa) một phạm vi được chỉ ra. 4. Đưa ra những người có lưng nằm trong khong (500.000-:-1.000.000). SELECT * FROM R1 WHERE lưng between 500.000 and 1.000.000; + Toán tử like (not like): Dùng để kiểm tra những giá trị giống (không giống) với giá tri sau like, thường sử dụng với xâu ký tự và khi ta không biết chính xác giá trị cần tìm kiếm hoặc giá trị cần tìm kiếm giống một mẫu nào đó.Trong SQL người ta sử dụng ký hiệu % cho xâu con và ‘_’cho 1 ký tự bất kỳ. 5. Tìm những người có tên mà có ký tự đầu tiên bất kỳ,ký tự tiềp theo là OA và tiếp theo là dãy ký tự bất kỳ: SELECT *FROM R1 WHERE hoten=’_OA%’; + Toán tử Is Null (not is Null):kiểm tra cho các giá trị rỗng (không rỗng); C/ BÀI TẬP TỰ GIẢI Bài tập 1: Cho CSDL gồm có ba quan hệ như sau NCC(MaNCC, TenNCC, DCNCC, DT) SP(MaSP, TenSP, Loai) SP_NCC(MaNCC, MaSP, SL) Giải thích một số từ viết tắt: MaNCC là mã số nhà cung cấp TenNCC là tên nhà cung cấp có mã số tương ứng DCNCC là địa chỉ của nhà cung cấp DT là điện thoại nhà cung cấp MaSP là mã số sản phẩm TenSP là tên của sản phẩm Loại là chủng loại của mặt hàng SL là số lượng đã cung cấp Quan hệ NCC ( nhà cung cấp ) dùng để lưu trữ một số thông tin về các nhà cung cấp Quan hệ SP ( sản phẩm ) dùng để lưu trữ một số thông tin của các mặt hàng Quan hệ SPỴNCC dùng để lưu trữ một số thông tin về việc cung ứng sản phẩm của NCC Hãy viết biểu thức đại số quan hệ cho biết Cho biết tên của nhà cung cấp có địa chỉ là Hà Nôi Cho biết tên của các sản phẩm đã cung ứng bởi nhà cung cấp có mã số là HP. Cho biết tên của các nhà cung ứng đã cung ứng các sản phẩm với số lượng 20 Cho biết tên của các nhà cung cấp đã cung ứng các sản phẩm Bài tập 2: Cho cơ sở dữ liệu gồm 3 quan hệ SV(MSV, HT, NS, QUE) ĐT(MĐT, TĐT, GV, KP) TT(MSV, MĐT, NTT, KQ) Trong đó : MSV : Mã sinh viên HT : Họ tên sinh viên NS : Năm sinh QUE : Quê quán MĐT : Mã đề tài TĐT : Tên đề tài GV : Giáo viên KP : Kinh phí NTT : Nơi thực tập KQ : Kết quả Hãy trả lời các câu hỏi sau dưới dạng biểu thức quan hệ : a. Cho biết tên của các giáo viên hướng dẫn sinh viên có quê ở Hà nội và có kết quả thực tập khá ( KQ >= 7) b. Cho biết tên của các sinh viên có kết quả thực tập khá và thực tập tại quê hoặc thực tập tại Quảng ninh. c. Cho biết tên của các giáo viên hướng dẫn sinh viên có quê ở Hà nội và thực tập đề tài có kinh phí lơn hơn 5 triệu d. Cho biết tên của các sinh viên có kết quả thực tập khá và thực tập đề tài có kinh phí lớn hơn 4 triệu. e. Danh sach sinh viên thực tập tại quê nhà f. Thông tin về các đề tài có sinh viên thực tập g. Cho biết mã của các đề tài không có sinh viên nào tham gia h. Cho biết mã của các đề tài có kinh phí nằm trong khoảng 1.5 đến 2 triệu i. Cho biết mã của sinh viên có tuổi nhỏ hơn 20 và kết qủa thực tập là khá ( KQ>7) Bài số 3 Có CSDL thống kê về mối quan hệ giữa các quán bia (BAR) và những người uống (DRINKER) bia (BEER) như sau: R(DRINKER, BAR) là quan hệ cho biết quán bia và những khách uống cần lui tới. S(BAR, BEER) LÀ quan hệ cho biết các loại bia thường bán ở các quán. Còn T( DRINKER, BEER) cho biết những loại bia mà một khách hàng ưu thích. Hãy viết các câu vấn tin sau bằng ngôn ngữ SQL: a. In các quán có loại bia Long thích. b. In những khách hàng thường đi uống ít nhất một quán có bia họ thích. c. In ra những khách hàng không đến uống ít nhất tại một quán có bia họ ưu thích. d. Xoa tất cả loại bia tiger ra khỏi quan hệ S(DRINKER, BEER) e. Chèn thông tin Long thích bia Tiger. f. Chèn tất thông tin Long thích tất cả các loại bia bán ở quán "San hô tím" Bài số 4 Giả sử trong CSDL bia ở trên ta có thêm quan hệ BAN (BAR, BEER, SL) quan hệ cho biết số lượng từng loại bia đã bán ở các quán. Hãy viết bằng SQL các vấn tin sau: a. Tổng số bia của mỗi loại bia đã bán. b. Số lượng trung bình mỗi loại bia được bán ở các quán. c. Số lượng loại được bán ra nhiều nhất (bán chạy nhất) Bài số 5 Giả sử có quan hệ S(F, S, O) với ý nghĩa là tập tin S có kích thước S thuộc chủ nhân O và quan hệ FTD(F, T, D) với ý nghĩa F có kiểu T và nằm trong thư mục D. Hãy dùng ngôn ngữ SQL để viết các câu vấn tin sau: a. In ra chủ nhân và kiểu tin của tất cả các tập tin có kích thước tối thiểu là 10.000/ b. In ra tất c ả các tập tin được ông Tomax sở hữu/ c. In ra kích thước trung bình của các tập tin có trong thư mục BIN. d. In ra tất cả các tập tin có trong thư mục f với tên chứa chuỗi con abc. Bài số 6 Hãy dịch câu vấn tin sau sang đại số quan hệ. SELECT OWNER FROM WHERE FILE IN (SELECT FILE FROM FTD WHERE TYPE = 'TEX' Bài số 7 Hãy dùng ngôn ngữ SQL: a. Tạo bảng danh sách các sinh viên vừa thi vào trường của bạn, các thuộc tính ở đây là mã số (số báo danh), tên, năm sinh, quê, điểm thi. b. In danh sách học sinh đậu vào trường (>=20 điểm) c. In những sinh viên quê ở Sơn La, Lai Châu, Ninh Bình. Bài số 8 Cho cơ sở dữ liệu như sau : HANGHOA (MA_HANG,TEN_HG) : Mỗi mặt hàng sẽ có một mã hàng, và một tên hàng. STT FIELD NAME TYPE WIDTH DEC DIỄN GIẢI 1 MA_HANG Character 3 Mã hàng 2 TEN_HG Character 20 Tên hàng DAILY(STT_DL, TEN_DL, DCHI_DL) : Mỗi đại lý có một số thứ tự, tên và một địa chỉ. STT FIELD NAME TYPE WIDTH DEC DIỄN GIẢI 1 STT_DL Number 3 Số thứ tự đại lý 2 TEN_DL Character 20 Tên đại lý 3 DCHI_DL Character 20 Ðịa chỉ đại lý MUA (STT_DL, MA_HANG, NGAY_MUA, SOLG_MUA, TRIGIA_MUA) : Mỗi một ngày, đại lý sẽ tổng kết xem đã mua những mặt hàng nào với số lượng và trị giá bao nhiêu. STT FIELD NAME TYPE WIDTH DEC DIỄN GIẢI 1 STT_DL Number 3 Số thứ tự đại lý 2 MA_HANG Character 3 Mã hàng 3 NGAY_MUA Date 8 Ngày mua 4 SOLG_MUA Number 6 Số lượng mua 5 TRIGIA_MUA Number 10 Trị giá mua BAN (STT_DL, MA_HANG, NGAY_BAN, SOLG_BAN, TRIGIA_BAN ) : Sau mỗi ngày, đại lý sẽ tổng kết xem đã bán được những mặt hàng nào với số lượng và trị giá bán là bao nhiêu. STT FIELD NAME TYPE WIDTH DEC DIỄN GIẢI 1 STT_DL Number 3 Số thứ tự đại lý 2 MA_HANG Character 3 Mã hàng 3 NGAY_BAN Date 8 Ngày bán 4 SOLG_BAN Number 6 Số lượng bán 5 TRIGIA_BAN Number 10 Trị giá bán Yêu cầu : Viết các câu hỏi sau dưới dạng ngôn ngữ hỏi SQL 1. Tìm những mặt hàng đã bán trong tháng 1/95 tại đại lý số 3. 2. Tìm những mặt hàng đã mua trước năm 1995 và có trị giá mua > 500000. 3. Tìm tên và địa chỉ đại lý có mua bia Heineken. 4. Tìm tất cả các mặt hàng mà đại lý số 2 đã bán trong năm 1994. 5. Tìm tên những mặt hàng mà đại lý Vạn Lợi đã mua trước 01/01/95 và có số lượng mua lớn hơn 150. 6. Tìm những mặt hàng đã được mua và bán trong cùng một ngày ở cùng một đại lý. 7. Tìm tên và địa chỉ đại lý có tổng giá trị mua trong một ngày lớn hơn 700000. 8. Tìm tổng giá trị mua và tổng giá trị bán của mặt hàng Coca Cola ở đại lý Tân Hiệp Hưng. 9. Tìm đơn giá mua trung bình của bia Sài Gòn trên các đại lý. 10. Tìm dơn giá mua trung bình của bia Sài gòn trên các đại lý. 11. Tìm tên, địa chỉ của đại lý và những mặt hàng có số lượng mua và số lượng bán bằng nhau trong cùng một ngày. 12. Tìm tổng thu nhập từng ngày trên từng đại lý. 13. Tìm tổng giá trị mua trong tháng 1/95 tại đại lý Vạn Lợi. 14. Tìm số mặt hàng có bán ở từng đại lý. 15. Tìm tên và địa chỉ của đại lý có bán nhiều mặt hàng nhất. Gợi ý : Câu 1 sele dist a.ma_hang, a.ten_hg, b.ngay_ban; from hanghoa a, ban b; where a.ma_hang=b.ma_hang; and left(dtoc(b.ngay_ban),2)='01'; and b.stt_dl=3 Câu 2 sele dist a.ma_hang, a.ten_hg, b.ngay_mua, b.trigia_mua; from hanghoa a, mua b; where a.ma_hang=b.ma_hang; and right(dtoc(b.ngay_mua),2)<'95'; and b.trigia_mua>500000 Câu 3 sele dist a.*; from daily a, mua b, hanghoa c; where a.stt_dl=b.stt_dl; and b.ma_hang=c.ma_hang; and upper(c.ten_hg)='BIA HEINEKEN' Câu 4 sele dist a.ma_hang, a.ten_hg, b.ngay_ban; from hanghoa a, ban b; where a.ma_hang=b.ma_hang; and b.stt_dl=2; and right(dtoc(b.ngay_ban),2)='94'; Câu 5 sele dist a.ma_hang, a.ten_hg, b.ngay_mua, b.solg_mua; from hanghoa a, mua b; where a.ma_hang=b.ma_hang; and right(dtoc(b.ngay_mua),2)<'95'; group by b.ma_hang; having sum(b.solg_mua)>150 Câu 6 sele dist a.ma_hang, a.ten_hg, b.ngay_mua as ngay; from hanghoa a, mua b, ban c; where a.ma_hang=b.ma_hang; and a.ma_hang=c.ma_hang; and b.stt_dl=c.stt_dl; and b.ngay_mua=c.ngay_ban Câu 7 sele dist a.*,b.ngay_mua, sum(b.trigia_mua) as tong_mua; from daily a, mua b; where a.stt_dl=b.stt_dl; group by b.stt_dl, b.ngay_mua; having sum(b.trigia_mua)>700000 Câu 8 sele sum(a.trigia_mua) as tong_mua, sum(b.trigia_ban) as tong_ban; from mua a, ban b, daily c, hanghoa d; where a.stt_dl=b.stt_dl; and a.stt_dl=c.stt_dl; and a.ma_hang=b.ma_hang; and a.ma_hang=d.ma_hang; and upper(d.ten_hg)='COCA COLA'; and upper(c.ten_dl)='TAN HIEP HUNG' Câu 9 sele dist a.*; from daily a, ban b, hanghoa c; where a.stt_dl=b.stt_dl; and b.ma_hang=c.ma_hang; and upper(c.ten_hg)='BIA TIGER'; and b.stt_dl in; (sele b.stt_dl; from daily a, ban b, hanghoa c; where a.stt_dl=b.stt_dl; and b.ma_hang=c.ma_hang; and upper(c.ten_hg)='BIA HEINEKEN') Câu 10 sele dist b.ten_hg, avg(a.trigia_mua) as tgia_tb; from mua a, hanghoa b; where a.ma_hang=b.ma_hang; and upper(b.ten_hg)='BIA SAIGON'; group by b.ma_hang Câu 11 sele dist a.ten_dl, a.dchi_dl, b.ma_hang, b.ten_hg; from daily a, hanghoa b, mua c, ban d; where a.stt_dl=c.stt_dl; and a.stt_dl=d.stt_dl; and b.ma_hang=c.ma_hang; and b.ma_hang=d.ma_hang; and c.solg_mua=d.solg_ban; and c.ngay_mua=d.ngay_ban Câu 12 sele stt_dl as ma_dl, ngay_mua as ngay_mua, sum(trigia_mua) as chi into dbf tam; from mua; group by stt_dl, ngay_mua sele stt_dl as ma_dl, ngay_ban as ngay_ban, sum(trigia_ban) as thu into dbf tam1; from ban; group by stt_dl, ngay_ban sele a.ma_dl, a.ngay_mua as ngay, (b.thu-a.chi) as thunhap; from tam a, tam1 b; where a.ma_dl=b.ma_dl; and a.ngay_mua=b.ngay_ban Câu 13 sele sum(b.trigia_mua) as tong_mua; from daily a, mua b; where a.stt_dl=b.stt_dl; and upper(a.ten_dl)='VAN LOI'; and b.ngay_mua>={01/01/95}; and b.ngay_mua<={01/31/95}; group by a.stt_dl Câu 14 sele dist a.stt_dl as stt_dl, b.ten_dl as ten_dl, b.dchi_dl as dchi_dl, a.ma_hang as ma_hang into dbf tam; from ban a, daily b; where a.stt_dl=b.stt_dl sele stt_dl, ten_dl,count(ma_hang) as so_mat_hg; from tam; group by stt_dl Câu 15 sele stt_dl, ten_dl,dchi_dl, count(ma_hang) as so_mat_hg into dbf tam1; from tam; group by stt_dl sele max(so_mat_hg) as max_so_mat_hg into dbf tam2; from tam1 sele a.stt_dl, a.ten_dl, a.dchi_dl; from tam1 a, tam2 b; where a.so_mat_hg=b.max_so_mat_hg

Các file đính kèm theo tài liệu này:

  • docbai_tap_ve_sql_3636.doc
Tài liệu liên quan