Tải bản đầy đủ (.pptx) (26 trang)

Bai 29 Ham Ket Hop va Gom Nhom

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.15 MB, 26 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

<b>BÀI 29: </b>



</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

<b>29.1. HÀM KẾT HỢP</b>



<i><b>29.1.1. HÀM COUNT(), MIN(), MAX(), </b></i>


<i><b>SUM(), AVG()</b></i>



<b>Cú pháp của hàm COUNT:</b>


SELECT COUNT(tên_cột) FROM tên_bảng:


<b>Hàm COUNT(*):</b>


Hàm COUNT(*) trả về số lượng các dòng được chọn ở trong
bảng.


</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

<i><b>29.1.1. HÀM COUNT(), MIN(), MAX(), SUM(), </b></i>


<i><b>AVG()</b></i>



Câu lệnh sau sẽ trả về số lượng các dòng trong bảng:


SELECT COUNT(*) FROM Persons
và kết quả trả về sẽ là : 3


Câu lệnh sau sẽ trả về số lượng những người lớn hơn 20
tuổi:


SELECT COUNT(*) FROM Persons WHERE Age > 20
kết quả trả về sẽ là: 2


<b>Hàm COUNT(column):</b>



</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

<i><b>29.1.1. HÀM COUNT(), MIN(), MAX(), SUM(), </b></i>


<i><b>AVG()</b></i>



Ví dụ ta có bảng Persons như sau:


<sub>Câu lệnh sau sẽ trả về số lượng những người mà cột </sub><b><sub>Age</sub></b>
trong bảng không rỗng:


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

<i><b>29.1.1. HÀM COUNT(), MIN(), MAX(), SUM(), </b></i>


<i><b>AVG()</b></i>



<b>Mệnh đề COUNT DISTINCT</b>


<sub>Lưu ý: Các ví dụ dưới đây chỉ hoạt động với CSDL </sub><b><sub>Oracle</sub></b><sub> và </sub>
<b>MS SQL Server</b>, không hoạt động trên <b>MS Access</b> (chưa thử
nhiệm với các hệ CSDL khác!)


Từ khoá DISTINCT và COUNT có thể được dùng chung với
nhau để đếm số lượng các kết quả không trùng nhau.


Cú pháp như sau:


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

<i><b>29.1.1. HÀM COUNT(), MIN(), MAX(), SUM(), </b></i>


<i><b>AVG()</b></i>



Ví dụ ta có bảng <b>Orders</b> như sau:


<sub>Câu lệnh SQL sau:</sub>



</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

<i><b>29.1.1. HÀM COUNT(), MIN(), MAX(), SUM(), </b></i>


<i><b>AVG()</b></i>



<b>SQL có sẵn khá nhiều hàm để thực hiện đếm </b>
<b>và tính tốn.</b>


<b>Cú pháp:</b>


</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

<i><b>29.1.1. HÀM COUNT(), MIN(), MAX(), SUM(), </b></i>


<i><b>AVG()</b></i>



<b>SQL có sẵn khá nhiều hàm để thực hiện đếm </b>
<b>Bảng dữ liệu chúng ta sẽ dùng trong các ví sụ tiếp </b>
<b>theo:</b>


Câu lệnh SQL sau:


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

<i><b>29.1.1. HÀM COUNT(), MIN(), MAX(), SUM(), </b></i>


<i><b>AVG()</b></i>



<b>Hàm AVG(column)</b>


Hàm AVG trả về giá trị trung bình tính theo cột được chỉ
định của các dịng được chọn. Các giá trị NULL sẽ khơng
được xét đến khi tính giá trị trung bình.


<b>Ví dụ:</b>


Câu lệnh sau sẽ tính số tuổi trung bình của những người có
tuổi trên 20:



</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

<i><b>29.1.1. HÀM COUNT(), MIN(), MAX(), SUM(), </b></i>


<i><b>AVG()</b></i>



<b>Hàm MAX(column)</b>


Hàm MAX trả về giá trị lớn nhất trong cột. Các giá trị
NULL sẽ không được xét đến.


<b>Ví dụ:</b>


</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

<i><b>29.1.1. HÀM COUNT(), MIN(), MAX(), SUM(), </b></i>


<i><b>AVG()</b></i>



<b>Hàm MIN(column)</b>


Hàm MAX trả về giá trị nhỏ nhất trong cột. Các giá trị
NULL sẽ không được xét đến.


<b>Ví dụ:</b>


SELECT MIN(Age) FROM Persons
kết quả trả về: 19


</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

<i><b>29.1.1. HÀM COUNT(), MIN(), MAX(), SUM(), </b></i>


<i><b>AVG()</b></i>



<b>Hàm SUM(column)</b>


Hàm SUM trả về tổng giá trị của cột. Các giá trị NULL sẽ


khơng được xét đến.


<b>Ví dụ:</b>


Tìm tổng số tuổi của tất cả những người có trong bảng:
SELECT SUM(Age) FROM Persons


kết quả trả về: 98


<b>Ví dụ:</b>


Tìm tổng số tuổi của tất cả những người có tuổi lớn hơn
20:


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

<i><b>29.2. HÀM GOM NHÓM</b></i>


<i><b>29.2.1. CÚ PHÁP</b></i>



Các hàm tập hợp (ví dụ như SUM) thơng thường cần thêm
chức năng của mệnh đề GROUP BY.


<b>GROUP BY...</b>


<b> </b>Mệnh đề GROUP BY...được thêm vào SQL bởi vì các hàm
tập hợp (như SUM) trả về một tập hợp của các giá trị trong
cột mỗi khi chúng được gọi, và nếu khơng có GROUP BY
ta khơng thể nào tính được tổng của các giá trị theo từng
nhóm riêng lẻ trong cột.


Cú pháp của GROUP BY như sau:



</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

<i><b>29.2.1. CÚ PHÁP</b></i>



<b>Ví dụ sử dụng GROUP BY:</b>


Giả sử ta có bảng <b>Sales</b> như sau:


Câu lệnh SQL sau:


</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

<i><b>29.2.1. CÚ PHÁP</b></i>



Kết quả trả về ở trên đôi khi không phải là cái mà ta mong
đợi. Ta thêm mệnh đề GROUP BY vào trong câu lệnh
SQL:


SELECT Company, SUM(Amount) FROM Sales
GROUP BY Company


và kết quả trả về lần này sẽ là:


</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

<i><b>29.2.2. ĐIỀU KIỆN GOM NHÓM</b></i>



<b>HAVING...</b>


Mệnh đề HAVING...được thêm vào SQL vì mệnh đề


WHERE khơng áp dụng được đối với các hàm tập hợp (như
SUM). Nếu khơng có HAVING, ta khơng thể nào kiểm tra
được điều kiện với các hàm tập hợp.


Cú pháp của HAVING như sau:



SELECT tên_cột, SUM(tên_cột) FROM tên_bảng
GROUP BY tên_cột


HAVING SUM(tên_cột) điều_kiện giá_trị


Ta sử dụng lại bảng <b>Sales</b> ở trên. Câu lệnh SQL sau:
SELECT Company, SUM(Amount) FROM Sales
GROUP BY Company


</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=17>

<i><b>29.2.2. ĐIỀU KIỆN GOM NHÓM</b></i>


Sẽ trả về kết quả:


<b>Với SQL, bí danh có thể được sử dụng cho tên của cột và </b>
<b>tên của bảng.</b>


<b>Bí danh cột:</b>


Cú pháp bí danh cột như sau:


SELECT tên_cột AS bí_danh_cột FROM tên_bảng


<b>Bí danh bảng:</b>


Bí danh bảng có cú pháp như sau:


</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>

<i><b>29.2.2. ĐIỀU KIỆN GOM NHĨM</b></i>



<b>Ví dụ sử dụng bí danh cột:</b>



Ta có bảng <b>Persons</b> như sau:


Câu lệnh SQL sau:


SELECT LastName AS Họ, FirstName AS Tên
FROM Persons


</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=19>

<i><b>29.3. THỨ TỰ THỰC HIỆN CÂU TRUY VẤN CÓ </b></i>


<i><b>MỆNH ĐỀ GROUP BY VÀ HAVING</b></i>



Mệnh đề GROUP BY


Các thuộc tính trong mệnh đề SELECT (trừ những thuộc
tính trong các hàm kết hợp) phải xuất hiện trong mệnh đề
GROUP BY


Mệnh đề HAVING


Sử dụng các hàm kết hợp trong mệnh đề SELECT để kiểm
tra một số điều kiện nào đó


Chỉ kiểm tra điều kiện trên nhóm, khơng là điều kiện lọc
trên từng bộ


</div>
<span class='text_page_counter'>(20)</span><div class='page_container' data-page=20>

<i><b>29.3. THỨ TỰ THỰC HIỆN CÂU TRUY VẤN CÓ </b></i>


<i><b>MỆNH ĐỀ GROUP BY VÀ HAVING</b></i>



Thứ tự thực hiện câu truy vấn có mệnh đề GROUP BY và
HAVING



(1) Chọn ra những dòng thỏa điều kiện trong mệnh đề
WHERE


(2) Những dòng này sẽ được gom thành nhiều nhóm tương
ứng với mệnh đề GROUP BY


(3) Áp dụng các hàm kết hợp cho mỗi nhóm


(4) Bỏ qua những nhóm khơng thỏa điều kiện trong mệnh đề
HAVING


</div>
<span class='text_page_counter'>(21)</span><div class='page_container' data-page=21>

<i><b>29.4. BÀI TẬP LIÊN QUAN ĐẾN HÀM KẾT HỢP </b></i>


<i><b>VÀ GOM NHÓM</b></i>



</div>
<span class='text_page_counter'>(22)</span><div class='page_container' data-page=22>

<i><b>29.5.1. TRUY VẤN CON Ở MỆNH ĐỀ FROM</b></i>


Kết quả trả về của một câu truy vấn phụ là một bảng


- Bảng trung gian trong quá trình truy vấn
- Khơng có lưu trữ thật sự


</div>
<span class='text_page_counter'>(23)</span><div class='page_container' data-page=23>

<i><b>29.5.1. TRUY VẤN CON Ở MỆNH ĐỀ FROM</b></i>


Ví dụ:


Trong cơ sở dữ liệu quản lý vật tư, chúng ta muốn hiển thị
tên những nhân viên đã xuất vật tư trong ngày ‘12/08/2008’,
câu lệnh truy vấn sau sẽ thực hiện yêu cầu trên.


SELECT nv.ten_nv FROM nhan_vien As nv, (SELECT
manv_xuat FROM phieu_xuat WHERE ngay_xuat =
‘08/12/2008’) As Temp



</div>
<span class='text_page_counter'>(24)</span><div class='page_container' data-page=24>

<i><b>29.5.2. ĐIỀU KIỆN KẾT NỐI CỦA </b></i>


<i><b>MỆNH ĐỀ FROM</b></i>



<i><b>29.5.2.1. KẾT NỐI BẰNG</b></i>



</div>
<span class='text_page_counter'>(25)</span><div class='page_container' data-page=25>

<i><b>29.5.2.2. KẾT NỐI NGOÀI</b></i>



<b>LEFT JOIN</b> <b>:</b> Trả về tất cả các hàng từ bảng thứ nhất <b>R1</b>,
cho dù nó khơng được so trùng trong bảng thứ hai <b>R2</b>. Nếu
các hàng trong bảng <b>R1</b> không so trùng trong bảng <b>R2</b>,
những hàng này cũng được liệt kê (thay thế bởi giá trị
NULL).


</div>
<span class='text_page_counter'>(26)</span><div class='page_container' data-page=26></div>

<!--links-->

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×