Blog của Lê Văn Luật

Đời người thì có hạn mà sự học thì vô hạn!

SQL Server 2: Các lệnh xử lý dữ liệu

Xóa dữ liệu: DELETE FROM TênBảng WHERE ĐiềuKiện

VD: Xóa tất cả các học sinh khỏi bảng tblHocSinh

DELETE FROM tblHocSinh

VD: Xóa các học sinh khóa 35 trong bảng tblHocSinh:

DELETE FROM tblHocSinh WHERE LEFT(HSMa,2)=’35’

Chỉnh sửa dữ liệu: UPDATE TênBảng SET TênTrường = GiáTrị,… WHERE ĐiềuKiện

VD: Đổi toàn bộ họ, tên học sinh thành chữ hoa:

UPDATE tblHocSinh SET HSHo=UPPER(HSHo), HSTen=UPPER(HSTen)

VD: Đổi toàn bộ nơi sinh từ Hà Tây thành Hà Nội:

UPDATE tblHocSinh SET HSNoiSinh=N’Hà Nội’ WHERE HSNoiSinh=N’Hà Tây’

Chèn dữ liệu vào bảng: có hai dạng

INSERT INTO TênBảng(DanhSáchTrường) VALUES(DanhSáchGiáTrị)

VD: thêm một lớp có mã CNTT3801 vào bảng tblLop

INSERT INTO tblLop VALUES(‘CNTT3801’,0)

Lưu ý: với trường có IDENTITY thì bỏ qua giá trị trong DanhSáchGiáTrị, Nếu cố tình muốn gán trị cho trường IDENTITY thì cần liệt kê tên trường trong DanhSáchTrường và phải bật IDENTITY_INSERT là ON:

SET IDENTITY_INSERT tblLop ON

INSERT INTO TênBảng(DanhSáchTrường) SELECT DanhSáchTrường FROM DanhSáchBảng WHERE ĐiềuKiện

VD: chuyển các học sinh khóa 35 vào bảng tblHocSinhKhoa35 (ở đây giả sử bảng tblHocSinhKhoa35 đã có).
Chép học sinh sang bảng tblHocSinhKhoa35:

INSERT INTO tblHocSinhKhoa35 SELECT * FROM tblHocSinh WHERE LEFT(HSMa,2)=’35’

Xóa học sinh khóa 35 trong bảng gốc (bảng tblHocSinh)

DELETE FROM tblHocSinh WHERE LEFT(HSMa,2)=’35’

Chọn lựa dữ liệu: SELECT

Câu lệnh SELECT là câu lệnh quan trọng nhất trong SQL nói chung và T-SQL nói riêng. Nó quan trọng nhất vì: hấu hết thao tác trên CSDL là thao tác xử lý (lọc, sắp xếp, tính toán, thống kê) dữ liệu. Chính vì vậy câu lệnh SELECT là câu lệnh được dùng nhiều nhất và nó phức tạp nhất.
Dạng cơ bản (còn một số mệnh đề ta không nêu ra ở đây):
SELECT DanhSáchTrường
FROM DanhSáchBảng
WHERE ĐiềuKiện
GROUP BY DanhSáchTrườngGhépNhóm
HAVING ĐiềuKiệnTrênNhóm
ORDER BY DanhSáchTrườngSắpXếp

Ta s tìm hiu qua các ví d c th sau đó s tng hp li:

Các ví d v DanhSáchTrường

Các toán tử:

  • Số học: cộng (+), trừ (-), nhân (*), chia (/), chia lấy phần dư (%). Lưu ý: phép chia (/) trên 2 toán hạng nguyên sẽ cho kết quả là phần nguyên.
  • Bit: và (&), hoặc (|), hoặc loại trừ (^), phủ định (~)
  • Chuỗi: nối chuỗi (+)
  • So sánh: = != > >= !> < <= !<
  • Ngày: tính toán với ngày ta dùng các hàm.

Liệt kê tất cả các thông tin – tức lấy tất cả các trường (nên dùng SELECT *) của tất cả các học sinh (nên không có WHERE) từ bảng học sinh:

SELECT *
 FROM tblHocSinh

Liệt kê Mã, Họ tên và Ngày sinh của tất cả các học sinh. Họ tên ghép chung trong một cột. Lấy tên cột mới là HSHoTen.

SELECT HSMa, HSHo + ‘ ‘ + HSTen AS HSHoTen, HSNgaySinh
 FROM tblHocSinh

Liệt kê Mã, Họ, Tên của các học sinh Nam (ở đây giả sử trường HSGioiTinh có kiểu bit và qui định 1 là nam, 0 là nữ)

SELECT HSMa, HSHo, HSTen
 FROM tblHocSinh
 WHERE HSGioiTinh = 1

Liệt kê danh sách các nơi sinh của các học sinh trong trường (mỗi nơi sinh chỉ hiển thị 1 lần)

SELECT DISTINCT HSNoiSinh
 FROM tblHocSinh

Liệt kê danh sách học sinh có cột tuổi

SELECT HSMa, HSHo, HSTen, HSNgaySinh, HSTuoi=ROUND(DATEDIFF(DAY, HSNgaySinh, GETDATE())/365,0)
 FROM tblHocSinh

Các ví d v DanhSáchBng

Ta có thể đặt tên đại diện cho tên bảng:

SELECT *
 FROM tblHocSinh AS hs, tblDiem AS d
 WHERE hs.HSMa = d.HSMa

Hoặc:

SELECT *
 FROM tblHocSinh hs, tblDiem d
 WHERE hs.HSMa = d.HSMa

Nguyên tắc kết nối chung: đặt điều kiện trong mệnh đề where

TênBảng1.TênTrường1  TOánTửKếtNối   TênBảng2.TênTrường2

Các dạng kết nối:

Kết nối bằng (EquiJoin) hay Kết nối tự nhiên (Natural join)

SELECT HSMa, HSHo, HSTen, DDiem
 FROM tblHocSinh, tblDiem
 WHERE tblHocSinh.HSMa = tblDiem.HSMa

Hay:

SELECT HSMa, HSHo, HSTen, DDiem
 FROM tblHocSinh INNER JOIN tblDiem ON tblHocSinh.HSMa = tblDiem.HSMa

Tự kết nối (Self Join)

SELECT A.DVMa, A.DVTen, B.DVTen
 FROM tblDonVi A
 WHERE A.DVMa = B.DVCapTren

Hay:

SELECT A.DVMa, A.DVTen, B.DVTen
 FROM tblDonVi A LEFT JOIN tblDonVi B ON A.DVCapTren = B.DVMa

Các ví dụ về ĐiềuKiện
ĐiềuKiện được tạo bởi các toán tử và các lượng từ.

  • Các toán tử so sánh (> !> >= = != < !<)
  • BETWEEN … AND …
    Nguyên tắc chung: BETWEEN GiáTrị1 AND GiáTrị2
SELECT HSMa, HSHo, HSTen, HSNgaySinh, DDiem
 FROM tblHocSinh INNER JOIN tblDiem ON tblHocSinh.HSMa = tblDiem.HSMa
 WHERE DDiem BETWEEN 5 AND 7

LIKE
Dùng với ký tự đại diện.
% Thay cho 1 nhóm ký tự bất kỳ. VD: HSTen LIKE ‘NH%’ liệt kê tất cả các học sinh có tên bắt đầu bằng ‘nh’ (như, nhưng, nhung, nhàn, nhị, nhân,…).
_ (Gạch dưới) thay cho 1 ký tự bất kỳ. VD: HSTen LIKE ‘NH_’ liệt kê tất cả các học sinh có tên dài 3 ký tự và bắt đầu bằng ‘nh’ (như, nhị, …).
[ ] Liệt kê các ký tự được phép. VD: HSTen LIKE ‘[LD]anh’ liệt kê các học sinh có tên bắt đầu bằng ‘L’ hoặc ‘D’ sau đó là ‘anh’ (Danh, Lanh).
[^ ] Liệt kê các ký tự không được phép. VD: HSTen LIKE ‘[^DL]%’ liệt kê tất cả các học sinh có tên không bắt đầu bằng ‘D’ hoặc ‘L’.

IN, NOT IN
Nguyên tắc chung: IN | NOT IN (DanhSáchTrị | SubQuery)

SELECT HSMa, HSHo, HSTen
 FROM tblHocSinh
 WHERE HSNoiSinh IN (N’Hà Nội’, N’Thái Bình’)
SELECT HSMa, HSHo, HSTen
 FROM tblHocSinh
 WHERE HSMa NOT IN
         (SELECT HSMa
                 FROM tblDiem)

ANY, ALL

Nguyên tắc chung: ToánTửSoSánh ANY | ALL (SubQuery | DanhSáchTrị)

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

Information

This entry was posted on 26/02/2013 by in Cơ sở dữ liệu and tagged , , , .

Điều hướng

%d bloggers like this: