Tiếp nội dung phần 1, Giáo trình Quản trị SQL Server: Phần 2 cung cấp cho người học các kiến thức: Thao tác dữ liệu trong MS SQL Server; Khung nhìn (View); Thủ tục lưu trữ (Stored Procedure). Mời các bạn cùng tham khảo!
Bài 3: Thao tác liệu MS SQL Server Thêm dòng liệu Dữ liệu bảng thể dạng dòng (bản ghi) Để bổ sung thêm dòng liệu vào bảng, ta sử dụng câu lệnh INSERT Hầu hết hệ quản trị CSDL dựa SQL cung cấp cách để thực thao tác bổ sung liệu cho bảng: Bổ sung dòng liệu với câu lệnh INSERT Đây sử dụng thường gặp giao tác SQL Bổ sung nhiều dòng liệu cách truy xuất liệu từ bảng liệu khác Bổ sung dòng liệu với lệnh INSERT Để bổ sung dòng liệu vào bảng, ta sử dụng câu lệnh INSERT với cú pháp sau: INSERT INTO tên_bảng[(danh_sách_cột)] VALUES(danh_sách_trị) Trong câu lệnh INSERT, danh sách cột sau tên bảng không cần thiết phải định giá trị trường ghi định đầy đủ danh sách trị Trong trường hợp này, thứ tự giá trị danh sách trị phải với số lượng trường bảng cần bổ sung liệu phải tuân theo thứ tự trường bảng định nghĩa Ví dụ: Câu lệnh bổ sung thêm dòng liệu vào bảng KHOA INSERT INTO khoa VALUES(‘DHT10’,’Khoa Luật’,’054821135’) Trong trường hợp nhập giá trị cho số cột bảng, ta phải định danh sách cột cần nhập liệu sau tên bảng Khi đó, cột khơng nhập liệu nhận giá trị mặc định (nếu có) nhận giá trị NULL (nếu cột cho phép chấp nhận giá trị NULL) Nếu cột khơng có giá trị mặc định không chấp nhận giá trị NULL mà không đuợc nhập liệu, câu lệnh bị lỗi Ví dụ: Câu lệnh bổ sung ghi cho bảng SINHVIEN 34 INSERT INTO sinhvien(masv,hodem,ten,gioitinh,malop) VALUES(‘0241020008’,‘Nguyễn Cơng’,’Chính’,1,’C24102’) câu lệnh cịn viết sau: INSERT INTO sinhvien VALUES(‘0241020008’,‘Nguyễn Cơng’,’Chính’, NULL,1,NULL,’C24102’) Bổ sung nhiều dịng liệu từ bảng khác Một cách sử dụng khác câu lệnh INSERT sử dụng để bổ sung nhiều dòng liệu vào bảng, dòng liệu lấy từ bảng khác thông qua câu lệnh SELECT Ở cách này, giá trị liệu bổ sung vào bảng không định tường minh mà thay vào câu lệnh SELECT truy vấn liệu từ bảng khác Cú pháp câu lệnh INSERT có dạng sau: INSERT INTO tên_bảng[(danh_sách_cột)] câu_lệnh_SELECT Ví dụ: Giả sử ta có bảng LUUSINHVIEN bao gồm trường HODEM, TEN, NGAYSINH Câu lệnh bổ sung vào bảng LUUSINHVIEN dịng liệu có từ câu truy vấn SELECT: INSERT INTO luusinhvien SELECT hodem,ten,ngaysinh FROM sinhvien WHERE noisinh like ‘%Huế%’ Khi bổ sung liệu theo cách cần lưu ý số điểm sau: Kết câu lệnh SELECT phải có số cột với số cột định bảng đích phải tương thích kiểu liệu Cập nhật liệu Câu lệnh UPDATE SQL sử dụng để cập nhật liệu bảng Câu lệnh có cú pháp sau: UPDATE tên_bảng 35 SET tên_cột = biểu_thức [, , tên_cột_k = biểu_thức_k] [FROM danh_sách_bảng] [WHERE điều_kiện] Sau UPDATE tên bảng cần cập nhật liệu Một câu lệnh UPDATE cập nhật liệu cho nhiều cột cách định danh sách tên cột biểu thức tương ứng sau từ khoá SET Mệnh đề WHERE câu lệnh UPDATE thường sử dụng để định dòng liệu chịu tác động câu lệnh (nếu không định, phạm vi tác động câu lệnh hiểu tồn dịng bảng) Ví dụ: Câu lệnh cập nhật lại số đơn vị học trình mơn học có số đơn vị học trình nhỏ UPDATE monhoc SET sodvht = WHERE sodvht = Sử dụng cấu trúc CASE câu lệnh UPDATE Cấu trúc CASE sử dụng biểu thức cần phải đưa định khác giá trị biểu thức Ví dụ: Giả sử ta có bảng NHATKYPHONG sau Sau thực câu lệnh: UPDATE nhatkyphong SET tienphong=songay*CASE WHEN loaiphong='A' THEN 100 WHEN loaiphong='B' THEN 70 ELSE 50 END 36 Dữ liệu bảng là: Điều kiện cập nhật liệu liên quan đến nhiều bảng Mệnh đề FROM câu lệnh UPDATE sử dụng cần định điều kiện liên quan đến bảng khác với bảng cần cập nhật liệu Trong truờng hợp này, mệnh đề WHERE thường có điều kiện nối bảng Ví dụ: Giả sử ta có hai bảng MATHANG NHATKYBANHANG sau: Câu lệnh cập nhật giá trị trường THANHTIEN bảng NHATKYBANHANG theo công thức THANHTIEN = SOLUONG × GIA UPDATE nhatkybanhang SET thanhtien = soluong*gia FROM mathang WHERE nhatkybanhang.mahang = mathang.mahang Câu lệnh UPDATE với truy vấn Tương tự câu lệnh SELECT, truy vấn sử dụng mệnh đề WHERE câu lệnh UPDATE nhằm định điều kiện dòng liệu cần cập nhật liệu Ví dụ: Câu lệnh viết sau: 37 UPDATE nhatkybanhang SET thanhtien = soluong*gia FROM mathang WHERE mathang.mahang =(SELECT mathang.mahang FROM mathang WHERE mathang.mahang=nhatkybanhang.mahang) Xóa dịng liệu Để xố liệu bảng, ta sử dụng câu lệnh DELETE Cú pháp câu lệnh sau: DELETE FROM tên_bảng [FROM danh_sách_bảng] [WHERE điều_kiện] Trong câu lệnh này, tên bảng cần xoá liệu định sau DELETE FROM Mệnh đề WHERE câu lệnh sử dụng để định điều kiện dòng liệu cần xố Nếu câu lệnh DELETE khơng có mệnh đề WHERE tồn dịng liệu bảng bị xố Ví dụ: Câu lệnh xoá khỏi bảng SINHVIEN sinh viên sinh Huế DELETE FROM sinhvien WHERE noisinh LIKE ‘%Huế%’ Xoá liệu điều kiện liên quan đến nhiều bảng Nếu điều kiện câu lệnh DELETE liên quan đến bảng khơng phải bảng cần xóa liệu, ta phải sử dụng thêm mệnh đề FROM sau danh sách tên bảng Trong trường hợp này, mệnh đề WHERE ta định thêm điều kiện nối bảng Ví dụ: Câu lệnh xoá khỏi bảng SINHVIEN sinh viên lớp Tin K24 DELETE FROM sinhvien FROM lop 38 WHERE lop.malop=sinhvien.malop AND tenlop='Tin K24' Sử dụng truy vấn câu lệnh DELETE Một câu lệnh SELECT lồng vào mệnh đề WHERE câu lệnh DELETE để làm điều kiện cho câu lệnh tương tự câu lệnh UPDATE Ví dụ: Câu lệnh xố khỏi bảng LOP lớp khơng có sinh viên học DELETE FROM lop WHERE malop NOT IN (SELECT DISTINCT malop FROM sinhvien) Xố tồn liệu bảng Câu lệnh DELETE không định điều kiện dịng liệu cần xố mệnh đề WHERE xố tồn liệu bảng Thay sử dụng câu lệnh DELETE trường hợp này, ta sử dụng câu lệnh TRUNCATE có cú pháp sau: TRUNCATE TABLE tên_bảng Ví dụ: Câu lệnh sau xố toàn liệu bảng diemthi: DELETE FROM diemthi có tác dụng tương tự với câu lệnh TRUNCATE TABLE diemthi Truy xuất liệu Lấy thông tin từ cột bảng mệnh đề SELECT 4.1 Câu lệnh SELECT sử dụng để truy xuất liệu từ dòng cột hay nhiều bảng, khung nhìn Câu lệnh dùng để thực phép chọn (tức truy xuất tập dòng hay nhiều bảng), phép chiếu (tức truy xuất tập cột hay nhiều bảng) phép nối (tức liên kết dòng hai hay nhiều bảng để truy xuất liệu) Ngồi ra, câu lệnh cịn cung cấp khả thực thao tác truy vấn thống kê liệu phức tạp khác Cú pháp chung câu lệnh SELECT có dạng: SELECT [ALL | DISTINCT][TOP n] danh_sách_chọn 39 [INTO tên_bảng_mới] FROM danh_sách_bảng/khung_nhìn [WHEREđiều_kiện] [GROUP BY danh_sách_cột] [HAVING điều_kiện] [ORDER BY cột_sắp_xếp] [COMPUTE danh_sách_hàm_gộp [BY danh_sách_cột]] Điều cần lưu ý câu lệnh thành phần câu lệnh SELECT sử dụng phải tuân theo thứ tự cú pháp Nếu không, câu lệnh xem không hợp lệ Câu lệnh SELECT sử dụng để tác động lên bảng liệu kết câu lệnh hiển thị dạng bảng, tức tập hợp dòng cột (ngoại trừ trường hợp sử dụng câu lệnh SELECT với mệnh đề COMPUTE) Ví dụ: Kết câu lệnh sau cho biết mã lớp, tên lớp hệ đào tạo lớp có SELECT malop,tenlop,hedaotao FROM lop Mệnh đề FROM Mệnh đề FROM câu lệnh SELECT sử dung nhằm định bảng khung nhìn cần truy xuất liệu Sau FROM danh sách tên bảng khung nhìn tham gia vào truy vấn, tên bảng khung nhìn phân cách dấu phẩy Ví dụ: Câu lệnh hiển thị danh sách khoa trường SELECT * FROM khoa kết câu lệnh sau: Ta sử dụng bí danh cho bảng hay khung nhìn câu lệnh SELECT Bí danh gán mệnh đề FROM cách định bí danh sau tên bảng Ví dụ: câu lệnh sau gán bí danh a cho bảng khoa SELECT * FROM khoa a 40 Danh sách chọn câu lệnh SELECT Danh sách chọn câu lệnh SELECT sử dụng để định trường, biểu thức cần hiển thị cột kết truy vấn Các trường, biểu thức định sau từ khoá SELECT phân cách dấu phẩy Sử dụng danh sách chọn câu lệnh SELECT bao gồm trường hợp sau: - Chọn tất cột bảng Khi cần hiển thị tất Trường bảng, sử dụng ký tự * danh sách chọn thay phải liệt kê danh sách tất cột Trong trường hợp này, cột hiển thị kết truy vấn tuân theo thứ tự mà chúng tạo bảng định nghĩa Ví dụ: Câu lệnh SELECT * FROM lop cho kết bao sau: 41 - Tên cột danh sách chọn Trong trường hợp cần định cụ thể cột cần hiển thị kết truy vấn, ta định danh sách tên cột danh sách chọn Thứ tự cột kết truy vấn tuân theo thứ tự trường danh sách chọn Ví dụ: Câu lệnh SELECT malop,tenlop,namnhaphoc,khoa FROM lop cho biết mã lớp, tên lớp, năm nhập học khố lớp có kết sau: Lưu ý: Nếu truy vấn thực nhiều bảng/khung nhìn bảng/khung nhìn có trường trùng tên tên trường xuất danh sách chọn phải viết dạng: tên_bảng.tên_trường Ví dụ: SELECT malop, tenlop, lop.makhoa, tenkhoa FROM lop, khoa WHERE lop.malop = khoa.makhoa - Thay đổi tiêu đề cột Trong kết truy vấn, tiêu đề cột mặc định tên trường tương ứng bảng Tuy nhiên, để tiêu đề trở nên thân thiện hơn, ta đổi tên tiêu đề cột Để đặt tiêu đề cho cột đó, ta sử dụng cách viết: tiêu_đề_cột = tên_trường 42 tên_trường AS tiêu_đề_cột tên_trường tiêu_đề_cột Ví dụ: Câu lệnh đây: SELECT 'Mã lớp'= malop,tenlop 'Tên lớp',khoa AS 'Khoá' FROM lop cho biết mã lớp, tên lớp khoá học lớp trường Kết câu lệnh sau: - Sử dụng cấu trúc CASE danh sách chọn Cấu trúc CASE sử dụng danh sách chọn nhằm thay đổi kết truy vấn tuỳ thuộc vào trường hợp khác Cấu trúc có cú pháp sau: CASE biểu_thức WHEN biểu_thức_kiểm_tra THEN kết_quả [ ] [ELSE kết_quả_của_else] END hoặc: CASE 43 ... sinhvien(masv,hodem,ten,gioitinh,malop) VALUES(‘ 024 1 020 008’,‘Nguyễn Cơng’,’Chính’,1,’C241 02? ??) câu lệnh cịn viết sau: INSERT INTO sinhvien VALUES(‘ 024 1 020 008’,‘Nguyễn Cơng’,’Chính’, NULL,1,NULL,’C241 02? ??) Bổ sung nhiều dòng... có tuổi nằm khoảng từ 20 đến 22 SELECT hodem,ten,year(getdate())-year(ngaysinh) AS tuoi FROM sinhvien WHERE ten=''Bình'' AND YEAR(GETDATE())-YEAR(ngaysinh) BETWEEN 20 AND 22 Danh sách (IN NOT... giá trị Sau IN (hoặc NOT IN) danh sách giá trị câu lệnh SELECT khác Ví dụ: Để biết danh sách mơn học có số đơn vị học trình 2, 5, thay sử dụng câu lệnh SELECT * FROM monhoc 49 WHERE sodvht =2 OR