Bài viết sau đây sẽ giới thiệu tới các bạn cách thêm, cập nhật và xóa dữ liệu trong SQL Server. Chúng ta sẽ thêm, cập nhật, và xóa dễ dàng hơn.
Mục lụcCác câu lệnh thao tác dữ liệu trong SQL không những chỉ sử dụng để truy vấn dữ liệu m à còn để thay đổi và cập nhật dữ liệu trong cơ sở dữ liệu. So với câu lệnh SELECT, việc sử dụng các câu lệnh để bổ sung, cập nhật hay xoá dữ liệu đ ơn giản hơn nhiều. Trong phần còn lại của chương này sẽ đề cập đến 3 câu lệnh:
Lệnh INSERT
Lệnh UPDATE Lệnh DELETE
1. Thêm 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 thêm dữ liệu cho bảng:
Thêm 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.
Thêm 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.
Thêm từng dòng dữ liệu
Để 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ụ: Thêm thông tin một khách hàng mới vào bảng Customer
insert into customers (customername, birthday, gender, address) values('Nguyen Van An', '4/2/1976', 'True', '14 Thong Nhat') hoặc insert into customers values('Nguyen Van An', '4/2/1976', 'True', '14 Thong Nhat')Lưu ý: Trường CUSTOMERID được thiết lập identity là “YES” nên ta không cần thêm giá trị trường này mà SQL sẽ tự động tạo ra một giá trị cho trường này. Chi tiết về identity sẽ nói trong chương 4.
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.
Thêm một tập các dòng dữ liệu vào bảng
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ụ: insert into Customers_Backup select * from CustomersLưu ý: 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.
2. 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 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ó t hể 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 đ ượ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ụ:
update customers set customername = 'Cao Van Chung' where customerid = 9Trong câu lệnh UPDATE có thể sử dụng CASE…WHEN .
Ví dụ:
select * into tmp1 from customers update tmp1 set address = case when customerid < 2 then 'Nguyen Trung Truc' else 'Nguyen Thi Minh Khai' end3. Xóa 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ụ:
delete from Items where itemid = 3Xoá 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ụ:
delete from orderdetail from items where items.itemid = orderdetail.itemid and items.itemname = 'LAPTOP'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ụ:
delete from orderdetail from items where items.itemid = (select i.itemid from items i inner join orderdetail od on i.itemid = od.itemid WHERE itemname = 'LAPTOP')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ụ: truncate table tmp1
Access cho Microsoft 365 Access 2021 Access 2019 Access 2016 Access 2013 Access 2010 Access 2007 Xem thêm...Ít hơn
Nếu truy vấn của bạn hoạt động kém hiệu quả thì việc thêm một số câu lệnh SQL cơ bản có thể giúp các kết quả của bạn đúng trọng tâm hơn. Chúng ta hãy xem một vài loại câu lệnh SQL và các mệnh đề hoặc các phần mà bạn có thể sửa để cho ra kết quả mong muốn.
Lưu ý: Bài viết này không áp dụng cho các ứng dụng web của Access – loại cơ sở dữ liệu bạn thiết kế bằng Access và phát hành trực tuyến.
Một câu lệnh select của SQL có hai hoặc ba mệnh đề. Mệnh đề SELECT cho biết nơi cơ sở dữ liệu cần tìm dữ liệu để yêu cầu trả về một kết quả cụ thể.
Lưu ý: Câu lệnh SELECT luôn kết thúc bằng một dấu chấm phẩy (;) nằm ở cuối của mệnh đề cuối cùng hoặc trên một dòng đơn lẻ ở cuối của câu lệnh SQL.
Câu lệnh select sau đây yêu cầu Access lấy thông tin từ các cột Địa chỉ Email và Công ty, từ bảng Liên hệ, cụ thể là nơi nó tìm thấy “Seattle” trong cột Thành phố.
Truy vấn trên đây có ba mệnh đề: SELECT, FROM và WHERE.
1. Mệnh đề SELECT liệt kê các cột có dữ liệu bạn muốn sử dụng và có một toán tử (SELECT) theo sau là hai mã định danh (Địa chỉ Email và Công ty). Nếu một mã định danh có các khoảng trắng hoặc ký tự đặc biệt (chẳng hạn như "Địa chỉ Email"), hãy đặt mã định danh đó trong ngoặc vuông.
2. Mệnh đề FROM xác định bảng nguồn. Trong ví dụ này, nó có một toán tử (FROM) theo sau là một mã định danh (Liên hệ).
3. Mệnh đề WHERE là một mệnh đề tùy chọn. Ví dụ này có một toán tử (WHERE) theo sau là một biểu thức (Thành phố="Seattle").
Để biết thêm thông tin về truy vấn chọn, hãy xem mục tạo truy vấn chọn đơn giản.
Sau đây là danh sách các mệnh đề SQL thường gặp:
Mệnh đề SQL | Tính năng của chúng | Bắt buộc ? |
CHỌN | Liệt kê tất cả các trường có dữ liệu đáng quan tâm. | Có |
TỪ | Liệt kê các bảng có các trường được liệt kê trong mệnh đề SELECT. | Có |
VỊ TRÍ | Chỉ rõ các tiêu chí mà trường phải đáp ứng theo từng bản ghi được đưa vào kết quả. | Không |
SẮP XẾP THEO | Chỉ rõ cách sắp xếp kết quả. | Không |
GROUP BY | Trong một câu lệnh SQL có các hàm tổng hợp, nó liệt kê các trường không được tóm tắt trong mệnh đề SELECT. | Chỉ khi có các trường như |
ĐANG CÓ | Trong một câu lệnh SQL có các hàm tổng hợp, nó chỉ rõ các điều kiện áp dụng cho các trường được tóm tắt trong câu lệnh SELECT. | Không |
Mỗi mệnh đề SQL được hình thành từ các thuật ngữ. Sau đây là danh sách một số thuật ngữ SQL thường gặp.
Thuật ngữ SQL | Định nghĩa | Ví dụ |
mã định danh | Tên mà bạn dùng để xác định một đối tượng cơ sở dữ liệu, như tên cột. | [E-mail Address] và [Công ty] |
toán tử | Một từ khóa đại diện cho một thao tác hoặc điều chỉnh một thao tác. | AS |
hằng | Một giá trị không đổi, chẳng hạn như một số hoặc giá trị NULL. | 42 |
biểu thức | Một sự kết hợp các mã định danh, toán tử, hằng số và hàm định trị thành một giá trị duy nhất. | >= Products.[Unit Price] |
Đầu Trang
Tùy chỉnh | Ví dụ |
Để chỉ xem các giá trị khác biệt. Hãy sử dụng từ khóa DISTINCT trong mệnh đề SELECT. | Ví dụ nếu khách hàng của bạn thuộc vài văn phòng chi nhánh khác nhau và một số khách hàng có cùng số điện thoại và bạn muốn mỗi số điện thoại chỉ được liệt kê một lần thì mệnh đề SELECT của bạn sẽ như thế này: SELECT DISTINCT [txtCustomerPhone] |
Để thay đổi cách xuất hiện của một mã định danh trong dạng xem biểu dữ liệu để dễ đọc hơn. Sử dụng toán tử AS (Một từ khóa đại diện cho một thao tác hoặc điều chỉnh một thao tác) với một bí danh trường trong mệnh đề SELECT. Một bí danh trường là tên bạn gán cho một trường để dễ đọc kết quả hơn. | SELECT [txtCustPhone] AS [Customer Phone] |
Tùy chỉnh | Ví dụ |
Bạn có thể sử dụng một bí danh bảng hoặc một tên khác mà bạn gán cho một bảng trong một câu lệnh select. Một bí danh bảng sẽ hữu ích nếu bảng có tên dài, nhất là khi bạn có nhiều trường trùng tên trong các bảng khác nhau. | Để chọn dữ liệu từ hai trường, cả hai được đặt tên ID, một lấy từ bảng tblCustomer và trường kia từ bảng tblOrder: SELECT [tblCustomer].[ID], [tblOrder].[ID]Sử dụng toán tử AS để xác định các biệt danh bảng trong mệnh đề FROM: FROM [tblCustomer] AS [C], [tblOrder] AS [O]Sau đó bạn có thể sử dụng các biệt danh bảng này trong mệnh đề SELECT, như sau: SELECT [C].[ID], [O].[ID] |
Dùng các kết nối để kết hợp các cặp bản ghi từ hai nguồn dữ liệu thành một kết quả duy nhất hoặc để cho biết có bao gồm các bản ghi từ một trong hai bảng hay không nếu không có bản ghi tương ứng trong bảng liên quan. Nối các bảng sao cho truy vấn kết hợp các mục từ các bảng và loại trừ các mục khi không có bản ghi tương ứng trong bảng kia | Mệnh đề FROM có thể giống như thế này: FROM [tblCustomer] INNER JOIN [tblOrder]ON [tblCustomer].[CustomerID]=[tblOrder].[CustomerID] |
Về việc sử dụng các liên kết
Có hai loại kết nối, nối trong và nối ngoài. Kết nối trong thường gặp hơn trong các truy vấn. Khi bạn chạy một truy vấn có một kết nối trong, kết quả chỉ hiện những mục mà ở đó có tồn tại một giá trị chung ở cả hai bảng đã kết nối.
Các kết nối ngoài cho biết liệu có chứa dữ liệu ở nơi không tồn tại giá trị chung không. Kết nối ngoài mang tính định hướng, có nghĩa là bạn có thể xác định có bao gồm tất cả bản ghi từ bảng thứ nhất đã xác định trong kết nối (được gọi là kết nối trái) không, hay bao gồm tất cả bản ghi từ bảng thứ hai trong kết nối (được gọi là kết nối phải). Một kết nối ngoài có cú pháp SQL như sau:
FROM table1 [ LEFT | RIGHT ] JOIN table2ON table1.field1 = table2.field2Xem thêm thông tin về việc sử dụng các kết nối trong truy vấn tại mục Kết nối bảng và truy vấn.
Đầu Trang
Mệnh đề WHERE bao gồm các tiêu chí giúp giới hạn số mục mà một truy vấn trả về. Hãy xem ví dụ về các tiêu chí truy vấn và cách hoạt động của chúng.
Một ví dụ về cách bạn có thể tùy chỉnh mệnh đề WHERE cơ bản là để giới hạn kết quả của một truy vấn; Giả sử bạn muốn tìm số điện thoại của một khách hàng và chỉ có thể nhớ họ của anh ta là Bagel. Trong ví dụ này, họ được lưu trong trường LastName, do đó cú pháp SQL sẽ là:
WHERE [LastName]='Bagel'Sử dụng mệnh đề WHERE cũng để kết hợp các nguồn dữ liệu cho các cột có dữ liệu khớp nhưng có kiểu dữ liệu khác nhau. Việc này sẽ tiện lợi cho bạn vì bạn không thể tạo một kết nối giữa các trường có các kiểu dữ liệu khác nhau. Sử dụng một trường làm tiêu chí cho trường kia, bằng từ khóa LIKE. Ví dụ nếu bạn muốn sử dụng dữ liệu từ bảng Assets và bảng Employees, chỉ khi loại tài sản trong trường loại tài sản của bảng Assets có số 3 trong trường Số lượng của bảng Employees, mệnh đề WHERE của bạn có thể như sau:
WHERE field1 LIKE field2
Quan trọng: Bạn không thể chỉ ra các tiêu chí cho một trường được sử dụng với một hàm tổng hợp trong một mệnh đề WHERE. Thay vào đó, bạn sử dụng mệnh đề HAVING để chỉ ra các tiêu chí cho các trường tổng hợp.
Đầu Trang
Hãy dùng toán tử UNION khi bạn muốn xem một dạng xem kết quả kết hợp từ vài truy vấn chọn tương tự như nhau. Ví dụ nếu cơ sở dữ liệu có một bảng Products và một bảng Services và cả hai bảng đều có ba trường: ưu đãi dành riêng hoặc sản phẩm hoặc dịch vụ, giá, bảo hành hoặc bảo đảm. Mặc dù bảng Products lưu giữ thông tin bảo hành và bảng Services lưu giữ thông tin bảo đảm, nhưng thông tin cơ bản là giống nhau. Bạn có thể sử dụng một truy vấn union để kết hợp ba trường này từ hai bảng đó như thế này:
SELECT name, price, warranty, exclusive_offerFROM ProductsUNION ALLSELECT name, price, guarantee, exclusive_offer FROM Services;Khi bạn chạy truy vấn, dữ liệu từ mỗi tập hợp các trường tương ứng sẽ được kết hợp thành một trường kết quả. Để bao gồm bất kỳ hàng trùng nhau nào vào kết quả, hãy sử dụng toán tử ALL.
Lưu ý: Câu lệnh Select phải có cùng số trường kết quả, theo cùng thứ tự và có cùng loại dữ liệu hoặc có các loại dữ liệu tương thích. Để thực hiện truy vấn hợp, kiểu dữ liệu Số và Văn bản là tương thích.
Để biết thêm thông tin về truy vấn Kết hợp, hãy xem mục sử dụng truy vấn kết hợp để xem một kết quả đã hợp nhất từ nhiều truy vấn.
Đầu Trang