1. Ánh xạ kiểu dữ liệu
| Kiểu dữ liệu của SQL Server |
Kiểu dữ liệu .NET Framework |
Kiểu dữ liệu Oracle |
Kiểu dữ liệu tương ứng trong SQL Server |
| bit (0, 1 hoặc null) |
Boolean |
RAW([1-2000]) |
VARBINARY([1-2000]) |
| tinyint (0 đến 255) |
Byte |
BFILE |
VARBINARY(MAX) |
| smallint (-32768 đến 32767) |
Int16 |
BLOB |
VARBINARY(MAX) |
| int (-2^31 đến 2^31-1) |
Int32 |
ROWID |
CHAR(18) |
| bigint |
Int64 |
CHAR([1-2000]) |
CHAR([1-2000]) |
| FLOAT |
Double |
NCHAR([1-1000]) |
NCHAR([1-1000]) |
| char |
String, Char[] |
VARCHAR2([1-4000]) |
VARCHAR([1-4000]) |
| nchar |
String, Char[] |
NVARCHAR2([1-2000]) |
NVARCHAR([1-2000]) |
| varchar |
String, Char[] |
NCLOB |
NVARCHAR(MAX) |
| nvarchar |
String, Char[] |
CLOB |
VARCHAR(MAX) |
| text |
String, Char[] |
DATE |
DATETIME |
| ntext |
String, Char[] |
|
|
| binary |
Byte[] |
|
|
| image |
Byte[] |
|
|
| varbinary |
Byte[] |
|
|
| FILESTREAM attribute (varbinary(max)) |
Byte[] |
|
|
| date (yyyy-dd-MM) |
DateTime |
|
|
| datetime (yyyy-dd-MM HH:mm:ss.000) |
DateTime |
|
|
| numeric (number(4,5), 123.45) |
Decimal |
|
|
| Decimal |
Decimal |
|
|
2. Thao tác với bảng cơ sở dữ liệu
-- Tạo bảng
CREATE TABLE ten_cua_database.DBO.BangSinhVien
(
MaSV VARCHAR(10) PRIMARY KEY,
HoTen CHAR(10) NOT NULL,
Tuoi INT NULL,
GioiTinh CHAR(5) CHECK (GioiTinh = 'Nam' OR GioiTinh = 'Nữ') UNIQUE,
DonVi CHAR(20) DEFAULT 'Khoa Công nghệ thông tin'
);
-- Thêm cột
ALTER TABLE TenBang
ADD ThuocTinh KieuDuLieu(DO_DAI) [NULL | NOT NULL];
-- Sửa kiểu dữ liệu
ALTER TABLE TenBang
ALTER COLUMN ThuocTinh KieuDuLieu;
-- Xóa cột
ALTER TABLE TenBang
DROP COLUMN ThuocTinh;
-- Đổi tên cột
EXEC sp_rename 'TenBang.TenCot', 'TenCotMoi';
-- Đổi tên bảng
EXEC sp_rename 'TenBangCu', 'TenBangMoi';
3. Ràng buộc
- Ràng buộc chính: primary key xác định duy nhất mỗi dòng trong bảng.
- Ràng buộc ngoại: foreign key để thiết lập và tăng cường kết nối giữa hai bảng.
- Ràng buộc duy nhất: unique (có thể là null) chỉ định giá trị của một cột hoặc nhiều cột phải duy nhất.
- Ràng buộc kiểm tra: check đặt điều kiện cơ bản để giới hạn giá trị đầu vào.
- Ràng buộc mặc định: default tự động thêm giá trị chỉ định khi không có giá trị được cung cấp.
-- Tạo ràng buộc
ALTER TABLE TenBang
ADD CONSTRAINT TenRangBuoc RangBuocType CauDieuKien;
-- Thêm ràng buộc chính cho mã sinh viên
ALTER TABLE SinhVien
ADD CONSTRAINT PK_MaSV PRIMARY KEY (MaSV);
-- Thêm ràng buộc ngoại cho mã sinh viên trong bảng điểm
ALTER TABLE BangDiem
ADD CONSTRAINT FK_MaSV FOREIGN KEY (MaSV)
REFERENCES SinhVien(MaSV);
-- Thêm ràng buộc kiểm tra
ALTER TABLE SinhVien
ADD CONSTRAINT CH_Tuoi CHECK (Tuoi > 18);
-- Thêm ràng buộc duy nhất cho họ tên
ALTER TABLE PhanBo
ADD CONSTRAINT UN_HoTen UNIQUE (HoTen);
-- Thêm ràng buộc mặc định cho giới tính
ALTER TABLE SinhVien
ADD CONSTRAINT DF_GioiTinh DEFAULT 'Nam' FOR GioiTinh;
-- Xóa ràng buộc
ALTER TABLE TenBang
DROP CONSTRAINT TenRangBuoc;
4. Thêm, xóa, sửa, truy vấn
-- Thêm
INSERT INTO TenBang (cot1, cot2, cot3, ...) VALUES (giatri1, giatri2, giatri3, ...);
-- Xóa
DELETE FROM TenBang WHERE dieukien;
-- Sửa
UPDATE TenBang SET cot1 = giatri1, cot2 = giatri2, ... WHERE dieukien;
-- Truy vấn
SELECT cot1, cot2, ... FROM TenBang;
-- Lấy 5 dòng đầu
SELECT TOP 5 * FROM TenBang; -- SQL Server
SELECT * FROM NguoiDung WHERE ROWNUM <= 5; -- Oracle
SELECT * FROM NguoiDung LIMIT 5; -- MySQL
-- Trả về các giá trị khác nhau
SELECT DISTINCT cot1, cot2, ... FROM TenBang;
-- % thay thế 0 hoặc nhiều ký tự
SELECT ho_ten FROM SinhVien WHERE ho_ten LIKE 'Nguyen%'; -- Tìm sinh viên họ Nguyễn
-- _ thay thế 1 ký tự
SELECT ho_ten FROM SinhVien WHERE ho_ten LIKE 'Nguyen_'; -- Tìm sinh viên có tên 2 chữ
-- Hàm tổng hợp
-- sum(): Tính tổng các giá trị
-- avg(): Tính trung bình
-- max(): Tìm giá trị lớn nhất
-- min(): Tìm giá trị nhỏ nhất
SELECT ham_tong_hop(ten_cot) FROM TenBang;
-- Nhóm theo cột, sử dụng HAVING để lọc
SELECT Websites.ten, SUM(access_log.so_lan) AS so_lan_truy_cap FROM Websites
INNER JOIN access_log
ON Websites.id = access_log.site_id
WHERE Websites.alexa < 200
GROUP BY Websites.ten
HAVING SUM(access_log.so_lan) > 200;
-- Sắp xếp
SELECT * FROM BangDiem ORDER BY Diem [DESC];
-- Kết hợp
SELECT quoc_gia, ten FROM Websites
WHERE quoc_gia = 'CN'
UNION ALL
SELECT quoc_gia, ten_app FROM apps
WHERE quoc_gia = 'CN'
ORDER BY quoc_gia;
-- Truy vấn liên kết
SELECT Websites.ten, access_log.so_lan, access_log.ngay
FROM Websites
INNER JOIN access_log
ON Websites.id = access_log.site_id
ORDER BY access_log.so_lan;
-- Truy vấn lồng nhau
SELECT * FROM sc WHERE ma_sinh_vien IN (SELECT MaSV FROM SinhVien WHERE khoa = 'Khoa Cong nghe thong tin');