24/05/2018, 16:50

Truy vấn dữ liệu (Select)

SELECT [DISTINCT]|Columns_list|Expression_list|* FROM <Tables_list> WHERE <Conditions> GROUP BY <Columns> HAVING <Conditions_for_group> ORDER BY [ACS| DESC] Trong đó: Sau SELECT : Các thông tin cần đưa ra, đó chính là danh ...

SELECT [DISTINCT]|Columns_list|Expression_list|*
FROM <Tables_list>
WHERE <Conditions>
GROUP BY <Columns>
HAVING <Conditions_for_group>
ORDER BY [ACS| DESC]

Trong đó:

  • Sau
    SELECT
    : Các thông tin cần đưa ra, đó chính là danh sách các thuộc tính
  • Sau
    FROM
    : Danh sách các tên bảng, từ đó thông tin được lấy ra.
  • Sau
    WHERE
    : Các biểu thức logic, chỉ ra thông tin được lấy ra từ hàm nào hoặc điều kiện nối giữa các bảng.
  • Sau
    GROUP BY
    : Các cột mà trong đó được tính theo từng nhóm.
  • Sau
    HAVING
    : Biểu thức logic chỉ ra thông tin được lấy ra từ nhóm nào.
  • Sau
    ORDER BY
    : Chỉ ra các cột mà trong đó thông tin được sắp xếp theo thứ tự.
    • ASC
      : thông tin được sắp xếp theo chiều tăng dần (ASCendent)
    • DESC
      : thông tin được sắp xếp theo chiều giảm dần(DESCendent)

Xét bảng: NHANVIEN

NHANVIEN
MaNV HoTen CongViec Luong MaDV
NV001 Phạm Thị Nhàn Thư ký 500 0001
NV002 Hoàng Thanh Vân Giáo viên 600 0001
NV003 Hoàng Thị Lan Giáo viên 200 0002
NV004 Đỗ Trung Dũng Thư ký 700 0003
... ... .... ... ...

Đưa tất cả các cột

Đưa tất cả các thông tin về nhân viên
SELECT * 
FROM NHANVIEN
    

Kết quả: Toàn bộ bảng trên.

Đưa một số các cột

Đưa ra Hoten, Luong của các nhân viên
SELECT Hoten, Luong
FROM NHANVIEN
    

Kết quả

sl_NV_some_col
Hoten Luong
Phạm Thị Nhàn 500
Hoàng Thanh Vân 600
Hoàng Thị Lan 200
Đỗ Trung Dũng 700

Tránh các giá trị trùng lặp (DISTINCT)

Đưa ra các công việc khác nhau trong bảng NHANVIEN
SELECT DISTINCT Congviec
FROM NHANVIEN

Kết quả: - Nếu không có lệnh

DISTINCT
:
Congviec
Thư ký
Giáo viên
Giáo viên
Thư ký

và có

DISTINCT
Congviec
Giáo viên
Thư ký

Đưa ra các giá trị của các biểu thức

Đưa ra Hoten, Luongnam (Lương *12) của tất cả các nhân viên
SELECT Hoten, Luong*12 
FROM NHANVIEN

Kết quả

sl_bieuthuc
Hoten Expr1001
Phạm Thị Nhàn 6000
Hoàng Thanh Vân 7200
Hoàng Thị Lan 2400
Đỗ Trung Dũng 8400

Sử dụng bí danh cột

SELECT Hoten, Luong*12 AS Luongnam
FROM NHANVIEN

Kết quả

Hoten LuongNam
Phạm Thị Nhàn 6000
Hoàng Thanh Vân 7200
Hoàng Thị Lan 2400
Đỗ Trung Dũng 8400

Sắp xếp thứ tự (ORDER BY)

Đưa ra Hoten, Luong sắp xếp theo thứ tự tăng dần/ giảm dần của Luong.
SELECT Hoten, Luong
FROM NHANVIEN 
ORDER BY Luong [ASC/ DESC]

Kết quả

Hoten Luong
Hoàng Thị Lan 200
Phạm Thị Nhàn 500
Hoàng Thanh Vân 600
Đỗ Trung Dũng 700
  • Trong đó
    ASC
    (ascendent) là tăng dần,
    DESC
    (descendent) là giảm dần.
  • Nếu để giá trị mặc định thì sẽ sắp xếp theo chiều tăng dần.

Lệnh có dạng

SELECT [DISTINCT]|Columns_list|Expression_list|*
FROM <Tables_list>
WHERE <Conditions>

Điều kiện sau mệnh để

Where
là một biểu thức lôgic, sử dụng các phép toán sau:

Sử dụng các phép so sánh

= Toán tử bằng hay tương đương
!= Toán tử khác hay không tương đương
> Toán tử lớn hơn
< Toán tử nhỏ hơn
>= Toán tử lớn hơn hoặc bằng
<= Toán tử nhỏ hơn hoặc bằng
Đưa ra Hoten, Luong của các nhân viên có Luong>300
Hoten Luong
Phạm Thị Nhàn 500
Hoàng Thanh Vân 600
Đỗ Trung Dũng 700

Sử dụng các phép logic: AND, OR, NOT

Đưa ra Hoten, Luong của những nhân viên có công việc là Giáo viên và mức lương >300.
SELECT HoTen, Luong
FROM NHANVIEN
WHERE (Luong>300) AND (Congviec='Giáo viên')

Kết quả:

HoTen Luong
Hoàng Thanh Vân 600

Phân tích ví dụ sau

SESELECT HoTen, Luong
FROM NHANVIEN
WHERE (((Luong)>400) AND (Not(CongViec)=('Thư ký') )
OR (Congviec=('Thư ký' ) ))

Kết quả

HoTen Luong
Phạm Thị Nhàn 500
Hoàng Thanh Vân 600
Đỗ Trung Dũng 700

Các toán tử của SQL

  • [NOT] BETWEEN x AND y: [Không] nằm giữa giá trị X và Y
  • IN (danh sách): thuộc bất kỳ giá trị nào trong danh sách
  • x [NOT] LIKE y: Đúng nếu x [không] giống khung mẫu y. Các ký tự dùng trong khuôn mẫu: Dấu gạch dưới ( _ ) : Chỉ một ký tự bất kỳ Dấu phần trăm ( % ) : Chỉ một nhóm ký tự bất kỳ
  • IS [NOT] NULL: kiểm tra giá trị rỗng
  • EXISTS: Trả về TRUE nếu có tồn tại.

- Phép BETWEEN … AND …

Đưa ra những nhân viên có Lương trong khoảng 300 đến 600.
SELECT HoTen, Luong
FROM NHANVIEN
WHERE Luong BETWEEN 300 AND 600

Kết quả

HoTen Luong
Phạm Thị Nhàn 500
Hoàng Thanh Vân 600

- Phép IN ( Một tập hợp)

Đưa ra những nhân viên có lương hoặc 200, 300, 600.
SELECT HoTen, Luong
FROM NHANVIEN
WHERE Luong IN (200,500,600)

Kết quả

HoTen Luong
Phạm Thị Nhàn 500
Hoàng Thanh Vân 600
Hoàng Thị Lan 200

- Phép LIKE

  • Ký tự thay thế ‘%’ đại diện cho một nhóm các ký tự chưa biết (trong Access là: *).
  • Ký tự thay thế ‘_’ đại diện cho một ký tự chưa biết (trong Access là:?).
Đưa ra Hoten, Congviec của các nhân viên có Họ tên bắt đầu bằng chữ ‘Hoàng’.
SELECT HoTen, Congviec
FROM NHANVIEN
WHERE Hoten LIKE 'Hoàng*'

Kết quả

HoTen Congviec
Hoàng Thanh Vân Giáo viên
Hoàng Thị Lan Giáo viên
SELECT HoTen, Congviec
FROM NHANVIEN
WHERE Hoten LIKE 'Hoàng Thanh Vân'

- Phép IS [NOT] NULL

SELECT * FROM NHANVIEN WHERE Diachi IS NULL
    

Các HQTCSDL đưa ra các hàm khác nhau, vì thế khi làm việc với HQTCSDL nào chúng ta nên tìm hiểu các hàm và cách sử dụng chúng đối với HQTCSDL đó. Sau đây là một số các loại hàm thường dùng.

Hàm số học

Đầu vào và đầu ra là các giá trị kiểu số.

ROUND(n[,m]): Cho giá trị làm tròn của n (đến cấp m, mặc nhiên m=0)

TRUNC(n[,m]): Cho giá trị n lấy m chữ số tính từ chấm thập phân.

CEIL(n): Cho số nguyên nhỏ nhất lớn hơn hoặc bằng n.

FLOOR(n): Cho số nguyên lớn nhất bằng hoặc nhỏ hơn n.

POWER(m,n): Cho lũy thừa bậc n của m.

EXP(n): Cho giá trị của en

SQRT(n): Cho căn bậc 2 của n, n>=0

SIGN(n): Cho dấu của n.

n<0 có SIGN(n)= -1

n=0 có SIGN(n)= 0

n>0 có SIGN(n)= 1

ABS(n): Cho giá trị tuyệt đối

MOD(m,n): Cho phần dư của phép chia m cho n

Một số hàm kiểu số tham khảo

0