Cơ bản về SqlServer

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');
  

Thẻ: SqlServer sql

Đăng vào ngày 23 tháng 5 lúc 17:44