Bài giảng SQL server: Chương 3 - Lê Thị Minh Nguyện
lượt xem 5
download
Chương 3 trình bày những kiến thức về lập trình với cơ sở dữ liệu. Thông qua chương này người học sẽ tìm hiểu về: Biến cục bộ, biến hệ thống, các câu lệnh truy vấn dữ liệu, các hàm thường dùng, cấu trúc điều khiển, cấu trúc lặp, biến kiểu dữ liệu cursor. Mời các bạn cùng tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng SQL server: Chương 3 - Lê Thị Minh Nguyện
- 10/03/2015 TRƢỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN THÀNH PHỐ HỒ CHÍ MINH CHƢƠNG 3. LẬP TRÌNH VỚI CƠ SỞ DỮ LIỆU GV: Lê Thị Minh Nguyện Email: leminhnguyen@itc.edu.vn NỘI DUNG Biến cục bộ Biến hệ thống Các câu lệnh truy vấn dữ liệu Các hàm thường dùng Cấu trúc điều khiển Cấu trúc lặp Biến kiểu dữ liệu cursor 2 1
- 10/03/2015 1.Biến cục bộ Biến cục bộ: dùng để lưu trữ các giá trị tạm thời trong quá trình tính toán các xử lý bởi sau khi thoát khỏi chương trình hoặc tắt máy thì giá trị các biến này không còn trong bộ nhớ nữa. Cú pháp: DECLARE @Tên_biến kiểu_dữ_liệu[,…] Ví dụ: DECLARE @ten_ncc varchar(50), @ngayxh DATETIME Gán giá trị cho biến: Dùng SET hoặc SELECT cùng với phép gán (= ) 3 1.Biến cục bộ Ví dụ 1: để gán giá trị ngày 25/3/2002 vào biến ngày xuất hàng DECLARE @ngayxh DATETIME SET @ngayxh = „25-3-2014‟ Ví dụ 2: DECLARE @TongSLDat int SELECT @TongSLDat = SUM(SLDAT) FROM CTDH Ví dụ 3: DECLARE @MinSLDat int, @MaxSLDat int SELECT @MinSLDat = MIN(SLDAT), @MaxSLDat = MAX(SLDAT), FROM CTDH 2
- 10/03/2015 1.Biến cục bộ Xem giá trị hiện hành của biến Cú pháp: PRINT @Tên_biến | Biểu_thức_chuỗi Ví dụ: DECLARE @MinSLDat int, @MaxSLDat int SELECT @MinSLDat = MIN(SLDAT), @MaxSLDat = MAX(SLDAT), FROM CTHDON PRINT „Số lượng đặt thấp nhất là:‟ PRINT @MinSLDat PRINT „Số lượng đặt cao nhất là:‟ 5 PRINT @MaxSLDat 1.Biến cục bộ Phạm vi hoạt động của biến Trong Transaction-SQL phạm vi hoạt động của biến chỉ nằm trong một thủ tục nội tại (stored procedure) hoặc một lô (batch) chứa các câu lệnh mà biến đã được khai báo bên trong đó. Lô được xem như một nhóm tập hợp của một hoặc nhiều câu lệnh Transaction-SQL sẽ được biên dịch đồng thời cùng lúc tại SQL Server. 6 Một từ khoá GO chỉ định kết thúc 1 lô 3
- 10/03/2015 1.Biến cục bộ Do các câu lệnh trong một lô được biên dịch tại SQL Server vì thế khi có ít nhất 1 lệnh bên trong lô có lỗi về cú pháp lúc biên dịch thì hệ thống sẽ không có lệnh nào được thực thi bên trong lô đó. Ví dụ: SELECT * FROM NHACC ORDER BY TenNhaCC INSERT INTO NHACC („C01‟, „Nguyen Van A‟, ‟87 Ly Tu Trong‟,„0903.123456‟) SELECT * FROM VATTU ORDER BY Tenvtu DESC (thiếu từ khoá VALUES) thì các 7 GO lệnh SELECT bên trong lô này không được thực hiện. 1.Biến cục bộ Đối với các lỗi khi thực hiện (run-time) bên trong 1 lô nếu trường hợp các lỗi vi phạm ràng buộc toàn vẹn dữ liệu thì hệ thống SQL Server chỉ ngưng lại câu lệnh gây lỗi và thực hiện tiếp các lệnh bên trong lô đó. Ví dụ: (mặc dù vi phạm ràng buộc toàn vẹn trong INSERT (giả sử trùng khoá SELECT * FROM NHACC chính ở cột MaNCC) nhưng các lệnh ORDER BY TenNhaCC SELECT bên trong lô này vẫn được thực hiện bình thường. INSERT INTO NHACC VALUES („C01‟, „Nguyen Van A‟, ‟87 Ly Tu Trong‟,„0903.123456‟) SELECT * FROM VATTU ORDER BY Tenvtu DESC GO 4
- 10/03/2015 1.Biến cục bộ Ví dụ: DECLARE @NgayDH datetime SELECT @NgayDH = MAX(NGAYDH) FROM DONDH GO PRINT “ngay dat hang gan nhat: ” + convert(char(12), @ngaydh) GO HT sẽ báo lỗi vì có thêm từ khoá GO ở giữa 2 lệnh SELECT và PRINT. Bởi vì khi đó các lệnh này được chia làm 2 lô và lô thứ hai sẽ không hiểu biến @ngaydh đã được khai báo trong lô thứ 1. 2.Biến hệ thống Các biến hệ thống trong SQL Server luôn bắt đầu bằng 2 chữ @@. Giá trị mà chúng ta đang lưu trữ do hệ thống SQL cung cấp. Người lập trình không can thiệp trực tiếp để gán giá trị vào các biến hệ thống. 10 5
- 10/03/2015 2.Biến hệ thống Tên biến kiểu trả Dùng để trả về về connections số nguyên Tổng số các kết nối vào SQL Server từ khi nó được khởi động Error số nguyên số mã lỗi của câu lệnh thực hiện gần nhất. Khi một lệnh thực hiện thành công thì biến này có giá trị là 0 Language chuỗi Tên ngôn ngữ mà hệ thống SQL đag sử dụng. Mặc định là US_English RowCount số nguyên Tổng số mẩu tin được tác động vào câu lệnh truy vấn gần nhất ServerName chuỗi Tên của máy tính cục bộ được cài đặt trong SQL Server ServiceName chuỗi Tên dịch vụ kèm theo bên dưới SQL Server Fetch_Status số nguyên Trạng thái của việc đọc dữ liệu trong bảng theo cơ chế dòng mẩu tin (cursor). Khi dữ liệu đọc mẩu tin thành công thì biến này có giá trị là 0 Version chuỗi Phiên bản, ngày của phẩm SQL Server và loại CPU 2.Biến hệ thống Ví dụ: SELECT * FROM NHACC SELECT @@ROWCOUNT (Trả về tổng số mẩu tin đang hiện có trong bảng NHACC ) Ví dụ: UPDATE SANPHAM SET PHATRAM = PHANTRAM + 5 WHERE MAVTU like “TV%” SELECT @@ROWCOUNT (Trả về tổng số mẩu tin có MAVTU bắt đầu bằng chữ “TV” trong bảng VATTU) 12 6
- 10/03/2015 3.Các câu lệnh truy vấn dữ liệu Truy vấn cơ bản Truy vấn lồng Hàm kết hợp Gom nhóm Điều kiện trên nhóm Cập nhật dữ liệu 13 3.1.Truy vấn cơ bản Gồm 3 mệnh đề SELECT FROM WHERE • Tên các cột cần được hiển thị trong kết quả truy vấn • Tên các bảng liên quan đến câu truy vấn • Biểu thức boolean xác định dòng nào sẽ được rút trích • Nối các biểu thức: AND, OR, và NOT 14 • Phép toán: , , , , , , LIKE và BETWEEN 7
- 10/03/2015 Ví dụ Lấy tất cả các cột của quan hệ kết quả SELECT * FROM NHANVIEN Tên bí danh WHERE PHG=5 SELECT MANV, HONV, TENLOT + TENNV as HOTEN FROM NHANVIEN WHERE PHG=5 AND PHAI=„Nam‟ Mở rộng SELECT MANV, LUONG*1.1 AS „LUONG10%‟ 15 FROM NHANVIEN WHERE PHG=5 AND PHAI=„Nam‟ Ví dụ Loại bỏ các dòng trùng nhau SELECT LUONG SELECT DISTINCT LUONG FROM NHANVIEN FROM NHANVIEN WHERE PHG=5 AND WHERE PHG=5 AND PHAI=„Nam‟ PHAI=„Nam‟ LUONG LUONG 30000 25000 - Tốn chi phí 30000 25000 - Người dùng 25000 16 38000 muốn thấy 38000 8
- 10/03/2015 Ví dụ BETWEEN SELECT MANV, TENNV FROM NHANVIEN WHERE LUONG>=20000 AND LUONG
- 10/03/2015 Ví dụ LIKE Ký tự bất kỳ SELECT MANV, TENNV FROM NHANVIEN WHERE DCHI LIKE „Nguyen _ _ _ _‟ Chuỗi bất kỳ SELECT MANV, TENNV FROM NHANVIEN WHERE DCHI LIKE „Nguyen %‟ NOT LIKE SELECT MANV, TENNV 19 FROM NHANVIEN WHERE HONV NOT LIKE „Nguyen‟ Ví dụ NULL SELECT MANV, TENNV FROM NHANVIEN WHERE MA_NQL IS NULL SELECT MANV, TENNV FROM NHANVIEN WHERE MA_NQL IS NOT NULL 20 10
- 10/03/2015 Ví dụ Dùng để hiển thị kết quả câu truy vấn theo một thứ tự nào đó Cú pháp SELECT FROM WHERE ORDER BY ASC: tăng (mặc định) DESC: giảm 21 Ví dụ SELECT MA_NVIEN, SODA FROM PHANCONG ORDER BY MA_NVIEN DESC, SODA MA_NVIEN SODA 999887777 10 999887777 30 987987987 10 987987987 30 987654321 10 987654321 20 987654321 30 22 11
- 10/03/2015 3.2.Truy vấn lồng Chỉ một câu lệnh truy vấn lựa chọn (SELECT) được lồng vào các câu lệnh truy vấn khác nhằm thực hiện các truy vấn tính toán phức tạp. Khi sử dụng đến truy vấn lống chúng ta cần lưu tâm đến một vài yếu tố sau: Cần mở và đóng ngoặc đơn cho câu lệnh truy vấn con. Chúng ta chỉ được phép tham chiếu đến tên một cột hoặc một biểu thức sẽ trả về giá trị trong truy vấn con. Kết quả truy vấn con có thể trả về là một giá trị đơn lẻ hoặc một danh sách các giá trị. 23 Cấp độ lồng nhau của các truy vấn con bên trong SQL Server là không giới hạn. 3.2.Truy vấn lồng Mệnh đề WHERE của câu truy vấn cha So sánh tập hợp thường đi cùng với một số toán tử • = ,, >=,
- 10/03/2015 3.2.Truy vấn lồng Truy vấn con trả về một giá trị đơn: là truy vấn mà kết qủa trả về của nó luôn đảm bảo chỉ là một giá trị đơn. Ví dụ: để biết được danh sách các đơn đặt hàng gần đây nhất. SELECT MAX(NGAYDH) FROM DONDH Kết quả trả về: 2015-01-25 00:00:00 SELECT * FROM DONDH WHERE NGAYDH = “2015-01-25” Kết hợp 2 câu truy vấn trên SELECT * FROM DONDH 25 WHERE NGAYDH = (SELECT MAX(NGAYDH) FROM DONDH) 3.2.Truy vấn lồng Truy vấn con trả về danh sách các giá trị: trả về của nó là danh sách các giá trị hay còn gọi là một tập hợp các phần tử. Toán tử IN sẽ được sử dụng để so sánh truy vấn con dạng này Ví dụ 1: để biết nhà cung cấp nào mà công ty đã đặt hàng trong tháng 01/2015. SELECT MaNCC FROM DONDH WHERE Convert(char(7), NgayDH, 21) = “2015-07” Kết quả trả về SELECT TenNCC, DienThoai MaNCC FROM NHACC C03 26 C01 WHERE MaNCC IN(“C01”, “C03”) 13
- 10/03/2015 3.2.Truy vấn lồng Đâu đảm bảo rằng trong tháng 01/2002 công ty chỉ đặt hàng cho 2 nhà cung cấp C01 và C03. Do đó để luôn luôn có được danh sách họ tên các nhà cung cấp mà công ty đã đặt trong tháng 01-2002 chúng ta thực hiện truy vấn con sau: SELECT TenNCC, DienThoai FROM NHACC WHERE MaNCC IN(SELECT MaNCC FROM DONDH 27 WHERE Covert(char(7), NgayDH, 21) = “2015-01”) 3.2.Truy vấn lồng Có 2 loại truy vấn lồng Lồng phân cấp • Mệnh đề WHERE của truy vấn con không tham chiếu đến thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn cha • Khi thực hiện, câu truy vấn con sẽ được thực hiện trước Lồng tương quan • Mệnh đề WHERE của truy vấn con tham chiếu ít nhất một thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn cha • Khi thực hiện, câu truy vấn con sẽ được thực hiện nhiều lần, mỗi lần tương ứng với một bộ của truy vấn cha 28 14
- 10/03/2015 3.2.Truy vấn lồng Lồng phân cấp SELECT TenNCC, DienThoai FROM NHACC WHERE MaNCC IN (SELECT MaNCC FROM DONDH WHERE Convert(char(7), NgayDH, 21) = “2015-01”) 29 3.2.Truy vấn lồng Lồng tương quan SELECT TenNCC, DienThoai FROM NHACC WHERE EXISTS (SELECT * FROM DONDH WHERE Covert(char(7), NgayDH, 21) = “2007-01” AND NHACC.MaNCC = DONDH.MaNCC) 30 15
- 10/03/2015 Ví dụ Ví dụ 2: Danh sách các nhà cung cấp nào mà công ty chưa bao giờ đặt hàng: SELECT TenNhaCC, DienThoai FROM NHACC WHERE MaNCC NOT IN (SELECT Distinct MaNCC FROM DONDH) Hoặc Lưu ý: SELECT TenNhaCC, DienThoai IN tương đương =ANY NOT IN tương đượng ALL FROM NHACC WHERE MaNCC ALL (SELECT Distinct MaNCC 31 FROM DONDH) Ví dụ Tìm những nhân viên không có thân nhân nào SELECT * FROM NHANVIEN Lồng phân cấp WHERE MANV NOT IN ( SELECT MA_NVIEN FROM THANNHAN ) SELECT * FROM NHANVIEN WHERE NOT EXISTS ( SELECT * Lồng tƣơng quan FROM THANNHAN WHERE MANV=MA_NVIEN) 32 16
- 10/03/2015 3.3.Hàm kết hợp COUNT COUNT(*) đếm số dòng COUNT() đếm số giá trị khác NULL của thuộc tính COUNT(DISTINCT ) đếm số giá trị khác nhau và khác NULL của thuộc tính MIN MAX SUM AVG Các hàm kết hợp được đặt ở mệnh đề SELECT 33 Ví dụ 34 17
- 10/03/2015 Ví dụ Tìm tổng lương, lương cao nhất, lương thấp nhất và lương trung bình của các nhân viên SELECT SUM(LUONG), MAX(LUONG), MIN(LUONG), AVG(LUONG) FROM NHANVIEN Cho biết số lượng nhân viên của phòng „Nghiên cứu‟ SELECT COUNT(*) AS SL_NV FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG AND TENPHG=‘Nghiên cứu’ 35 3.4.Gom nhóm Cú pháp SELECT FROM WHERE GROUP BY Sau khi gom nhóm Mỗi nhóm các bộ sẽ có cùng giá trị tại các thuộc tính gom nhóm 36 18
- 10/03/2015 Ví dụ Cho biết số lượng nhân viên của từng phòng ban SELECT PHG, COUNT(*) AS SL_NV FROM NHANVIEN GROUP BY PHG SELECT TENPHG, COUNT(*) AS SL_NV FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG 37 GROUP BY TENPHG Ví dụ Với mỗi nhân viên cho biết mã số, họ tên, số lượng đề án và tổng thời gian mà họ tham gia SELECT MA_NVIEN, COUNT(*) AS SL_DA, SUM(THOIGIAN) AS TONG_TG FROM PHANCONG GROUP BY MA_NVIEN SELECT MA_NVIEN ,HONV, TENNV, COUNT(*) AS SL_DA, SUM(THOIGIAN) AS TONG_TG FROM PHANCONG, NHANVIEN WHERE MA_NVIEN=MANV 38 GROUP BY MA_NVIEN, HONV, TENNV 19
- 10/03/2015 3.5.Điều kiện trên nhóm Cú pháp SELECT FROM WHERE GROUP BY HAVING Cho biết những nhân viên tham gia từ 2 đề án trở lên SELECT MA_NVIEN, COUNT(*) as SLDA FROM PHANCONG 39 GROUP BY MA_NVIEN HAVING COUNT(*) >= 2 Ví dụ Cho biết những phòng ban (TENPHG) có lương trung bình của các nhân viên lớn lơn 20000 SELECT PHG, AVG(LUONG) AS LUONG_TB FROM NHANVIEN GROUP BY PHG HAVING AVG(LUONG) > 20000 SELECT TENPHG, AVG(LUONG) AS LUONG_TB FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG GROUP BY TENPHG HAVING AVG(LUONG) > 20000 40 40 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Tập bài giảng SQL Server
320 p | 74 | 19
-
Bài giảng Quản trị cơ sở dữ liệu - Chương 3: Quản trị cơ sở dữ liệu với ngôn ngữ SQL
26 p | 44 | 12
-
Bài giảng SQL Server 2008: Chương 3 - Nguyễn Đức Cương
11 p | 69 | 9
-
Bài giảng Cơ sở dữ liệu nâng cao - Chapter 3: Managing security
39 p | 92 | 9
-
Bài giảng Microsoft SQL server: Chương 3 - Phạm Mạnh Cương
43 p | 71 | 7
-
Bài giảng SQL server 2005: Chương 3 - Phạm Mạnh Cương
43 p | 67 | 7
-
Bài giảng Hệ quản trị cơ sở dữ liệu SQL Server: Chương 3 - Nguyễn Thị Mỹ Dung
22 p | 40 | 6
-
Bài giảng Hệ quản trị CSDL: Chương 3 (Phần 2) - TS. Lại Hiền Phương
46 p | 14 | 5
-
Bài giảng Hệ quản trị CSDL: Chương 3 (Phần 1) - TS. Lại Hiền Phương
29 p | 12 | 4
-
Bài giảng Cơ sở dữ liệu: Chương 3 - Nguyễn Việt Cường (p2)
16 p | 62 | 2
-
Bài giảng Hệ quản trị cơ sở dữ liệu: Chương 3 - Phạm Nguyên Thảo
40 p | 41 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn