Các bài tập về windows form và dữ liệu sql năm 2024

SQL, viết tắt của Structure Query Language, là một công cụ quản lý dữ liệu, đơn giản nhưng rất hiệu quả, được sử dụng phổ biến ở nhiều lĩnh vực. Mặc khác, hầu hết tất cả các ngôn ngữ lập trình bậc cao đều có hỗ trợ SQL. Các công cụ lập trình đều cho phép người sử dụng kết nối và truy cập tới CSDL bằng cách nhúng các câu lệnh SQL vào trong các ngôn ngữ lập trình hoặc viết lời gọi đến các chương trình con trên hệ quản trị CSDL.

SQL ngày càng đóng vai trò quan trọng khi mà hiện nay Internet ngày càng phát triển. SQL được sử dụng như là công cụ để giao tiếp giữa các trình ứng dụng phía máy khách với máy chủ cơ sở dữ liệu, SQL sẽ thực hiện việc truy cập thông tin và kết quả hiển thị trên ứng dụng khi người dùng yêu cầu.

Trong các hệ quản trị cơ sở dữ liệu, SQL xuất hiện với vai trò ngôn ngữ, là công cụ giao tiếp giữa người sử dụng và hệ quản trị cơ sở dữ liệu với nhiều vai trò khác nhau như: truy vấn dữ liệu, lập trình cơ sở dữ liệu, quản trị cơ sở dữ liệu, truy cập dữ liệu trên Internet, ...

Để phục vụ nhu cầu học tập và nghiên cứu của sinh viên nói chung và sinh viên ngành Cao đẳng Bình Định nói riêng, một tài liệu tham khảo mang tính thực hành là cần thiết. Phân loại và giải chi tiết các dạng bài tập SQL sẽ giúp cho sinh viên nhận biết chính xác các dạng câu hỏi, sử dụng câu lệnh SQL hiệu quả nhất. Trong lập trình, tác giả sử dụng các thuật toán đơn giản, dễ hiểu để giải quyết các bài toán quản lý, đó là mục tiêu trong tài liệu này.

Trong tài liệu này, tác giả sử dụng CSDL Quản lý sinh viên làm bài mẫu từ đó sinh viên tự làm các bài tập trên CSDL bán hàng và các CSDL khác. Tài liệu cung cấp những kiến thức căn bản nhất về 2 nội dung chính là ngôn ngữ thao tác dữ liệu và lập trình với cơ sở dữ liệu, từ đó sinh viên có thể xây dựng một ứng dụng quản lý trên windows từ đơn giản đến phức tạp.

Trong mỗi chương tài liệu chia làm 2 phần chính là: tóm tắt lý thuyết và phân loại bài tập. Cụ thể chia thành 4 chương như sau:

Chương 1: Xây dựng Cơ sở dữ liệu. Trong chương này tác giả giới thiệu 2 CSDL mẫu, CSDL quản lý sinh viên và CSDL quản lý bán hàng, là 2 cơ sở dữ liệu mang tính cơ bản nhất, nó tập hợp tất cả các yêu cầu tổng quan để từ đó

sinh viên có thể làm một cách tương tự đối với các CSDL khác.

Chương 2: Câu lệnh truy vấn SQL. Trong chương này tác giả chia câu lệnh thao tác dữ liệu thành 6 dạng cơ bản, mỗi dạng có từ 3-4 bài tập minh hoạ, giúp sinh viên nhanh chóng nhận dạng đúng các yêu cầu của mỗi câu lệnh SQL.

Chương 3: Lập trình với SQL. Trong chương này tác giả chia cấu trúc lập trình thành 3 dạng: Hàm, Thủ tục và Con trỏ. Mỗi dạng bao gồm nhiều dạng bài khác nhau, mỗi dạng bài là cơ bản được tác giả chọn lọc và rất cần thiết trong lập trình ứng dụng sau này.

Chương 4: Một số đối tượng tiện ích khác, nhằm nâng cao kỹ năng lập trình, người lập trình phải hạn chế tối đa nhất các lỗi thường xẩy ra, lường trước lỗi và bẫy lỗi là kỹ năng cần thiết của người lập trình chuyên nghiệp.

Phần đọc thêm: Ứng dụng SQL trong lập trình C# căn bản. Trong chương này tác giả minh hoạ một số ứng dụng cơ bản, trong đó thể hiện một kết nối từ ứng dụng tới thủ tục trong hệ quản trị CSDL SQL Server. Giúp sinh viên thấy được mối liên hệ giữa lập trình CSDL với lập trình trên công cụ C#, được xem là kỹ thuật mang tính bảo mật cao.

Tài liệu tham khảo “Phân loại và giải chi tiết các dạng bài tập SQL” mang tính thực hành cao, là tài liệu gối đầu cho tất cả sinh viên đang ngồi ghế nhà trường, tài liệu giúp sinh viên học tốt các học phần liên quan như: Hệ quản trị CSDL Access, Hệ quản trị CSDL SQL, Lập trình Windows, Lập trình Website, ..ài liệu sẽ hoàn thiện hơn khi nhận nhiều ý kiến đóng góp quý báu của các bạn đọc. Tác giả rất mong nhận nhiều góp ý để tài liệu hữu ích hơn.

1. CƠ SỞ DỮ LIỆU QUAN HỆ

1. BẢNG DỮ LIỆU CHI TIẾT

Bảng DMKHOA Bảng DMNGANH

Bảng DMLOP

Bảng SINHVIEN

Bảng DMHOCPHAN

Bảng DIEMHP

2. BẢNG DỮ LIỆU CHI TIẾT

Bảng KHACHHANG

Bảng HANGHOA

Bảng HOADON Bảng CHITIETHD

CHƯƠNG 2. CÂU LỆNH TRUY VẤN SQL

A. KIẾN THỨC CẦN NHỚ

  1. Câu lệnh truy vấn với cấu trúc đơn giản

Ý nghĩa: Câu lệnh SELECT dùng để truy xuất dữ liệu từ một hay nhiều bảng.

Cú pháp: SELECT [ALL|DISTINCT]|[TOP n] [INTO tên_bảng_mới] FROM INNER JOIN ON <điều kiện kết nối> ... INNER JOIN ON <điều kiện kết nối> [WHERE điều_kiện lọc] [GROUP BY ds cột phân nhóm] [HAVING điều_kiện nhóm] [ORDER BY cột_sắp_xếp][DESC | ASC] Giải thích:

  • Danh sách cột: là dãy các cột/ biểu thức cột cách nhau bởi dấu phẩy. Dấu * có nghĩa là hiển thị tất cả các cột trong bảng.
  • Tham chiếu đến cột Khoá của bảng: .
  • Điều kiện trong câu lệnh SELECT WHERE <Điều kiện>: Điều kiện nằm sau từ khóa WHERE, là một biểu thức Logic gồm các phép toán sau: Các toán tử kết hợp điều kiện: AND, OR Các toán tử so sánh: >,<,>=,<=,<>,!<,!>, = Kiểm tra giới hạn của dữ liệu: BETWEEN/NOT BETWEEN Toán tử thuộc tập hợp, không thuộc tập hợp:

Nghĩa là có một truy vấn con được lồng vào trong điều kiện của một truy vấn chính, được dùng để lọc kết quả từ truy vấn chính bằng điều kiện IN hoặc NOT IN. Cấu trúc: SELECT... WHERE [NOT] IN (Câu lệnh SELECT_con) 2. Cấu trúc lượng từ Ý nghĩa: Các lượng từ EXISTS, ALL, ANY : sử dụng trong trường hợp tập hợp các giá trị trong truy vấn con nhiều hơn một thì ta phải thêm lượng từ ở phía trước truy vấn con đó. Cấu trúc: Lượng từ ALL: thoả mãn tất cả các giá trị trong tập hợp All (Câu lệnh SELECT) Lượng từ ANY : thoả mãn bất kỳ giá trị nào trong tập hợp ANY (Câu lệnh SELECT) Lượng Từ EXISTS: Lượng từ EXISTS trả về giá trị True nếu kết quả của truy vấn Con khác rỗng, ngược lại trở về giá trị False. Tương tự NOT EXISTS

[NOT] EXISTS (truy_vấn_con) 2. Cấu trúc tập hợp UNION: phép hợp EXCEPT : phép hiệu INTERSECT : phép giao Ý nghĩa: Mỗi truy vấn SELECT là một tập hợp các bộ giá trị. Các phép toán giữa các truy vấn cũng là phép toán trên tập hợp.

  • Hợp của 2 hay nhiều truy vấn SELECT là một tập tất cả các bộ giá trị của các truy vấn đó.
  • Hiệu của 2 truy vấn A và B là một tập tất cả các bộ giá trị thuộc truy vấn A nhưng không thuộc truy vấn B.
  • Giao của 2 hay nhiều truy vấn SELECT là một tập gồm các bộ giá trị cùng thuộc các truy vấn đó. Yêu cầu:
  • Các dòng giống nhau trong tập kết quả sẽ bị loại bỏ.
  • Các tập hợp tham gia trong phép toán phải khả hợp nghĩa là phải cùng tập các thuộc tính. Cú pháp Câu_lệnh_ {UNION | EXCEPT | INTERSET} [ALL] Câu_lệnh_ [{UNION | EXCEPT | INTERSET} [ALL] Câu_lệnh_3] ... [{UNION | EXCEPT | INTERSET} [ALL] Câu lệnh_n]
  • Bổ sung, cập nhật, xoá dữ liệu
  • Lệnh INSERT Ý nghĩa: Bổ sung các dòng dữ liệu vào cuối một bảng. Cú pháp lệnh INSERT INTO tên_bảng[(danh_sách_cột)]

B. PHÂN LOẠI BÀI TẬP

DẠNG 1: CÂU LỆNH TRUY VẤN CÓ ĐIỀU KIỆN

Bài số 1: Câu lệnh SQL không kết nối 1. Hiển thị danh sách gồm: MaSV, HoTen, MaLop, NgaySinh (dd/mm/yyyy), GioiTinh (Nam, Nữ) , Namsinh của những sinh viên có họ không bắt đầu bằng chữ N,L,T. 2. Hiển thị danh sách gồm: MaSV, HoTen, MaLop, NgaySinh (dd/mm/yyyy), GioiTinh (Nam, Nữ) , Namsinh của những sinh viên nam học lớp CT11. 3. Hiển thị danh sách gồm: MaSV, HoTen, MaLop, NgaySinh (dd/mm/yyyy), GioiTinh (Nam, Nữ) của những sinh viên học lớp CT11,CT12,CT13. 4. Hiển thị danh sách gồm: MaSV, HoTen, MaLop, NgaySinh (dd/mm/yyyy), GioiTinh (Nam, Nữ), Tuổi của những sinh viên có tuổi từ 19-21.

Lời giải:

  1. SELECT MaSV, HoTen, MaLop, CONVERT(varchar(10),NgaySinh,103) AS NgaySinh, CASE GioiTinh WHEN 1 THEN N'Nam' ELSE N'Nữ' END AS GioiTinh, YEAR(Ngaysinh) AS Namsinh FROM SINHVIEN WHERE HoTen NOT LIKE N'[NLT]%'
  2. SELECT MaSV, HoTen, MaLop, CONVERT(varchar(10),NgaySinh,103) AS NgaySinh, CASE GioiTinh WHEN 1THEN N'Nam' ELSE N'Nữ' END AS GioiTinh, YEAR(NgaySinh) AS NamSinh FROM SINHVIEN WHERE GioiTinh=1 AND MaLop='CT11'
  3. SELECT MaSV, HoTen, MaLop, CONVERT(varchar(10), NgaySinh,103) AS NgaySinh,

CASE GioiTinh WHEN 1THEN N'Nam' ELSE N'Nữ' END AS GioiTinh FROM SINHVIEN WHERE MaLop IN ('CT11','CT12', 'CT13') 4. SELECT MaSV, HoTen, MaLop, CONVERT(varchar(10),NgaySinh,103) AS NgaySinh, CASE GioiTinh WHEN 1THEN N'Nam' ELSE N'Nữ ' END AS Gioi tinh, YEAR(GETDATE())-YEAR(NgaySinh) AS Tuoi FROM SINHVIEN WHERE YEAR(GETDATE())-YEAR(NgaySinh) BETWEEN 19 AND 21

Bài số 2: Câu lệnh SQL có kết nối

  1. Hiển thị danh sách gồm MaSV, HoTên, MaLop, DiemHP, MaHP của những sinh viên có điểm HP >= 5.
  2. Hiển thị danh sách MaSV, HoTen , MaLop, MaHP, DiemHP được sắp xếp theo ưu tiên Mã lớp, Họ tên tăng dần.
  3. Hiển thị danh sách gồm MaSV, HoTen, MaLop, DiemHP, MaHP của những sinh viên có điểm HP từ 5 đến 7 ở học kỳ I.
  4. Hiển thị danh sách sinh viên gồm MaSV, HoTen, MaLop, TenLop, MaKhoa của Khoa có mã CNTT.

Lời giải:

  1. SELECT SINHVIEN, HoTen, MaLop, DiemHP, MaHP FROM SINHVIEN INNER JOIN DIEMHP ON DIEMHP.MaSV=SINHVIEN WHERE DiemHP>
  2. SELECT SINHVIEN, HoTen, MaLop, TenLopDiemHP, MaHP FROM SINHVIEN INNER JOIN DIEMHP ON DIEMHP.MaSV=SINHVIEN INNER JOIN DMLOP ON SINHVIEN.MaLop=DMLOP ORDER BY MaLop, HoTen ASC
  3. Cho biết MaHD, NgayLapHD, MaHK, TenH, DonGia, SoLuong, ThanhTien bán vào tháng 6
  4. Cho biết danh sách các mặt hàng đã bán được.

DẠNG 2: CÂU LỆNH TRUY VẤN CÓ PHÂN NHÓM

Bài số 1: Câu lệnh SQL có từ khoá GROUP BY không điều kiện.

  1. Cho biết MaLop, TenLop, tổng số sinh viên của mỗi lớp.
  2. Cho biết điểm trung bình chung của mỗi sinh viên, xuất ra bảng mới có tên DIEMTBC, biết rằng công thức tính DiemTBC như sau: DiemTBC =  (DiemHP * SoDvht) /  (SoDvht)
  3. Cho biết điểm trung bình chung của mỗi sinh viên ở mỗi học kỳ.
  4. Cho biết MaLop, TenLop, số lượng nam nữ theo từng lớp.

Lời giải:

  1. SELECT SINHVIEN, TenLop, COUNT(Masv) AS Siso FROM DMLOP INNER JOIN SINHVIEN ON DMLOP.MaLop=SINHVIEN GROUP BY SINHVIEN,TenLop
  2. SELECT MaSV, SUM(DiemHP*Sodvht)/SUM(Sodvht) AS DiemTBC INTO DIEMTBC FROM DMHOCPHAN INNER JOIN DIEMHP ON DMHOCPHAN.MaHP=DIEMHP GROUP BY MaSV
  3. SELECT HocKy,MaSV,SUM(DiemHP*Sodvht)/SUM(Sodvht) AS DiemTBC FROM DMHOCPHAN INNER JOIN DIEMHP ON DMHOCPHAN.MaHP=DIEMHP GROUP BY HocKy,MaSV ORDER BY HocKy

SELECT SINHVIEN,Tenlop,CASE GioiTinh WHEN 0 THEN N'Nữ' ELSE N'Nam' END AS GioiTinh, COUNT(MaSV) AS Soluong FROM DMLOP INNER JOIN SINHVIEN ON DMLOP.MaLop=SINHVIEN GROUP BY SINHVIEN,Tenlop,GioiTinh ORDER BY SINHVIEN