Tải bản đầy đủ (.pdf) (56 trang)

SQL STRUCTURED QUERY LANGUAGE TS LÊ THỊ LAN THI-LAN LEMICA EDU VN HÀ NỘI - 2011 CUUDUONGTHANCONG COM HTTPS:FB COMTAILIEUDIENTUCNTT

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 (5.22 MB, 56 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>SQL </b>

<b>Structured Query Language</b>

<i><small>TS. Lê Thị Lan</small></i>

<i><small></small></i>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<small>Thi-Lan Le, MICA HUST</small>

Nội dung môn học

 Giới thiệu về SQL

 Các thành phần của SQL

 Ngôn ngữ định nghĩa dữ liệu  Ngôn ngữ thao tác dữ liệu  Kết luận và bài tập

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

1. Giới thiệu SQL

Ngôn ngữ Sequel trong dự án System-R

1986: Chuẩn SQL được ra đời có tên gọi SQL-86

2 chuẩn khác ra đời sau này là SQL-89 và

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<small>Thi-Lan Le, MICA HUST</small>

1. Giới thiệu SQL

Một số chú ý khi làm việc với SQL:

 Kiểm tra dạng chuẩn sử dụng trong hệ QT CSDL  SQL:

 Tham khảo:

<small></small> www.learn-sql-tutorial.com

<small></small> www.w3schools.com/SQL/sql_syntax.asp

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

2. Các thành phần của SQL

Ngôn ngữ định nghĩa dữ liệu (DDL)

<small></small>

Data Definition Language

Ngôn ngữ thao tác dữ liệu (DML)

<small></small>

Data Manipulation Language

Ngôn ngữ điều khiển giao dịch

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<small>Thi-Lan Le, MICA HUST</small>

3. Ngôn ngữ định nghĩa dữ liệu

Cho phép định nghĩa:

<small></small> Sơ đồ đối với mỗi bảng

<small></small> Kiểu dữ liệu hay miền giá trị <small></small> Các ràng buộc toàn vẹn

<small></small> Tập các chỉ dẫn

<small></small> Thơng tin an tồn và ủy quyền đối với từng bảng <small></small> Cấu trúc lưu trữ vật lý

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

3. Ngôn ngữ định nghĩa dữ liệu

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<small>Thi-Lan Le, MICA HUST</small>

3 Ngôn ngữ định nghĩa dữ liệu

Tạo bảng trong CSDL:

<b>CREATE TABLE <tên</b> bảng> (<tên cột> <kiểu dữ liệu>

<b>[NOT NULL], [CONSTRAINT <tên ràng</b> buộc> <kiểu ràng <b>buộc> …])</b>

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

3. Ngôn ngữ định nghĩa dữ liệu

Tạo bảng – Xác định khóa chính

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<small>Thi-Lan Le, MICA HUST</small>

3. Ngôn ngữ định nghĩa dữ liệu

Thêm - Xóacột trong bảng

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

3. Ngơn ngữ định nghĩa dữ liệu

Xóa bảng

:

 <b>Cú pháp: DROP TABLE relation_name</b>

 <b>Ví dụ: DROP TABLE branch</b>

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<small>Thi-Lan Le, MICA HUST</small>

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

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

4. Ngơn ngữ thao tác dữ liệu

 Ví dụ: Bảng student lưu các thơng tin về sinh viên

<b><small>Thuộc tính Kiểu dữ liệu Độ rộng Giải thích</small></b>

<i><small>id</small></i> <small>numeric4Số hiệu sinh viên</small>

<i><small>name</small></i> <small>character10Tên sinh viên</small>

<i><small>dob</small></i> <small>date8Ngày tháng năm sinh</small>

<i><small>sex</small></i> <small>character1Giới tính (M / F)</small>

<i><small>remission</small></i> <small>logical1Quyền nhập học (T, F)</small>

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<small>Thi-Lan Le, MICA HUST</small>

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

 Dữ liệu trong bảng student

<small>idnamedobsexclassmtesthcodedcode remission</small>

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

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

 Thêm một bộ dữ liệu (~ 1 dòng) vào 1 bảng trong CSDL

 Cách 1:

<b>INSERT INTO Table_name</b>

<b>VALUES (value 1, value 2</b>, …, value n)  Cách 2:

<b>INSERT INTO Table_name (column 1, column 2, </b>

…, column n)

<b>VALUES (value 1, value 2</b>, …, value n)

 Câu hỏi: Đánh giá đặc điểm cũng như ưu, nhược điểm của từng cách

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

<small>Thi-Lan Le, MICA HUST</small>

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

 <i>Truy vấn lựa chọn các dòng trên các bảng có tên tablename</i>

và trả kết quả dưới dạng bảng <small></small> <i><b><small>Biểu thức expr1, expr2 có thể : </small></b></i>

<small>•một cột hoặc</small>

<small>•một biểu thức gồm các hàm và các trường</small>

<small>col1, col2 là tên các cột trong bảng kết quả</small>

<small>DISTINCT: bỏ hết các bộ lặp trong kết quả trong khi từ khóa ALL thì dữ lại tồn bộ các bộ lặp</small>

<small></small> <i><b><small>condition</small></b></i> <small>có thể là :</small>

<small>•Tốn tử so sánh >, <, = hoặc</small>

<small>•Tốn tử so sánh xâu</small>

<small>•Tốn từ logic AND, OR, NOT</small>

SELECT

<i><small>[ALL / DISTINCT] expr1 [AS col1], expr2 [AS col2] </small></i>;

FROM

<i>tablename</i>

WHERE

<i>condition</i>

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

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

 Yêu cầu 1: Liệt kê tất cả sinh viên  Câu truy vấn:

<b>SELECT * FROM student</b>

<small>idnamedobsexclassmtesthcodedcode remission</small>

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

<small>Thi-Lan Le, MICA HUST</small>

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

 Yêu cầu 2: Liệt kê tên , mã nhà và lớp của sinh viên

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

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

 Yêu cầu 3: Liệt kê mã quận của sinh viên có mã nhà

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<small>Thi-Lan Le, MICA HUST</small>

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

 Yêu cầu 4: Liệt kê tên của các nữ sinh lớp 1B  Câu truy vấn:

SELECT name FROM student WHERE class=‘1B’ AND sex=‘F’

<small>1) Liệt kê tên nữ sinh của lớp 1A và 1B</small>

<small>2) Liệt kê tên nữ sinh của lớp 1 A và nam sinh lớp 1 B</small>

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

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

 Yêu cầu 5: Liệt kê tên, id của sinh viên không được miễn phí đăng ký của lớp 1A

 Câu truy vấn:

SELECT name, id, class FROM student WHERE class=‘1A’ AND NOT remission

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<small>Thi-Lan Le, MICA HUST</small>

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

 Các tác tử so sánh:

<small></small> <i><small>expr IN ( value1, value2, value3)</small></i>

<small></small> <i><small>expr BETWEEN value1 AND value2</small></i>

<small></small> <i><small>expr LIKE "%_"</small></i>

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

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

 Yêu cầu 6: Liệt kê các sinh viên sinh vào thứ tư hoặc thứ bảy

 Câu truy vấn:

SELECT name, class, CDOW(dob) AS bdate FROM student WHERE DOW(dob) IN (4,7)

 Trong đó:

<small>CDOW (): trả về tên ngày trong tuần của 1 ngày</small>

<small>DOW (): trả về thứ của 1 ngày trong tuần dưới dạng số (Day of </small>

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<small>Thi-Lan Le, MICA HUST</small>

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

 Yêu cầu 7: Liệt kê các sinh viên không sinh vào

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

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

 Yêu cầu 8: Liệt kê sinh viên lớp 1A có điểm kiểm tra toán từ 80 đến 90

 Câu truy vấn:

SELECT name, mtest FROM student WHERE class=‘1A’ AND mtest BETWEEN 80 AND 90

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

<small>Thi-Lan Le, MICA HUST</small>

4. Ngơn ngữ thao tác dữ liệu

 Nhóm dữ liệu:

<small></small> <i><b><small>groupexpr</small></b><small>xác định các dịng liên quan sẽ được nhóm lại</small></i>

<small></small> <i><b><small>WHERE condition</small></b></i> <small>xác định điều kiện cho từng dòng trước khi nhóm</small>

<small></small> <i><b><small>HAVING requirement</small></b></i> <small>xác định điều kiện tương đương đến tồn bộ nhóm</small>

<i>SELECT ... FROM ... WHERE condition ;GROUP BY groupexpr [HAVING requirement]</i>

Các hàm của nhóm:

COUNT( ), SUM( ), AVG( ), MAX( ), MIN( )

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

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

 Yêu cầu 9: Xác định tổng số sinh viên của mỗi lớp  Câu truy vấn:

SELECT class, COUNT(*) as NumberofStudent FROM student GROUP BY class

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

<small>Thi-Lan Le, MICA HUST</small>

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

 Yêu cầu 10: Liệt kê điểm tốn trung bình của từng

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

4. Ngơn ngữ thao tác dữ liệu

 Bài tập:

<small>Tính điểm trung bình của nữ sinh của tất cả các lớp</small>

<small>Tính điểm trung bình của nữ sinh của từng lớp</small>

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

<small>Thi-Lan Le, MICA HUST</small>

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

 Yêu cầu 11: Xác định số sinh viên nữ của từng quận  Câu truy vấn:

SELECT dcode, COUNT(*) FROM student WHERE sex=‘F’ GROUP BY dcode

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

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

 Yêu cầu 12: Xác định điểm kiểm tra cao nhất và thấp nhất của sinh viên ở từng quận

 Câu truy vấn:

SELECT MAX(mtest), MIN(mtest), dcode FROM student GROUP BY dcode

<b><small>max_mtestmin_mtestdcode</small></b>

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

<small>Thi-Lan Le, MICA HUST</small>

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

 Yêu cầu 13: Xác định điểm tốn trung bình của nam sinh viên trong mỗi lớp với điều kiện lớp đó có ít nhất 3 nam sinh viên

 Câu truy vấn:

SELECT AVG(mtest), class FROM student WHERE sex=‘M’ GROUP BY class HAVING

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

 Đưa ra tên lớp, điểm tốn trung bình của nam sinh viên trong mỗi lớp, số sinh viên nam của lớp với điều kiện lớp đó có ít nhất 3 nam sinh viên

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

<small>Thi-Lan Le, MICA HUST</small>

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

 Sắp xếp kết quả trả về:

SELECT ... FROM ... WHERE ...

<i>ORDER BY colname [ASC / DESC]</i>

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

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

 Yêu cầu 14: Liệt kê nam sinh viên của lớp 1 A theo tên

 Câu truy vấn:

SELECT name, id FROM student

WHERE sex=‘M’ AND class=‘1A’ ORDER BY name

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

<small>Thi-Lan Le, MICA HUST</small>

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

 Yêu cầu 15: Liệt kê sinh viên lớp 2A theo mã quận  Câu truy vấn:

SELECT name, id, class, dcode FROM student WHERE class=‘2A’ ORDER BY dcode

<b><small>nameidclassdcode</small></b>

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

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

 Yêu cầu 16: Liệt kê số lượng sinh viên của mỗi quận theo chiều giảm dần

 Câu truy vấn:

SELECT COUNT(*) AS cnt, dcode FROM studentGROUP BY dcode ORDER BY cnt DESC

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

<small>Thi-Lan Le, MICA HUST</small>

 Yêu cầu: Liệt kê theo thứ tự giảm dần về điểm của sinh viên nữ có điểm thi lớn hơn điểm trung bình của các sinh viên nữ

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

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

 Yêu cầu 17: Liệt kê nam sinh viên trong một nhà theo trật tự mã quận và tên lớp

 Câu truy vấn:

SELECT name, class, hcode FROM studentWHERE sex=‘M’ ORDER BY hcode, class

</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">

<small>Thi-Lan Le, MICA HUST</small>

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

<b><small>namehcode class</small></b>

</div><span class="text_page_counter">Trang 41</span><div class="page_container" data-page="41">

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

 Hợp, giao và hiệu của các bảng

<small>Hợp của A và B (A B)</small>

<small>Một bảng bao gồm tất cả các dòng của A và B.</small>

</div><span class="text_page_counter">Trang 42</span><div class="page_container" data-page="42">

<small>Thi-Lan Le, MICA HUST</small>

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

 Hợp, giao và hiệu của các bảng

<small>Giao của A và B (A B)</small>

<small>Một bảng bao gồm các dòng vừa tồn tại trong A vừa tồn tại trong B</small>

</div><span class="text_page_counter">Trang 43</span><div class="page_container" data-page="43">

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

 Hợp, giao và hiệu của các bảng

<small>Hiệu của A và B</small>

<small>Bảng bao gồm các dòng ở trong A nhưng không ở trong B</small>

</div><span class="text_page_counter">Trang 44</span><div class="page_container" data-page="44">

<small>Thi-Lan Le, MICA HUST</small>

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

 Bảng lưu trữ các thành viên của Bridge và Chess có cùng cấu trúc như sau:

<b><small>Thuộc tính Kiểu dữ liệu Độ rộngÝ nghĩa</small></b>

<small>sexcharacter1Giới tính (M / F)</small>

</div><span class="text_page_counter">Trang 45</span><div class="page_container" data-page="45">

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

 Yêu cầu 17: Xác định hợp của 2 câu lạc bộ  Câu truy vấn:

SELECT * FROM bridge UNION SELECT * FROM chess ORDER BY class, name

<small>SELECT ... FROM ... WHERE ... ;UNION ;</small>

<small>SELECT ... FROM ... WHERE ...</small>

</div><span class="text_page_counter">Trang 46</span><div class="page_container" data-page="46">

<small>Thi-Lan Le, MICA HUST</small>

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

 Yêu cầu 18: In danh sách các sinh viên tham gia cả 2 câu lạc bộ

 Câu truy vấn:

SELECT * FROM bridge WHERE id IN ( SELECT id FROM chess)

<i><small>SELECT ... FROM table1 ;</small></i>

<i><small>WHERE col IN ( SELECT col FROM table2 )</small></i>

</div><span class="text_page_counter">Trang 47</span><div class="page_container" data-page="47">

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

 Yêu cầu 19: Xác định danh sách các sinh viện tham gia câu lạc bộ Bridge nhưng không tham gia câu lạc bộ Chess

 Câu truy vấn:

SELECT * FROM bridge WHERE id NOT IN (SELECT id FROM chess )

<i><small>SELECT ... FROM table1 ;</small></i>

<i><small>WHERE col NOT IN ( SELECT col FROM table2 )</small></i>

</div><span class="text_page_counter">Trang 48</span><div class="page_container" data-page="48">

<small>Thi-Lan Le, MICA HUST</small>

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

 Bảng Music lưu trữ thông tin về nhạc cụ của sinh viên

<b><small>Thuộc tính Kiểu dữ liệu Độ rộng Ý nghĩa</small></b>

<small>idnumeric4mã hiệu sinh viêntypecharacter10kiểu nhạc cụ</small>

</div><span class="text_page_counter">Trang 49</span><div class="page_container" data-page="49">

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

 Kết nối:

<small>Kết nối tự nhiên (Natural Join) hay (Inner joint): là một thao tác kết nối 2 bảng bằng các cột chung.</small>

<small>Kết nối ngoài (outer join): </small>

<small>tất cả các dòng ở trong bảng đầu tiên sau FROM ngay cả khi nó khơng có trong bảng thứ hai. </small>

</div><span class="text_page_counter">Trang 50</span><div class="page_container" data-page="50">

<small>Thi-Lan Le, MICA HUST</small>

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

Kết nối tự nhiên:

 Cú pháp 1:

<i>SELECT a.comcol, a.col1, b.col2, expr1, expr2 FROM table1 a JOIN table2 b</i>

ON a.comcol = b.comcol  Cú pháp 2:

<i>SELECT a.comcol, a.col1, b.col2, expr1, expr2 FROM table1 a, table2 b </i>

<i>WHERE a.comcol = b.comcol</i>

</div><span class="text_page_counter">Trang 51</span><div class="page_container" data-page="51">

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

 Yêu cầu 20: Xác định danh sách các sinh viên và nhạc cụ sinh viên đó học

 Câu truy vấn:

SELECT s.class, s.name, s.id, m.type FROM student s, music m WHERE s.id=m.id ORDER

</div><span class="text_page_counter">Trang 52</span><div class="page_container" data-page="52">

<small>Thi-Lan Le, MICA HUST</small>

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

 Yêu cầu 20: Xác định số sinh viên học piano trong mỗi lớp

 Câu truy vấn:

SELECT s.class, COUNT(*) FROM student s, music m WHERE s.id=m.id AND m.type=‘Piano’ GROUP BY class ORDER BY class

</div><span class="text_page_counter">Trang 53</span><div class="page_container" data-page="53">

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

 Yêu cầu 21: Xác định danh sách sinh viên chưa lựa chọn nhạc cụ

 Câu truy vấn:

SELECT class, name, id FROM student WHERE id NOT IN ( SELECT id FROM music ) ORDER

</div><span class="text_page_counter">Trang 54</span><div class="page_container" data-page="54">

<small>Thi-Lan Le, MICA HUST</small>

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

 Yêu cầu 22: Tạo danh sách các sinh viên với danh sách nhạc cụ sinh viên đó học. Danh sách này phải bao gồm cả sinh viên chưa đăng ký nhạc cụ

 Câu truy vấn:

SELECT s.class, s.name, s.id, m.type FROM student s, music m

WHERE s.id=m.id

<b>UNION </b>

SELECT class, name, id, ""

FROM student WHERE id NOT IN

( SELECT id FROM music ) ORDER BY 1, 2

<small>Sinh viên tự đề xuất các câu truy vấn khác để thực hiện yêu cầu 22</small>

</div><span class="text_page_counter">Trang 56</span><div class="page_container" data-page="56">

<small>Thi-Lan Le, MICA HUST</small>

Bài tập

 Cho bảng thông tin:

<small>Viết câu truy vấn liệt kê tên khách hàng và tổng số tiền mà họ đã sử dụng</small>

</div>

×