[SQL] Ôn tập truy vấn SQL

Ôn tập truy vấn SQL cơ bản và nâng cao. Các bạn đã học SQL và có mục đích ôn tập lại các kiến thức đã học để chuẩn bị cho kỳ thi hoặc phỏng vấn.

 

  1. Thao tác với Database

Thêm

CREATE  DATABASE <tên database>;

Xoá

DROP      DATABASE <tên database>;

Sửa

USE        DATABASE <tên database>;

 

  1. Thao tác với Table

Thêm

CREATE TABLE (

Tên biến    kiểu dữ liệu      ràng buộc

Tên biến    kiểu dữ liệu      ràng buộc

Tên biến    kiểu dữ liệu      ràng buộc

);

CREATE TABLE CUSTOMERS(

  ID   INT              PRIMARY KEY,

  NAME VARCHAR (20)     NOT NULL,

  AGE  INT              NOT NULL CHECK(AGE > 18),

  ADDRESS  CHAR (25) ,

  SALARY   DECIMAL (18, 2)    /* The (18,2) simply means that we can have 18 digits with 2 of them after decimal point*/

);

DESC CUSTOMERS;

Xoá

DROP TABLE table_name;

DROP TABLE CUSTOMERS;

Sửa

Thêm 1 cột

ALTER TABLE <tên bảng> ADD <tên cột> <kiểu dữ liệu> [<RBTV>]

 

ALTER TABLE GIAOVIEN ADD HOCVI CHAR(20)

Sửa

Xoá 1 cột

ALTER TABLE <tên bảng> DROP COLUMN <tên cột>

ALTER TABLE GIAOVIEN DROP COLUMN HOCVI

Sửa

Mở rộng 1 cột

ALTER TABLE <tên bảng> ALTER COLUMN <tên cột> <kiểu dữ liệu mới>

ALTER TABLE GIAOVIEN ALTER COLUMN HOCVI CHAR(50)

Sửa

Thêm RBTV

ALTER TABLE <tên bảng> ADD

CONSTRAINT <Ten_RBTV> <RBTV>,

CONSTRAINT <Ten_RBTV> <RBTV>

ALTER TABLE KHOA ADD

                    CONSTRAINT KHOA_PK PRIMARY KEY (MAKHOA),

                    CONSTRAINT KHOA_FK FOREIGN KEY (TRUONGKHOA) REFERENCES GIAOVIEN(MAGV)

Sửa

Xoá RBTV

ALTER TABLE <tên bảng> DROP <Ten_RBTV>

ALTER TABLE KHOA DROP KHOA_FK

 

  1. Thao tác với dữ liệu

Thêm

INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)  

 

VALUES (value1, value2, value3,...valueN);

INSERT INTO CUSTOMERS (ID, NAME, AGE, ADDRESS, SALARY)

VALUES (1, 'Mark', 32, 'Texas', 50000.00 );

 

INSERT INTO CUSTOMERS

VALUES (4, 'Bill', 25, 'Chicago', 75000.00 );

Thêm dữ liệu từ bảng khác

INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)

<các câu truy vấn SELECT, FROM, WHERE>

 

 

Xoá

DELETE FROM TABLE_NAME

[WHERE <CONDITION>]

DELETE FROM CUSTOMERS

WHERE NAME LIKE 'Bill';

Sửa

UPDATE <tên bảng>

SET <tên thuộc tính> = <giá trị mới>

       <tên thuộc tính> = <giá trị mới>

[WHERE <điều kiện>]

UPDATE GIAOVIEN

SET LUONG=LUONG*1.1

WHERE HOTEN = 'Bill';


  1. Truy vấn dữ liệu cơ bản

 

SELECT tb2.column1, tb1.column2,…

FROM table_name1 tb1, table_name2 tb2

WHERE [condition1] AND [condition2] OR [tb1.column1 = tb2.column1];

 

  1. Xử lý kết quả trả về

DISTINCT

ALL

Các cụm này để trước tên cột, sau SELECT. Mặc định là ALL.

 

  1. So sánh chuỗi

LIKE, NOT LIKE, ESCAPE (loại bỏ ký tự không muốn so sánh)

% đại diện CHUỖI bất kỳ

_ đại diện KÝ TỰ bất kỳ

 

SELECT *

FROM GIAOVIEN

WHERE NGAYSINH LIKE '__/__/197_';

 

 

SELECT *

FROM GIAOVIEN

WHERE HOTEN LIKE '%Nguyễn%s' ESCAPE 's';

 

 

  1. So sánh trong khoảng

BETWEEN, NOT BETWEEN

 

SELECT *

FROM GIAOVIEN

WHERE LƯƠNG BETWEEN 2000 AND 2500;

 

  1. Sắp xếp kết quả trả về

ORDER BY <danh sách cột> <ASC/DESC>

 

SELECT *

FROM GIAOVIEN

ORDER BY MAGV DESC;

 

  1. Phép toán tập hợp trong SQL

UNION, INTERSECT, EXCEPT. Nếu muốn lấy tất cả kết quả không lọc trùng nhau thì dùng từ khoá ALL: UNION ALL,…

 

SELECT MADT

FROM GIAOVIEN GV, THAMGIADT TG

WHERE GV.MAGV = TG.MAGV AND GV.HOTEN LIKE '%Nguyễn%'

UNION

SELECT MADT

FROM GIAOVIEN GV1, DETAI DT

WHERE GV1.MAGV = DT.GVCNDT AND GV.HOTEN LIKE '%Nguyễn%';

 

  1. Truy vấn phức tạp trong SQL
  1. So sánh giá trị NULL và UNKNOW

Trong SQL có 3 giá trị logic là: TRUE, FALSE, UNKNOW.

Mệnh đề WHERE chỉ trả về các kết quả mang giá trị TRUE. Nhưng phép kết ngoài OUTER JOIN thì vẫn xét kết quả UNKNOW.

Để kiểm tra kết quả có NULL hay không. Thì dùng từ khoá IS, IS NOT.

 

SELECT MAGV, HOTEN

FROM GIAOVIEN

WHERE GVQLCM IS NULL;

 

  1. Truy vấn lồng

Toán tử được sử dụng: IN, NOT IN, ALL, ANY, SOME, EXISTS, NOT EXISTS.

 

  1. Truy vấn lồng phân cấp

Thuộc tính của truy vấn cha và truy vấn con tách biệt, không sử dụng chung.

 

SELECT MAGV, HOTEN

FROM GIAOVIEN

WHERE MABM IN (SELECT MABM

                FROM BOMON

                WHERE TENBM = 'Hệ thống thông tin');

 

  1. Truy vấn lồng tương quan

Thuộc tính con tham chiếu tới thuộc tính truy vấn cha. Mỗi lần thực hiện truy vấn con sẽ thực hiện nhiều lần, mỗi lần tương ứng với một bộ của truy vấn cha.

 

SELECT MADT

FROM GIAOVIEN GV

WHERE EXISTS (SELECT *

                FROM BOMON BM

                WHERE TENBM = 'Hệ thống thông tin'

                AND BM.MABM = GV.MABM);

  1. Sử dụng phép kết - JOIN ở mệnh đề FROM

Có nhiều loại phép kết:

INNER JOIN

 

LEFT JOIN / LEFT OUTER JOIN

 

RIGHT JOIN / RIGHT OUTER JOIN

 

 

SELECT <column>

FROM R1 JOIN R2 ON <biểu thức>

WHERE <điều kiện>;

 

  1. Hàm tính tổng hợp trong SQL

COUNT

SUM

MAX

MIN

AVG

 

  1. Mệnh đề Group By và Having

Gom nhóm dữ liệu lại và dùng HAVING để lọc các dữ liệu gom nhóm

 

SELECT BM.MABM, BM.TENBM, AVG(LUONG)

FROM GIAOVIEN GV, BOMON BM

WHERE GV.MABM = BM.MABOMON

GROUP BY BM.MABM, BM.TENBM

HAVING AVG(LUONG) > 2000000;