0978359287
-
0383180086
niithanoi.education@gmail.com
Trang chủ
Giới thiệu
KHÓA HỌC
LẬP TRÌNH WEB FRONT END
LẬP TRÌNH WEB BACK END
LẬP TRÌNH WEB FULL STACK
LẬP TRÌNH MOBILE
LẬP TRÌNH GAME
ĐÀO TẠO DOANH NGHIỆP
KHÓA HỌC KHÁC
Tutorials
JAVA in 7 DAY
PHP in 7 DAY
PYTHON BASIC
JAVASCRIPT
THUẬT TOÁN
Tin tức
NIIT - ICT HÀ NỘI
CÔNG NGHỆ
SỰ KIỆN NỔI BẬT ICT
THỦ THUẬT CÔNG NGHỆ
TUYỂN DỤNG
Cảm nhận
Thư viện
Liên hệ
Đăng ký học
Trang chủ
Tutorials
SQL
TRUY VẤN SQL NÂNG CAO (PHẦN 2)
Ngày đăng: 16/11/2020 -
Cập nhật: 16/11/2020
Cỡ chữ
Chia sẻ
Mục Lục
1. Truy vấn con
2. Truy vấn sử dụng các hàm kết tập
3. Lưu kết quả với SELECT
Tổng kết
Ở bài
truy vấn SQL nâng cao (phần 1)
bạn đã được học về các sắp xếp kết quả truy vấn, truy vấn trên nhiều bảng và các phép nối kết. Bài này chúng ta sẽ tiếp tục tìm hiểu về các
truy vấn SQL nâng cao
với việc sử dụng
truy vấn con
, các
hàm kết tập
.
1. Truy vấn con
Một
truy vấn con
là một
câu lệnh SELECT
được
lồng trong một SELECT
,
INSERT
,
DELETE
,
UPDATE
hoặc một
SELECT con
khác.
Kết quả của truy vấn con có thể là một giá trị hoặc nhiều giá trị, truy vấn con sinh ra một điều kiện trong mệnh đề.
Cú pháp:
SELECT
…
FROM
...
WHERE
[…
AND
] <điều kiện với truy vấn con>
(
SELECT
con)
Ví dụ 1: Tìm họ tên của các phi công có số ngày làm việc lớn hơn 20?
SELECT
hoten
FROM
PHICONG
WHERE
MPC
IN
(
SELECT
MPC
FROM
LAMVIEC
WHERE
songay >
20
) ;
-- trả về nhiều giá trị
Ở đây, chương trình sẽ tìm số phi công có ngày làm việc lớn hơn 20. Sau đó, trong tập kết quả trả về lại tìm họ tên của các phi công này.
Ví dụ 2: Tìm họ tên của các phi công có số ngày làm việc nhiều nhất?
SELECT
hoten
FROM
PHICONG
WHERE
MPC
IN
(
SELECT
MPC
FROM
LAMVIEC
WHERE
songay =
(
SELECT
MAX
(songay)
FROM
LAMVIEC));
-- trả về một giá trị
Truy vấn con có ràng buộc:
Mệnh đề ORDER BY không được dùng trong truy vấn con
Câu truy vấn con phải được bao trong cặp dấu ngoặc đơn ()
Mệnh đề SELECT của truy vấn con chỉ bao gồm một thuộc tính duy nhất trừ trường hợp dùng EXISTS
Thuộc tính trong điều kiện với truy vấn con và thuộc tính trong mệnh đề SELECT của truy vấn con phải tương thích trừ trường hợp dùng EXISTS
Các thuộc tính được định nghĩa trong SELECT chính có thể được sử dụng trong SELECT con
Nhưng các thuộc tính được định nghĩa trong SELECT con không thể được sử dụng trong SELECT chính
Truy vấn con có điều kiện và toán tử:
Nếu truy vấn con trả về một giá trị, các toán tử như
>
,
>=
,
<
, … có thể được sử dụng trong điều kiện với truy vấn con
Nếu truy vấn con trả về một tập các giá trị, phải sử dụng các toán tử như ANY, ALL, EXISTS trong điều kiện với truy vấn con:
ANY
: Trả về
true
nếu một trong các giá trị của truy vấn con đúng
ALL
: Trả về
true
nếu tất cả các giá trị của truy vấn con đúng
EXISTS
: Trả về
true
nếu truy vấn con trả về ít nhất một dòng
Ví dụ 3:
Tìm các loại máy bay của hãng Boeing mà có số chỗ lớn hơn ít nhất một loại nào đó của hãng Airbus
SELECT
loai
FROM
LOAIMAYBAY
WHERE
NSX =
'Boeing'
AND
socho > ANY
(
SELECT
socho
FROM
LOAIMAYBAY
WHERE
NSX =
'Airbus'
);
Ví dụ 4:
Tìm các kiểu máy bay của hãng Airbus mà có số chỗ lớn hơn số chỗ của tất cả các kiểu của hãng Boeing
SELECT
loai
FROM
LOAIMAYBAY
WHERE
NSX =
'Airbus'
AND
socho > ALL
(
SELECT
socho
FROM
LOAIMAYBAY
WHERE
NSX =
'Boeing'
);
Ví dụ dụ 5:
Tìm các máy bay thực hiện ít nhất một chuyến bay đến Paris?
SELECT
*
FROM
MAYBAY
WHERE
EXISTS
(
SELECT
MMB
FROM
CHUYENBAY
WHERE
MAYBAY.MMB = CHUYENBAY.MMB
AND
noiden=
'Paris'
);
-- Cũng có thể sử dụng IN hoặc = ANY thay cho EXISTS
2. Truy vấn sử dụng các hàm kết tập
SQL hỗ trợ sử dụng các hàm kết tập để truy vấn dữ liệu
Ví dụ 6: Tìm xem có bao nhiêu phi công ở nước Pháp
SELECT
COUNT
(*)
FROM
PHICONG
WHERE
nuoc =
'Phap'
;
Ví dụ 7: Tính tổng khoảng cách đã bay, đường bay ngắn nhất, dài nhất và độ dài trung bình các chuyến bay của phi công mã số 20.
SELECT
SUM
(khoangcach)
AS
Tong,
MIN
(khoangcach) Nho_nhat,
MAX
(khoangcach)
AS
Lon_nhat,
AVG
(khoangcach)
AS
Trung_binh
FROM
CHUYENBAY
WHERE
MPC =
20
;
2.2. Gom nhóm - GROUP BY
Mệnh đề
GROUP BY
được dùng kết hợp với các hàm kết tập để
nhóm kết quả theo một hoặc nhiều cột
.
NOTE: mỗi thuộc tính trong mệnh đề SELECT phải bao hàm trong hàm kết tập hoặc trong mệnh đề GROUP BY
Cú pháp:
SELECT
<tên cột 1> [, tên cột 2> ,…], <hàm kết tập(tên cột 1)>, [, <hàm kết tập(tên cột 2)>, …]
FROM
<tên bảng 1> [, <tên bảng 2>, …]
[
WHERE
<điều kiện> ]
GROUP BY
<tên cột 1> [, <tên cột 2>, …];
Ví dụ 8: Tìm số phi công của mỗi nước (nhóm theo từng nước)
SELECT
nuoc,
count
(*) so_phi_cong
FROM
PHICONG
GROUP BY
nuoc;
2.3. GROUP BY - HAVING
Mệnh đề WHERE không thể được dùng với các hàm kết tập
->
Điều kiện trên nhóm với hàm kết tập
->
dùng HAVING (WHERE : điều kiện trên dòng).
HAVING chỉ hiểu các điều kiện trên các hàm kết tập.
Ví dụ 9: Số phi công của mỗi nước lớn hơn 3 phi công
SELECT
nuoc,
count
(*) so_phi_cong
FROM
PHICONG
GROUP BY
nuoc
HAVING
count
(*) >=
3
;
3. Lưu kết quả với SELECT
3.1. SELECT INTO
SELECT INTO
cho phép lưu kết quả truy vấn vào một bảng mới hoặc một biến (1)
SELECT
<tên cột> [, …]
INTO
<tên bảng mới>
FROM
<tên bảng>;
SQL Server còn cho phép lưu kết quả vào biến tạm (2)
SELECT
<tên cột> [, ... ]
INTO
<#Tên biến tạm>
FROM
<tên bảng>;
Ví dụ 10:
SELECT
*
INTO
temp
FROM
CONGTY;
-- trường hợp (1)
SELECT
*
INTO
#temp
FROM
CONGTY;
-- trường hợp (2)
3.2. INSERT INTO - Thêm dữ liệu cho bảng
INSERT INTO
cho phép thêm các dòng vào bảng từ kết quả truy vấn SELECT:
INSERT INTO
<tên bảng> [ ( <tên cột> [, …]) ]
<Lệnh SELECT>;
Ví dụ 11: Thêm dữ liệu phi công Pháp vào một bảng mới.
CREATE
TABLE
PHICONG_PHAP(
MPC
smallint
PRIMARY
KEY
,
hoten
varchar
(
30
),
dchi
varchar
(
30
)
);
INSERT
INTO
PHICONG_PHAP
SELECT
MPC, hoten, dchi
FROM
PHICONG
WHERE
nuoc =
'Pháp'
;
3.3. SELECT TOP - Giới hạn kết quả hiển thị
Trong
SQL Server
, để giới hạn số dòng kết quả, ta sử dụng SELECT TOP(<số dòng>) và kết hợp với một số lệnh / mệnh đề khác.
Ví dụ 12: Sắp xếp các phi công theo họ tên và hiển thị 2 người đầu tiên
SELECT
TOP
(
2
) *
FROM
PHICONG
ORDER BY
hoten;
Tổng kết
Như vậy khi kết thúc 2 phần
truy vấn SQL nâng cao
này bạn hoàn toàn có thể tự tin áp dụng các kiến thức này vào việc thiết kế - truy vấn hay thao tác với CSDL.
Tất cả những gì được chia sẻ trên đây hoàn toàn là kiến thức cốt lõi, chưa thể đầy đủ hết nhưng nó sẽ là chìa khoá giúp bạn sử dụng SQL thuận lợi hơn trong tương lai.
Series
học Lập trình SQL
này còn vài phần nâng cao hơn nữa – nhưng những phần sau này thiên về việc quản trị CSDL hơn – bạn nhớ đón xem nhé.
---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học làm Lập trình viên. Hành động ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543
Email: hello@niithanoi.edu.vn
Website:
https://niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python
Về trang trước
Bài tiếp theo
Gửi email
in trang
Chia sẻ
Bình luận Facebook
Cùng danh mục
1
MÔ HÌNH QUAN HỆ LÀ GÌ?
2
RÀNG BUỘC TRÊN CSDL QUAN HỆ
3
ĐẠI SỐ QUAN HỆ
4
[NEW] HƯỚNG DẪN CÀI ĐẶT MICROSOFT SQL SERVER
5
TRUY VẤN SQL: CREATE TABLE
6
NGÔN NGỮ THAO TÁC DỮ LIỆU (DML)
7
CÂU LỆNH SELECT
8
TRUY VẤN SQL NÂNG CAO (PHẦN 1)
9
TRUY VẤN SQL NÂNG CAO (PHẦN 2)
10
QUẢN TRỊ CSDL CƠ BẢN
11
HÀM - THỦ TỤC - TRINGGER
Tutorial
Học PHP trong 7 ngày
Học Lập Trình Python
Học Java trong 7 ngày
JavaScript
HTML
Thuật toán
CSS
JAVA OOP
SQL
Master Bigdata
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Gửi yêu cầu tư vấn thành công!
Tư vấn cho tôi ngay !
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
Gửi cho tôi
Đóng lại
Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
0978 359 287
-
0383 180 086
hello@niithanoi.edu.vn
Chọn khóa học
KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
KHÓA HỌC LẬP TRÌNH PHP WEB
Khóa học PHP Full stack [2023] cho người mới bắt đầu
Khóa học BIG DATA với Hadoop và Spark
Khóa học Lập trình Android tại Hà Nội
[Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
LẬP TRÌNH GAME
Khóa học Lập trình Game Unity
LẬP TRÌNH WEB FRONT END
KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
LẬP TRÌNH WEB BACK END
LẬP TRÌNH JAVA WEB VỚI FRAME WORK
Lập trình Web với Django
Lập trình PHP với Laravel Framework
CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
LẬP TRÌNH WEB FULL STACK
Khóa học Java Full stack (IJFD)
LẬP TRÌNH MOBILE
FRONT-END VỚI REACTJS VÀ REACT NATIVE
Lập trình Android Nâng cao
ĐÀO TẠO CHO DOANH NGHIỆP
KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
Khóa học Automation Testing Chuyên nghiệp
KHÓA HỌC DỰ ÁN
Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
KHÓA HỌC KHÁC
VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
VBA Excel Nâng cao
Khóa học JMeter: Performance Testing
Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký ngay
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!