Tải bản đầy đủ (.docx) (12 trang)

MySQL cơ bản from zero to hero

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 (220.89 KB, 12 trang )

MySQL form Zero to Hero
1. SQL là gì
-

SQL (Structured Query Language) là ngôn ngữ chuẩn dùng để tạo, thao túng, nhận dữ liệu từ
database
MySQL là một hệ quản trị CSDL quan hệ mà dùng SQL làm chuẩn

2. Creating Database and Table
A. Create Database
- Cách tạo 1 Database
o Syntax : CREATE DATABASE name_db;
o Sẽ tạo một db mới với tên là name_db
o Ta có thể dùng câu lệnh SHOW DATABASES; để hiển thị danh sách db
- Cách xóa 1 Database
o Syntax: DROP DATABASE name_db;
- Cách USE 1 database cụ thể
o Syntax: USE name_db;
o Câu lệnh sẻ chuyển hướng đến database cần dùng
o Để xem đang sử dụng db nào ta dùng câu lệnh SELECT DATABASE();
B. Table
*Khía niệm cơ bản
-

-

-

Table là tập hợp các dử liệu quan hệ tạo thành mỗi bảng, mổi hàng của table là một record
chứa thông tin về 1 đối tượng, mỗi cột của bảng được gọi là một field chứa thơng tin về 1
thuộc tính của tất cả các đối tượng


Colum của một bảng chính là dịng header của bảng đó
Mỗi một field trong table đều chỉ được phép có một kiểu dử liệu (data type duy nhất) để
đồng nhất dữ liệu với nhau
Các kiểu dữ liệu trong SQL
o String data type (loại kí tự)
o Numberic data type (loại số)
o Date data type (loại ngày tháng)
Một số kiểu thường dùng
o String data type:
 Varchar(n) : là một chuỗi ký tự có độ dài từ 0->255, khi khai bá kiểu varchar
ta khai báo thêm số n là số ký tự tối đa của các dữ liệu trong filed (nằm trong
khoảng 0 -> 255)
o Numberic data type:
 INT : kiểu số nguyên
o Date datatype

*Các thao tác với bảng
-

Tạo bảng mới
o Syntax: CREATE TABLE name_table (
Column_name datatype,
Column_name datatype
);


-

-


Cách để xem danh sách các bảng của db
o Syntax: SHOW TABLES
Cách để xem danh sách columns của 1 bảng nào đó
o Syntax: SHOW COLUMNS FROM table_name;
o Hoặc
o Syntax: DESC table_name;
Cách xóa table:
o Syntax: DROP TABLE table_name;

3. Insert Data (and a couple thing)
A. Insert Data
- Cách để insert data :
o Syntax: INSERT INTO table_name (columns_name, columns_name)
VALUES (value_1, value_1),
(value_2, value_2);
-

Xem giá trị của 1 bảng
o Syntax: SELECT * FROM table_name;
o Lấy hết tất cả giá trị của bảng để xem
B. Null trong MySQL
- Trong SQL khi tạo bảng ta có thể quyết định một columns có thể có tính NULL hay không
- Khi ta insert dữ liệu vào bảng mà ta quên đi thêm dữ liệu cho 1 vài collums hoặc ta thực hiện
lệnh INSERT nhưng không truyền dữ liệu dữ cả thì trong table sẽ xuất hiển các records có giá
trị là NULL
- Nếu khơng muốn nó để NULL mà để defautl value thì ta thêm từ khóa NOT NULL vào sau
collumns khi tạo bảng
o Syntax: CREATTE TABLE table_name (
Column_name NOT NULL,
Column_name NOT NULL

);
-

Khi thêm từ khóa NOT NULL thì bảng sẽ khơng cịn tính NULL, khi ta truyền giá trị NULL vào
cho bảng thì nó sẽ tự động set defautl value cho ơ đó, defautl value mặc định của kiểu số là
0, kiểu text là chuỗi rỗng ‘ ‘. Ngồi ra ta cũng có thể thay đổi defautl value này
C. Defautl Value
- Defautl value là giá trị mặc định ô đó phải có nếu ta không truyền dữ liệu vào, hay nói cách
khác nếu ơ đó là NULL thì sẽ được tự động đổi thành defautl value
- Nếu không muốn dùng defautl value mặc định của MySQL ta vẫn có thể tự set nó
- Syntax:
o CREATTE TABLE table_name (
Column_name DEFAUTL ‘value’,
Column_name DEFAUTL ‘value’
);
-

Khi ta insert data vào bảng mà ta bỏ sót dữ liệu thì nó sẽ tự động điền defautl value vào ơ bị
xót đó


D. Primary key
- Primary key là giá trị duy nhất của mỗi record dùng để định danh record đó
- Primary key là giá trị duy nhất và nó khơng thể là NULL, một table chỉ có 1 primary key duy
nhất
- Ví dụ : primary key có thê là số ID, mã SV, mã công dân,….
- Syntax:
o CREATTE TABLE table_name (
Column_name DEFAUTL ‘value’,
Column_name DEFAUTL ‘value’,

PRIMARY KEY (clumn_name);
);
-

-

Câu lệnh trên sẽ set một collumn bất kì là primary key
Trong trường hợp primary key là id, khi insert data ta phải nhớ records trước có id là bao
nhiêu ta mới có thể set id cho record mới, để tự động tăng id mỗi lần set thêm record ta
dùng thêm từ khóa AUTO_INCREMENT vào sau column_name là primary key
Ví dụ:
o CREATTE TABLE table_name (
Column_name DEFAUTL ‘value’ AUTO_INCREMENT,
Column_name DEFAUTL ‘value’,
PRIMARY KEY (clumn_name);
);

- Ta có thể dùng cả 3 từ khóa trên cùng lúc
E. VÍ dụ cho các tính chất trên

-

Trog table trên ta có thể thấy
o Tính chất NULL đều là NO
o Id là Primary key, và nó auto_increment
o Giá trị mặc định của current_status là employed

4. CRUD Command
-


CRUD là viết tắt của Create Read Update Delete là các thao tác với table


A.
B.
-

Create
Create là các lệnh insert phần trước
Read
Read chính là các lệnh SELECT
Syntax: SELECT columns_name, columns_name FROM table_name;
Ta có thể dùng SELECT * để lấy ra tồn bộ bảng
Lấy có điều kiện : để lấy có điều kiện ta dùng từ khóa WHERE
o Syntax: SELECT columns_name, columns_name FROM table_name WHERE
condition;
- Khái niệm aliases (bí danh) : aliases là ta thay đổi cách thể hiện dữ liệu dưới các tên khác
nhau, ví dụ columns cat_id ta có thể để nó hiển thị thành id thông qua aliases
o Syntax: SELECT columns_name AS aliases , columns_name FROM table_name;
C. Update
- Để update data ta dùng câu lệnh sau
- Syntax: UPDATE table_name SET columns_name = newValue WHERE condition;
- Câu lệnh trên sẽ update cho bảng với giá trị mới này sau từ khóa SET và UPDATE ở vị trí
WHERE condition trong table
D. Delete
- Để delete data khỏi bảng ta dùng câu lệnh
- Syntax: DELETE FROM table_name WHERE condition;
- Nó sẽ tìm record thỏa điều kiện và xóa khỏi bảng
- Lưu ý nếu ta bỏ đi từ khóa where thì câu lệnh sẽ thành : DELETE FROM table_name;
- Và nó sẽ xóa tồn bộ dữ liệu của bảng

- Điểm khác nhau giữa DROP table_name và DELETE FROM table_name là
o Drop sẽ xóa hồn tồn bảng khỏi database
o Delete chỉ xóa dử liệu của bảng nhưng bảng thì vẫn được giữ lại

5. SQL String Sever funtcion
- Là những hàm built-in có sẳn của SQL dùng để xử lý data dạng string
A. SQL Files
- Ta có thể tạo ra một file với đuôi là .sql để lưu trữ các câu lệnh query và khi mySQL chạy file
đó nó sẽ tự động thực hiện các câu lệnh có trong file
- Để MySQL có thể chạy một File SQL bất kỳ ta dùng câu lệnh:
o SOURCE path_of_file;
- Lưu ý:
o trước khi đọc file ta phải chọn db hoặc table muốn sử dụng
o Đường dẫn file đổi các ký tự \ thành /;
B. Concat
- Concat là hàm nối chuỗi, nó sẽ nối 2 chuỗi từ 2 field khác nhau lại thành một fileds mới chứa
chuỗi kết quả
o Syntax: CONCAT (column_name1, columns_name2);
- Vì CONCAT chỉ nối và tạo ra fileds mới nên nó thường đi kèm với lệnh SELECT để hiển thị và
FROM để chỉ rõ bảng có columns được nối
o Syntax: SELECT CONCAT(column_name1, column_name2) FROM table_name;
- Nối có ký tự ngắn cách : đê nối có ký tự ngăn cách ta dùng hàm CONCAT_WS
o Syntax: CONCAT_WS (‘connect_symbol’, column_name1, columns_name2);
o Hàm trên sẽ nếu chuỗi với mỗi giá trị được ngăn cách bởi ký tự nối được khai báo
đầu tiên trong hàm
C. Substring
- Là hàm để trích chuỗi bên trong 1 chuỗi khác


Syntax: SUBSTRING / SUBSTR (string, m,n);

Trong đó :
 String là chuỗi được trích
 m là vị trí bắt đầu (index đầu là 1)
 n là vị trí kết thúc
 Nếu ta chỉ để một số thì nó sẽ bắt đầu từ số đó đến hết chuỗi, nếu ta để số
âm thì nó lấy ngược từ cuối chuỗi
- Substring cũng giống concat tạo ra một fields và columns mới nên ta kết hợp với SELECT và
FROM để sử dụng
o Syntax: SELECT SUBSTRING(column_name, m,n) FROM table_name;
D. Replace
- Để thay thế một thành phần trong chuỗi bằng giá tị khác
o Syntax: REPLACE (string, ‘old’, ‘new’);
o Trong đó:
 string là chuỗi được thay thế
 old : là ký tự được thay thế
 new : là ký tự sẽ thay thế ký tự pos
- Tương tự các câu lệnh trên REPLACE thường đi cùng SELECT và FROM
o Syntax: SELECT REPLACE(string, ‘old’, ‘new’) FROM table_name;
E. Reverse
- Dùng để lật ngược chuỗi lại
- Syntax: REVERSE(string);
F. Char_Length
- Cho biết độ dài chuỗi
- Syntax: CHAR_LENGTH(string);
G. Uper and Lower
- Dùng để viết hoa hoặc viết thường xuống
- Syntax : UPPER / LOWER (string);
o
o


6. Refining our selection
A. Distinct
- Đây là câu lệnh giúp lọc bớt những dữ liệu giống nhau và chỉ để lại một
- Nó có tính chất giống các câu lệnh trên nên cũng được dùng chung với SELECT và FROM
o Syntax: SELECT DISTINCT columns_name FROM table_name
- Lưu ý:
o Khi sử dụng DISTINCT thì trước nó khơng thể chọn columns nào được
o Khi có 2 hay nhiều colums đứng sau DISTINCT thì nó sẽ tự động CONCAT các column
đó và DISTINCT column mới vừa CONCAT
B. Order By
- Đây là câu lệnh dùng để sort một fields bất kỳ (câu lệnh này bắt buộc đi kèm với SELECT
FROM)
o Syntax: SELECT column_name FROM table_name ORDER BY columns_name / index;
- Mặc định câu lệnh sẽ short fields theo chiều tăng dần, để thay đổi cách short ta thêm từ
khóa DESC (giảm dần) hoặc ASC (tăng dần)
- VÌ câu lệnh này sẽ làm thay đổi thứ tự trong fields được short nên cũng sẽ làm thay đổi thứ
tự các fields khác dựa theo fields được short
- Nếu có 2 hay nhiều column_name theo sau ORDER BY nó sẽ short lần lượt các colums, Ví dụ
short nhiều fileds là khi ta short họ nhưng đơi khi họ trùng nhau ta sẽ tính tới tên lúc này ta
cần short cả 2 fields. Tuy nhiên MySQL sẽ ưu tiên short fields đầu tiên được khai báo trước


C. Limit
- Đây là câu lệnh để lấy ra một số lượng phần tử nhất định
o Syntax : LIMIT n;
o Câu lệnh trên sẽ lấy ra n records tính từ đầu table
- Ngồi ra LIMIT có thể nhận 2 tham số
o Syntax: LIMIT m,n;
o Trong đó
 m là vị trí bắt đầu lấy (index bắt đầu là 0)

 n là số records sẽ lấy
- LIMIT sẽ đi kèm với SELECT FROM
o Syntax: SELECT columns_name FROM table_name LIMIT m,n;
D. Like
- Là câu lệnh tìm kiếm nâng cao bổ trọ cho WHERE
o Syntax : WHERE columns_name LIKE ‘condition’
o Nó sẽ tìm kiếm ở columns_name theo condition
*Wildcards trong LIKE
-

Wildcards là những toàn tử hỗ trợ tìm kiếm cho từ khóa LIKE
% wildcards : tốn tử % nghĩa là chọn bất cứ thứ gì (hoặc ko)
o VD :
 %da%: nghĩa là chọn columns có ký tự ‘da’ và ký tự ‘da’ trước đó có thể có
bất cứ thứ gì và sau nó cũng có thể có bật cứ thứ gì
 da% : nghĩa là chọn columns có ký tự ‘da’ và ký tự ‘da’ trước đó ko có ký tự
nào khác và sau nó cũng có thể có bật cứ thứ gì
 %da : nghĩa là chọn columns có ký tự ‘da’ và ký tự ‘da’ trước đó có thể có bất
cứ thứ gì và sau nó ko có gì cả
- _wildcards : tốn tử _ đại diện cho 1 ký tự
o VD:
 ___ : nghĩa là tìm kiếm columns có 3 ký tự
 _da: nghĩa là trước ký tự ‘da’ có 1 ký tự
 da__ : nghĩa là sau ký tự ‘da’ có 2 ký tự
- Ta có thể dùng kết hợp cả 2 toán tử
o VD :
 __da% : nghĩa là trước ký tự ‘da’ có 2 ký tự và sau nó có thể có bất cứ thứ gì
- Câu lệnh LIKE đi kèm với SELECT FROM WHERE
o Syntax: SELECT columns_name FROM table_name WHERE column_name LIKE
‘condition’

E. Lưu ý thứ tự sử dụng
- Thông thường ta sẽ sử dụng ORDER BY -> WHERE -> LIKE -> LIMIT

7. Aggregate Function
-

Aggregate Function là những hàm tính tốn dữ liệu và trả về 1 kết quả duy nhất
Các hàm này sẽ trả về 1 kết quả dưới dạng 1 fields nên ta dùng sau từ khóa SELECT để hiển
thị kết quả ra
A. Count
- Count là hàm sẽ đếm các số phần tử
o Syntax: COUNT(column_name);


B.
-

C.
-

D.
-

E.
-

-

o Hàm trên sẽ đếm và trả về số lượng phần tử ứng với columns_name
Hàm count trả về giá trị dưới dạng 1 fileds nên dùng sau từ khóa SELECT để hiển thị kết quả

o Syntax: SELECT COUNT(columns_name) FROM table_name
Count(*) có thể đếm số lượng phần tử của nguyên bảng
Group By
Gruop By là 1 hàm quan trọng trong aggregate, nó giúp gruop các dữ liệu thành 1 dòng siêu
dữ liệu dựa theo 1 columns bất kỳ
o Syntax: GROUP BY columns_name;
o Nó sẽ dựa vào columns_name để xác định những data giống nhau trong
columns_name và gộp các records có data giống nhau đó thành 1 dịng siêu dữ liệu
Dịng siêu dữ liệu là dòng chứa nhiều dữ liệu nhưng chỉ hiển thị ra 1 dòng
Khác với DISTINCT sẽ loại bỏ những data giống nhau chỉ giữ lại một, còn GROUP BY sẽ gộp
data giống nhau lại, khơng xóa dữ liệu mà chỉ gộp lại thành 1 dòng
GROUP BY cũng nhận nhiều tham số, nó sẽ concat lại và thực hiện GRUOP (tương tự
DISTINCT)
Mỗi hàng dữ liệu khi được gruop cũng được xem như 1 table mini nên khi ta dùng COUNT(*)
thì nó sẽ cho ra 1 fields đếm lần lượt số phần tử có trong mỗi ‘table mini’ này
GRUOP BY sẽ đi sau SELECT FROM
o Syntax: SELECT columns_name FROM tables_name GROUP BY columns_name;
MIN và MAX
Min max đơn giản là trả về giá trị nhỏ nhất và lớn nhất
o Syntax: MIN/MAX (column_name)
Câu lệnh này sẽ đi sau SELECT tương tự COUNT
o Syntax: SELECT MIN/MAX(columns_name) FROM table_name;
Khi ta sử dụng MIN/MAX lên table khơng có gruop by thì nó sẽ tính MIN MAX cho cả table và
trả về 1 giá trị, còn khi ta dùng MIN/MAX cho table có GRUOP BY thì nó sẽ tính MIN MAX cho
từng dịng được gruop lại với nhau nghĩa là mỗi GRUOP sẽ có 1 MIN/MAX (duy tự gọi đây là
tính GRUOP của hàm)
Sum
Dùng để cộng tất cả dữ liệu trong 1 fileds
o Syntax: SUM (column_name);
o Lưu ý : nó chỉ nhận 1 tham số

SUM giống các hàm Aggregate khác đều theo sau từ khóa SELECT
o Syntax: SELECT SUM(colums_name) FROM table_name;
SUM có tính GRUOP
Average
Dùng để tính trung bình cộng các dữ liệu của 1 fields
o Syntax: AVG(column_name);
o Lưu ý : nó chỉ có 1 tham số
AVG giống các hàm Aggregate khác đều theo sau từ khóa SELECT
o Syntax: SELECT AVG (colums_name) FROM table_name;
AVG có tính GRUOP

8. More in Data Type
A. Char và Varchar
- Char nó cũng tương tự với Varchar cũng dùng để lưu dữ liệu dạng text, nhưng char nó sẽ
fixed cứng độ dài. Ví dụ nếu ta khai báo Char(5) thì khi ta nhập vào data chỉ có 4 ký tự thì SQL
sẽ tự động thê khoảng trắng phía sau data sao cho độ dài đủ 5 ký tự


-

Khi lưu trữ thì data được thêm khoảng trắng phía sau cho đủ độ dài nhưng khi ta select hoặc
dùng các hàm truy xuất, tập hợp data thì SQL tự động bỏ khoảng trắng đi rồi thực hiện việc
tính tốn
- Char thường được dùng với các dữ liệu được fixed sẵn như giới tính là M hoặc F...
B. Decimal
- Decimal là kdl dùng để hiển thị số thập phân
o Syntax: DECIMAL(d, m);
o Trong đó
 d là số ký tự tối đa của số thập phân (ví dụ: 12,3 thì số ký tự là 3)
 m là số ký tự nằm sau dấu phẩy thập phân (ví dụ: 12,3 thì số ký tự sau dấu

phẩy là 1)
 d luôn lớn hơn m
- Khi ta lưu một giá trị có phần d lớn hơn phần d được khai báo thì sẽ bị lỗi
- Cịn khi ta lưu gái trị có phần m lớn hơn phần m được khai báo thì nó sẽ tự động làm trịn
đến phần m được khai báo
o Ví dụ : nếu khai báo m là 2 mà ta nhập 2,345 thì nó sẽ làm trịn thành 2,35
C. Float và Double
- FLoat và Double cũng là kdl để chứa số thập phân
- Khác với Decimal sử dụng fixed-point type (kiểu mỗi số thập phân là một mã) còn float và
double sử dụng floating-point type nên kiểu decimal sẽ chính xác hơn trong tính tốn và kiểu
float/ double sẽ giúp lưu trữ số lớn hơn nhưng dùng ít dữ liệu hơn
- Phạm vi chính xác của Float là 7 ký tự (doube là 14 ký tự) : nghĩa là nếu số thập phân vượt
qua phạm vi này thì float và double sẽ lưu khơng cịn chính xác nửa
- Vậy khi nào dùng Decmial và khi nào dùng Float/Double
o Dùng Decimal:
 Khi ta quan tâm đến tính chính xác của dữ liệu
 Cần thực hiện những phép tồn chính xác
o Dùng Float/Double
 Khi ta khơng cần quan tâm nhiều đến tính chính xác của dữ liệu
 Cần lưu số lớn với một khơng gian nhỏ hơn
D. Datetime
- Kdl ngày tháng có 3 kiểu cơ bản phổ biến
o Date : chỉ lưu ngày tháng năm, format: ‘yyyy-mm-dd'
o Time : chỉ lưu giờ phút giây, format: ‘hh:mm:ss’
o Datetime : lưu cả ngày tháng năm và giờ phút giây, format : ‘yyyy-mm-dd hh:mm:ss’
*CURDATE(), CURTIME(), NOW(): 3 hàm hiển thị thời gian hiện tại
E.
-

-


CURDATE() : sẽ hiển thị ngày hiện tại
CURTIME() : sẽ hiển thị giờ hiện tại
NOW() : sẽ hiện thị ngày giờ thiện tại
Date Format
Một số hàm format date:
o DAY() : lấy ngày
o DAYNAME() : lấy thứ ứng với ngày
o DAYOFWEEK() : xem ngày thứ mấy trong tuần
o DAYOFYEAR() : ngày thứ mấy trong năm
Một số hàm format tháng:
o MONTH() : lấy tháng
o MONTHNAME() : lấy tên tháng


-

Hàm Date_Format() giúp ta tự do định dạng ngày tháng năm và giờ
o Syntax: DATE_FORMAtT(columns_name, formating)
o Tham khảo tại : />F. Date Math
- Là các hàm cho phép ta thực hiện các phép toán trên date
- Trừ datetime lấy số ngày
o Syntax : DATEDIFF(dateime1, datetime2);
o Nó sẽ trừ datetime1 cho datetim2 lấy số ngày cách biệt giữa 2 datetime
o Có thể thực hiện phép toán với cả date và datetime, hàm có thể trả về số âm
- Cộng trừ datetime với 1 khoảng thời gian nhất định
o Syntax: datetime_name +/- INTERVAL time;
o Câu lệnh trên sẽ cộng hoặc trừ 1 khoảng thời gian là time vào datime_name
o Time có thể là 1 month, 2 day, 1 year , 10 minutes, 3 quarters
G. Timestamps

- Timestamps giống như datetime cũng dùng để lưu ngày giờ nhưng giới hạn của nó ngắn hơn
(từ 1970-01-01 00:00:01 đến 2038-01-19 3:14:07)
- Timestamps thường được dùng để hiện thị những update vào khoảng thời gian nào
- Ví dụ :
o Syntax: TIMESTAMPS DEFAUTL NOW() ON UPDATE CURRENT_TIMESTAMPS
o Câu lệnh trên khi khời tọa một timestamp thì nó sẽ lấy datetime hiện tại, và mỗi lần
update 1 giá trị nào đó thì datetime cũng được update theo
- TimeStamps thường được dùng để thể hiện tính năng cmt hay post đã được post lên khi nào
và update khi nào

9. Logical Operater
A.
B.
-

NOT LIKE
Ngược lại với LIKE
BETWEEN
Nó sẽ lấy giá trị ở giữa một khoảng nào đó
o Syntax: WHERE column_name BETWEEN m AND n;
o Câu lệnh sẽ lấy giá trị giữa m và n
o Câu lệnh tương tự như: column_nam >= m && column_name <= n
- NOT BETWEEN thì ngược lại lấy những dữ liệu ngoài khoảng
- Lưu ý : khi dùng BETWEEN với kiểu dử liệu datetime tốt nhất ta nên covert sang cùng 1 kiểu
để dễ dàng so sánh
o Dùng câu lệnh CAST() để covert
o Syntax: CAST( values/column_name AS new_kdl)
o Câu lệnh sẽ chuyển kdl của values hoặc là 1 columns thành 1 kdl mới
C. IN
- Từ khóa IN như 1 short hand cho nhiều câu điều kiện OR

o Syntax: WHERE column_name IN (value1, value2);
o Câu lệnh trên sẽ lấy ra những record có column_name mang giá trị value1 hoặc
value2
o Câu lệnh trên tương tự câu lệnh: WHERE column_name = value1 OR column_name =
value2;
- NOT IN thì ngược lại sẽ lấy những giá trị bên ngoài khoảng IN
D. CASE Statement
- Là cấu trúc case như trong các nnlt


-

Syntax: SELECT CASE
WHEN condittion THEN value
WHEN condittion THEN value
ELSE value
END;

-

-

Câu lệnh trên có logic tương tự cấu trúc case của các nnlt, đầu tiên nó xét điều kiện nếu
đúng nó sẽ in ra giá trị, nếu sai nó tiếp tục xét điện kiện tiếp theo đến khi gặp từ khóa END
nó sẽ kết thúc
Vì CASE sẽ tạo ra 1 fields để chứa các value trả về nên nó đi kèm với select

10.

Realationship of Data


-

Trong thực tế các dữ liệu không chỉ gồm một table mà nó là một hệ thống các table liên kết
với nhau thơng qua thuộc tình nào đó. Đó chính là mqh giữa các table
- Có 3 loại mqh
o Ont to one relationship (mqh 1-1)
o One to many relationship (mqh 1 - nhiều)
o Many to many relationship (mqh nhiều - nhiều)
A. One to many Relationship
- Mqh 1 nhiều nghĩa là trong cùng một thời điểm thì một thực thể trong table này có mqh với
nhiều thực thể trong table khác. Ví dụ : books thì có nhiều review, 1 review thì chỉ viết về 1
book
- Thơng thường để liên kết giữa các table thì trong bảng này sẽ có dữ liệu từ bảng khác. Tuy
nhiên một số trường hợp dữ liệu ở bảng này lại có giá trị nằm ngoại phạm vị của nó trong
bảng khác sẽ làm phá hỏng dữ liệu. Để ngăn ngừa điều trên ta dùng Foreign key (khóa ngoại)
*Foreign Key
-

Foreign key (khóa ngoại) được sử dụng để hạn chế những hành động làm phá hoại sự liên
kết của dữ liệu, về ĐN Foreign key là một fields mà nó tham chiếu tới Primary key của bảng
khác. Bảng có foreign key sẽ đgl bảng con cịn bảng có primary key được tham chiếu tới sẽ
gọi là bảng được tham chiếu hoặc bảng cha
o Syntax : FOREIGN KEY (column_name1) REFERENCES table_name(column_name2)
o Trong đó : column_name1 là khóa ngoại và nó references tới column_name2 của
table_name

*ON DELETE CASADE
-


Khi liên kết Foreign key với Primary key của table cha thì dữ liệu ở table cha sẽ khơng thể xóa
được, khi ta dùng lệnh DELETE thì nó sẽ hiển lỗi là dữ liệu có liên kết với table con qua
Foreign key nên khơng thể xóa được. Muốn xóa ta có 2 cách
o C1: xóa dữ liệu liên quan ở table con trước sau đó xáo dữ liệu cha


C2: khi khai báo bảng con ta thêm từ khóa ON DELETE CASADE vào sau phần khai
báo Foreign key, khi đó ta chỉ cần DELETE dữ liệu từ bảng cha thì những dữ liệu liên
quan ở bảng con sẽ đc xóa theo
 Syntax: FOREIGN KEY (column_name1) REFERENCES
table_name(column_name2) ON DELETE/ UPDATE CASADE
 Với delêt thì sẽ cùng xóa cịn update thì sẽ cùng update
B. Inner Join
- Inner join là ghép 2 bảng lại thành 1 dựa trên những record có giá trị giống nhau trong 1
fileds được chọn của 2 bảng. Thông thường các trường được đem ra so sánh là primary key
của bảng cha và foreign key của bảng con
- Hình ví dụ về inner join:
o

-

Syntax: SELECT column_name FROM table1 JOIN table2 ON table1.column1 =
table2.column2;
o Câu lệnh trên sẽ ghép table1 và 2 thành một bảng lớn dựa trên điều kiện ghép là
column1 từ bảng 1 phải bằng column2 từ bảng
C. Left Join
- Left join sẽ trả về tất cả record từ bảng bên trái và những record có giá trị trùng nhau trong 1
fields được chọn từ bảng bên phải
- Hình ví dụ về Left join:


-

Syntax: SELECT column_name FROM table1 LEFT JOIN table2 ON table1.column1 =
table2.column2;
o Câu lệnh sẽ ghép table 1 và table 2 với tất cả records từ table1 và một phần records
có column2 trùng với column1 của table1 từ table2


-

Lưu ý : vì nó lấy cả những records khơng trùng dữ liệu nên ở những fileds có dữ liệu khơng
trùng đó sẽ mang giá trị null
o Ví dụ:

-

Để khử chữ null ta dùng hàm IFNULL
o Syntax: IFNULL (column_name, new_value);
o Nếu fileds đó có một ơ có giá trị null thì null sẽ được thay thế bằng new_value
D. Right Join
- Tương tự left join nhưng lấy bên phải
- Hình ảnh ví dụ:

11.

Một số từ khóa khác

A. UNIQUE
- Dùng để đánh dấu dữ liệu mỗi ô trong trường này là duy nhất, có thể hiểu nó như một
candicate key

- Syntax : dùng từ UNIQUE sau khai báo KDL
B. HAVING
- Having được thêm vào SQL để giải quyết vđe WHERE không dùng được Aggregate functions
- Và Having có thể đặt ở một số vị trí mà WHERE ko đặt được
- Syntax: HAVING condittion



×