1. Trang chủ
  2. » Công Nghệ Thông Tin

MySQL truy vấn dữ liệu

29 300 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 29
Dung lượng 851 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Dùng để thực hiện tổng hợp dữ liệu được lưu trữ trong một hay nhiều bảng thành một tập kết quả. Dữ liệu trong tập kết có thể được lọc theo điều kiện và sắp xếp theo nhu cầu của người sử dụng.Truy vấn select còn được dùng để thực hiện việc tính toán thống kê trên tập dữ liệu kết quả trả về của nó.

Trang 2

• Dùng để thực hiện tổng hợp dữ liệu được lưu trữ trong một hay nhiều bảng thành một tập kết quả

• Dữ liệu trong tập kết có thể được lọc theo điều kiện và sắp xếp theo nhu cầu của người sử dụng.

• Truy vấn select còn được dùng để thực hiện việc tính toán thống kê trên tập dữ liệu kết quả trả về của nó.

Trang 4

• Để lấy dữ liệu từ nhiều bảng, chúng ta có thể dùng

SELECT FROM kết hợp với mệnh đề JOIN để kết nối hai bảng có quan hệ với nhau.

• Cú pháp:

SELECT * | Danh_sách_các_cột

FROM Tên_bảng_1 INNER | LEFT [OUTER] | RIGHT [OUTER]

| FULL [ OUTER] JOIN Tên_bang_2 ON Điều_kiện_ghép_nối;

Trang 5

– RIGHT JOIN: Ngược lại LEFT JOIN

– FULL JOIN: Lấy các dòng có Ten_bang_1 nhưng không có trong Ten_bang_2, các dòng có Ten_bang_2 nhưng không có

Ten_bang_1 và các dòng thỏa mãn điều kiện kết nối

– Điều kiện ghép nối : gần giống điều kiện của mệnh đề Where

Trang 6

• Sử dụng mệnh đề WHERE kết hợp với mệnh đề SELECT FROM để chúng ta có thể lọc ra các dòng dữ liệu thỏa mãn điều kiện được đưa ra.

• Cú pháp:

– Điều_kiện_lọc: là một biểu thức luận lý làm điều kiện chỉ định việc lọc

mẩu tin Có thể sử dụng các phép toán sánh, logic, Like và kí tự đại diện

%, []

• Ví dụ: Lấy ra các sinh viên thuộc khoa Tin học

SELECT * FROM Sinhvien WHERE Makh=‘TH’

SELECT * | Danh_sách_các_cột

FROM Tên_bảng

WHERE <Điều_kiện_lọc>;

Trang 7

• Chú ý khi xây dựng điều kiện lọc

– Giá trị kiểu chuỗi được trong cặp dấu nháy đơn ‘’

– Khi dùng giá trị kiểu ngay so sánh với cột kiểu datetime, giá trị đó được đặt trong cặp dấu nháy đơn ‘’ và nên nhập theo dạng năm-tháng-ngày Ví dụ: ‘2005-12-31’

– Để so sánh với giá trị NULL, chúng ta dùng phép toán IS Ví dụ

@a is null

– Sử dụng phép toán Like khi field được chọn để lọc dữ liệu là kiểu chuỗi Like là phép toán so sánh gần đúng và luôn được sử dụng với kí tự đại diện như % (thay thế cho một chuỗi), _ (thay thế cho một kí tự),

Ví dụ:

+ Biểu thức lọc những sinh viên có tên bắt dầu bằng chữ T:

TenSv Like ‘T%’

Trang 8

• Dùng để giới hạn các dòng dữ liệu trùng nhau trong tập kết quả.

Trang 9

• Được sử dụng cùng với SELECT FROM khi muốn sắp xếp các dòng trong tập kết quả theo cột hoặc biểu thức nào đó.

• Cú pháp:

– Chú ý: Tên cột để sắp xếp có thể thể là bí danh(alias) danh hoặc

số thự tự của cột trong Danh_sách_các_cột.

Trang 10

• Ví dụ: Đưa ra danh sách sinh viên sắp xếp tên từ

A->Z, và học bổng theo chiều giảm dần

SELECT Masv, Hosv, Tensv, Ngaysinh, Hocbong

FROM sinhvien

ORDER BY Tensv, Hocbong DESC

Trang 11

• SELECT FROM kết hợp với mệnh đề GROUP BY cho phép chúng ta có thể nhóm dữ liệu của các dòng trong một bảng và có thể sử dụng các hàm tính toán đi kèm để thực hiện thống kê trên mỗi nhóm.

• Cú pháp

– Các_hàm_thống_kê: SUM, COUNT, AVG, MIN, MAX

– Danh_sách_các_cột_nhóm_dữ_liệu: Tên các cột được dùng để nhóm dữ liệu.

SELECT Danh_sách_các_cột, Các_hàm_thống_kê

Trang 12

• Ví dụ

– Cho biết khoa nào có đông sinh viên nhất, gồm Mã khoa, Tên

khoa, Tổng số sinh viên

SELECT Top 1 With ties Khoa.Makh,Tenkhoa, Count(*) As TongSoSV

FROM Khoa Inner Join SinhVien On Khoa.makh=SinhVien.makh

GROUP BY Khoa.Makh,Tenkhoa

ORDER BY Count(*) Desc

– Cho biết 3 sinh viên có điểm thi môn Đồ họa thấp nhất

Thông tin gồm Họ tên SV, Tên khoa, Tên môn, Điểm

SELECT Top 3 Hosv+‘ ’+ Tensv as Hoten, Tenkh, tenmh, diem,monhoc.mamh FROM (Khoa Inner Join SinhVien On Khoa.makh=SinhVien.makh)

Inner join (Monhoc inner join Ketqua On ketqua.mamh=Monhoc.mamh)

On Ketqua.masv=sinhvien.masv WHERE monhoc.mamh='04'

ORDER BY diem asc

Trang 13

• HAVING, mệnh đề được đặt sau GROUP BY dùng để lọc dữ liệu sau khi đã được tính toán thống kê theo nhóm Having chỉ được dùng khi

có Group By

• Cú pháp

– Các_hàm_thống_kê: SUM, COUNT, AVG, MIN, MAX

– Danh_sách_các_cột_nhóm_dữ_liệu: Tên các cột được dùng để nhóm

Trang 14

• Ví dụ

– Liệt kê các sinh viên thi nhiều hơn 4 môn, gồm mã sinh viên, tên

sinh viên, số môn thi

SELECT Sinhvien.Masv, hosv+ ' ' + Tensv as Hoten, count(*) as

SoMonthi

FROM SinhVien Inner Join Ketqua On ketqua.masv=SinhVien.masv GROUP BY Sinhvien.Masv, hosv+ ' ' + Tensv

HAVING count(*)>=4

– Cho biết trung bình điểm thi của từng môn, chỉ lấy môn nào có

trung bình điểm thi lớn hơn 6 Thông tin gồm: mã môn, tên môn, điểm trung bình

SELECT monhoc.Mamh, Tenmh, avg(diem)

FROM monhoc INNER JOIN Ketqua ON Monhoc.mamh=Ketqua.mamh GROUP BY monhoc.Mamh, Tenmh

HAVING avg(diem)>6

Trang 15

– Liệt kê các sinh viên thi rớt trên 2 môn (có điểm<5), gồm mã sinh viên, tên

sinh viên, mã khoa

SELECT Sinhvien.Masv, hosv+ ' ' + Tensv as Hoten, Count(*) as SoMonTruot FROM SinhVien Inner Join Ketqua On ketqua.masv = SinhVien.masv

WHERE Diem <5

GROUP BY Sinhvien.Masv, hosv+ ' ' + Tensv

HAVING Count(*)>=2

– Cho biết khoa có 5 sinh viên Nam trở lên Thông tin gồm có mã khoa, tên

khoa, tổng số sinh viên nam

SELECT Khoa.Makh, Tenkh, Count(*) as TongSVNam

FROM khoa INNER JOIN sinhvien ON Khoa.makh=SinhVien.makh WHERE Phai=0

GROUP BY Khoa.Makh, Tenkh

HAVING Count(*)>5

Trang 16

• Mệnh đề UNION cho phép ghép kết quả của câu truy vấn thứ hai vào kết quả của câu truy vấn thứ nhất:

} Câu truy vấn thứ nhất

} Câu truy vấn thứ hai

Mệnh đề nối hai truy vấn

Trang 17

• Ví dụ 1 :

SELECT * FROM sinhvien WHERE makh='TH'

UNION ALL

SELECT * FROM sinhvien WHERE makh='TR'

– Cho biết số dòng trả về của hai truy vấn sau

Trang 19

• Dùng để lấy ra các bản ghi dựa trên vị trí của chúng trong tập các dòng được chọn bởi SELECT LIMIT có thể dùng với một tham số hoặc hai tham số.

lấy 3 sinh viên có học bổng

cao nhất

lấy 10 dòng bắt đầu từ dòng

có vị trí 20

Trang 20

• Ví dụ 1: Lấy ra sinh viên có học bổng cao nhất

• Ví dụ 2: Lấy ngẫu nhiên 5 sinh viên trong bảng sinhvien

SELECT Masv, Hosv, Tensv, Ngaysinh, Hocbong

Trang 21

• Là một câu truy vấn SELECT được lồng vào các câu truy vấn khác nhằm thực hiện các truy vấn tính toán phức tạp.

• Một số chú ý khi sử dụng truy vấn con:

– Truy vấn con bắt buộc phải đặt trong cặp ngoặc ( )

– Chỉ được phép tham chiếu đến tên một cột hoặc một biểu thức sẽ trả về giá trị trong truy vấn con

– Kết quả trả về của truy vấn con có thể trả về là một giá trị đơn lẻ, hoặc một danh sách giá trị

Truy vấn con được viết ở phần Danh_sách_các_cột của câu truy

vấn chính phải là câu truy vấn con chỉ trả về duy nhất một giá trị Còn truy vấn con được sử dụng trong các mệnh đề HAVING, WHERE hoặc sau các từ khóa IN, NOT IN, ANY, ALL, hàm Exists thì có thể trả về danh sách các giá trị

Trang 22

• Một số phép toán thường sử dụng khi sử dụng truy vấn con

Phép toán IN tương đương với =ANY

Phép toán NOT IN tương đương với <>ANY

Trang 23

• Ví dụ 1: Đưa ra các khoa chưa có sinh viên

SELECT * FROM khoa

WHERE khoa NOT IN ( SELECT Makh FROM sinhvien)

Trang 24

• Truy vấn cập nhật phép thực hện các thao cập nhật

dữ liệu như: thêm mới, xóa, sửa dữ liệu

Trang 25

• Lệnh INSERT cho phép thêm một dòng mới hoặc nhiều dòng dự liệu vào bảng.

• Cú pháp thêm một dòng dữ liệu mới vào bảng

• Cú pháp thêm nhiều dòng dữ liệu mới vào bảng

INSERT INTO <tên_bảng>(Danh_sách_cột)

Trang 26

• Một số lưu ý khi thêm mới

– Khóa chính không được trùng và không được bỏ

trống Nếu khóa chính là cột AUTO_INCREMENT (tự động tăng) thì không được gán giá trị khi thêm mới.

– Với cột khóa ngoại: Giá trị cho cột khóa ngoại phải tồn tại ở cột khóa chính trong bảng liên quan.

– Danh sách giá trị phải tương ứng với danh sách cột

Trang 27

• Cú pháp

– Trong đó

• Từ khóa LOW_PRIORITY được dùng để trì hoãn việc thực thi câu lệnh UPDATE cho đến khi không có bất kì ứng dụng khách nào đọc dữ liệu trên CSDL nữa thì mới tiến hành thực hiện

câu lệnh UPDATE

• Từ khóa IGNORE được sử dụng để chỉ ra cần thực thi lệnh update ngay cả khi xảy ra lỗi trong quá trình thực hiện câu lệnh UPDATE

UPDATE [LOW_PRIORITY] [IGNORE]Tên_bảng

SET Tên_cột_1=giá_trị_1 , Tên_cột_2=giá_trị_2, …

WHERE Điều_kiện_Cập_nhật

Trang 28

DELETE Tên_bảng_1, Tên_bảng_2

FROM Tên_bảng_1 INNER JOIN Tên_bảng_2 ON

Điều_kiện_ghép_dữ_liệu

WHERE Điều_kiện_xoá

DELETE Tên_bảng_1, Tên_bảng_2

USING Tên_bảng_1, Tên_bảng_2

WHERE Điều_kiện_xoá

Trang 29

• Ví dụ 1: xóa các sinh viên khoa anh văn

• Ví dụ 2: Xóa khoa tin học đồng thời xóa các sinh viên thuộc khoa tin học

Hoặc

DELETE FROM sinhvien WHERE sinhvien.makh= 'AV'

DELETE khoa, sinhvien

WHERE sinhvien.makh= 'TH'

DELETE FROM khoa, sinhvien

USING khoa INNER JOIN sinhvien ON khoa.makh=sinhvien.makh

WHERE khoa.makh=sinhvien.makh AND sinhvien.makh= 'TH'

Ngày đăng: 23/09/2015, 16:12

TỪ KHÓA LIÊN QUAN

w