You are on page 1of 43

MYSQL

Quy tắc đặt tên trong MySql

 Tên không chứa khoảng trắng.


 Không chứa các ký tự: / \ . : * " < > | …
 Tên bảng, trên trường không vượt quá 24 ký tự.
Kiểu số nguyên:

Kiểu dữ liệu của trường


Kiểu dữ liệu số nguyên

Kiểu dữ liệu Kích thước Miền giá trị

Tinyint 1 byte -127 – 128 hay 0..255

Smallint 2 byte -32768 – 32767 hay 0..65535

-8388608 – 838860 hay


Mediumint 3 byte
0..16777215

Int 4 byte -231 – 231-1 hay 0..232-1

Bigint 8 byte -263 – 263-1 hay 0..264-1


Kiểu số nguyên:

Kiểu dữ liệu của trường


Kiểu dữ liệu số thực

Kiểu dữ liệu Kích thước Miền giá trị

3.402823466E-38 –
Float 4 bytes
1.175493451E+38

1.7976931348623157E-308 –
Double 8 bytes
2.2250738585072014E+308
Kiểu dữ liệu của trường
Kiểu dữ liệu ngày, giờ
Kiểu dữ liệu Miền giá trị Diễn giải
1000-01-01 đến Date trình bày dưới dạng yyyy-mm-
Date
9999-12-31 dd.
Date và time trình bày dưới dạng
1000-01-01, 00:00:00
Datetime đến yyyy-mm-dd, hh:mm:ss.
9999-12-31, 23:59:59

00:00:00 đến Time trình bày dưới dạng hh:mm:ss.


Time
23:59:59
1970 - 2069 Year trình bày dưới dạng 2 số hay 4
Year[(2|4)] 1901 - 2155 số.
Timestamp trình bày dưới dạng yyyy-
Timestamp[(M)] 1970-01-01, 00:00:00
mm-dd, hh:mm:ss.
Kiểu số nguyên:

Kiểu dữ liệu của trường


Kiểu dữ liệu chuỗi
Kiểu dữ liệu Kích thước Diễn giải

CHAR 1÷ 255 Chuỗi cố định

VARCHAR 1÷ 255 Chuỗi động

TINYBLOB 1÷ 255 Kiểu đối tượng nhị phân cỡ 255 ký tự

TINYTEXT 1÷ 255 Kiểu đối tượng chuỗi kích cỡ 255 ký tự

BLOB 1÷ 65535 Kiểu blob

TEXT 1÷ 65535 Kiểu dạng văn bản cỡ 65535 ký tự


Khai báo cho Field chứa kiểu bolb vừa cỡ 16,777,215
MEDIUMBLOB 1÷ 16777215(byte)
characters
Khai báo cho Field chứa kiểu chuỗi dạng văn bản vừa cỡ
MEDIUMTEXT 1÷ 16777215(ký tự) 16,777,215 characters

Khai báo cho Field chứa kiểu bolb lớn khoảng


Longblob 1÷ 232-1(byte)
4,294,967,295 characters
Khai báo cho Field chứa kiểu chuỗi dạng văn bản lớn
Longtext 1÷ 232-1(ký tự) khoảng 4,294,967,295 characters
Tạo CSDL
Bước 1: Vào trang phpmyadmin
Hoặc trên thanh địa chỉ của trình duyệt web gõ:
http://localhost/phpmyadmin/
Trình duyệt web xuất hiện
Tạo CSDL
Bước 2: Tạo bảng
Tạo CSDL
Bước 2: Tạo bảng
Toán tử Like
• Toán tử LIKE thường được sử dụng khi trích
chọn dữ liệu theo một mẫu lọc nào đó.
• Toán tử LIKE thường được sử dụng trong mệnh
đề WHERE của câu lệnh SELECT. MySQL cung
cấp hai kí hiệu thay thế được sử dụng trong
toán tử LIKE:
• Kí hiệu (%) là kí tự đại diện cho một xâu bất kì
• Kí hiệu (_) là kí tự đại diện cho một kí tự đơn lẻ
duy nhất.
Ví dụ
 Tìm tất cả sinh viên mà giá trị của trường họ sinh
viên là họ ‘nguyen’.
SELECT employeeNumber, Hosv, Tensv FROM
SinhVien WHERE Hosv LIKE ‘Nguyen%’.
 Tìm tất cả Sinh viên trong bảng sinhvien có tên dạng
Tan, Tin, Ton, …
SELECT masv, hosv, tensv FROM sinhvien WHERE tensv
LIKE 'T_n'
Toán tử Between...And....
• Toán tử BETWEEN...AND lấy ra một miền dữ
liệu nằm giữa hai giá trị. Hai giá trị này có thể là
số, chuỗi văn bản hoặc ngày tháng.
• SELECT tên_cột FROM tên_bảng
WHERE tên_cột BETWEEN giá_trị_1 AND
giá_trị_2
Vd: Tìm tất cả sinh viên có điểm từ 5 đến 8
Select * from SinhVien where Diem Between 5
And 8
Lưu ý
• Để truy vấn những thông tin không thuộc 1
khoảng nào đó. Chúng ta có thể sử dụng NOT
BETWEEN... AND ...
VD: Tìm ra những sinh viên có điểm không thuộc
5 đến 8
Select * from SinhVien where Diem Not
Between 5 And 8
Toán tử Null
• Null đuợc sử dụng để kiểm tra giá trị của 1
trường có Null (rỗng) hay là không.
• MySQL cung cấp 2 toán tử để làm việc với các
giá trị NULL:
• IS NULL: Trả về True nếu giá trị field là NULL.
• IS NOT NULL: Trả về True nếu giá trị field là
không NULL.
Ví dụ
• In danh sách sinh viên không có số điện thoại
liên lạc.
Select Hosv,Tensv, Diachi from sinhvien where
Dienthoai IS NULL
• In danh sách sinh viên có địa chỉ liên hệ
Select Hosv, Tensv, Diachi from Sinhvien where
Diachi IS NOT NULL
Toán tử IN
• Câu lệnh in trong where sử dụng trong tình
huống tìm kiếm giá trị thuộc một tập hợp nhất
định.
VD: Tìm địa chỉ của những sinh viên có tên Lan,
Nam, Hang, Huong.
Select Tensv, Diachi from Sinhvien where Tensv in
(‘Lan’,’Nam’,’Hang’,’Huong’)
• Chú ý: Nếu truy vấn dữ liệu mà không có trong
tập hợp. Chúng ta sử dụng NOT IN
Ví dụ
• Truy vấn tất cả sinh viên trừ các bạn có tên
‘Lan’,’Huong’,’Giau’, ‘Tham’
• Select Hosv, Tensv, DiaChi from sinhvien where
Tensv NOT IN (‘Lan’,’Huong’,’Giau’, ‘Tham’).
Câu lệnh Distinct
• Câu lệnh Distinct được sử dụng cùng với
Select, dùng để select các dữ liệu, bỏ qua các
dữ liệu trùng nhau. Cú pháp là:
• Select distinct <column1>, <column2> ....
From Tên_bảng
VD: Cho biết kết quả thi của sinh viên. Loại bỏ
những dữ liệu trùng.
Select Distinct Hosv,Tensv, Diem from Ketqua
Order By (Sắp xếp bởi)
• Việc truy vấn dữ liệu cho một tập kết quả, mà có thể nó sắp
xếp không như ý muốn, sử dụng Order by để sắp xếp kết
quả trả về. Order by đứng sau mệnh đề WHERE
• Cú pháp
SELECT "column_name"
FROM "table_name"
[WHERE "condition"]
ORDER BY "column_name1" [ASC, DESC], "column_name2"
[ASC, DESC];
-- Ghi chú:
-- ASC: nghĩa là sắp xếp tăng dần (Mặc định)
-- DESC: Nghĩa là sắp xếp giảm dần.
Ví dụ
• In danh sách sinh viên, sắp xếp tăng dần theo
tên sinh viên, nếu trùng tên thì sắp xếp theo
họ giảm dần.
Select Hosv, Tensv from Sinhvien order by Tensv
ASC, Hosv DESC.
Alias Trong MySQL
• Alias column: dùng để đổi tên cột khi trả về kết quả
truy vấn.
Vd: Select Hosv,Tensv from Sinhvien
Hosv Tensv
Kết quả:

• Sử dụng Alias:
Vd: Select Hosv as ‘Họ’, Tensv as ‘Tên’ from Sinhvien
Kết quả:
Họ Tên
Alias Table
• Alias table tạo một đối tượng thể hiện cho
Table. Khi thao tác, nguời sử dụng chỉ cần thao
tác trên alias của đối tuợng đó.
• VD: In danh sách sinh viên theo từng lớp học.
• Select sv.Hosv,sv.Tensv, sv.Ngaysinh,lh.Tenlop
from Sinhvien sv, Lophoc lh where
lh.Malop=sv.Malop
Mệnh đề Group By (Nhóm bởi ...)
• Group By đuợc sử dụng để kết nhóm các dữ liệu trong cùng
1 nhóm lại.
• Trước hết chúng ta cần hiểu các hàm tổng hợp (Aggregate
Functions) là gì:
• Sum: Hàm tính tổng
• Avg: Hàm lấy trung bình
• Count: Hàm tính số lần
• Min: Hàm tìm giá trị nhỏ nhất
• Max: Hàm tìm giá trị lớn nhất
• Đó là một số hàm tổng hợp (Aggregate) thông dụng. Chúng
có thể tham gia vào câu lệnh nhóm (Group by).
Group by đuợc sử dụng để gom nhóm
• VD: Cho biết sỉ số sinh viên của từng lớp.
• Select lh.Tenlop, count(sv.masv) as ‘Si so’ from
Sinhvien sv, Lophoc lh where
lh.Malop=sv.Malop
Group by lh.Tenlop
Tenlop Si so
PHP 8
MySQL 7
C# 10
SQL Count
• Count là một hàm, đếm số dòng trong câu Query.
Thông thường nó thường được sử dụng cùng với
Group by.
Vd: Đếm số lượng sinh viên
Select count(masv) from sinhvien
Vd: Đếm số lượng sinh viên theo từng lớp
• Select lh.Tenlop, count(sv.masv) as ‘Si so’ from
Sinhvien sv, Lophoc lh where lh.Malop=sv.Malop
Group by lh.Tenlop
SQL Sum
• Sum là hàm dùng để tính tổng giá trị một cột
trong câu SQL.
• Cú pháp:
• SELECT SUM("column_name") FROM
"table_name";
• VD: Tổng tiền học bổng của sinh viên
Select sum(hocbong) from sinhvien
Chú ý: Sum chỉ làm việc với các trường có kiểu dữ
liệu là số.
Tương tự như Count, sum cũng thuờng làm
việc với Group by
• VD: Tính tiền học bổng của từng lớp
Select lh.TenLop, Sum( sv.hocbong) from
sinhvien sv, Lophoc lh where lh.malop=sv.malop
Group by lh.TenLop
SQL AVG
• AVG là hàm tính trung bình trên cột.
• Tương tự như count, sum. AVG cũng làm việc với
Group by
Vd: Tính điểm trung bình của tất cả sinh viên
Select AVG( diem) from KetQua
Vd: Tính điểm trung bình của từng lớp
Select lh.Tenlop, AVG(kq.diem) from LopHoc lh,
Ketqua kq where lh.malop=kq.malop
Group by lh.Tenlop
MIN, MAX
Min là hàm tìm giá trị nhỏ nhất trên cột.
Cú pháp MIN:
• SELECT MIN ("column_name") FROM
"table_name";
Max là hàm tìm giá trị lớn nhất trên cột.
Cú pháp MAX:
• SELECT MAX("column_name") FROM
"table_name";
Mệnh đề Having
• Having là một câu lệnh điều kiện của Group
by.
VD: Truy vấn những lớp học có sỉ số trên 15 sinh
viên
Select lh.Tenlop, count(sv.masv) from Sinhvien
sv, Lophoc lh where sv.malop=lh.malop
Group by lh.Tenlop
Having count(sv.masv) > 15
Phân biệt Where & Having
• Bạn cần phân biệt Where và Having trong
cùng một câu lệnh. Where là câu lệnh lọc bớt
dữ liệu trước khi gom nhóm (Group)
• Having là câu lệnh lọc bớt dữ liệu sau khi đã
gom nhóm (Group) .
Một số hàm sử dụng trong MySQL
• Hàm UPPER: hàm này chuyển đổi chuỗi sang
dạng kiểu chữ hoa
VD: Select Upper(TenSV) from SinhVien
Kết quả: TenSV
LONG
AN
LY
Tương tự
• Hàm LOWER : Hàm này chuyển đổi chuỗi sang dạng kiểu chữ
thường.
• Hàm Len: Hàm này trả về chiều dài của chuỗi
• Vd: len(‘abc’) -> 3
• Hàm LTRIM : hàm này loại bỏ khoảng trống bên trái của chuỗi
• Hàm RTRIM : hàm này loại bỏ khoảng trống bên phải của chuỗi.
• Hàm LEFT : hàm này trả về chuỗi bên trái tính từ đầu cho đến vị
trí thứ n
Cú pháp Left(chuỗi, n)
• Vd: LEFT (‘123ABC’,3) ->123
Hàm trong MySQL
• Hàm RIGHT : hàm này trả về chuỗi bên phải
tính từ cuối cho đến vị trí thứ n
• Cú pháp: RIGHT( CHUỖI, N).
• Hàm Instr: hàm trả về vị trí chuỗi bắt đầu của
chuỗi con trong chuỗi cần xét
Cú pháp: Instr(chuỗi con, chuỗi cần xét)
Vd: Instr(‘123’,’abc123’) -> 3
Các hàm xử lý thời gian trong MySQL
• Hàm NOW(): ngày hiện tại dạng yyyy-mm-dd h:m:s
ví dụ: SELECT NOW(); //kết quả: 2015-02-2 08:03:33
• CURDATE(): ngày hiện tại dạng yyyy-mm-dd
ví dụ: SELECT CURDATE(); //kết quả: 2015-02-2
• YEAR(): xác định năm từ 1 ngày cho trước
ví dụ: Truy vấn năm sinh của sinh viên
Select TenSV, Year(ngaysinh) as’ nam’ from Sinhvien
TenSV nam
An 1993
Lan 1992

Chu ý: Năm hiện tại Year( Now()) -> 2015


Hàm thời gian
• MONTH(): xác định tháng (1-12) từ 1 ngày cho trước.
• MONTHNAME(): xác định tháng (January-December) từ 1 ngày
cho trước.
ví dụ: SELECT MONTH('2014-03-28 11:30:11'); //kết quả: March
• DATE(): xác định chính ngày từ 1 biểu thức ngày
ví dụ: SELECT DATE('2015-2-2 20:02:03');
-> '2015-2-2'
• DATEDIFF(expr1,expr2): tính số ngày giữa 2 ngày expr1 và expr2,
nếu số ngày >0 nghĩa là expr1>expr2 và ngược lại
Ví dụ: SELECT DATEDIFF(‘2014-12-31 23:59:59',‘2014-12-30'); ->
1
SELECT DATEDIFF(‘2014-11-30 23:59:59',‘2014-12-31');
-> -31
Hàm thời gian
• Hàm DAY(): Dùng để lấy ngày
ví dụ: SELECT DAY(‘2015-01-28'); -> 28
• Hàm DAYNAME(): Lấy ngày theo thứ
Ví dụ: SELECT DAYNAME(‘2015-02-02'); -> ‘Monday’.
• Hàm DATE_FORMAT(date,): định dạng lại ngày trong mysql theo
định dạng của format
ví dụ: SELECT DATE_FORMAT(‘2015-2-02 20:23:00', '%W %M %Y'); -
> ‘Monday February 2015'
• Một số định dạng
 %d : ngày 00..31
 %m : Tháng (00..12)
 %Y : năm (4 ký tự)
 %h : giờ (01..12)
 %i : Phút (00..59)
 %s : Seconds (00..59)
 %W : ngày trong tuần (Sunday..Saturday)
VIEW trong MYSQL
• View là gì ?
• View là các truy vấn SELECT được lưu lại sau khi
thực thi.
• Một số lưu ý đối với câu lệnh SELECT trong view:
– Không sử dụng biến local, user hay session
– Những lệnh dịch sẵn cũng không thể sử dụng
– Bảng tạm hay các view khác cũng không được sử
dụng làm nguồn dữ liệu cho câu truy vấn này.
– Không thể tạo trigger cho view.
VIEW
• Cú pháp
• CREATE VIEW view_name AS
SELECT statement
From Table
Where <Condition>
• Gọi View giống như Table
Select * from <View name>
Ví dụ
• Tạo View truy vấn danh sách sinh viên có năm
sinh 1994
• Create View V1_DSSV_1994
AS
Select Hosv, Tensv, Ngaysinh, Diachi
From Year(Ngaysinh)=1994
• Truy vấn View
Select *Hosv
from V1_DSSV_1994
Tensv Ngaysinh Diachi
Nguyen Lan 2/3/1994 TPHCM
Truong Hien 12/3/1994 Long An
VIEW
• Ưu nhược điểm
• Ưu điểm
– An ninh – Cho phép người quản trị CSDL (DBA)
cung cấp cho người sử dụng chỉ những dữ liệu cần
thiết
– Đơn giản hóa – Các view cũng có thể sử dụng để
ẩn và sử dụng lại các truy vấn phức tạp
• Nhược điểm: Tốn thêm tài nguyên trên Server
(memory, process)

You might also like