/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/
Showing posts with label COM2012. Show all posts
Showing posts with label COM2012. Show all posts

[Database-Tự Học SQL] COM2012_MySQL Bài 2 - Các Bước Xây Dựng Cơ Sở Dữ Liệu

MỤC TIÊU

Hiểu các khái niệm về thực thể, tập thực thể
Nắm được mối quan hệ giữa các thực thể
Các ràng buộc trong CSDL quan hệ: khoá chính, khoá ngoại ...
Làm quen với hệ quản trị cơ sở dữ liệu MySQL

THỰC HIỆN

1. Hướng Dẫn Vẽ Sơ Đồ Thực Thể Liên Kết ERD

2. Phân tích và thiết kế cơ sở dữ liệu quản lý bán hàng

3. Hướng Dẫn Chuyển Mô Hình ERD Mức Logic Sang Vật Lý và Sinh Code Tự động

4. Lab 2.1 - Hướng Dẫn Phân Tích Bài Bất Động Sản - Phần 1
 
5. Lab 2.2 Cài đặt trên hệ quản trị cơ sở dữ liệu/Tạo Bảng, Nhập Liệu, Tạo Khóa Trong MySQL WorkBench


Xong!

[Database-Tự Học SQL] COM2012_MySQL Bài 1 - Hướng Dẫn Cài Đặt MySQL Workbench Trên Windows

MỤC TIÊU
1. Biết cách download và cài đặt MySQL trên windows
2. Cài đặt MySQL Workbench trên MacOS
3. Hướng dẫn thực thi câu lệnh SQL và hiển thị sơ đồ quan hệ thực thể

THỰC HIỆN

1. Hướng dẫn cài đặt MySQL Workbench trên Windows
  

Tải file thực hành 

2. Cài đặt MySQL Workbench trên MacOS
updating...

3. Hướng dẫn thực thi câu lệnh SQL và hiển thị sơ đồ quan hệ thực thể



Xong!




[Database-Tự Học SQL] COM2012_MySQL Bài 6 P1: Subqueries/Truy Vấn Con/Truy Vấn Lồng Trong SQL

A. Subquery NON-correlated: truy vấn con độc lập với truy vấn bên ngoài. Truy vấn con được thi hành thi hành đầu tiên và một lần duy nhất cho toàn bộ câu lệnh. Kết quả của truy vấn con được điền vào truy vấn bên ngoài, và cuối cùng thi hành truy vấn bên ngoài

B. Subquery correlated: Truy vấn con không độc lập hay có liên quan với truy vấn bên ngoài. Truy vấn con sử dụng các giá trị từ truy vấn bên ngoài trong mệnh đề WHERE của nó. Quá trình thực hiện như sau: các truy vấn bên ngoài được thực hiện trước tiên và sau đó thi hành truy vấn con bên trong cho mỗi dòng kết quả của truy vấn bên ngoài


YÊU CẦU:

  1. Hiển thị thông tin các nhân viên có mức lương cao nhất
  2. Hiển thị thông tin nhân viên có mức lương lớn hơn mức lương trung bình của toàn công ty
  3. Hiển thị thông tin nhân viên có mức lương lớn hơn tất cả các mức lương của nhân viên trong phòng PB001
  4. Hiển thị thông tin nhân viên có mức lương lớn hơn một trong các mức lương của nhân viên trong phòng PB001
  5. Hiển thị thông tin nhân viên thuộc các phòng ban có chữ "San Xuat" 
  6. Hiển thị các phòng ban không có nhân viên nào
  7. Hiển thị thông tin nhân viên mà nhân viên đó chưa được phân bổ phòng ban
  8. Hiển thị thông tin các nhân viên trong nhóm có lương cao thứ 3


THỰC HIỆN

Sử dụng database của bài trước (bài 5)

1. Hiển thị thông tin các nhân viên có mức lương cao nhất

SELECT * FROM nhan_vien 
WHERE luong = (			
				SELECT MAX(luong) FROM nhan_vien);


2. Hiển thị thông tin nhân viên có mức lương lớn hơn mức lương trung bình của toàn công ty

SELECT * FROM nhan_vien 
WHERE luong > (			
				SELECT AVG(luong) FROM nhan_vien);


3. Hiển thị thông tin nhân viên có mức lương lớn hơn tất cả các mức lương của nhân viên trong phòng PB001

SELECT * FROM nhan_vien 
WHERE luong > ALL (			
					SELECT luong FROM nhan_vien WHERE phongban_id = "PB001" );	


4. Hiển thị thông tin nhân viên có mức lương lớn hơn một trong các mức lương của nhân viên trong phòng PB001

SELECT * FROM nhan_vien 
WHERE luong > ANY (			
					SELECT luong FROM nhan_vien WHERE phongban_id = "PB001" );


5. Hiển thị thông tin nhân viên thuộc các phòng ban có chữ "San Xuat" 

SELECT * FROM nhan_vien 
WHERE phongban_id IN ( 			
						SELECT id FROM phong_ban WHERE ten_pb LIKE "San Xuat%");


6. Hiển thị các phòng ban không có nhân viên nào

SELECT * FROM phong_ban 
WHERE NOT EXISTS ( 			
					SELECT * FROM nhan_vien WHERE phong_ban.id = nhan_vien.phongban_id);
-- có thể dùng LEFT JOIN để so sánh kết quả
SELECT * FROM phong_ban	
LEFT JOIN nhan_vien ON phong_ban.id = nhan_vien.phongban_id
WHERE nhan_vien.id IS NULL;


7. Hiển thị thông tin nhân viên mà nhân viên đó chưa được phân bổ phòng ban

SELECT * FROM nhan_vien 			
WHERE NOT EXISTS (			
					SELECT * FROM phong_ban WHERE phong_ban.id = nhan_vien.phongban_id); 
-- không dùng subquery, chúng ta có thể dùng câu này để so sánh kết quả
SELECT * FROM nhan_vien WHERE phongban_id IS NULL;


8. Hiển thị thông tin các nhân viên trong nhóm có lương cao thứ 3
SELECT * FROM nhan_vien
WHERE luong = (
	SELECT DISTINCT luong
	FROM nhan_vien
    ORDER BY luong DESC
    LIMIT 2, 1 -- bỏ qua 2 dòng và lấy 1 dòng
	)
;

Xong!

[Database-Tự Học SQL] COM2012_MySQL Bài 5: DQL-Data Query Language/Ngôn Ngữ Truy Vấn - Phần 1 - Truy Vấn 1 Bảng

DQL-Data Query Language/Ngôn Ngữ Truy Vấn: Bao gồm các lệnh cho phép truy vấn dữ liệu mà không làm thay đổi dữ liệu hoặc các đối tượng trong CSDL


NỘI DUNG

A. CHUẨN BỊ DỮ LIỆU
1. Tạo bảng (phong_ban, nhan_vien, du_an, quanly_duan)
2. Chèn dữ liệu mẫu


B. THỰC HIỆN TRUY VẤN

I. SELECT, CONCAT, AS

1. Truy vấn hiển thị toàn bộ nội dung trong bảng nhan_vien
2. Truy vấn hiển thị các cột: ho_nv, ten_nv, nam_sinh trong bảng nhan_vien
3. Truy vấn hiển thị các cột: ho_nv, ten_nv, nam_sinh trong bảng nhan_vien, gộp 2 côt ho_nv và ten_nv thành 1 cột
4. Truy vấn hiển thị các cột: ho_nv, ten_nv, nam_sinh trong bảng nhan_vien, gộp 2 côt ho_nv và ten_nv thành 1 cột và đặt bí danh cho cột là "Họ và Tên"
5. Truy vấn hiển thị cột: ten_nv trong bảng nhan_vien, và loại bỏ các dòng trùng nhau

II. ORDER BY

1. Hiển thị danh sách các nhân gồm: ho_nv, ten_nv, luong và lương sắp xếp giảm dần theo cột luong
2. Hiển thị danh sách các nhân gồm: ho_nv, ten_nv, luong và lương sắp xếp giảm dần theo cột luong, nếu lương bằng nhau thì sắp xếp tăng dần (A->Z) của cột ten_nv

III. WHERE

Hiển thị thông tin nhân viên có tên: "dan"

IV. OR

1. Hiển thị thông tin nhân viên có phongban_id là: PB001 hoặc PB002
2. Hiển thị thông tin nhân viên có luong là: 800, 1000, 1500

V. [NOT] IN

Hiển thị thông tin nhân viên có luong là: 800, 1000, 1500

VI. AND

Hiển thị thông tin nhân viên có phongban_id là: PB001 hoặc PB002 và luong > 1000

VII. [NOT] BETWEEN … AND

Hiển thị nhân viên có mức lương trong khoảng 1000 đến 2000

VIII. [NOT] LIKE

1. Hiển thị nhân viên có họ là: Tran
2. Hiển thị nhân viên có họ có chữ: Giap
3. Hiển thị nhân viên có tên có chiều dài là 3 ký tự và bắt đầu là chữ D

IX. IS [NOT] NULL

Hiện thị nhân viên chưa phân bổ bộ phận (căn cứ vào cột phongban_id)

X. AGGREGATE

1. Thống kê tổng số nhân viên
2. Thống kê tổng số nhân viên, và đổi tên cột đếm thành "Tổng số nhân viên"
3. Thống kê tổng số nhân viên nam/nữ
4. Tìm nhân viên có mức lương cao nhất
5. Tìm nhân viên có mức lương nhấp nhất
6. Tính mức lương trung bình của nhân toàn công ty
7. Tính tổng lương của nhân viên phòng ban có mã PB001
8. Hiển thị MIN, MAX, SUM, AVG của toàn thể nhân viên trên 1 dòng

XI. OPERATOR

1. Tính tuổi của nhân viên
2. Chỉ hiện thị các nhân viên có tuổi >30
3. Tăng thêm 200$ cho các nhân viên có mức lương thấp hơn 900$

XII. GROUP BY

Đếm số lượng nhân viên trong mỗi phòng

XIII. HAVING

1. Hiển thị tổng mức lương của mỗi phòng ban và chỉ hiển thị các nhóm/phòng có tổng lương lớn hơn 15000$
2. Tính tổng lương công ty phải trả cho mỗi phòng ban, chỉ nhóm hàng nào có cột lương >800$, chỉ hiển thị nhóm nào có tổng >10000$

XIV. LIMIT

1. Lấy ra 10 nhân viên có mức lương thấp nhất
2. Lấy ra 2 nhân viên có mức lương thấp nhất của phongban_id PB001, và lấy từ vị trí thứ 6

TỔNG HỢP

1. Hiển thị mã phòng ban (phongban_id) và lương trung bình tương ứng từng phòng, chỉ lấy các hàng có mức lương trên 800$, chỉ hiển thị các phòng có lương trung bình > 1200$ và sắp xếp theo thứ tự giảm dần theo cột phongban_id và chỉ lấy 3 dòng

  2. Hiển thị họ tên, giới tính của nhân viên, nếu giới tính = 1 thì hiển thị là nam, ngược lại là nữ 


THỨ TỰ THỰC HIỆN CÁC CÂU LỆNH TRONG SQL


THỰC HIỆN

A. CHUẨN BỊ DỮ LIỆU
1. Tạo bảng (phong_ban, nhan_vien, du_an, quanly_duan)
CREATE TABLE  phong_ban(
id  char(5) NOT NULL,
ten_pb  varchar(255) NOT NULL,
ma_tp  int DEFAULT NULL, 
PRIMARY KEY (id)
);

CREATE TABLE  nhan_vien(
id  int NOT NULL AUTO_INCREMENT,
ho_nv  varchar(255) NOT NULL,
ten_nv  varchar(10) NOT NULL,  
nam_sinh  date DEFAULT NULL,
dia_chi  varchar(255) DEFAULT NULL,
gioi_tinh  BOOLEAN  DEFAULT NULL,
luong  int DEFAULT NULL,
phongban_id  varchar(5) DEFAULT NULL, 
PRIMARY KEY (id),  
FOREIGN KEY (phongban_id) REFERENCES phong_ban (id)
);

CREATE TABLE  du_an(
id   char(5) NOT NULL,
ten_duan  varchar(255) DEFAULT NULL,
ngay_batdau   date DEFAULT NULL,  
ngay_ketthuc  date DEFAULT NULL,
PRIMARY KEY (id)
);

CREATE TABLE  quanly_duan(
duan_id  char(5) NOT NULL,
nhanvien_id   int NOT NULL,
ngay_thamgia  date DEFAULT NULL,  
ngay_ketthuc  date DEFAULT NULL,
sogio   int DEFAULT NULL,
vai_tro  varchar(255) DEFAULT NULL,  
PRIMARY KEY (duan_id, nhanvien_id), 
FOREIGN KEY (duan_id) REFERENCES du_an (id), 
FOREIGN KEY (nhanvien_id) REFERENCES nhan_vien (id))
;

Sơ đồ sau khi tạo bảng


2. Chèn dữ liệu mẫu
INSERT INTO phong_ban VALUES('PB001', 'Nhan Su', '1');
INSERT INTO phong_ban VALUES('PB002', 'Ke Toan', '2');
INSERT INTO phong_ban VALUES('PB003', 'Kinh Doanh', '3');
INSERT INTO phong_ban VALUES('PB004', 'San Xuat', '4');
INSERT INTO phong_ban VALUES('PB005', 'Phat Trien Mau', '5');
INSERT INTO phong_ban VALUES('PB006', 'QA', '6');
INSERT INTO phong_ban VALUES('PB007', 'Thu Mua', '7');
INSERT INTO phong_ban VALUES('PB008', 'Ky Thuat', '8');
INSERT INTO phong_ban VALUES('PB009', 'LAB', '9');
INSERT INTO phong_ban VALUES('PB010', 'ME', '10');
INSERT INTO phong_ban VALUES('PB011', 'San Xuat 1', '11');
INSERT INTO phong_ban VALUES('PB012', 'San Xuat 2', '12');
INSERT INTO phong_ban VALUES('PB013', 'San Xuat 3', '13');
INSERT INTO phong_ban VALUES('PB014', 'San Xuat 4', '14');
INSERT INTO phong_ban VALUES('PB015', 'San Xuat 5', '15');

INSERT INTO nhan_vien VALUES('1', 'To At', 'Mui', '1981-1-27', '129, Thu Khoa Huan, Ha Noi', '0', '1700', 'PB003');
INSERT INTO nhan_vien VALUES('2', 'Nguyen At', 'Ty', '1984-12-24', '12, Bui Thi Xan, Long An', '1', '1700', 'PB008');
INSERT INTO nhan_vien VALUES('3', 'To Mau', 'Hoi', '1981-9-24', '197, Pham Van Dong, Ha Noi', '1', '700', 'PB004');
INSERT INTO nhan_vien VALUES('4', 'Le Mau', 'Ngo', '1985-5-15', '182, Thu Khoa Huan, Ha Noi', '0', '800', 'PB005');
INSERT INTO nhan_vien VALUES('5', 'Ho At', 'Tuat', '1983-2-27', '62, Le Duan, Dong Nai', '0', '1000', 'PB003');
INSERT INTO nhan_vien VALUES('6', 'Ly Canh', 'Thin', '1973-2-17', '30, Nguyen Thi Minh Khai, Long An', '1', '1000', 'PB001');
INSERT INTO nhan_vien VALUES('7', 'Nguyen Tan', 'Than', '1981-4-21', '23, Nguyen Hue, Cao Bang', '1', '850', 'PB007');
INSERT INTO nhan_vien VALUES('8', 'Thai Ky', 'Suu', '1984-9-18', '155, Nguyen Thi Minh Khai, TP. Ho Chi Minh', '0', '2500', 'PB001');
INSERT INTO nhan_vien VALUES('9', 'Nguyen Qui', 'Hoi', '1971-8-19', '84, Bui Thi Xan, TP. Ho Chi Minh', '0', '800', 'PB007');
INSERT INTO nhan_vien VALUES('10', 'Le Qui', 'Mui', '1985-11-9', '73, Le Van Tam, Dong Nai', '1', '900', 'PB001');
INSERT INTO nhan_vien VALUES('11', 'Le At', 'Suu', '1972-9-28', '70, Le Duan, Binh Duong', '1', '2000', 'PB008');
INSERT INTO nhan_vien VALUES('12', 'Ho Giap', 'Ti', '1995-9-23', '182, Nguyen Thi Minh Khai, Hau Giang', '1', '1000', 'PB006');
INSERT INTO nhan_vien VALUES('13', 'Nguyen Dinh', 'Meo', '1971-3-7', '165, Nguyen Thi Minh Khai, Binh Duong', '0', '2000', 'PB008');
INSERT INTO nhan_vien VALUES('14', 'Thai Canh', 'Dan', '1981-3-9', '142, Le Hong Phong, Cao Bang', '0', '2000', 'PB003');
INSERT INTO nhan_vien VALUES('15', 'Van Canh', 'Thin', '1984-9-6', '98, Le Van Tam, Ha Tay', '1', '800', 'PB001');
INSERT INTO nhan_vien VALUES('16', 'Hoang Ky', 'Ngo', '1971-7-6', '157, Le Hong Phong, Dong Nai', '0', '1700', 'PB005');
INSERT INTO nhan_vien VALUES('17', 'Nguyen Tan', 'Thin', '1997-3-18', '175, Le Hong Phong, Long An', '0', '900', 'PB003');
INSERT INTO nhan_vien VALUES('18', 'Ly Tan', 'Than', '1993-4-23', '64, Thu Khoa Huan, Hau Giang', '1', '2000', 'PB004');
INSERT INTO nhan_vien VALUES('19', 'Thai At', 'Ngo', '1973-2-6', '21, Pham Van Dong, Dong Nai', '0', '1000', 'PB005');
INSERT INTO nhan_vien VALUES('20', 'Nguyen Giap', 'Dau', '1984-3-8', '91, Nguyen Thi Minh Khai, Long An', '0', '900', 'PB004');
INSERT INTO nhan_vien VALUES('21', 'Thai Giap', 'Mui', '1974-9-18', '106, Le Duan, Da Nang', '0', '750', 'PB002');
INSERT INTO nhan_vien VALUES('22', 'Ho Dinh', 'Thin', '1997-8-5', '105, Nguyen Hue, Hau Giang', '1', '1000', 'PB001');
INSERT INTO nhan_vien VALUES('23', 'Thai Canh', 'Thin', '1971-3-3', '33, Le Van Tam, Ha Tay', '0', '750', 'PB006');
INSERT INTO nhan_vien VALUES('24', 'Ho At', 'Tuat', '1981-12-10', '187, Le Van Tam, TP. Ho Chi Minh', '0', '2500', 'PB003');
INSERT INTO nhan_vien VALUES('25', 'Ho Ky', 'Ti', '1971-12-13', '83, Le Van Tam, TP. Ho Chi Minh', '0', '2000', 'PB004');
INSERT INTO nhan_vien VALUES('26', 'Le Ky', 'Suu', '1985-10-17', '139, Pham Van Dong, Da Nang', '0', '800', 'PB006');
INSERT INTO nhan_vien VALUES('27', 'Ly Canh', 'Mui', '1973-12-8', '97, Bui Thi Xan, Ha Tay', '0', '1000', 'PB006');
INSERT INTO nhan_vien VALUES('28', 'To Tan', 'Meo', '1974-5-7', '102, Le Duan, Binh Duong', '0', '2500', 'PB002');
INSERT INTO nhan_vien VALUES('29', 'To Tan', 'Thin', '1981-8-21', '194, Ho Xuan Huong, Hau Giang', '0', '1700', 'PB007');
INSERT INTO nhan_vien VALUES('30', 'Van Ky', 'Tuat', '1984-8-18', '132, Bui Thi Xan, Binh Duong', '1', '2500', 'PB007');
INSERT INTO nhan_vien VALUES('31', 'Thai Giap', 'Suu', '1970-10-21', '117, Le Duan, Cao Bang', '1', '1500', 'PB001');
INSERT INTO nhan_vien VALUES('32', 'Van Dinh', 'Mui', '1994-7-11', '113, Ho Xuan Huong, Hau Giang', '0', '1000', 'PB001');
INSERT INTO nhan_vien VALUES('33', 'Tran Dinh', 'Suu', '1994-4-8', '192, Nguyen Thi Minh Khai, Da Nang', '0', '2000', 'PB006');
INSERT INTO nhan_vien VALUES('34', 'Thai Giap', 'Ti', '1996-8-24', '194, Le Hong Phong, Cao Bang', '0', '2500', 'PB005');
INSERT INTO nhan_vien VALUES('35', 'Van Tan', 'Than', '1971-7-16', '77, Thu Khoa Huan, Da Nang', '0', '800', 'PB006');
INSERT INTO nhan_vien VALUES('36', 'Nguyen Binh', 'Ty', '1993-3-5', '194, Le Hong Phong, Dong Nai', '1', '1700', 'PB007');
INSERT INTO nhan_vien VALUES('37', 'Ly Mau', 'Ty', '1973-9-19', '57, Nguyen Thi Minh Khai, Ha Tay', '1', '2000', 'PB003');
INSERT INTO nhan_vien VALUES('38', 'Tran Qui', 'Thin', '1996-3-21', '161, Bui Thi Xan, Cao Bang', '0', '900', 'PB008');
INSERT INTO nhan_vien VALUES('39', 'Ho At', 'Ngo', '1974-8-17', '144, Pham Van Dong, Hau Giang', '1', '2500', 'PB007');
INSERT INTO nhan_vien VALUES('40', 'Ly Ky', 'Tuat', '1993-11-10', '48, Bui Thi Xan, Cao Bang', '1', '1500', 'PB004');
INSERT INTO nhan_vien VALUES('41', 'Ho Dinh', 'Ngo', '1983-8-6', '138, Bui Thi Xan, Long An', '0', '1000', 'PB005');
INSERT INTO nhan_vien VALUES('42', 'Ho Nham', 'Suu', '1997-8-3', '18, Mac Van Khoa, Long An', '0', '2500', 'PB008');
INSERT INTO nhan_vien VALUES('43', 'Tran Canh', 'Ngo', '1993-4-16', '181, Thu Khoa Huan, Hau Giang', '1', '850', 'PB002');
INSERT INTO nhan_vien VALUES('44', 'Ly Binh', 'Than', '1982-4-14', '160, Le Hong Phong, Binh Duong', '1', '900', 'PB002');
INSERT INTO nhan_vien VALUES('45', 'Thai Ky', 'Suu', '1973-9-20', '64, Bui Thi Xan, Ha Noi', '0', '2500', 'PB002');
INSERT INTO nhan_vien VALUES('46', 'Truong Ky', 'Than', '1993-3-11', '61, Ho Xuan Huong, Long An', '1', '1500', 'PB002');
INSERT INTO nhan_vien VALUES('47', 'Ho Qui', 'Tuat', '1970-4-7', '169, Pham Van Dong, Dong Nai', '1', '900', 'PB006');
INSERT INTO nhan_vien VALUES('48', 'Ly Binh', 'Dau', '1972-12-15', '30, Nguyen Hue, Cao Bang', '1', '750', 'PB005');
INSERT INTO nhan_vien VALUES('49', 'Tran Ky', 'Ti', '1982-1-9', '30, Ho Xuan Huong, Binh Duong', '1', '1500', 'PB003');
INSERT INTO nhan_vien VALUES('50', 'Nguyen Nham', 'Ty', '1970-7-28', '133, Thu Khoa Huan, Long An', '1', '750', 'PB007');
INSERT INTO nhan_vien VALUES('51', 'Tran Dinh', 'Suu', '1994-3-13', '5, Nguyen Hue, TP. Ho Chi Minh', '0', '1700', 'PB008');
INSERT INTO nhan_vien VALUES('52', 'Nguyen At', 'Mui', '1985-7-20', '88, Le Duan, Cao Bang', '1', '700', 'PB007');
INSERT INTO nhan_vien VALUES('53', 'Van Ky', 'Dan', '1996-6-2', '51, Ho Xuan Huong, Cao Bang', '1', '2000', 'PB008');
INSERT INTO nhan_vien VALUES('54', 'Hoang Canh', 'Mui', '1982-11-21', '48, Ho Xuan Huong, Binh Duong', '0', '1700', 'PB007');
INSERT INTO nhan_vien VALUES('55', 'To Giap', 'Mui', '1996-9-1', '194, Pham Van Dong, Ha Noi', '1', '1500', 'PB003');
INSERT INTO nhan_vien VALUES('56', 'Truong At', 'Ty', '1971-9-22', '66, Ho Xuan Huong, Hau Giang', '0', '800', 'PB005');
INSERT INTO nhan_vien VALUES('57', 'Thai Canh', 'Hoi', '1972-2-2', '152, Bui Thi Xan, TP. Ho Chi Minh', '0', '800', 'PB004');
INSERT INTO nhan_vien VALUES('58', 'Thai Binh', 'Ngo', '1970-9-27', '76, Le Duan, Binh Duong', '0', '2500', 'PB006');
INSERT INTO nhan_vien VALUES('59', 'Van Giap', 'Than', '1997-10-12', '9, Ho Xuan Huong, Da Nang', '0', '1500', 'PB007');
INSERT INTO nhan_vien VALUES('60', 'Ly Mau', 'Tuat', '1995-8-27', '68, Nguyen Hue, Hau Giang', '0', '750', 'PB007');
INSERT INTO nhan_vien VALUES('61', 'Ho Nham', 'Thin', '1984-6-26', '5, Bui Thi Xan, TP. Ho Chi Minh', '1', '750', 'PB002');
INSERT INTO nhan_vien VALUES('62', 'Van Qui', 'Than', '1971-6-5', '140, Le Van Tam, Cao Bang', '1', '700', 'PB008');
INSERT INTO nhan_vien VALUES('63', 'Tran Dinh', 'Mui', '1985-2-25', '76, Le Van Tam, Hue', '0', '800', 'PB004');
INSERT INTO nhan_vien VALUES('64', 'Ho Nham', 'Meo', '1984-2-11', '95, Mac Van Khoa, Binh Duong', '1', '850', 'PB005');
INSERT INTO nhan_vien VALUES('65', 'Tran Ky', 'Suu', '1971-8-12', '96, Le Hong Phong, Binh Duong', '1', '1500', 'PB001');
INSERT INTO nhan_vien VALUES('66', 'Van Binh', 'Ngo', '1993-9-12', '105, Mac Van Khoa, Ha Noi', '0', '800', 'PB006');
INSERT INTO nhan_vien VALUES('67', 'Ho Ky', 'Mui', '1994-12-8', '110, Nguyen Hue, Long An', '1', '1700', 'PB004');
INSERT INTO nhan_vien VALUES('68', 'Truong Binh', 'Dan', '1982-9-28', '118, Nguyen Thi Minh Khai, Long An', '1', '1700', 'PB001');
INSERT INTO nhan_vien VALUES('69', 'Le Giap', 'Ngo', '1983-1-1', '93, Pham Van Dong, Binh Duong', '1', '850', 'PB006');
INSERT INTO nhan_vien VALUES('70', 'To At', 'Hoi', '1995-6-9', '154, Le Duan, Da Nang', '0', '1000', 'PB005');
INSERT INTO nhan_vien VALUES('71', 'Truong At', 'Thin', '1984-2-4', '141, Le Van Tam, Binh Duong', '0', '1500', 'PB004');
INSERT INTO nhan_vien VALUES('72', 'Ho Binh', 'Dau', '1983-6-19', '179, Thu Khoa Huan, Cao Bang', '0', '800', 'PB001');
INSERT INTO nhan_vien VALUES('73', 'Le Binh', 'Tuat', '1974-6-4', '57, Pham Van Dong, Binh Duong', '0', '1700', 'PB008');
INSERT INTO nhan_vien VALUES('74', 'Nguyen Canh', 'Ti', '1984-12-5', '123, Bui Thi Xan, Binh Duong', '1', '2000', 'PB005');
INSERT INTO nhan_vien VALUES('75', 'To Mau', 'Than', '1981-9-20', '179, Ho Xuan Huong, Binh Duong', '0', '1700', 'PB003');
INSERT INTO nhan_vien VALUES('76', 'Truong Tan', 'Suu', '1982-7-3', '14, Nguyen Hue, Ha Tay', '0', '750', 'PB005');
INSERT INTO nhan_vien VALUES('77', 'Le Canh', 'Mui', '1995-3-2', '69, Nguyen Hue, Da Nang', '1', '2000', 'PB001');
INSERT INTO nhan_vien VALUES('78', 'Tran Qui', 'Thin', '1994-9-20', '175, Nguyen Hue, Cao Bang', '0', '900', 'PB001');
INSERT INTO nhan_vien VALUES('79', 'Tran Mau', 'Dau', '1984-2-28', '79, Nguyen Hue, Long An', '0', '2500', 'PB006');
INSERT INTO nhan_vien VALUES('80', 'To Ky', 'Meo', '1982-12-4', '32, Le Hong Phong, Hue', '1', '2000', 'PB005');
INSERT INTO nhan_vien VALUES('81', 'Nguyen At', 'Suu', '1993-4-4', '117, Nguyen Hue, Ha Tay', '1', '1500', 'PB002');
INSERT INTO nhan_vien VALUES('82', 'Truong Dinh', 'Thin', '1971-1-19', '101, Pham Van Dong, Cao Bang', '0', '1000', 'PB005');
INSERT INTO nhan_vien VALUES('83', 'Van Nham', 'Mui', '1972-1-27', '74, Thu Khoa Huan, Long An', '0', '1000', 'PB008');
INSERT INTO nhan_vien VALUES('84', 'Nguyen Dinh', 'Suu', '1984-12-27', '52, Le Duan, Long An', '1', '850', 'PB002');
INSERT INTO nhan_vien VALUES('85', 'Ho Qui', 'Thin', '1994-6-28', '76, Nguyen Hue, Cao Bang', '0', '850', 'PB004');
INSERT INTO nhan_vien VALUES('86', 'To Dinh', 'Thin', '1993-7-21', '181, Le Hong Phong, Ha Tay', '0', '750', 'PB006');
INSERT INTO nhan_vien VALUES('87', 'Ho At', 'Dan', '1984-7-20', '174, Pham Van Dong, Da Nang', '0', '750', 'PB006');
INSERT INTO nhan_vien VALUES('88', 'Van Ky', 'Ngo', '1983-6-3', '2, Nguyen Thi Minh Khai, Dong Nai', '0', '700', 'PB008');
INSERT INTO nhan_vien VALUES('89', 'Tran Canh', 'Suu', '1995-8-25', '169, Le Duan, Binh Duong', '0', '1000', 'PB006');
INSERT INTO nhan_vien VALUES('90', 'Hoang Dinh', 'Ti', '1993-6-23', '103, Thu Khoa Huan, Ha Tay', '0', '1700', 'PB002');
INSERT INTO nhan_vien VALUES('91', 'Ly Tan', 'Tuat', '1993-1-19', '97, Pham Van Dong, Ha Tay', '0', '700', 'PB003');
INSERT INTO nhan_vien VALUES('92', 'Ho Tan', 'Mui', '1997-12-23', '15, Mac Van Khoa, Cao Bang', '1', '2500', 'PB006');
INSERT INTO nhan_vien VALUES('93', 'Le Tan', 'Dan', '1982-9-15', '184, Le Duan, Binh Duong', '0', '800', 'PB007');
INSERT INTO nhan_vien VALUES('94', 'Ly Dinh', 'Mui', '1985-1-6', '8, Bui Thi Xan, Hau Giang', '1', '1500', 'PB002');
INSERT INTO nhan_vien VALUES('95', 'Tran Qui', 'Thin', '1981-11-13', '65, Nguyen Hue, Cao Bang', '1', '700', 'PB002');
INSERT INTO nhan_vien VALUES('96', 'Truong Ky', 'Tuat', '1973-11-25', '153, Le Duan, Cao Bang', '0', '700', 'PB002');
INSERT INTO nhan_vien VALUES('97', 'Le Nham', 'Mui', '1981-12-27', '139, Le Duan, Hue', '0', '900', 'PB005');
INSERT INTO nhan_vien VALUES('98', 'Nguyen Qui', 'Dau', '1996-7-10', '166, Ho Xuan Huong, Ha Tay', '1', '850', 'PB007');
INSERT INTO nhan_vien VALUES('99', 'Van Dinh', 'Thin', '1997-8-12', '192, Le Van Tam, Ha Noi', '1', '2500', 'PB004');
INSERT INTO nhan_vien VALUES('100', '', 'Ty', '1973-2-21', '133, Pham Van Dong, Hue', '1', '2000', 'PB007');

INSERT INTO du_an VALUES('DA001', 'Resort Long Hai', '2001-02-24', '2012-05-11');
INSERT INTO du_an VALUES('DA002', 'Ho Tram', '2001-08-15', '2013-01-23');
INSERT INTO du_an VALUES('DA003', 'Khach San Sai Gon', '2010-04-14', '2017-07-01');
INSERT INTO du_an VALUES('DA004', 'Ba Ria - Vung Tau', '2001-02-20', '2016-01-19');
INSERT INTO du_an VALUES('DA005', 'Coco Bay Da Nang', '2006-10-22', '2012-03-26');
INSERT INTO du_an VALUES('DA006', 'The Sun City', '2005-03-01', '2016-02-12');
INSERT INTO du_an VALUES('DA007', 'Vi Thanh Hau Giang', '2003-01-01', '2021-10-24');
INSERT INTO du_an VALUES('DA008', 'Dong Ha', '2006-11-21', '2018-02-04');
INSERT INTO du_an VALUES('DA009', 'Hoi An Quang Nam', '2004-10-23', '2017-02-09');
INSERT INTO du_an VALUES('DA010', 'Resort Binh Chau 1', '2006-09-02', '2019-03-27');
INSERT INTO du_an VALUES('DA011', 'Resort Binh Chau 4', '2000-05-19', '2013-03-02');
INSERT INTO du_an VALUES('DA012', 'Ho Tram 1', '2002-08-19', '2013-04-15');
INSERT INTO du_an VALUES('DA013', 'Ho Tram 2', '2008-05-04', '2013-12-04');
INSERT INTO du_an VALUES('DA014', 'Ho Tram 3', '2002-08-05', '2013-09-14');
INSERT INTO du_an VALUES('DA015', 'Ho Tram 4', '2008-09-22', '2012-10-02');
INSERT INTO du_an VALUES('DA016', 'Khach San Sai Gon 1', '2000-12-17', '2012-03-25');
INSERT INTO du_an VALUES('DA017', 'Khach San Sai Gon 2', '2005-12-02', '2017-12-04');
INSERT INTO du_an VALUES('DA018', 'Khach San Sai Gon 3', '2006-02-20', '2015-11-18');
INSERT INTO du_an VALUES('DA019', '', '2005-12-19', '2012-12-26');
INSERT INTO du_an VALUES('DA020', '', '2002-10-04', '2021-03-15');

INSERT INTO quanly_duan VALUES('DA001', '19', '2001-2-24', '2012-5-11', '4094', 'Quan Ly');
INSERT INTO quanly_duan VALUES('DA002', '17', '2001-8-15', '2013-1-23', '4179', 'Worker');
INSERT INTO quanly_duan VALUES('DA003', '12', '2010-4-14', '2017-7-1', '2635', 'Tester');
INSERT INTO quanly_duan VALUES('DA004', '14', '2001-2-20', '2016-1-19', '5446', 'Nhan Vien Thiet Ket');
INSERT INTO quanly_duan VALUES('DA005', '11', '2006-10-22', '2012-3-26', '1982', 'Quan Ly');
INSERT INTO quanly_duan VALUES('DA006', '10', '2005-3-1', '2016-2-12', '4000', 'Tester');
INSERT INTO quanly_duan VALUES('DA007', '15', '2003-1-1', '2021-10-24', '6871', 'Tester');
INSERT INTO quanly_duan VALUES('DA008', '12', '2006-11-21', '2018-2-4', '4093', 'Quan Ly');
INSERT INTO quanly_duan VALUES('DA009', '11', '2004-10-23', '2017-2-9', '4492', 'Ky Su Trien Khai');
INSERT INTO quanly_duan VALUES('DA010', '14', '2006-9-2', '2019-3-27', '4589', 'Tester');
INSERT INTO quanly_duan VALUES('DA011', '16', '2000-5-19', '2013-3-2', '4670', 'Nhan Vien Thiet Ket');
INSERT INTO quanly_duan VALUES('DA012', '13', '2002-8-19', '2013-4-15', '3892', 'Ky Su Trien Khai');
INSERT INTO quanly_duan VALUES('DA013', '11', '2008-5-4', '2013-12-4', '2040', 'Tester');
INSERT INTO quanly_duan VALUES('DA014', '11', '2002-8-5', '2013-9-14', '4058', 'Quan Ly');
INSERT INTO quanly_duan VALUES('DA015', '12', '2008-9-22', '2012-10-2', '1471', 'Tester');
INSERT INTO quanly_duan VALUES('DA016', '20', '2000-12-17', '2012-3-25', '4116', 'Ky Su Trien Khai');
INSERT INTO quanly_duan VALUES('DA017', '16', '2005-12-2', '2017-12-4', '4385', 'Ky Su Trien Khai');
INSERT INTO quanly_duan VALUES('DA018', '15', '2006-2-20', '2015-11-18', '3558', 'Quan Ly');
INSERT INTO quanly_duan VALUES('DA019', '16', '2005-12-19', '2012-12-26', '2564', 'Worker');
INSERT INTO quanly_duan VALUES('DA020', '14', '2002-10-4', '2021-3-15', '6737', 'Nhan Vien Thiet Ket');

Tìm hiểu cách chèn dữ liệu ở bài 7



B. THỰC HIỆN TRUY VẤN

I. SELECT, CONCAT, AS, DISTINCT

1. Truy vấn hiển thị toàn bộ nội dung trong bảng nhan_vien
SELECT * 
  FROM nhan_vien;


2. Truy vấn hiển thị các cột: ho_nv, ten_nv, nam_sinh trong bảng nhan_vien
SELECT ho_nv, ten_nv, nam_sinh 
  FROM nhan_vien;


3. Truy vấn hiển thị các cột: ho_nv, ten_nv, nam_sinh trong bảng nhan_vien, gộp 2 côt ho_nv và ten_nv thành 1 cột
SELECT CONCAT(ho_nv, " ",ten_nv), nam_sinh 
  FROM nhan_vien;
CONCAT: Hàm thêm/nối hai hoặc nhiều chuỗi lại với nhau.

4. Truy vấn hiển thị các cột: ho_nv, ten_nv, nam_sinh trong bảng nhan_vien, gộp 2 côt ho_nv và ten_nv thành 1 cột và đặt bí danh cho cột là "Họ và Tên"
SELECT CONCAT(ho_nv, " ",ten_nv) AS "Họ và Tên", nam_sinh 
  FROM nhan_vien;
AS: Được sử dụng để đổi tên cột hoặc bảng bằng bí danh.
Bí danh chỉ tồn tại trong thời gian truy vấn.

5. Truy vấn hiển thị cột: ten_nv trong bảng nhan_vien, và loại bỏ các dòng trùng nhau
SELECT DISTINCT ten_nv 
  FROM nhan_vien;
SELECT DISTINCT: Chúng ta có thể hiểu là dùng để loại bỏ những kết quả trùng nhau hay được sử dụng để trả về các giá trị riêng biệt (khác nhau)

II. ORDER BY
ORDER BY Từ khóa được sử dụng để sắp xếp tập hợp kết quả theo thứ tự tăng dần ASC hoặc giảm dần DESC.
Noted: Nếu chúng ta ORDER BY <tên cột>  và sau đó không ghi ASC hay DESC thì mặc định cột đó sẽ sắp xếp theo kiểu tăng dần (A-Z)

1. Hiển thị danh sách các nhân gồm: ho_nv, ten_nv, luong và lương sắp xếp giảm dần theo cột luong
SELECT ho_nv, ten_nv, luong 
  FROM nhan_vien 
  ORDER BY luong DESC;


2. Hiển thị danh sách các nhân gồm: ho_nv, ten_nv, luong và lương sắp xếp giảm dần theo cột luong, nếu lương bằng nhau thì sắp xếp tăng dần (A->Z) của cột ten_nv
SELECT ho_nv, ten_nv, luong 
  FROM nhan_vien 
  ORDER BY luong DESC, ten_nv ASC;


III. WHERE

Hiển thị thông tin nhân viên có tên: "dan"
SELECT * 
  FROM nhan_vien 
  WHERE ten_nv ="dan";


IV. OR

1. Hiển thị thông tin nhân viên có phongban_id là: PB001 hoặc PB002
SELECT * 
  FROM nhan_vien 
  WHERE 
  		phongban_id ="PB001" 
  	 OR phongban_id ="PB002";

2. Hiển thị thông tin nhân viên có luong là: 800, 1000, 1500
SELECT * 
  FROM nhan_vien 
  WHERE luong = 800 
  	OR luong = 1000 
  	OR luong = 1500;

V. [NOT] IN

Hiển thị thông tin nhân viên có luong là: 800, 1000, 1500
SELECT * 
  FROM nhan_vien 
  WHERE luong IN (800, 1000,1500);

VI. AND

Hiển thị thông tin nhân viên có phongban_id là: PB001 hoặc PB002 và luong > 1000
SELECT * 
  FROM nhan_vien 
  WHERE (phongban_id ="PB001" OR phongban_id ="PB002") 
  	AND luong >1000;


VII. [NOT] BETWEEN … AND

Hiển thị nhân viên có mức lương trong khoảng 1000 đến 2000
SELECT * 
  FROM nhan_vien 
  WHERE luong BETWEEN 1000 AND 2000;


VIII. [NOT] LIKE

1. Hiển thị nhân viên có họ là: Tran
SELECT * 
  FROM nhan_vien 
  WHERE ho_nv LIKE "Tran%"; -- % đại diện cho MỘT CHUỖI ký tự bất kỳ


2. Hiển thị nhân viên có họ có chữ: Giap
SELECT * 
    FROM nhan_vien 
    WHERE ho_nv LIKE "%Giap%";


3. Hiển thị nhân viên có tên có chiều dài là 3 ký tự và bắt đầu là chữ D
SELECT * 
    FROM nhan_vien 
    WHERE ten_nv LIKE "D__"; -- _ đại diện cho MỘT KÝ TỰ bất kỳ



IX. IS [NOT] NULL

Hiện thị nhân viên chưa phân bổ bộ phận (căn cứ vào cột phongban_id)
SELECT * 
  FROM nhan_vien 
  WHERE phongban_id IS NULL;


X. AGGREGATE

1. Thống kê tổng số nhân viên
SELECT COUNT(id) 
    FROM nhan_vien;


2. Thống kê tổng số nhân viên, và đổi tên cột đếm thành "Tổng số nhân viên"
SELECT COUNT(id) AS "Tổng số nhân viên" 
    FROM nhan_vien;


3. Thống kê tổng số nhân viên nam/nữ
SELECT COUNT(id) 
    FROM nhan_vien 
    WHERE gioi_tinh = 1; -- tùy theo chúng ta quy định 0, 1 là nam hay nữ mà chúng ta chọn điều kiện cho thích hợp


4. Tìm nhân viên có mức lương cao nhất
SELECT MAX(luong) 
    FROM nhan_vien;


5. Tìm nhân viên có mức lương nhấp nhất
SELECT MIN(luong) 
    FROM nhan_vien;


6. Tính mức lương trung bình của nhân toàn công ty
SELECT AVG(luong) 
    FROM nhan_vien;


7. Tính tổng lương của nhân viên phòng ban có mã PB001
SELECT phongban_id, SUM(luong) 
    FROM nhan_vien 
    WHERE phongban_id = "PB001";


8. Hiển thị MIN, MAX, SUM, AVG của toàn thể nhân viên trên 1 dòng
SELECT MIN(luong), MAX(luong), SUM(luong), AVG(luong) 
    FROM nhan_vien;



XI. OPERATOR

1. Tính tuổi của nhân viên
SELECT ho_nv, ten_nv, YEAR(CURRENT_DATE()) - YEAR(nam_sinh) -- lấy năm hiện tại trừ đi năm sinh
    FROM nhan_vien;


2. Chỉ hiện thị các nhân viên có tuổi >30
SELECT ho_nv, ten_nv, YEAR(CURRENT_DATE()) - YEAR(nam_sinh) 
    FROM nhan_vien 
    WHERE YEAR(CURRENT_DATE()) - YEAR(nam_sinh) >30;


3. Tăng thêm 200$ cho các nhân viên có mức lương thấp hơn 900$
SELECT * , (luong + 200) 
  FROM nhan_vien 
  WHERE luong <=900;
  


XII. GROUP BY

Đếm số lượng nhân viên trong mỗi phòng
SELECT *, COUNT(id) 
  FROM nhan_vien 
  GROUP BY phongban_id;


XIII. HAVING
HAVING: Mệnh đề thường được sử dụng với mệnh đề GROUP BY lọc các nhóm dựa trên một danh sách các điều kiện được chỉ định.

1. Hiển thị tổng mức lương của mỗi phòng ban và chỉ hiển thị các nhóm/phòng có tổng lương lớn hơn 15000$
SELECT *, SUM(luong) AS tong_luong 
    FROM nhan_vien 
    GROUP BY phongban_id 
    HAVING tong_luong > 15000;


2. Tính tổng lương công ty phải trả cho mỗi phòng ban, chỉ nhóm hàng nào có cột lương >800$, chỉ hiển thị nhóm nào có tổng >10000$
SELECT *, SUM(luong) AS tong_luong 
    FROM nhan_vien 
    WHERE luong > 800 
    GROUP BY phongban_id 
    HAVING tong_luong > 10000;


XIV. LIMIT
     LIMIT offset, count
- offset: số dòng bỏ qua
- count: số dòng cần lấy

1. Lấy ra 10 nhân viên có mức lương thấp nhất
SELECT * 
    FROM nhan_vien  
    ORDER BY luong ASC 
    LIMIT 10;
Nếu chúng ta đưa vào 1 đối số, đối số này sẽ được gán cho count (số dòng cần lấy), trong trường hợp này offset = 0.

2. Lấy ra 2 nhân viên có mức lương thấp nhất của phongban_id PB001, và lấy từ vị trí thứ 6
SELECT * 
    FROM nhan_vien 
    WHERE phongban_id = "PB001" 
    ORDER BY luong ASC 
    LIMIT 5, 2;


TỔNG HỢP

1. Hiển thị mã phòng ban (phongban_id) và lương trung bình tương ứng từng phòng, chỉ lấy các hàng có mức lương trên 800$, chỉ hiển thị các phòng có lương trung bình > 1200$ và sắp xếp theo thứ tự giảm dần theo cột phongban_id và chỉ lấy 3 dòng
SELECT phongban_id, AVG(luong) AS tb_luong 
  FROM nhan_vien 
  WHERE luong > 800 
  GROUP BY phongban_id 
  HAVING tb_luong > 1200 
  ORDER BY phongban_id DESC 
  LIMIT 3;

1.      2. Hiển thị họ tên, giới tính của nhân viên, nếu giới tính = 1 thì hiển thị là nam, ngược lại là nữ 

SELECT 
    CONCAT(ho_nv, ' ', ten_nv) AS 'Họ và Tên',
    IF(gioi_tinh = 1, 'Nam', 'Nữ') AS 'Giới Tính'
FROM
    nhan_vien



THỨ TỰ THỰC HIỆN CÁC CÂU LỆNH TRONG SQL

Query Process Steps
1. Getting Data (From, Join)
2. Row Filter (Where)
3. Grouping (Group by)
4. Group Filter (Having)
5. Return Expressions (Select)
6. Order & Paging (Order by & Limit / Offset)




Xong!




[Database-Tự Học SQL] COM2012_MySQL Bài 4: DDL - Data Definition Language/Ngôn Ngữ Định Nghĩa Dữ Liệu

DDL - Data Definition Language/Ngôn ngữ định nghĩa dữ liệu: Có thể hiểu DDL là được dùng để định hình dữ liệu, tổ chức dữ liệu. 

Video DDL Căn bản


Video Alter Table


Lab 4



Một số câu lệnh DDL phổ biến:

I. CREATE: 
  1. Tạo mới database có tên là "quan_ly_nhan_su" và chọn "quan_ly_nhan_su" là database mặt định
  2. Tạo mới bảng phong_ban, tạo khóa chính cho bảng phong_ban
  3. Tạo mới bảng nhan_vien, khóa chính (cách 2), khóa ngoại, thiết lập quan hệ giữa bảng phong_ban và bảng nhan_vien
  4. Tương tự tạo bảng quanly_duan, khóa chính, khóa ngoại, thiết lập quan hệ giữa 2 bảng quanly_duan và nhan_vien

II. ALTER:

  1. Chuẩn bị dữ liệu(Tạo mới bảng du_an)
  2. Thêm cột: ngay_batdau, ngay_kethuc, ghichu vào bảng du_an
  3. Thay đổi data type/kiểu dữ liệu của cột/trường ghichu
  4. Rename tên cột ghichu thành ghi_chu và thay đổi kiểu dữ liệu/data type
  5. Xóa cột ghi_chu
  6. Xóa khóa chính trong bảng du_an
  7. Thêm ràng buộc khóa chính cho bảng du_an
  8. Thêm ràng buộc khóa ngoại cho bảng quanly_duan và thiết lập quan hệ với bảng du_an
  9. Thêm ràng buộc kiểm tra - CHECK cho bảng nhan_vien
  10. Thêm trường email vào bảng nhan_vien
  11. Thêm ràng buộc UNIQUE
  12. Tìm trong bảng nhan_vien nếu có tên ràng buộc là "unq_email" thì xóa bỏ
  13. Tạo bảng mới có tên tao_bang_cmd
  14. Đổi tên bảng tao_bang_cmd thành tên mới là bang_moi_doi_ten

III. RENAME
Đổi tên một đối tượng trong Database

IV. TRUNCATE
Xóa tất cả các bảng ghi/record của một bảng/table.

V. DROP
Dùng để xóa các đối tượng ĐANG TỒN TẠI trong cơ sở dữ liệu như: database, table, ...

How To Fix


THỰC HIỆN
Thực hiện trên MySQL Workbench 8.0

I. CREATE: 

1. Tạo mới database có tên là "quan_ly_nhan_su" và chọn "quan_ly_nhan_su" là database mặt định
CREATE DATABASE quan_ly_nhan_su;
USE quan_ly_nhan_su;
Kiểm tra:
-- Kiểm tra database đang tồn tại
SHOW DATABASES;

-- Xem database đang mặt định
SELECT DATABASE();

2. Tạo mới bảng phong_ban, tạo khóa chính cho bảng phong_ban

CREATE TABLE: Câu lệnh được sử dụng để tạo một bảng mới trong cơ sở dữ liệu.
Cú pháp:
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);
  • table_name: Tên bảng muốn đặt
  • column1, column2,...: Tên cột cần đặt
  • datatype: Kiểu dữ liệu của cột. Ví dụ: INT, CHAR, DATE,...
PRIMARY KEY/Khóa Chính: Ràng buộc xác định duy nhất mỗi bản ghi trong một bảng
FOREIGN KEY/Khóa ngoại: là một trường (hoặc tập hợp các trường) trong một bảng, tham chiếu đến PRIMARY KEY trong một bảng khác.
  • Bảng có khóa ngoại được gọi là bảng con
  • Bảng có khóa chính được gọi là bảng tham chiếu hoặc bảng cha.

CREATE TABLE phong_ban (
    ma_pb CHAR(5) PRIMARY KEY,
    ten_pb VARCHAR(255) NOT NULL,
    ma_truongphong INT
);

3. Tạo mới bảng nhan_vien, khóa chính (cách 2), khóa ngoại, thiết lập quan hệ giữa bảng phong_ban và bảng nhan_vien
CREATE TABLE quan_ly_nhan_su.nhan_vien (
    id_nhanvien INT AUTO_INCREMENT,
    ho_nv VARCHAR(255),
    ten_nv VARCHAR(10) NOT NULL,
    nam_sinh DATE,
    dia_chi VARCHAR(255),
    gioi_tinh BOOLEAN,
    luong INT NOT NULL,
    phg CHAR(5),
    PRIMARY KEY (id_nhanvien),
    FOREIGN KEY (phg) REFERENCES phong_ban (ma_pb)
);
Kiểm tra:
-- Tiểm tra sau khi tạo bảng/table
SHOW TABLES; 

-- Xem các thuộc tính của bảng nhan_vien
DESC quan_ly_nhan_su.nhan_vien;
SHOW CREATE TABLE quan_ly_nhan_su.nhan_vien;

4. Tương tự tạo bảng quanly_duan, khóa chính, khóa ngoại, thiết lập quan hệ giữa 2 bảng quanly_duan và nhan_vien
CREATE TABLE quanly_duan (
    ma_duan CHAR(5) NOT NULL,
    ma_nhanvien INT NOT NULL,
    ngay_thamgia DATE,
    ngay_ketthuc DATE,
    sogio INT,
    vai_tro VARCHAR(255),
    PRIMARY KEY (ma_duan, ma_nhanvien),
	FOREIGN KEY (ma_nhanvien) REFERENCES nhan_vien (id_nhanvien)
);

II. ALTER:
ALTER TABLE: Câu lệnh được sử dụng để thêm, xóa hoặc sửa đổi các cột trong bảng hiện có.
ALTER TABLE: Câu lệnh cũng được sử dụng để thêmbỏ các ràng buộc khác nhau trên một bảng hiện có.


1. Chuẩn bị dữ liệu(Tạo mới bảng du_an)
CREATE TABLE du_an (
    ma_duan CHAR(5),
    ten_duan VARCHAR(100),
    PRIMARY KEY (ten_duan)
);

2. Thêm cột: ngay_batdau, ngay_kethuc, ghichu vào bảng du_an
ALTER TABLE quan_ly_nhan_su.du_an
    ADD ngay_batdau DATE,
    ADD ngay_kethuc DATE,
    ADD ghichu INT;

3. Thay đổi data type/kiểu dữ liệu của cột/trường ghichu
-- Thay đổi data type/kiểu dữ liệu của cột/trường ghichu
ALTER TABLE quan_ly_nhan_su.du_an
    MODIFY COLUMN ghichu VARCHAR(15);

4. Rename tên cột ghichu thành ghi_chu và thay đổi kiểu dữ liệu/data type
- Rename tên cột ghichu thành ghi_chu và thay đổi kiểu dữ liệu/data type
ALTER TABLE quan_ly_nhan_su.du_an 
    CHANGE COLUMN ghichu ghi_chu VARCHAR(100);

5. Xóa cột ghi_chu
-- Xóa cột ghi_chu
ALTER TABLE quan_ly_nhan_su.du_an
    DROP COLUMN ghi_chu;

6. Xóa khóa chính trong bảng du_an
-- Xóa khóa chính trong bảng du_an
ALTER TABLE quan_ly_nhan_su.du_an 
    DROP PRIMARY KEY;

7. Thêm ràng buộc khóa chính cho bảng du_an
-- Thêm ràng buộc khóa chính cho bảng du_an
ALTER TABLE quan_ly_nhan_su.du_an
    ADD CONSTRAINT pk_ma_duan
    PRIMARY KEY (ma_duan);

8. Thêm ràng buộc khóa ngoại cho bảng quanly_duan và thiết lập quan hệ với bảng du_an
-- Thêm ràng buộc khóa ngoại cho bảng quanly_duan và thiết lập quan hệ với bảng du_an
ALTER TABLE quan_ly_nhan_su.quanly_duan
    ADD CONSTRAINT fk_quanly_duan_duan 
    FOREIGN KEY (ma_duan) 
    REFERENCES du_an(ma_duan);

9. Thêm ràng buộc kiểm tra - CHECK cho bảng nhan_vien
-- Thêm ràng buộc kiểm tra - CHECK cho bảng nhan_vien
ALTER TABLE quan_ly_nhan_su.nhan_vien
    ADD CONSTRAINT chk_luong 
    CHECK (luong >= 100); -- không chấp nhận dữ liệu >= 100

10. Thêm trường email vào bảng nhan_vien
-- Thêm trường email vào bảng nhan_vien
ALTER TABLE quan_ly_nhan_su.nhan_vien
    ADD email VARCHAR(100);

11. Thêm ràng buộc UNIQUE
-- Thêm ràng buộc UNIQUE
ALTER TABLE quan_ly_nhan_su.nhan_vien 
    ADD CONSTRAINT unq_email 
    UNIQUE (email); -- email là địa chỉ duy nhất

12. Tìm trong bảng nhan_vien nếu có tên ràng buộc là "unq_email" thì xóa bỏ
-- Tìm trong bảng nhan_vien nếu có tên ràng buộc là "unq_email" thì xóa bỏ
ALTER TABLE quan_ly_nhan_su.nhan_vien 
    DROP CONSTRAINT unq_email;

13. Tạo bảng mới có tên tao_bang_cmd
Create taBLE tao_bang_cmd(
	ma int primary key auto_INCREMENT,
	ten VARchar(50) not NULL,
	ngaySinh Date
);

Noted: Cố tình gõ code như vậy để biết là SQL KHÔNG PHÂN BIỆT chữ HOA, chữ thường

14. Đổi tên bảng tao_bang_cmd thành tên mới là bang_moi_doi_ten
-- Đổi tên bảng tao_bang_cmd thành tên mới là bang_moi_doi_ten
ALTER TABLE quan_ly_nhan_su.tao_bang_cmd 
    RENAME bang_moi_doi_ten;

III. RENAME

Đổi tên một đối tượng trong Database
RENAME TABLE quan_ly_nhan_su.bang_moi_doi_ten TO quan_ly_nhan_su.bang_moi_doi_ten_LAI;

IV. TRUNCATE

Xóa tất cả các bảng ghi/record của một bảng/table.
TRUNCATE - Xóa tất cả các bảng ghi/record của một bảng/table
TRUNCATE TABLE quan_ly_nhan_su.bang_moi_doi_ten_LAI;

V. DROP

Dùng để xóa các đối tượng ĐANG TỒN TẠI trong cơ sở dữ liệu như: database, table, ...
-- Dùng để xóa các đối tượng ĐANG TỒN TẠI trong cơ sở dữ liệu
DROP TABLE quan_ly_nhan_su.bang_moi_doi_ten_LAI;
-- hoặc
DROP TABLE IF EXISTS du_an; -- Kiểm tra nếu bảng đã tồn tại thì xóa bảng

DROP DATABASE quan_ly_nhan_su;

How To Fix
Trong quá trình xóa có khi gặp phải lỗi không thể xóa, các bạn tìm hiểu các lệnh dưới

SET FOREIGN_KEY_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 0;
SET GLOBAL FOREIGN_KEY_CHECKS=0;
SHOW VARIABLES LIKE "sql_safe_updates";
SET SQL_SAFE_UPDATES = 0;

xong!
/*header slide*/