24/05/2018, 21:11

Ngôn ngữ thao tác dữ liệu

Đối với đa số người sử dụng, SQL được xem như là công cụ hữu hiệu để thực hiện các yêu cầu truy vấn và thao tác trên dữ liệu. Trong chương này, ta sẽ bàn luận đến nhóm các câu lệnh trong SQL được sử dụng cho mục đích này. Nhóm các câu lệnh này được gọi ...

Đối với đa số người sử dụng, SQL được xem như là công cụ hữu hiệu để thực hiện các yêu cầu truy vấn và thao tác trên dữ liệu. Trong chương này, ta sẽ bàn luận đến nhóm các câu lệnh trong SQL được sử dụng cho mục đích này. Nhóm các câu lệnh này được gọi chung là ngôn ngữ thao tác dữ liệu (DML: Data Manipulation Language) bao gồm các câu lệnh sau:

• SELECT: Sử dụng để truy xuất dữ liệu từ môt hoặc nhiều bảng.

• INSERT: Bổ sung dữ liệu.

• UPDATE: Cập nhật dữ liệu

• DELETE: Xoá dữ liệu

Trong số các câu lệnh này, có thể nói SELECT là câu lệnh tương đối phức tạp và được sử dụng nhiều trong cơ sở dữ liệu. Với câu lệnh này, ta không chỉ thực hiện các yêu cầu truy xuất dữ liệu đơn thuần mà còn có thể thực hiện được các yêu cầu thống kê dữ liệu phức tạp. Cũng chính vì vậy, phần đầu của chương này sẽ tập trung tương đối nhiều đến câu lệnh SELECT. Các câu lệnh INSERT, UPDATE và DELETE được bàn luận đến ở cuối chương

Câu lệnh SELECT được sử dụng để truy xuất dữ liệu từ các dòng và các cột của một hay nhiều bảng, khung nhìn. Câu lệnh này có thể dùng để thực hiện phép chọn (tức là truy xuất một tập con các dòng trong một hay nhiều bảng), phép chiếu (tức là truy xuất một tập con các cột trong một hay nhiều bảng) và phép nối (tức là liên kết các dòng trong hai hay nhiều bảng để truy xuất dữ liệu). Ngoài ra, câu lệnh này còn cung cấp khả năng thực hiện các thao tác truy vấn và thống kê dữ liệu phức tạp khác.

Cú pháp chung của câu lệnh SELECT có dạng:

SELECT ALL | DISTINCT][TOP n] danh_sách_chọn
    [INTO tên_bảng_mới]
    FROMdanh_sách_bảng/khung_nhìn
    [WHEREđiều_kiện]
    [GROUP BYdanh_sách_cột]
    [HAVING điều_kiện]
    [ ORDER BYcột_sắp_xếp]
    [COMPUTEdanh_sách_hàm_gộp [BY danh_sách_cột]]
    

Điều cần lưu ý đầu tiên đối với câu lệnh này là các thành phần trong câu lệnh SELECT nếu được sử dụng phải tuân theo đúng thứ tự như trong cú pháp. Nếu không, câu lệnh sẽ được xem là không hợp lệ.

Câu lệnh SELECT được sử dụng để tác động lên các bảng dữ liệu và kết quả của câu lệnh cũng được hiển thị dưới dạng bảng, tức là một tập hợp các dòng và các cột (ngoại trừ trường hợp sử dụng câu lệnh SELECT với mệnh đề COMPUTE).

Kết quả của câu lệnh sau đây cho biết mã lớp, tên lớp và hệ đào tạo của các lớp hiện có

SELECT malop,tenlop,hedaotao
FROM lop

Mệnh đề FROM trong câu lệnh SELECT được sử dung nhằm chỉ định các bảng và khung nhìn cần truy xuất dữ liệu. Sau FROM là danh sách tên của các bảng và khung nhìn tham gia vào truy vấn, tên của các bảng và khung nhìn được phân cách nhau bởi dấu phẩy.

Câu lệnh dưới đây hiển thị danh sách các khoa trong trường

SELECT * FROM khoa

kết quả câu lệnh như sau:

Ta có thể sử dụng các bí danh cho các bảng hay khung nhìn trong câu lệnh SELECT. Bí danh được gán trong mệnh đề FROM bằng cách chỉ định bí danh ngay sau tên bảng.

Câu lệnh sau gán bí danh là cho bảng khoa

SELECT * FROM khoa a

Danh sách chọn trong câu lệnh SELECT được sử dụng để chỉ định các trường,các biểu thức cần hiển thị trong các cột của kết quả truy vấn. Các trường, các biểu thức được chỉ định ngay sau từ khoá SELECT và phân cách nhau bởi dấu phẩy. Sử dụng danh sách chọn trong câu lệnh SELECT bao gồm các trường hợp sau:

Chọn tất cả các cột trong bảng

Khi cần hiển thị tất cả các trường trong các bảng, sử dụng ký tự * trong danh sách chọn thay vì phải liệt kê danh sách tất cả các cột. Trong trường hợp này, các cột được hiển thị trong kết quả truy vấn sẽ tuân theo thứ tự mà chúng đã được tạo ra khi bảng được định nghĩa.

Câu lệnh

SELECT * FROM lop

cho kết quả bao như sau:

Tên cột trong danh sách chọn

Trong trường hợp cần chỉ định cụ thể các cột cần hiển thị trong kết quả truy vấn, ta chỉ định danh sách các tên cột trong danh sách chọn. Thứ tự của các cột trong kết quả truy vấn tuân theo thứ tự của các trường trong danh sách chọn.

Câu lệnh

SELECT malop,tenlop,namnhaphoc,khoa
FROM lop

cho biết mã lớp, tên lớp, năm nhập học và khoá của các lớp và có kết quả như sau:

Lưu ý: Nếu truy vấn được thực hiện trên nhiều bảng/khung nhìn và trong các bảng/khung nhìn có các trường trùng tên thì tên của những trường này nếu xuất hiện trong danh sách chọn phải được viết dưới dạng:

tên_bảng.tên_trường
SELECT malop, tenlop, lop.makhoa, tenkhoa
FROM lop, khoa
WHERE lop.malop = khoa.makhoa

Thay đổi tiêu đề các cột

Trong kết quả truy vấn, tiêu đề của các cột mặc định sẽ là tên của các trường tương ứng trong bảng. Tuy nhiên, để các tiêu đề trở nên thân thiện hơn, ta có thể đổi tên các tiêu đề của các cột. Để đặt tiêu đề cho một cột nào đó, ta sử dụng cách viết:

tiêu_đề_cột = tên_trường 
    

hoặc

tên_trường AS tiêu_đề_cột 
    

hoặc

tên_trườngtiêu_đề_cột
    

Câu lệnh dưới đây:

SELECT 'Mã lớp'= malop,tenlop 'Tên lớp',khoa AS 'Khoá' 
FROM lop

cho biết mã lớp, tên lớp và khoá học của các lớp trong trường. Kết quả của câu lệnh như sau:

Sử dụng cấu trúc CASE trong danh sách chọn

Cấu trúc CASE được sử dụng trong danh sách chọn nhằm thay đổi kết quả của truy vấn tuỳ thuộc vào các trường hợp khác nhau. Cấu trúc này có cú pháp như sau:

CASE biểu_thức
    WHEN biểu_thức_kiểm_tra THEN kết_quả
    [ ... ]
    [ELSE kết_quả_của_else] END
    

hoặc

CASE
    WHEN điều_kiện THEN kết_quả
    [ ... ]
    [ELSE kết_quả_của_else] END
    

Để hiển thị mã, họ tên và giới tính (nam hoặc nữ) của các sinh viên, ta sử dụng câu lệnh

SELECT masv,hodem,ten,CASE gioitinh
    WHEN 1 THEN ‘Nam’
    ELSE ‘Nữ'
    END AS gioitinh
    FROM sinhvien
    

hoặc

SELECT masv,hodem,ten, CASE
    WHEN gioitinh=1 THEN 'Nam' 
    ELSE 'Nữ'
    END AS gioitinh
    FROM sinhvien
    

Kết quả của hai câu lệnh trên đều có dạng như sau

Hằng và biểu thức trong danh sách chọn

Ngoài danh sách trường, trong danh sách chọn của câu lệnh SELECT còn có thể sử dụng các biểu thức. Mỗi một biểu thức trong danh sách chọn trở thành một cột trong kết quả truy vấn.

câu lệnh dưới đây cho biết tên và số tiết của các môn học

SELECT tenmonhoc,sodvht*15 AS sotiet
FROM monhoc

Nếu trong danh sách chọn có sự xuất hiện của giá trị hằng thì giá trị này sẽ xuât hiện trong một cột của kết quả truy vấn ở tất cả các dòng

Câu lệnh

SELECT tenmonhoc,Số tiết:',sodvht*15 AS sotiet
    FROM monhoc
    

cho kết quả như sau:

Loại bỏ các dòng dữ liệu trùng nhau trong kết quả truy vấn

Trong kết quả của truy vấn có thể xuất hiện các dòng dữ liệu trùng nhau. Để loại bỏ bớt các dòng này, ta chỉ định thêm từ khóa DISTINCT ngay sau từ khoá SELECT.

Hai câu lệnh dưới đây

SELECT khoa FROM lop
    

SELECT DISTINCT khoa FROM lop
    

có kết quả lần lượt như sau:

Giới hạn số lượng dòng trong kết quả truy vấn

Kết quả của truy vấn được hiển thị thường sẽ là tất cả các dòng dữ liệu truy vấn được. Trong trường hợp cần hạn chế số lượng các dòng xuất hiện trong kết quả truy vấn, ta chỉ định thêm mệnh đề TOP ngay trước danh sách chọn của câu lệnh SELECT.

Câu lệnh dưới đây hiển thị họ tên và ngày sinh của 5 sinh viên đầu tiên trong danh sách

SELECT TOP 5 hodem,ten,ngaysinh
    FROM sinhvien
    

Ngoài cách chỉ định cụ số lượng dòng cần hiển thị trong kết quả truy vấn, ta có thể chỉ định số lượng các dòng cần hiển thị theo tỷ lệ phần trăm bằng cách sử dụng thêm từ khoá PERCENT như ở ví dụ dưới đây.

Câu lệnh dưới đây hiển thị họ tên và ngày sinh của 10% số lượng sinh viên hiện có trong bảng SINHVIEN

SELECT TOP 10 PERCENT hodem,ten,ngaysinh
    FROM sinhvien
    

Chỉ định điều kiện truy vấn dữ liệu

Mệnh đề WHERE trong câu lệnh SELECT được sử dụng nhằm xác định các điều kiện đối với việc truy xuất dữ liệu. Sau mệnh đề WHERE là một biểu thức logic và chỉ những dòng dữ liệu nào thoả mãn điều kiện được chỉ định mới được hiển thị trong kết quả truy vấn.

Câu lệnh dưới đây hiển thị danh sách các môn học có số đơn vị học trình lớn hơn 3

SELECT * FROM monhoc
        WHERE sodvht>3
 

Kết quả của câu lệnh này như sau:

Trong mệnh đề WHERE thường sử dụng:

• Các toán tử kết hợp điều kiện (AND, OR)

• Các toán tử so sánh

• Kiểm tra giới hạn của dữ liệu (BETWEEN/ NOT BETWEEN)

• Danh sách

• Kiểm tra khuôn dạng dữ liệu.

• Các giá trị NULL

Các toán tử so sánh

T oán tử Ý ng h ĩa
= Bằng
> Lớn hơn
< Nhỏ hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
<> khác
!> Không lớn hơn
!< Không nhỏ hơn

Câu lệnh:

SELECT masv,hodem,ten,,ngaysinh
FROM sinhvien
WHERE (tenn=’Anh’) AND (YEAR(GETDATE())-YEAR(ngaysinh)<=20)
    

cho biết mã, họ tên và ngày sinh của các sinh viên có tên là Anhvà có tuổi nhỏ hơn hoặc bằng 20.

Kiểm tra giới hạn của dữ liệu

Để kiểm tra xem giá trị dữ liệu nằm trong (ngoài) một khoảng nào đó, ta sử dụng toán tử BETWEEN (NOT BETWEEN) như sau:

c h s d n g Ý n g h ĩa
giá_trị BETWEEN a AND b a ≤ giá_trị ≤ b
giá_trị NOT BETWEEN a AND b (giá_trị < a) AND (giá_trị>b)

Câu lệnh dưới đây cho biết họ tên và tuổi của các sinh viên có tên là Bình

và có tuổi nằm trong khoảng từ 20 đến 22

SELECT hodem,ten,year(getdate())-year(ngaysinh) AS tuoi
    FROM sinhvien
    WHERE ten =’Bình’ AND
    YEAR(GETDATE())-YEAR(ngaysinh) BETWEEN 20 AND 22
    

Danh sách (IN và NOT IN)

Từ khoá IN được sử dụng khi ta cần chỉ định điều kiện tìm kiếm dữ liệu cho câu lệnh SELECT là một danh sách các giá trị. Sau IN (hoặc NOT IN) có thể là một danh sách các giá trị hoặc là một câu lệnh SELECT khác.

Để biết danh sách các môn học có số đơn vị học trình là 2, 4 hoặc 5, thay vì sử dụng câu lệnh

SELECT * FROM monhoc
    WHERE sodvht=2 OR sodvht=4 OR sodvht=5
    ta có thể sử dụng câu lệnh
    SELECT * FROM monhoc
    WHERE sodvht IN (2,4,5)
    

Toán tử LIKE và các ký tự đại diện

Từ khoá LIKE (NOT LIKE) sử dụng trong câu lệnh SELECT nhằm mô tả khuôn dạng của dữ liệu cần tìm kiếm. Chúng thường được kết hợp với các ký tự đại diện sau đây

tự đ ại d i n Ý n g h ĩa
% Chuỗi ký tự bất kỳ gồm không hoặc nhiều ký tự
- Ký tự đơn bất kỳ
[] Ký tự đơn bất kỳ trong giới hạn được chỉ định (ví dụ[a-f]) hay một tập (ví dụ [abcdef])
[^] Ký tự đơn bất kỳ không nằm trong giới hạn được chỉđịnh ( ví dụ [^a-f] hay một tập (ví dụ [^abcdef]).

Câu lệnh dưới đây

SELECT hodem,ten FROM sinhvien
    WHERE hodem LIKE 'Lê%'
    

cho biết họ tên của các sinh viên có họ là Lê và có kết quả như sau

Câu lệnh:

SELECT hodem,ten FROM sinhvien
    WHERE hodem LIKE 'Lê%' AND ten LIKE '[AB]%'
    

Có kết quả là:

Giá trị NULL

Dữ liệu trong một cột cho phép NULL sẽ nhận giá trị NULL trong các trường hợp sau:

• Nếu không có dữ liệu được nhập cho cột và không có mặc định cho cột hay kiểu dữ liệu trên cột đó.

• Người sử dụng trực tiếp đưa giá trị NULL vào cho cột đó.

• Một cột có kiểu dữ liệu là kiểu số sẽ chứa giá trị NULL nếu giá trị được chỉ định gây tràn số.

Trong mệnh đề WHERE, để kiểm tra giá trị của một cột có giá trị NULL hay không, ta sử dụng cách viết:

WHEREtên_cộtIS NULL
    

Hoặc :

WHERE tên_cột IS NOT NULL
    

Câu lệnh SELECT ... INTO có tác dụng tạo một bảng mới có cấu trúc và dữ liệu được xác định từ kết quả của truy vấn. Bảng mới được tạo ra sẽ có số cột bằng số cột được chỉ định trong danh sách chọn và số dòng sẽ là số dòng kết quả của truy vấn

Câu lệnh dưới đây truy vấn dữ liệu từ bảng SINHVIEN và tạo một bảng

TUOISV bao gồm các trường HODEM, TEN và TUOI

SELECT hodem,ten,YEAR(GETDATE())­YEAR(ngaysinh) AS tuoi
    INTO tuoisv
    FROM sinhvien
    

Lưu ý :Nếu trong danh sách chọn có các biểu thức thì những biểu thức này phải được đặt tiêu đề.

Mặc định, các dòng dữ liệu trong kết quả của câu truy vấn tuân theo thứ tự của chúng trong bảng dữ liệu hoặc được sắp xếp theo chỉ mục (nếu trên bảng có chỉ mục). Trong trường hợp muốn dữ liệu được sắp xếp theo chiều tăng hoặc giảm của giá trị của một hoặc nhiều trường, ta sử dụng thêm mệnh đề ORDER BY trong câu lệnh SELECT; Sau ORDER BY là danh sách các cột cần sắp xếp (tối đa là 16 cột). Dữ liệu được sắp xếp có thể theo chiều tăng (ASC) hoặc giảm (DESC), mặc định là sắp xếp theo chiều tăng.

Câu lệnh dưới đây hiển thị danh sách các môn học và sắp xếp theo chiều giảm dần của số đơn vị học trình

SELECT * FROM monhoc
    ORDER BY sodvht DESC
    

Nếu sau ORDER BY có nhiều cột thì việc sắp xếp dữ liệu sẽ được ưu tiên theo thứ tự từ trái qua phải.

Câu lệnh

SELECT hodem,ten,gioitinh
    YEAR(GETDATE())-YEAR(ngaysinh) AS tuoi
    FROM sinhvien
    WHERE ten=’Bình’
    ORDER BY gioitinh,tuoi
    

có kết quả là:

Thay vì chỉ định tên cột sau ORDER BY, ta có thể chỉ định số thứ tự của cột cấn được sắp xếp. Câu lệnh ở ví dụ trên có thể được viết lại như sau:

SELECT hodem,ten,gioitinh
    YEAR(GETDATE())-YEAR(ngaysinh) AS tuoi
    FROM sinhvien 
    WHERE ten = ‘Bình’ ORDER BY 3, 4
    

Phép hợp được sử dụng trong trường hợp ta cần gộp kết quả của hai hay nhiều truy vấn thành một tập kết quả duy nhất. SQL cung cấp toán tử UNION để thực hiện phép hợp. Cú pháp như sau

Câu_lệnh_1
    UNION [ALL] Câu_lệnh_2
    [UNION [ALL] Câu_lệnh_3]
    

...

[UNION [ALL] Câu_lệnh_n]
    [ORDER BY cột_sắp_xếp]
    [COMPUTE danh_sách_hàm_gộp [BY danh_sách_cột]]
    

Trong đó

Câu_lnh_1 có dạng

SELECTdanh_sách_cột
    [INTO tên_bảng_mới]
    [FROM danh_sách_bảng|khung_nhìn]
    [WHERE điều_kiện]
    [GROUP BY danh_sách_cột]
    [HAVING điều_kiện]
    

Câu_lnh_i (i = 2,..,n) có dạng

SELECT danh_sách_cột
    [FROM danh_sách_bảng|khung_nhìn]
    [WHERE điều_kiện]
    [GROUP BY danh_sách_cột]
    [HAVING điều_kiện]
    

Giả sử ta có hai bảng Table1 và Table2 lần lượt như sau:

câu lệnh

SELECT A,B FROM Table1
    UNION
    SELECT D,E FROM table2
    

Cho kết quả như sau:

Mặc định, nếu trong các truy vấn thành phần của phép hợp xuất hiện những dòng dữ liệu giống nhau thì trong kết quả truy vấn chỉ giữ lại một dòng. Nếu muốn giữ lại các dòng này, ta phải sử dụng thêm từ khoá ALL trong truy vấn thành phần.

Câu lệnh

SELECT A,B FROM Talbe1
    UNION ALL
    SELECT D,E FROM table2
    

Cho kết quả như sau

Khi sử dụng toán tử UNION để thực hiện phép hợp, ta cần chú ý các nguyên tắc sau:

• Danh sách cột trong các truy vấn thành phần phải có cùng số lượng.

• Các cột tương ứng trong tất cả các bảng, hoặc tập con bất kỳ các cột được sử dụng trong bản thân mỗi truy vấn thành phần phải cùng kiểu dữ liệu.

• Các cột tương ứng trong bản thân từng truy vấn thành phần của một câu lệnh UNION phải xuất hiện theo thứ tự như nhau. Nguyên nhân là do phép hợp so sánh các cột từng cột một theo thứ tự được cho trong mỗi truy vấn.

• Khi các kiểu dữ liệu khác nhau được kết hợp với nhau trong câu lệnh UNION, chúng sẽ được chuyển sang kiểu dữ liệu cao hơn (nếu có thể được).

• Tiêu đề cột trong kết quả của phép hợp sẽ là tiêu đề cột được chỉ định trong truy vấn đầu tiên.

• Truy vấn thành phần đầu tiên có thể có INTO để tạo mới một bảng từ kết quả của chính phép hợp.

• Mệnh đề ORDER BY và COMPUTE dùng để sắp xếp kết quả truy vấn hoặc tính toán các giá trị thống kê chỉ được sử dụng ở cuối câu lệnh UNION. Chúng không được sử dụng ở trong bất kỳ truy vấn thành phần nào.

• Mệnh đề GROUP BY và HAVING chỉ có thể được sử dụng trong bản thân từng truy vấn thành phần. Chúng không được phép sử dụng để tác động lên kết quả chung của phép hợp.

• Phép toán UNION có thể được sử dụng bên trong câu lệnh INSERT.

• Phép toán UNION không được sử dụng trong câu lệnh CREATE VIEW.

Khi cần thực hiện một yêu cầu truy vấn dữ liệu từ hai hay nhiều bảng, ta phải sử dụng đến phép nối. Một câu lệnh nối kết hợp các dòng dữ liệu trong các bảng khác nhau lại theo một hoặc nhiều điều kiện nào đó và hiển thị chúng trong kết quả truy vấn.

Xét hai bảng sau đây:

Bảng KHOA

Bảng LOP

Giả sử ta cần biết mã lớp và tên lớp của các lớp thuộc Khoa Công nghệ Thông tin, ta phải làm như sau:

• Chọn ra dòng trong bảng KHOA có tên khoa là Khoa Công nghệ Thông tin,

từ đó xác định được mã khoa (MAKHOA) là DHT02 .

• Tìm kiếm trong bảng LOP những dòng có giá trị trường MAKHOA là DHT02 (tức là bằng MAKHOA tương ứng trong bảng KHOA) và đưa những dòng này vào kết quả truy vấn

Như vậy, để thực hiện được yêu cầu truy vấn dữ liệu trên, ta phải thực hiện phép nối giữa hai bảng KHOA và LOP với điều kiện nối là MAKHOA của KHOA bằng với MAKHOA của LOP. Câu lệnh sẽ được viết như sau:

SELECT malop,tenlop
    FROM khoa,lop
    WHERE khoa.makhoa = lop.makhoa AND
    tenkhoa='Khoa Công nghệ Thông tin'
    

Sử dụng phép nối

Phép nối là cơ sở để thực hiện các yêu cầu truy vấn dữ liệu liên quan đến nhiều bảng. Một câu lệnh nối thực hiện lấy các dòng dữ liệu trong các bảng tham gia truy vấn, so sánh giá trị của các dòng này trên một hoặc nhiều cột được chỉ định trong điều kiện nối và kết hợp các dòng thoả mãn điều kiện thành những dòng trong kết quả truy vấn.

Để thực hiện được một phép nối, cần phải xác định được những yếu tố sau:

• Những cột nào cần hiển thị trong kết quả truy vấn

• Những bảng nào có tham gia vào truy vấn.

• Điều kiện để thực hiện phép nối giữa các bảng dữ liệu là gì

Trong các yếu tố kể trên, việc xác định chính xác điều kiện để thực hiện phép nối giữa các bảng đóng vai trò quan trọng nhất. Trong đa số các trường hợp, điều kiện của phép nối được xác định nhờ vào mối quan hệ giữa các bảng cần phải truy xuất dữ liệu. Thông thường, đó là điều kiện bằng nhau giữa khoá chính và khoá ngoài của hai bảng có mối quan hệ với nhau. Như vậy, để có thể đưa ra một câu lệnh nối thực hiện chính xác yêu cầu truy vấn dữ liệu đòi hỏi phải hiểu được mối quan hệ cũng như ý nghĩa của chúng giữa các bảng dữ liệu.

Danh sách chọn trong phép nối

Một câu lệnh nối cũng được bắt đầu với từ khóa SELECT. Các cột được chỉ định tên sau từ khoá SELECT là các cột được hiển thị trong kết quả truy vấn. Việc sử dụng tên các cột trong danh sách chọn có thể là:

• Tên của một số cột nào đó trong các bảng có tham gia vào truy vấn. Nếu tên cột trong các bảng trùng tên nhau thì tên cột phải được viết dưới dạng

tên_bảng.tên_cột
    

• Dấu sao (*) được sử dụng trong danh sách chọn khi cần hiển thị tất cả các cột của các bảng tham gia truy vấn.

• Trong trường hợp cần hiển thị tất cả các cột của một bảng nào đó, ta sử dụng cách viết:

tên_bảng.*
    

Mệnh đề FROM trong phép nối

Sau mệnh đề

FROM
của câu lệnh nối là danh sách tên các bảng (hay khung nhìn) tham gia vào truy vấn. Nếu ta sử dụng dấu
*
trong danh sách chọn thì thứ tự của

các bảng liệt kê sau

FROM
sẽ ảnh hưởng đến thứ tự các cột được hiển thị trong kết quả truy vấn.

Mệnh đề WHERE trong phép nối

Khi hai hay nhiều bảng được nối với nhau, ta phải chỉ định điều kiện để thực hiện phép nối ngay sau mệnh đề

WHERE
. Điều kiện nối được biểu diễn dưới dạng biểu thức logic so sánh giá trị dữ liệu giữa các cột của các bảng tham gia truy vấn.

Các toán tử so sánh dưới đây được sử dụng để xác định điều kiện nối

T oán tử Ý ng h ĩa
= Bằng
> Lớn hơn
< Nhỏ hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
<> khác
!> Không lớn hơn
!< Không nhỏ hơn

Câu lệnh dưới đây hiển thị danh sách các sinh viên với các thông tin: mã sinh viên, họ và tên, mã lớp, tên lớp và tên khoa

SELECT masv,hodem,ten,sinhvien.malop,tenlop,tenkhoa
    FROM sinhvien,lop,khoa
    WHERE sinhvien.malop = lop.malop AND
    lop.makhoa=khoa.makhoa
    

rong câu lệnh trên, các bảng tham gia vào truy vấn bao gồm SINHVIEN, LOP và KHOA. Điều kiện để thực hiện phép nối giữa các bảng bao gồm hai điều kiện:

sinhvien.malop = lop.malop
    vàlop.malop = khoa.malop
    

Điều kiện nối giữa các bảng trong câu lệnh trên là điều kiện bằng giữa khoá ngoài và khoá chính của các bảng có mối quan hệ với nhau. Hay nói cách khác, điều kiện của phép nối được xác định dựa vào mối quan hệ giữa các bảng trong cơ sở dữ liệu.

0