Giáo trình Quản trị SQL Server - Bài 3: Hướng dẫn thao tác dữ liệu

Giáo trình quản trị SQL Server phần 2 hướng dẫn chi tiết thao tác dữ liệu. Nắm vững lệnh INSERT, UPDATE, DELETE qua các ví dụ thực tế và dễ hiểu.

Chuyên ngành

Cơ sở dữ liệu

Người đăng

Ẩn danh

Thể loại

Bài giảng
56
0
0

Phí lưu trữ

30 Point

Tóm tắt

I. Hướng dẫn tổng quan về lệnh INSERT UPDATE DELETE SQL Server

Trong quản trị cơ sở dữ liệu, việc thao tác dữ liệu SQL Server là một kỹ năng nền tảng và thiết yếu. Ba lệnh cốt lõi cho phép thực hiện các tác vụ này là INSERT, UPDATE và DELETE. Chúng thuộc nhóm Ngôn ngữ Thao tác Dữ liệu, hay còn gọi là DML trong SQL Server. Việc nắm vững các câu lệnh SQL cơ bản này không chỉ giúp quản lý dữ liệu hiệu quả mà còn đảm bảo tính toàn vẹn và chính xác của thông tin. Các lệnh này được thực thi chủ yếu thông qua Transact-SQL (T-SQL), một phiên bản mở rộng của SQL do Microsoft phát triển. Người quản trị thường sử dụng công cụ SQL Server Management Studio (SSMS) để viết và chạy các truy vấn này. Lệnh INSERT có chức năng thêm mới các hàng (row) dữ liệu vào một bảng dữ liệu (table). Lệnh UPDATE được dùng để sửa đổi, cập nhật thông tin của các hàng hiện có. Cuối cùng, lệnh DELETE chịu trách nhiệm xóa bỏ các hàng không còn cần thiết. Mỗi lệnh đều có cú pháp riêng và thường kết hợp với mệnh đề WHERE để xác định chính xác đối tượng tác động. Hiểu sai hoặc áp dụng không chính xác các lệnh này có thể dẫn đến mất mát dữ liệu không thể phục hồi, ảnh hưởng nghiêm trọng đến hoạt động của hệ thống. Do đó, việc hiểu rõ bản chất, cú pháp và các trường hợp sử dụng của từng lệnh là bước đầu tiên để trở thành một chuyên gia về SQL Server.

1.1. Khái niệm về các câu lệnh DML trong SQL Server

Ngôn ngữ Thao tác Dữ liệu (Data Manipulation Language - DML) là một tập hợp các lệnh SQL được sử dụng để quản lý và thao tác dữ liệu trong cơ sở dữ liệu. Các lệnh DML không định nghĩa cấu trúc bảng mà chỉ tác động lên dữ liệu chứa bên trong chúng. Trong môi trường SQL Server, các lệnh DML phổ biến nhất bao gồm INSERT (chèn), UPDATE (cập nhật), DELETE (xóa) và lệnh SELECT (truy vấn). Trong khi SELECT dùng để truy xuất dữ liệu, bộ ba INSERT, UPDATE, và DELETE là công cụ chính để thay đổi trạng thái của dữ liệu. Chúng cho phép thêm bản ghi mới, sửa đổi thông tin hiện có và loại bỏ dữ liệu không cần thiết. Tất cả các thao tác này đều được thực hiện trên các hàng (row)cột (column) của một bảng dữ liệu (table) cụ thể.

1.2. Tầm quan trọng của việc thao tác dữ liệu chính xác

Dữ liệu là tài sản cốt lõi của mọi tổ chức, và việc duy trì tính chính xác, toàn vẹn của nó là tối quan trọng. Thao tác dữ liệu SQL Server một cách chính xác đảm bảo rằng thông tin phản ánh đúng thực tế, từ đó hỗ trợ các quyết định kinh doanh đúng đắn. Một lệnh UPDATE thiếu mệnh đề WHERE có thể cập nhật sai toàn bộ bảng, gây ra thảm họa dữ liệu. Tương tự, một lệnh DELETE bất cẩn có thể xóa đi những thông tin khách hàng quan trọng. Các ràng buộc dữ liệu (constraints) như khóa chính (primary key)khóa ngoại (foreign key) giúp bảo vệ tính toàn vẹn, nhưng trách nhiệm cuối cùng vẫn thuộc về người viết truy vấn. Do đó, việc kiểm tra kỹ lưỡng và hiểu rõ tác động của từng câu lệnh trước khi thực thi là một nguyên tắc bắt buộc trong quản trị cơ sở dữ liệu.

II. Cách tránh lỗi khi dùng INSERT UPDATE DELETE SQL Server

Mặc dù mạnh mẽ, các lệnh thao tác dữ liệu SQL Server như INSERT, UPDATE, và DELETE tiềm ẩn nhiều rủi ro nếu không được sử dụng cẩn thận. Một trong những lỗi phổ biến nhất là vi phạm ràng buộc dữ liệu (constraints). Ví dụ, cố gắng chèn một giá trị trùng lặp vào cột khóa chính (primary key) hoặc một giá trị không tồn tại vào cột khóa ngoại (foreign key) sẽ gây ra lỗi. Một nguy cơ nghiêm trọng khác đến từ việc sử dụng sai hoặc bỏ quên mệnh đề WHERE trong các lệnh UPDATE và DELETE. Nếu không có điều kiện lọc, lệnh sẽ tác động lên toàn bộ các hàng (row) trong bảng dữ liệu (table), dẫn đến việc cập nhật hoặc xóa nhầm hàng loạt dữ liệu. Đây là một sai lầm có thể gây thiệt hại lớn. Ngoài ra, việc quản lý giao dịch (transaction) cũng là một thách thức. Một chuỗi các thao tác DML nên được gói trong một transaction để đảm bảo rằng tất cả đều thành công hoặc tất cả đều được khôi phục lại nếu có lỗi xảy ra. Không sử dụng transaction có thể để lại cơ sở dữ liệu ở trạng thái không nhất quán. Để tránh những lỗi này, người dùng T-SQL cần luôn kiểm tra lại câu lệnh, sử dụng transaction cho các hoạt động phức tạp và hiểu rõ cấu trúc, ràng buộc của bảng trước khi thực hiện bất kỳ thay đổi nào.

2.1. Lỗi ràng buộc dữ liệu constraints khi thêm mới bản ghi

Khi thực thi cú pháp INSERT INTO, một trong những lỗi thường gặp nhất là vi phạm các ràng buộc dữ liệu (constraints) đã được định nghĩa trên bảng. Ví dụ, nếu một cột được thiết lập là NOT NULL và không có giá trị mặc định, câu lệnh INSERT sẽ thất bại nếu không cung cấp giá trị cho cột đó. Tài liệu gốc chỉ rõ: "Nếu một cột không có giá trị mặc định và không chấp nhận giá trị NULL mà không được nhập dữ liệu, câu lệnh sẽ bị lỗi". Tương tự, việc chèn một giá trị đã tồn tại vào một cột có ràng buộc UNIQUE hoặc khóa chính (primary key) cũng sẽ bị từ chối. Lỗi cũng xảy ra khi giá trị chèn vào cột khóa ngoại (foreign key) không tồn tại trong bảng tham chiếu. Hiểu rõ các ràng buộc này là điều kiện tiên quyết để thực hiện thao tác thêm mới thành công.

2.2. Nguy cơ cập nhật hoặc xóa nhầm hàng với mệnh đề WHERE

Nguy cơ lớn nhất khi sử dụng cú pháp UPDATE SETcú pháp DELETE FROM là việc bỏ quên hoặc viết sai mệnh đề WHERE. Mệnh đề này đóng vai trò là bộ lọc, chỉ định chính xác những hàng (row) nào sẽ bị ảnh hưởng. Tài liệu gốc nhấn mạnh: "Nếu không chỉ định [mệnh đề WHERE], phạm vi tác động của câu lệnh được hiểu là toàn bộ các dòng trong bảng". Điều này có nghĩa là một lệnh UPDATE không có WHERE sẽ cập nhật tất cả các hàng với cùng một giá trị, và một lệnh DELETE không có WHERE sẽ xóa sạch toàn bộ dữ liệu trong bảng. Để phòng tránh, một phương pháp an toàn là luôn viết lệnh SELECT với cùng điều kiện WHERE trước để xem trước những hàng nào sẽ bị tác động trước khi thực thi lệnh UPDATE hoặc DELETE.

2.3. Thách thức quản lý giao dịch transaction an toàn

Một giao dịch (transaction) là một đơn vị công việc được thực hiện một cách tuần tự và logic trong cơ sở dữ liệu. Nó bao gồm một hoặc nhiều lệnh DML trong SQL Server. Thách thức chính là đảm bảo tính chất ACID (Atomicity, Consistency, Isolation, Durability) của giao dịch. Ví dụ, khi chuyển tiền, thao tác trừ tiền ở tài khoản A và cộng tiền vào tài khoản B phải cùng thành công hoặc cùng thất bại. Nếu chỉ một trong hai lệnh (UPDATE) được thực thi, dữ liệu sẽ rơi vào trạng thái không nhất quán. Việc sử dụng các câu lệnh như BEGIN TRANSACTION, COMMIT TRANSACTION và ROLLBACK TRANSACTION trong T-SQL giúp quản lý các kịch bản này, đảm bảo rằng một chuỗi các thao tác hoặc được áp dụng hoàn toàn, hoặc được hoàn tác hoàn toàn, giữ cho cơ sở dữ liệu luôn ở trạng thái hợp lệ.

III. Hướng dẫn chi tiết cú pháp lệnh INSERT INTO trong T SQL

Lệnh INSERT là một trong những câu lệnh SQL cơ bản và quan trọng nhất, được sử dụng để thêm một hoặc nhiều hàng (row) dữ liệu mới vào một bảng dữ liệu (table). Trong Transact-SQL, có hai phương pháp chính để sử dụng lệnh này. Phương pháp thứ nhất và phổ biến nhất là chèn từng dòng dữ liệu riêng lẻ. Cú pháp cơ bản là INSERT INTO tên_bảng (danh_sách_cột) VALUES (danh_sách_giá_trị). Việc chỉ định danh sách cột (column) là không bắt buộc nếu ta cung cấp đầy đủ giá trị cho tất cả các cột theo đúng thứ tự chúng được định nghĩa trong bảng. Tuy nhiên, việc liệt kê rõ ràng tên cột là một thực hành tốt, giúp truy vấn rõ ràng và ít bị lỗi hơn khi cấu trúc bảng thay đổi. Phương pháp thứ hai cho phép chèn hàng loạt dữ liệu từ một bảng khác bằng cách kết hợp INSERT INTO với một lệnh SELECT. Cú pháp này có dạng INSERT INTO tên_bảng (danh_sách_cột) SELECT ... FROM .... Cách này cực kỳ hiệu quả khi cần sao chép hoặc di chuyển dữ liệu giữa các bảng, đặc biệt là trong các tác vụ ETL (Extract, Transform, Load). Việc nắm vững cả hai cú pháp INSERT INTO này giúp linh hoạt hơn trong việc thao tác dữ liệu SQL Server.

3.1. Cú pháp INSERT INTO để thêm từng dòng dữ liệu cụ thể

Đây là cách sử dụng cơ bản nhất của lệnh INSERT. Cú pháp đầy đủ là INSERT INTO tên_bảng[(danh_sách_cột)] VALUES(danh_sách_trị). Tài liệu gốc minh họa bằng ví dụ: INSERT INTO khoa VALUES(‘DHT10’,’Khoa Luật’,’054821135’). Trong trường hợp này, các giá trị được cung cấp phải tương ứng với tất cả các cột của bảng khoa theo đúng thứ tự định nghĩa. Nếu chỉ muốn chèn dữ liệu cho một vài cột nhất định, ta bắt buộc phải chỉ định tên các cột (column) đó. Ví dụ: INSERT INTO sinhvien(masv,hodem,ten,gioitinh,malop) VALUES(‘0241020008’,‘Nguyễn Công’,’Chính’,1,’C24102’). Các cột không được liệt kê sẽ nhận giá trị mặc định (nếu có) hoặc NULL (nếu cột cho phép).

3.2. Phương pháp thêm nhiều hàng từ một lệnh SELECT khác

Cú pháp INSERT INTO kết hợp với lệnh SELECT là một công cụ mạnh mẽ để sao chép dữ liệu hàng loạt. Cú pháp có dạng INSERT INTO tên_bảng[(danh_sách_cột)] câu_lệnh_SELECT. Các hàng (row) được chèn vào bảng đích là kết quả trả về từ câu lệnh SELECT. Điều kiện quan trọng là số lượng và kiểu dữ liệu của các cột trong kết quả SELECT phải tương thích với các cột trong bảng đích. Tài liệu gốc đưa ra ví dụ: INSERT INTO luusinhvien SELECT hodem,ten,ngaysinh FROM sinhvien WHERE noisinh like ‘%Huế%’. Lệnh này sẽ lấy họ đệm, tên và ngày sinh của tất cả sinh viên có nơi sinh ở Huế từ bảng sinhvien và chèn chúng vào bảng luusinhvien. Đây là kỹ thuật phổ biến trong việc tạo bảng tạm, sao lưu hoặc tổng hợp dữ liệu.

IV. Bí quyết sử dụng lệnh UPDATE SET để cập nhật dữ liệu đúng cách

Lệnh UPDATE được dùng để sửa đổi dữ liệu hiện có trong các hàng (row) của một bảng dữ liệu (table). Đây là một lệnh DML trong SQL Server cực kỳ quan trọng nhưng cũng tiềm ẩn rủi ro nếu không cẩn thận. Cú pháp cốt lõi là UPDATE tên_bảng SET tên_cột_1 = giá_trị_1, tên_cột_2 = giá_trị_2, ... WHERE điều_kiện. Phần quan trọng nhất của lệnh này là mệnh đề WHERE. Mệnh đề này xác định các hàng cụ thể sẽ được cập nhật. Nếu thiếu mệnh đề WHERE, tất cả các hàng trong bảng sẽ bị cập nhật, gây ra sự thay đổi dữ liệu hàng loạt không mong muốn. Trong T-SQL, lệnh UPDATE còn có thể được mở rộng để cập nhật dữ liệu dựa trên thông tin từ các bảng khác. Bằng cách sử dụng mệnh đề FROM hoặc các truy vấn con trong mệnh đề WHERE, ta có thể thực hiện các cập nhật phức tạp, chẳng hạn như tính toán lại một trường dựa trên giá trị từ một bảng liên quan. Ví dụ, cập nhật thành tiền trong bảng hoadon dựa vào đơn giá trong bảng sanpham. Việc thành thạo cú pháp UPDATE SET và các biến thể của nó là kỹ năng cần thiết cho việc thao tác dữ liệu SQL Server một cách hiệu quả và an toàn.

4.1. Cú pháp UPDATE SET và vai trò của mệnh đề WHERE

Cú pháp cơ bản của lệnh UPDATE là UPDATE tên_bảng SET tên_cột = biểu_thức [WHERE điều_kiện]. Từ khóa SET chỉ định cột (column) cần cập nhật và giá trị mới của nó. Vai trò của mệnh đề WHERE là không thể thiếu để đảm bảo tính chính xác, nó lọc ra những hàng (row) cần được thay đổi. Tài liệu gốc cung cấp ví dụ: UPDATE monhoc SET sodvht = 3 WHERE sodvht = 2. Lệnh này chỉ cập nhật cột sodvht thành 3 cho những môn học có sodvht bằng 2. Nếu không có WHERE sodvht = 2, tất cả các môn học trong bảng sẽ bị cập nhật sodvht thành 3, một hành động có thể phá vỡ logic dữ liệu.

4.2. Cách cập nhật dữ liệu liên quan đến nhiều bảng dữ liệu

Trong thực tế, việc cập nhật thường yêu cầu thông tin từ các bảng khác. T-SQL hỗ trợ điều này thông qua mệnh đề FROM trong lệnh UPDATE. Cú pháp này cho phép nối bảng cần cập nhật với các bảng khác để lấy điều kiện hoặc giá trị. Ví dụ từ tài liệu gốc: UPDATE nhatkybanhang SET thanhtien = soluong*gia FROM mathang WHERE nhatkybanhang.mahang = mathang.mahang. Ở đây, bảng nhatkybanhang được cập nhật cột thanhtien, nhưng giá trị gia được lấy từ bảng mathang thông qua điều kiện nối trên mahang. Đây là một kỹ thuật nâng cao nhưng rất hữu ích trong thao tác dữ liệu SQL Server phức tạp.

4.3. Ứng dụng truy vấn con trong câu lệnh UPDATE hiệu quả

Tương tự như lệnh SELECT, truy vấn con (subquery) cũng có thể được sử dụng trong mệnh đề WHERE của lệnh UPDATE. Một truy vấn con có thể trả về một giá trị hoặc một tập hợp giá trị, được dùng để làm điều kiện lọc cho việc cập nhật. Ví dụ, cập nhật trạng thái cho những khách hàng có tổng giá trị đơn hàng lớn hơn một ngưỡng nhất định. Thay vì thực hiện nhiều bước, một truy vấn con có thể tính toán tổng giá trị đơn hàng ngay trong điều kiện WHERE. Kỹ thuật này giúp câu lệnh trở nên gọn gàng, logic và hiệu quả hơn, giảm thiểu số lần tương tác với cơ sở dữ liệu. Việc sử dụng truy vấn con trong cú pháp UPDATE SET thể hiện sự hiểu biết sâu sắc về câu lệnh SQL cơ bản.

V. Phương pháp xóa dữ liệu an toàn với lệnh DELETE FROM và TRUNCATE

Lệnh DELETE là một phần của bộ ba lệnh DML trong SQL Server, được sử dụng để loại bỏ một hoặc nhiều hàng (row) khỏi một bảng dữ liệu (table). Cú pháp của nó là DELETE FROM tên_bảng WHERE điều_kiện. Tương tự như lệnh UPDATE, mệnh đề WHERE trong lệnh DELETE đóng vai trò cực kỳ quan trọng. Nó xác định chính xác những hàng nào sẽ bị xóa. Nếu không có mệnh đề WHERE, lệnh DELETE sẽ xóa toàn bộ dữ liệu trong bảng. Đây là một hành động nguy hiểm và thường yêu cầu quyền hạn cao. Trong T-SQL, khi cần xóa tất cả dữ liệu, có một lựa chọn khác hiệu quả hơn là lệnh TRUNCATE TABLE. Mặc dù cả hai đều làm trống bảng, chúng hoạt động theo cách khác nhau. DELETE là một thao tác được ghi log cho từng hàng, do đó chậm hơn và có thể được rollback trong một giao dịch (transaction). Ngược lại, TRUNCATE TABLE là một thao tác DDL (Data Definition Language) ngầm, không ghi log cho từng hàng, do đó rất nhanh nhưng không thể rollback một cách dễ dàng. Hiểu được sự khác biệt giữa hai lệnh này là chìa khóa để thao tác dữ liệu SQL Server một cách tối ưu và an toàn.

5.1. Cú pháp DELETE FROM để xóa các hàng row cụ thể

Để xóa dữ liệu một cách có chọn lọc, cú pháp DELETE FROM phải đi kèm với mệnh đề WHERE. Điều kiện trong WHERE sẽ xác định các hàng (row) mục tiêu. Tài liệu gốc minh họa: DELETE FROM sinhvien WHERE noisinh LIKE ‘%Huế%’. Lệnh này sẽ xóa tất cả các bản ghi sinh viên có nơi sinh chứa chuỗi 'Huế'. Tương tự lệnh UPDATE, ta cũng có thể xóa dữ liệu dựa trên điều kiện liên quan đến nhiều bảng bằng cách sử dụng mệnh đề FROM để thực hiện phép nối. Ví dụ: DELETE FROM sinhvien FROM lop WHERE sinhvien.malop = lop.malop AND tenlop='Tin K24'. Lệnh này xóa sinh viên thuộc lớp 'Tin K24'.

5.2. So sánh lệnh DELETE và TRUNCATE TABLE để xóa toàn bộ bảng

Khi mục tiêu là xóa tất cả dữ liệu trong một bảng, cả DELETE FROM tên_bảng (không có WHERE) và TRUNCATE TABLE tên_bảng đều đạt được kết quả. Tuy nhiên, chúng có sự khác biệt cơ bản. DELETE là một thao tác DML, nó xóa từng hàng (row) một và ghi lại mỗi lần xóa vào nhật ký giao dịch. Điều này làm cho nó chậm hơn nhưng cho phép kích hoạt các trigger DELETE. Ngược lại, TRUNCATE TABLE là một thao tác DDL, nó giải phóng các trang dữ liệu được sử dụng bởi bảng, nhanh hơn nhiều và sử dụng ít tài nguyên hệ thống hơn. TRUNCATE cũng reset lại giá trị của cột IDENTITY, trong khi DELETE thì không. Lệnh TRUNCATE không thể được sử dụng trên các bảng có khóa ngoại (foreign key) tham chiếu đến nó.

VI. Top các phương pháp tối ưu thao tác dữ liệu SQL Server

Việc thao tác dữ liệu SQL Server hiệu quả không chỉ dừng lại ở việc biết cú pháp các câu lệnh SQL cơ bản. Nó đòi hỏi một sự hiểu biết sâu sắc về cấu trúc dữ liệu và các nguyên tắc tối ưu hóa. Một trong những phương pháp quan trọng nhất là luôn luôn sử dụng mệnh đề WHERE một cách cẩn trọng trong các lệnh UPDATE và DELETE để tránh các thay đổi không mong muốn trên quy mô lớn. Trước khi thực thi một lệnh thay đổi dữ liệu, hãy chạy một lệnh SELECT với cùng điều kiện WHERE để xác minh tập dữ liệu bị ảnh hưởng. Bên cạnh đó, việc hiểu rõ vai trò của khóa chính (primary key)khóa ngoại (foreign key) là nền tảng. Các khóa này không chỉ đảm bảo tính toàn vẹn dữ liệu mà còn giúp công cụ tối ưu hóa truy vấn của SQL Server tạo ra các kế hoạch thực thi hiệu quả. Đối với các thao tác phức tạp liên quan đến nhiều lệnh, việc bọc chúng trong một giao dịch (transaction) là bắt buộc. Điều này đảm bảo rằng dữ liệu sẽ không bao giờ ở trạng thái không nhất quán. Cuối cùng, việc sử dụng các công cụ như SQL Server Management Studio (SSMS) để phân tích kế hoạch thực thi và xác định các điểm nghẽn cổ chai sẽ giúp nâng cao đáng kể hiệu suất của các lệnh DML trong SQL Server.

6.1. Vai trò của khóa chính primary key và khóa ngoại foreign key

Khóa chính (primary key) đảm bảo mỗi hàng (row) trong một bảng là duy nhất. Khóa ngoại (foreign key) tạo ra một liên kết giữa hai bảng, thực thi tính toàn vẹn tham chiếu. Khi thực hiện các lệnh DML trong SQL Server, các ràng buộc này hoạt động như những người bảo vệ. Một lệnh INSERT sẽ thất bại nếu vi phạm khóa chính. Một lệnh UPDATE hoặc DELETE trên bảng cha có thể bị chặn hoặc gây ra các hành động xếp tầng (cascade) trên bảng con, tùy thuộc vào cách định nghĩa khóa ngoại. Hiểu rõ các mối quan hệ này giúp dự đoán và kiểm soát tác động của các thao tác dữ liệu, tránh các lỗi logic và đảm bảo dữ liệu luôn nhất quán.

6.2. Luôn kiểm tra kỹ mệnh đề WHERE trước khi thực thi

Đây là quy tắc vàng trong thao tác dữ liệu SQL Server. Một mệnh đề WHERE sai có thể dẫn đến hậu quả nghiêm trọng. Một phương pháp thực hành tốt nhất là bao bọc các lệnh UPDATE hoặc DELETE trong một khối BEGIN TRANSACTION ... ROLLBACK TRANSACTION để kiểm tra. Bằng cách này, ta có thể chạy lệnh, xem số lượng hàng bị ảnh hưởng, và sau đó hoàn tác lại các thay đổi. Khi đã chắc chắn về kết quả, ta có thể thay ROLLBACK bằng COMMIT. Một cách khác đơn giản hơn là chạy một lệnh SELECT với cùng một mệnh đề WHERE để xem trước chính xác những hàng nào sẽ được chọn để cập nhật hoặc xóa. Thói quen này giúp giảm thiểu rủi ro xuống mức thấp nhất.

6.3. Tóm tắt sức mạnh của bộ ba lệnh DML trong Transact SQL

Tóm lại, INSERT, UPDATE, và DELETE là ba trụ cột của việc thao tác dữ liệu trong Transact-SQL (T-SQL). Lệnh INSERT mở rộng cơ sở dữ liệu bằng cách thêm thông tin mới. Lệnh UPDATE duy trì sự chính xác và phù hợp của dữ liệu theo thời gian. Lệnh DELETE giữ cho cơ sở dữ liệu gọn gàng bằng cách loại bỏ thông tin lỗi thời hoặc không cần thiết. Khi được sử dụng một cách chính xác, kết hợp với các câu lệnh SQL cơ bản khác như SELECT, các ràng buộc dữ liệu (constraints) và cơ chế giao dịch (transaction), chúng cung cấp một bộ công cụ toàn diện và mạnh mẽ để quản lý vòng đời của dữ liệu trong bất kỳ hệ thống SQL Server nào.

04/10/2025

Trích đoạn nội dung tài liệu

Bài 3: Thao tác dữ liệu trong MS SQL Server 1. Thêm mới một dòng dữ liệu Dữ liệu trong các bảng được thể hiện dưới dạng các dòng (bản ghi). Để bổ sung thêm các dòng dữ liệu vào một bảng, ta sử dụng câu lệnh INSERT. Hầu hết các hệ quản trị CSDL dựa trên SQL cung cấp các cách dưới đây để thực hiện thao tác bổ sung dữ liệu cho bảng: − Bổ sung từng dòng dữ liệu với mỗi câu lệnh INSERT.

Đây là các sử dụng thường gặp nhất trong giao tác SQL. − Bổ sung nhiều dòng dữ liệu bằng cách truy xuất dữ liệu từ các bảng dữ liệu khác. Bổ sung từng dòng dữ liệu với lệnh INSERT Để bổ sung một dòng dữ liệu mới vào bảng, ta sử dụng câu lệnh INSERT với cú pháp như 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 ngay sau tên bảng không cần thiết phải chỉ định nếu giá trị các trường của bản ghi mới được chỉ định đầy đủ trong danh sách trị. Trong trường hợp này, thứ tự các giá trị trong danh sách trị phải bằng với số lượng các trường của bảng cần bổ sung dữ liệu cũng như phải tuân theo đúng thứ tự của các trường như khi bảng được định nghĩa.

Ví dụ: Câu lệnh dưới đây bổ sung thêm một dòng dữ liệu vào bảng KHOA INSERT INTO khoa VALUES(‘DHT10’,’Khoa Luật’,’054821135’) Trong trường hợp chỉ nhập giá trị cho một số cột trong bảng, ta phải chỉ định danh sách các cột cần nhập dữ liệu ngay sau tên bảng. Khi đó, các cột không được nhập dữ liệu sẽ nhận giá trị mặc định (nếu có) hoặc nhận giá trị NULL (nếu cột cho phép chấp nhận giá trị NULL). Nếu một cột không có giá trị mặc định và không chấp nhận giá trị NULL mà không đuợc nhập dữ liệu, câu lệnh sẽ bị lỗi. Ví dụ: Câu lệnh dưới đây bổ sung một bản ghi mới 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 trên còn có thể được viết như sau: INSERT INTO sinhvien VALUES(‘0241020008’,‘Nguyễn Công’,’Chính’, NULL,1,NULL,’C24102’) Bổ sung nhiều dòng dữ liệu từ bảng khác Một cách sử dụng khác của câu lệnh INSERT được sử dụng để bổ sung nhiều dòng dữ liệu vào một bảng, các dòng dữ liệu này được lấy từ một bảng khác thông qua câu lệnh SELECT.

Ở cách này, các giá trị dữ liệu được bổ sung vào bảng không được chỉ định tường minh mà thay vào đó là một câu lệnh SELECT truy vấn dữ liệu từ bảng khác. Cú pháp câu lệnh INSERT có dạng như 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 các trường HODEM, TEN, NGAYSINH. Câu lệnh dưới đây bổ sung vào bảng LUUSINHVIEN các dòng dữ liệu có được từ câu truy vấn SELECT: INSERT INTO luusinhvien SELECT hodem,ten,ngaysinh FROM sinhvien WHERE noisinh like ‘%Huế%’ Khi bổ sung dữ liệu theo cách này cần lưu ý một số điểm sau: Kết quả của câu lệnh SELECT phải có số cột bằng với số cột được chỉ định trong bảng đích và phải tương thích về kiểu dữ liệu. Cập nhật dữ liệu Câu lệnh UPDATE trong SQL được sử dụng để cập nhật dữ liệu trong các bảng.

Câu lệnh này có cú pháp như 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 là tên của bảng cần cập nhật dữ liệu. Một câu lệnh UPDATE có thể cập nhật dữ liệu cho nhiều cột bằng cách chỉ định các danh sách tên cột và biểu thức tương ứng sau từ khoá SET. Mệnh đề WHERE trong câu lệnh UPDATE thường được sử dụng để chỉ định các dòng dữ liệu chịu tác động của câu lệnh (nếu không chỉ định, phạm vi tác động của câu lệnh được hiểu là toàn bộ các dòng trong bảng) Ví dụ: Câu lệnh dưới đây cập nhật lại số đơn vị học trình của các môn học có số đơn vị học trình nhỏ hơn 2 UPDATE monhoc SET sodvht = 3 WHERE sodvht = 2 Sử dụng cấu trúc CASE trong câu lệnh UPDATE Cấu trúc CASE có thể được sử dụng trong biểu thức khi cần phải đưa ra các quyết định khác nhau về giá trị của biểu thức Ví dụ: Giả sử ta có bảng NHATKYPHONG sau đây Sau khi thực hiện 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 trong bảng sẽ là: Điều kiện cập nhật dữ liệu liên quan đến nhiều bảng Mệnh đề FROM trong câu lệnh UPDATE được sử dụng khi cần chỉ định các điều kiện liên quan đến các bảng khác với bảng cần cập nhật dữ liệu. Trong truờng hợp này, trong mệnh đề WHERE thường có điều kiện nối giữa các bảng.

Ví dụ: Giả sử ta có hai bảng MATHANG và NHATKYBANHANG như sau: Câu lệnh dưới đây sẽ cập nhật giá trị trường THANHTIEN của bảng NHATKYBANHANG theo công thức THANHTIEN = SOLUONG × GIA UPDATE nhatkybanhang SET thanhtien = soluong*gia FROM mathang WHERE nhatkybanhang.mahang Câu lệnh UPDATE với truy vấn con Tương tự như trong câu lệnh SELECT, truy vấn con có thể được sử dụng trong mệnh đề WHERE của câu lệnh UPDATE nhằm chỉ định điều kiện đối với các dòng dữ liệu cần cập nhật dữ liệu. Ví dụ: Câu lệnh ở trên có thể được viết như sau: 37 UPDATE nhatkybanhang SET thanhtien = soluong*gia FROM mathang WHERE mathang.mahang =(SELECT mathang.mahang FROM mathang WHERE mathang. Xóa các dòng dữ liệu Để xoá dữ liệu trong một bảng, ta sử dụng câu lệnh DELETE. Cú pháp của câu lệnh này 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 của bảng cần xoá dữ liệu được chỉ định sau DELETE FROM.

Mệnh đề WHERE trong câu lệnh được sử dụng để chỉ định điều kiện đối với các dòng dữ liệu cần xoá. Nếu câu lệnh DELETE không có mệnh đề WHERE thì toàn bộ các dòng dữ liệu trong bảng đều bị xoá. Ví dụ: Câu lệnh dưới đây xoá khỏi bảng SINHVIEN những sinh viên sinh tại Huế DELETE FROM sinhvien WHERE noisinh LIKE ‘%Huế%’ Xoá dữ liệu khi điều kiện liên quan đến nhiều bảng Nếu điều kiện trong câu lệnh DELETE liên quan đến các bảng không phải là bảng cần xóa dữ liệu, ta phải sử dụng thêm mệnh đề FROM và sau đó là danh sách tên các bảng đó. Trong trường hợp này, trong mệnh đề WHERE ta chỉ định thêm điều kiện nối giữa các bảng Ví dụ: Câu lệnh dưới đây xoá ra khỏi bảng SINHVIEN những sinh viên lớp Tin K24 DELETE FROM sinhvien FROM lop 38 WHERE lop.malop AND tenlop='Tin K24' Sử dụng truy vấn con trong câu lệnh DELETE Một câu lệnh SELECT có thể được lồng vào trong mệnh đề WHERE trong câu lệnh DELETE để làm điều kiện cho câu lệnh tương tự như câu lệnh UPDATE.

Ví dụ: Câu lệnh dưới đây xoá khỏi bảng LOP những lớp không có sinh viên nào học DELETE FROM lop WHERE malop NOT IN (SELECT DISTINCT malop FROM sinhvien) Xoá toàn bộ dữ liệu trong bảng Câu lệnh DELETE không chỉ định điều kiện đối với các dòng dữ liệu cần xoá trong mệnh đề WHERE sẽ xoá toàn bộ dữ liệu trong bảng. Thay vì sử dụng câu lệnh DELETE trong trường hợp này, ta có thể sử dụng câu lệnh TRUNCATE có cú pháp như sau: TRUNCATE TABLE tên_bảng Ví dụ: Câu lệnh sau xoá toàn bộ dữ liệu trong bảng diemthi: DELETE FROM diemthi có tác dụng tương tự với câu lệnh TRUNCATE TABLE diemthi 4. Truy xuất dữ liệu 4. Lấy thông tin từ các cột của bảng bằng mệnh đề SELECT Câu lệnh SELECT được sử dụng để truy xuất dữ liệu từ các dòng và các cột của một hay nhiều bảng, khung nhìn.

Câu lệnh này có thể dùng để thực hiện phép chọn (tức là truy xuất một tập con các dòng trong một hay nhiều bảng), phép chiếu (tức là truy xuất một tập con các cột trong một hay nhiều bảng) và phép nối (tức là liên kết các dòng trong hai hay nhiều bảng để truy xuất dữ liệu). Ngoài ra, câu lệnh này còn cung cấp khả năng thực hiện các thao tác truy vấn và thống kê dữ liệu phức tạp khác. • Cú pháp chung của 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 ý đầu tiên đối với câu lệnh này là các thành phần trong câu lệnh SELECT nếu được sử dụng phải tuân theo đúng thứ tự như trong cú pháp. Nếu không, câu lệnh sẽ được xem là không hợp lệ.

Câu lệnh SELECT được sử dụng để tác động lên các bảng dữ liệu và kết quả của câu lệnh cũng được hiển thị dưới dạng bảng, tức là một tập hợp các dòng và các 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 quả của câu lệnh sau đây cho biết mã lớp, tên lớp và hệ đào tạo của các lớp hiện có SELECT malop,tenlop,hedaotao FROM lop • Mệnh đề FROM Mệnh đề FROM trong câu lệnh SELECT được sử dung nhằm chỉ định các bảng và khung nhìn cần truy xuất dữ liệu. Sau FROM là danh sách tên của các bảng và khung nhìn tham gia vào truy vấn, tên của các bảng và khung nhìn được phân cách nhau bởi dấu phẩy. Ví dụ: Câu lệnh dưới đây hiển thị danh sách các khoa trong trường SELECT * FROM khoa kết quả câu lệnh như sau: Ta có thể sử dụng các bí danh cho các bảng hay khung nhìn trong câu lệnh SELECT.

Bí danh được gán trong mệnh đề FROM bằng cách chỉ định bí danh ngay sau tên bảng. Ví dụ: câu lệnh sau gán bí danh là a cho bảng khoa SELECT * FROM khoa a 40 • Danh sách chọn trong câu lệnh SELECT Danh sách chọn trong câu lệnh SELECT được sử dụng để chỉ định các trường, các biểu thức cần hiển thị trong các cột của kết quả truy vấn. Các trường, các biểu thức được chỉ định ngay sau từ khoá SELECT và phân cách nhau bởi dấu phẩy. Sử dụng danh sách chọn trong câu lệnh SELECT bao gồm các trường hợp sau: - Chọn tất cả các cột trong bảng Khi cần hiển thị tất cả các Trường trong các bảng, sử dụng ký tự * trong danh sách chọn thay vì phải liệt kê danh sách tất cả các cột.

Trong trường hợp này, các cột được hiển thị trong kết quả truy vấn sẽ tuân theo thứ tự mà chúng đã được tạo ra khi bảng được định nghĩa. Ví dụ: Câu lệnh SELECT * FROM lop cho kết quả bao như sau: 41 - Tên cột trong danh sách chọn Trong trường hợp cần chỉ định cụ thể các cột cần hiển thị trong kết quả truy vấn, ta chỉ định danh sách các tên cột trong danh sách chọn. Thứ tự của các cột trong kết quả truy vấn tuân theo thứ tự của các trường trong danh sách chọn.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ