Bài 4.1 Lệnh truy vấn dữ liệu SQL (STRUCTURED QUERY LANGUAGE)


Tìm hiểu và học cách sử dụng: Select, Top, Alias, Distinct, Where


Khả năng của lệnh SELECT

  • Chọn cột
  • Chọn dòng
  • Kết bảng

khả năng của select

Lệnh SELECT cơ bản

  • SELECT : xác định những cột gì
  • FROM : xác định bảng nào
SELECT *|{[DISTINCT] cot|bieu_thuc [bi_danh],...}
FROM bang

Một số lưu ý khi viết câu lệnh SQL

  • Câu lệnh SQL không phân biệt chữ hoa, chữ thường.
  • Câu lệnh SQL có thể viết trên 1 hoặc nhiều dòng.
  • Các từ khóa không được viết tắt hoặc tách ra thành nhiều dòng.
  • Các mệnh đề khác nhau nên đặt trên những dòng khác nhau

Các phép toán của biểu thức

Tạo các biểu thức với các kiểu dữ liệu số và ngày bằng các phép toán số học

  • + Cộng
  • - Trừ
  • * Nhân
  • / Chia

Sử dụng các phép toán số học

SELECT tennv, mucluong, mucluong + 300
FROM qlns.nhanvien

sử dụng các phép toán học

Khái niệm giá trị NULL

  • NULL là một giá trị chưa được xác định
  • NULL khác với zero hoặc giá trị rỗng
  • Các biểu thức số học có chứa giá trị NULL sẽ cho kết quả NULL
SELECT tennv,mucluong,phucap,12*(mucluong+phucap)
FROM qlns.nhanvien

khái niệm giá trị null

Khái niệm bí danh của cột (Alias)

  • Sự đổi tên tiêu đề cho cột
  • Rất hữu ích cho các biểu thức tính toán
  • Xuất hiện ngay sau tên cột hoặc biểu thức, có thể thêm từ khóa AS giữa tên cột và bí danh
  • Yêu cầu phải đặt trong dấu nháy kép hoặc móc vuông nếu có chứa khoảng trắng, ký tự đặc biệt hoặc sử dụng chữ hoa

Sử dụng các bí danh cột

SELECT tennv AS ten, phucap pc
FROM qlns.nhanvien

sử dụng alias

SELECT tennv [Ten], mucluong*12 "Luong Mot Nam"
FROM qlns.nhanvien

sử dụng alias 2

Loại bỏ những dòng trùng nhau

SELECT maphong
FROM qlns.nhanvien

Theo mặc định thì kết quả hiểu thị của câu lệnh truy vấn là tất cả các dòng, bao gồm cả những dòng trùng nhau

sử dụng DISTINCT

SELECT DISTINCT maphong
FROM qlns.nhanvien

Loại bỏ những dòng trùng nhau

sử dụng DISTINCT 2

Chỉ thể hiện một số dòng Top

SELECT [TOP (expression) [PERCENT][ WITH TIES ]]
[danh_sach_cot]
FROM ...

Ví dụ : Cho biết tên và mức lương 3 nhân viên đầu tiên

SELECT TOP 3 tennv, mucluong
FROM qlns.nhanvien

Giới hạn các dòng trả về Where

Mệnh đề WHERE theo sau mệnh đề FROM.

SELECT *|{[DISTINCT] cot|bieu_thuc [bi_danh],...}
FROM bang
[WHERE dieu_kien]

Sử dụng mệnh đề WHERE

SELECT manhanvien,honv,tennv,maphong,macongviec,ngayvaolam
FROM qlns.nhanvien
WHERE maphong = 20

sử dụng where

Bài tập

  1. Hiển thị danh sách các thông tin trong bảng CTPNHAP có thêm cột thành tiền biết rằng Thành tiền = SLNhap * DgNhap
  2. Hiển thị danh sách các nhà cung cấp trong bảng NHACC có cột địa chỉ ở quận 1 HCM, sắp xếp theo thứ tự họ tên tăng dần và số điện thoại giảm dần
  3. Hiển thị danh sách các phiếu xuất có ngày xuất nằm trong khoảng [1/1/2009, 31/1/2009]
  4. Hiển thị danh sách các chi tiết phiếu xuất có thêm các cột tên vật tư, ngày xuất. Lọc theo số lượng xuất lớn hơn 5 và ngày xuất trong tháng 1/2009
  5. Hiển thị danh sách các nhà cung cấp gồm các thông tin sau: mã nhà cung cấp, tên nhà cung cấp đã có đặt hàng. Chú ý: không được trùng lắp dữ liệu
  6. Hiển thị danh sách các đơn đặt hàng gần đây nhất trong bảng DONDH
  7. Hiển thị danh sách các nhà cung cấp mà chưa có đơn đặt hàng
-- Chú ý : select * là lấy tất cả các cột trong bảng
 
-- Câu 1
SELECT *,(slnhap * dgnhap) AS 'Thành tiền'
FROM ctpnhap
 
-- Câu 2
SELECT *
FROM nhacc
WHERE nhacc.diachi LIKE N'%Q1 HCM%'
ORDER BY nhacc.tennhacc ASC,nhacc.dienthoai DESC
 
-- Câu 3
-- đinh dạng ngày là : MM/dd/yyyy
SELECT *
FROM pxuat
WHERE pxuat.ngayxuat BETWEEN '1/1/2009' AND '1/31/2009'
 
-- Câu 4
SELECT cx.*,vt.tenvtu,px.ngayxuat
FROM ctpxuat AS cx
        INNER JOIN vattu AS vt ON cx.mavtu = vt.mavtu
        INNER JOIN pxuat AS px ON cx.sopx = px.sopx
WHERE cx.slxuat > 5 AND MONTH(px.ngayxuat) = 1
 
-- Câu 5
SELECT DISTINCT cc.manhacc,cc.tennhacc
FROM nhacc AS cc
    INNER JOIN dondh AS dh ON cc.manhacc = dh.manhacc
 
-- Câu 6
SELECT *
FROM dondh AS dh
ORDER BY dh.ngaydh DESC
 
-- Câu 7
SELECT *
FROM nhacc AS cc
WHERE cc.manhacc NOT IN (SELECT dh.manhacc FROM dondh AS dh)

Bài viết tiếp theo

Chia sẽ bài viết :