Hướng dẫn sách học mysql

[Học MySQL cơ bản và nâng cao]MySQL là hệ thống quản lý cơ sở dữ liệu nguồn mở phổ biến nhất. MySQL là một trong những RDBMS tốt nhất đang được sử dụng để phát triển các ứng dụng phần mềm trên Web.

Loạt bài hướng dẫn này cung cấp cho bạn kiến thức cơ bản về MySQL, cung cấp nhiều ví dụ minh họa giúp bạn hiểu sâu hơn về các khái niệm, lệnh, hay mệnh đề trong MySQL được trình bày trong loạt bài này.

Dưới đây là danh sách các bài hướng dẫn học MySQL cơ bản và nâng cao:

MỤC LỤC

MySQL cơ bản và nâng cao

  • MySQL là gì
  • Cài đặt
  • Quản lý
  • Cú pháp MySQL-PHP
  • Kết nối MySQL
  • Tạo Database
  • Xóa Database
  • Chọn cơ sở dữ liệu
  • Kiểu dữ liệu
  • Tạo bảng
  • Xóa bảng
  • Truy vấn Insert
  • Truy vấn Select
  • Mệnh đề Where
  • Truy vấn Update
  • Truy vấn Delete
  • Mệnh đề Like
  • Mệnh đề Order By
  • Sử dụng Join
  • Giá trị NULL
  • Regexp trong MySQL
  • Transaction trong MySQL
  • Lệnh Alter
  • Chỉ mục (Index)
  • Bảng tạm (Temporary Table)
  • Mô phỏng bảng
  • Thông tin Database
  • Sử dụng Sequence
  • Xử lý bản sao
  • SQL Injection
  • Export và Sao lưu (Backup)
  • Import và Phục hồi (Recovery)
  • Mệnh đề Group By
  • Mệnh đề In
  • Mệnh đề Between
  • Từ khóa Union
  • Hàm hữu ích

Quảng cáo

Tài liệu MySQL tham khảo

  • Học SQL cơ bản và nâng cao
  • Học PHP cơ bản và nâng cao

Loạt bài hướng dẫn của chúng tôi dựa trên nguồn tài liệu của: Tutorialspoint.com

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Follow fanpage của team //www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền //www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

Các bài học MySQL phổ biến khác tại VietJack:

  • Tạo Database
  • Xóa Database
  • Chọn cơ sở dữ liệu
  • Kiểu dữ liệu
  • Tạo bảng
  • Xóa bảng

Bài viết liên quan

  • 160 bài học ngữ pháp tiếng Anh hay nhất

  • 155 bài học Java tiếng Việt hay nhất

  • 100 bài học Android tiếng Việt hay nhất

  • 247 bài học CSS tiếng Việt hay nhất

  • 197 thẻ HTML cơ bản

  • 297 bài học PHP

  • 101 bài học C++ hay nhất

  • 97 bài tập C++ có giải hay nhất

  • 208 bài học Javascript có giải hay nhất

Nhóm phát triển của chúng tôi vừa ra mắt website langlearning.net học tiếng Anh, Nga, Đức, Pháp, Việt, Trung, Hàn, Nhật, ... miễn phí cho tất cả mọi người.
Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.

Hãy theo dõi chúng tôi trên Fanpage để nhận được thông báo mỗi khi có bài viết mới.
Facebook

1- Giới thiệu

Tài liệu này hướng dẫn cho những người mới bắt đầu học SQL. Tài liệu hướng dẫn dựa trên:

  • MySQL >= 5.6

Nội dung bao gồm:

  • Ngôn ngữ SQL
  • Ngữ pháp SQL (Ngữ pháp cơ bản, tiêu chuẩn cho mọi loại DB)
  • Ngữ pháp SQL riêng của MySQL.

2- Cơ sở dữ liệu học SQL (LearningSQL)

Bài học này sử dụng cơ sở dữ liệu LearningSQL (phiên bản MySQL). Bạn cần tạo cơ sở dữ liệu đó để tiện cho việc học (Bạn chỉ mất không quá 5 phút để làm việc này).

Script tạo cơ sở dữ liệu và cấu trúc của cơ sở dữ liệu này bạn có thể xem tại:

3- Công cụ trực quan làm việc với MySQL

Trong hướng dẫn này tôi sử dụng MySQL Workbench là công cụ trực quan để làm việc. Bạn có thể xem thêm hướng dẫn cài đặt MySQL Comunity (Khi cài ra đã bao gồm cả MySQL Workbench) tại:

4- Các câu lệnh truy vấn (Query)

4.1- SQL Select

Câu lệnh Select là một câu lệnh cơ bản nhất trong SQL, mục đích là truy vấn dữ liệu trong các bảng (Table).

  • PRODUCT_TYPE: Bảng dữ liệu các kiểu sản phẩm (Kiểu dịch vụ của ngân hàng).

Đây là câu lệnh truy vấn dữ liệu trên bảng PRODUCT_TYPE

-- Truy vấn dữ liệu trên bảng Product_Type -- Truy vấn toàn bộ các cột. Select * From Product_Type; -- Câu lệnh truy vấn trên và câu lệnh dưới đây là tương đương nhau. -- Pty là alias (tên bí danh đặt cho bảng Product_Type). Select Pty.* From Product_Type Pty; -- Truy vấn một vài cột -- Có thể liệt kê ra. Select Pty.Product_Type_Cd ,Pty.Name From Product_Type Pty;

Kết quả truy vấn:

Truy vấn dữ liệu trên bảng EMPLOYEE:

-- Truy vấn 4 cột trên bảng Employee (Bảng nhân viên). -- Sử dụng Emp là Alias (Tên bí danh) cho bảng Employee. Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id From Employee Emp;

Kết quả truy vấn:

Đặt Alias cho cột:

-- Sử dụng hàm concat(string1, string2) để nối 2 chuỗi với nhau. -- Chúng ta có một cột mới sử dụng 'as' để định nghĩa tên cột cho cột mới này. Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id ,Concat('EMP' ,Emp.Emp_Id) As Emp_No2 -- Cột mới From Employee Emp; -- Có thể không cần sử dụng 'as' trong định nghĩa Alias cho cột. Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id ,Concat('EMP' ,Emp.Emp_Id) Emp_No2 -- Cột mới From Employee Emp;

Kết quả truy vấn:

4.2- SQL 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> ....

Xem ví dụ:

-- Truy vấn sản phẩm (Sản phẩm dịch vụ của Ngân hàng) -- Cột mã sản phẩm, tên và kiểu sản phẩm. Select Pro.Product_Cd ,Pro.Name ,Pro.Product_Type_Cd From Product Pro; -- Truy vấn các kiểu sản phẩm (Product_Type_Cd) trong bảng Product. -- Dữ liệu là nhiều, nhưng trùng nhau. Select Pro.Product_Type_Cd from Product Pro; -- Cần sử dụng Distinct để loại bỏ việc trùng lặp. Select Distinct Pro.Product_Type_Cd from Product Pro;

Kết quả chạy các câu lệnh trên:

4.3- SQL Where

Where là câu lệnh nhằm giới hạn phạm vi tìm kiếm. Chẳng hạn bạn muốn tìm kiếm những sản phẩm dịch vụ có kiểu "Cho vay cá nhân và kinh doanh".

  • Product_Type_Cd = 'LOAN'.

Bạn cần truy vấn trong bảng PRODUCT, tại các vị trí có Product_Type_Cd= 'LOAN'.

-- Truy vấn bảng Product tìm các sản phẩm dịch vụ có kiểu: -- "Cho vay cá nhân và kinh doanh". -- Ứng với cột Product_Type_Cd = 'LOAN'. Select * From Product Pro Where Pro.Product_Type_Cd = 'LOAN';

Kết quả truy vấn:

Một ví dụ khác sử dụng where và nhiều điều kiện kèm theo.

4.4- SQL And Or (Và, hoặc)

And Or là 2 lệnh điều kiện sử dụng trong where:

Chẳng hạn bạn muốn tìm danh sách các nhân viên có tên bắt đầu bởi chữ S và thuộc phòng điều hành (Operations).

-- Câu lệnh tìm kiếm các Nhân viên có tên bắt đầu bởi chữ S. Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id From Employee Emp Where Emp.First_Name Like 'S%'; -- Câu lệnh tìm kiếm các nhân viên có tên bắt đầu bởi chữ S -- và thuộc phòng điều hành (Operations) Dept_Id = 1. Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id From Employee Emp Where Emp.First_Name Like 'S%' And Emp.Dept_Id = 1;

Kết quả chạy các câu truy vấn:

Ví dụ với câu lệnh Or.

-- Tìm kiếm các nhân viên có tên bắt đầu bởi chữ S hoặc P. -- và trong phòng điều hành (Operations). (Dept_Id = 1) Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id From Employee Emp Where (Emp.First_Name Like 'S%' Or Emp.First_Name Like 'P%') And Emp.Dept_Id = 1;

Kết quả chạy câu lệnh:

4.5- SQL IN (Trong phạm vi..)

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. 

-- Câu lệnh này tìm kiếm các nhân viên có tên -- hoặc Susan hoặc Paula hoặc Helen. Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id From Employee Emp Where Emp.First_Name In ('Susan' ,'Paula' ,'Helen');

Kết quả chạy câu lệnh:

4.6- SQL Between (Nằm giữa ...)

-- Tìm các nhân viên có Emp_Id trong khoảng từ 5 đến 10. Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Start_Date From Employee Emp Where (Emp.Emp_Id Between 5 And 10); -- Câu lệnh trên tương đương với: Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Start_Date From Employee Emp Where Emp.Emp_Id >= 5 And Emp.Emp_Id <= 10;

Kết quả câu lệnh:

Câu lệnh BETWEEN cũng được sử dụng trong việc giới hạn thời gian. Chẳng hạn bạn tìm kiếm các nhân viên bắt đầu làm trong khoảng thời gian:

  • 03-05-2002 ==> 09-08-2002  (dd-MM-yyyy)

-- Câu lệnh này tìm kiếm các nhân viên bắt đầu vào làm việc trong 1 khoảng thời gian -- xác định trong mệnh đề where. -- 03-05-2002 ==> 09-08-2002 (Theo DD-MM-YYYY) Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Start_Date , -- Date_Format là một hàm của MySQL. -- Không dùng cho DB khác. -- Date_Format chuyển kiểu Date sang text -- Theo một định dạng nào đó ở đây là DD-MM-YYYY Date_Format(Emp.Start_Date ,'%d-%m-%Y') Start_Date_Vn From Employee Emp Where -- Str_To_Date là một hàm của MySQL (Có thể ko có trên DB khác) -- Str_To_Date là hàm chuyển Text thành Date -- Theo một định dạng nào đó, ở đây là DD-MM-YYYY. ( -- Emp.Start_Date Between Str_To_Date('03-05-2002' ,'%d-%m-%Y') And Str_To_Date('09-08-2002' ,'%d-%m-%Y') -- );

Kết quả chạy câu lệnh:

4.7- SQL Wildcard

Có 2 ký tự đặc biệt trong SQL:

  1. Ký tự %
  2. Ký tự _

Ý nghĩa:

  • % mô tả 0, 1 hoặc nhiều ký tự
  • _ mô tả chính xác một ký tự.

Hai ký tự này thường được sử dụng trong điều kiện like.

-- Tìm kiếm các Khách hàng (Customer) có số FED_ID theo định dạng: -- Phần trước bất kỳ, rồi tới dấu - , rồi tới 2 ký tự, rồi tới dấu -, và cuối bất kỳ. -- Sử dụng 2 dấu _ để minh họa rằng đó là 2 ký tự. -- (Mỗi dấu _ là chính xác một ký tự). Select Cus.Cust_Id ,Cus.Fed_Id ,Cus.Address From Customer Cus where cus.fed_id like '%-__-%';

Kết quả chạy ví dụ:

4.8- SQL Like (Giống với ...)

Câu lệnh này chúng ta đã làm quen trên một số ví dụ ở trên.

4.9- SQL Order By (Sắp xếp bởi)

Việc query 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ề.

-- 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ụ:

-- Sắp xếp ưu tiên Product_Type_Cd tăng dần -- Sau đó mới tới Name (Cũng tăng dần) Select Pro.Product_Cd ,Pro.Product_Type_Cd ,Pro.Name From Product Pro Order By Pro.Product_Type_Cd Asc ,Pro.Name Asc; -- Trong Order BY, ASC là mặc định. -- Vì vậy có thể ko cần viết ASC. Select Pro.Product_Cd ,Pro.Product_Type_Cd ,Pro.Name From Product Pro Order By Pro.Product_Type_Cd ,Pro.Name; -- Sắp xếp ưu tiên Product_Type_Cd giảm dần -- Sau đó mới tới Name (Tăng dần) Select Pro.Product_Cd ,Pro.Product_Type_Cd ,Pro.Name From Product Pro Order By Pro.Product_Type_Cd Desc ,Pro.Name Asc;

Kết quả chạy ví dụ:

Order By bao giờ cũng đứng sau where.

-- Tìm các nhân viên có tên bắt đầu bởi S. -- Sắp xếp giảm dần theo ngày bắt đầu vào làm việc. Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Start_Date From Employee Emp Where Emp.First_Name Like 'S%' Order By Emp.Start_Date Desc;

Kết quả chạy câu lệnh:

-- Sử dụng thứ tự của cột vào trong câu Order by. -- First_Name là cột thứ 2 trong câu Select -- Có thể sử dụng: Order by 2 thay cho Order by First_Name. Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Start_Date From Employee Emp Order By 2 Desc;

4.10- SQL Group By (Nhóm bở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).

-- Truy vấn dữ liệu trong bảng Account. Select Acc.Account_Id ,Acc.Product_Cd ,Acc.Avail_Balance ,Acc.Pending_Balance From Account Acc;

Câu hỏi đặt ra bạn muốn xem tổng số tiền có trong tài khoản, ứng với mỗi loại dịch vụ (Product_Cd) khác nhau. Điều đó có nghĩa là bạn cần nhóm trên các Product_Cd.

Select Acc.Product_Cd ,Count(Acc.Product_Cd) As Count_Acc -- Số tài khoản ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance -- Tổng số tiền trong tài khoản ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance -- Số tiền trung bình From Account Acc Group By Acc.Product_Cd;

Kết quả:

Như vậy bạn có một cái nhìn đánh giá:

  • Có 4 tài khoản tham gia dịch vụ "Tiền gửi tiết kiệm" (SAV) với tổng số tiền là 1855.76 và trung bình mỗi tài khoản có 463.94.
  • ...

4.11- SQL Having

Having là một câu lệnh điều kiện của Group by.

Giả sử bạn muốn nhóm các loại hình dịch vụ (Product_Cd) trên bảng Account, và chỉ hiển thị ra các loại hình nào có số người tham gia > 3.

Select Acc.Product_Cd ,Count(Acc.Product_Cd) As Count_Acc -- Số tài khoản ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance -- Tổng số tiền trong tài khoản ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance -- Số tiền trung bình From Account Acc Group By Acc.Product_Cd Having Count(Acc.Product_Cd) > 3;

Kết quả chạy ví dụ:

Phân biệt Where & Having

Bạn cần phân biệt Where 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 nhóm (Group)
  • Having là câu lệnh lọc bớt dữ liệu sau khi đã nhóm (Group)

Trường hợp bạn muốn có các thông tin tổng hợp của một chi nhánh ngân hàng (Bảng BRANCH). Bạn có thể sử dụng where để lọc bớt dữ liệu trước khi group.

Select Acc.Product_Cd ,Count(Acc.Product_Cd) As Count_Acc ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance From Account Acc -- Sử dụng Where lọc bớt dữ liệu trước khi group. Where Acc.Open_Branch_Id = 1 Group By Acc.Product_Cd -- Sử dụng Having lọc bớt dữ liệu sau khi đã group Having Count(Acc.Product_Cd) > 1;

Kết quả chạy ví dụ:

5- Các câu lệnh trèn dữ liệu (Insert)

5.1- Câu lệnh Insert Into

Cú pháp:

-- Cú pháp câu lệnh Insert Into: INSERT INTO <table_name> ("column1", "column2", ...) VALUES ("value1", "value2", ...);

Ví dụ bạn trèn thêm một giao dịch khách hàng vào bảng ACC_TRANSACTION:

-- Trèn 1 dòng dữ liệu vào bảng Acc_Trasaction -- Cột Txn_ID sẽ có giá trị tự sinh ra. -- Now() là hàm của MySQL lấy ra giờ hệ thống hiện tại (System Date) -- Now(): Giờ hiện tại. Insert Into Acc_Transaction (Txn_Id ,Amount ,Funds_Avail_Date ,Txn_Date ,Txn_Type_Cd ,Account_Id ,Execution_Branch_Id ,Teller_Emp_Id) Values (Null-- Txn_Id (Tự động sinh ra) ,100 -- Amount ,now() -- Funds_Avail_Date ,now() -- Txn_Date ,'CDT' -- Txn_Type_Cd ,2 -- Account_Id ,Null -- Execution_Branch_Id ,Null -- Teller_Emp_Id );

5.2- Câu lệnh Insert Into Select

Bạn có thể sử dụng câu Select để cung cấp dữ liệu trèn vào bảng. Thông qua câu lệnh Insert Into ... Select.

-- Ngữ pháp câu lệnh INSERT INTO .. SELECT INSERT INTO "table1" ("column1", "column2", ...) SELECT "column3", "column4", ... FROM "table2";

Ví dụ:

-- Trèn nhiều dòng dữ liệu vào bảng Acc_Transaction -- Lấy dữ liệu từ câu Select. Insert Into Acc_Transaction (Txn_Id ,Txn_Date ,Account_Id ,Txn_Type_Cd ,Amount ,Funds_Avail_Date) Select Null -- Txn_Id (Tự sinh ra) ,Acc.Open_Date -- Txn_Date ,Acc.Account_Id -- Account_Id ,'CDT' -- Txn_Type_Cd ,200 -- Amount ,Acc.Open_Date -- Funds_Avail_Date From Account Acc Where Acc.Product_Cd = 'CD';

6- Câu lệnh cập nhập (Update)

-- Cú pháp câu lệnh Update: UPDATE "table_name" SET "column_1" = "new value 1", "column_2"= "new value 2" WHERE "condition";

Ví dụ bạn muốn tăng tiền trong các tài khoản của khách hàng có CUST_ID = 1 lên 2%.

Câu lệnh Update:

-- Update, tăng số tiền trong tài khoản lên 2% cho khách hàng CUST_ID = 1. Update Account Acc Set Acc.Avail_Balance = Acc.Avail_Balance + 2 * Acc.Avail_Balance / 100 ,Acc.Pending_Balance = Acc.Pending_Balance + 2 * Acc.Pending_Balance / 100 Where Acc.Cust_Id = 1;

Truy vấn lại, sau khi Update.

7- Câu lệnh xóa dữ liệu (Delete)

Cú pháp xóa dữ liệu trong bảng.

-- Cú pháp xóa các dòng dữ liệu trong bảng. DELETE FROM "table_name" WHERE "condition";

-- Xóa 2 dòng dữ liệu trong bảng Acc_Transaction: Delete From Acc_Transaction Txn Where Txt.Txn_Id In (25 ,26);

8- SQL Functions

8.1- SQL Count

Count là một hàm, đếm số dòng. Thông thường nó thường được sử dụng cùng với Group by.

-- Đếm số row (dòng) có trong bảng Account Select Count(Acc.Account_Id) From Account Acc;

Đếm số tài khoản ngân hàng, có giao dịch với ngân hàng (Bảng Acc_Transaction)

-- Đếm số tài khoản có giao dịch với ngân hàng. Select Count(distinct txn.Account_id) From Acc_Transaction txn;

Sử dụng với Group by:

Một khách hàng có thể mở nhiều tài khoản, mỗi tài khoản ứng với một sản phẩm dịch vụ của ngân hàng.

Bạn muốn liệt kê các khách hàng (CUST_ID) và tương ứng là số tài khoản họ đã mở.

-- Đếm số tài khoản đã mở ứng với mỗi khách hàng. Select Acc.Cust_Id ,Count(Acc.Account_Id) From Account Acc Group By Acc.Cust_Id;

8.2- 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";

Ví dụ:

-- Tính tổng số tiền trong các tài khoản của khách hàng với Cust_ID = 1 Select Sum(Acc.Avail_Balance) From Account Acc Where Acc.Cust_Id = 1; -- Sử dụng với Group by. -- Tính tổng số tiền trong tài khoản ứng với mỗi khách hàng Select Acc.Cust_Id ,Sum(Acc.Avail_Balance) From Account Acc Group By Acc.Cust_Id;

8.3- SQL AVG

AVG là hàm tính trung bình trên cột.

-- Cú pháp: SELECT AVG("column_name") FROM "table_name";

Ví dụ:

-- Tính số tiền trung bình ứng với loại hình gửi tiết kiêm. Select Avg(Acc.Avail_Balance) From Account Acc Where Acc.Product_Cd = 'SAV'; -- Sử dụng với Group by. -- Một khách hàng có thể có 1 hoặc nhiều tài khoản. -- Tính số tiền trung bình mỗi tài khoản ứng với từng khách hàng -- (tại ngân hàng Branch_ID = 1) Select Acc.Cust_Id ,Avg(Acc.Avail_Balance) From Account Acc Where Acc.Open_Branch_Id = 1 Group By Acc.Cust_Id;

8.4- SQL MIN

Min là hàm tìm giá trị nhỏ nhất trên cột.

-- Cú pháp: SELECT MIN ("column_name") FROM "table_name";

Ví dụ:

-- Tìm số tiền gửi tiết kiệm nhỏ nhất. Select Min(Acc.Avail_Balance) From Account Acc Where Acc.Product_Cd = 'SAV'; -- Sử dụng với Group by. -- Một khách hàng có thể có 1 hoặc nhiều tài khoản. -- Mở tại các chi nhánh khác nhau. -- Tìm số tiền trong tài khoản nhỏ nhất ứng với từng chi nhánh Select Acc.Open_Branch_Id ,Min(Acc.Avail_Balance) From Account Acc Group By Acc.Open_Branch_Id;

8.5- SQL MAX

Max là hàm tìm giá trị lớn nhất trên cột. Cách sử dụng giống MIN, bạn có thể tham khảo các ví dụ tại MIN.

-- Cú pháp: SELECT MAX("column_name") FROM "table_name";

9- SQL Join

Đặt ra một tình huống bạn xem thông tin một nhân viên trong bảng EMPLOYEE. Bạn có thể thấy nhân viên biết ID phòng ban của nhân viên này. Nhưng đó là một con số vô nghĩa. Muốn biết tên phòng ban, bạn phải tra cứu sang bảng DEPARTMENT. Việc nối 2 bảng đó với nhau để có một thông tin đầy đủ được gọi là JOIN.

Có 4 hình thức để Join 2 bảng:

  • INNER JOIN   (JOIN)
  • LEFT OUTER JOIN  (LEFT JOIN)
  • RIGHT OUTER JOIN (RIGHT JOIN)
  • FULL OUTER JOIN    (OUTER JOIN)
  • CROSS JOIN

9.1- INNER JOIN (Hoặc JOIN)

INNER JOIN từ khóa chọn tất cả các dòng từ hai bảng miễn là có sự ăn khớp dữ liệu giữa các cột trong cả hai bảng.

Cú pháp:

-- Cú pháp SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name; -- Có thể thay INNER JOIN bởi JOIN -- Ý nghĩa và kết quả là như nhau. SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name=table2.column_name;

Ví dụ:

-- INNER JOIN 2 bảng EMPLOYEE và DEPARTMENT. Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id ,Dep.Name Dept_Name From Employee Emp Inner Join Department Dep On Emp.Dept_Id = Dep.Dept_Id Order By Emp.Emp_Id;

MySQL's own syntax:

-- Việc INNER JOIN theo cách viết khác của MySQL thực sự đơn giản. -- MySQL đẩy điều kiện JOIN hai bảng xuống WHERE. Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id ,Dep.Name Dept_Name From Employee Emp ,Department Dep Where Emp.Dept_Id = Dep.Dept_Id Order By Emp.Emp_Id;

9.2- LEFT OUTER JOIN (Hoặc LEFT JOIN)

LEFT OUTER JOIN là từ khóa trả về tất cả các hàng (rows) từ bảng bên trái (table1), với các hàng tương ứng trong bảng bên phải (table2). Chấp nhận cả dữ liệu NULL ở bảng 2.

Hãy xem hình minh họa dưới đây:

Ví dụ:

-- Customer LEFT OUTER JOIN Officer -- Có thể thay thế LEFT OUTER JOIN bởi LEFT JOIN (Ý nghĩa và kết quả là giống nhau) Select Cus.Cust_Id ,Cus.Fed_Id ,Cus.State ,Ofc.Cust_Id As Ofc_Cust_Id ,Ofc.Officer_Id ,Ofc.Start_Date ,Ofc.Title From Customer Cus -- Table1 Left Outer Join Officer Ofc -- Table2 On Cus.Cust_Id = Ofc.Cust_Id;

Kết quả:

9.3- RIGHT OUTER JOIN (Hoặc RIGHT JOIN)

RIGHT OUTER JOIN khá giống với LEFT OUTER JOIN:

9.4- FULL OUTER JOIN (Hoặc OUTER JOIN)

FULL OUTER JOIN là sự kết hợp của LEFT OUTER JOINRIGHT OUTER JOIN

-- Cú pháp: (FULL OUTER JOIN) -- Có thể viết FULL JOIN SELECT columns FROM table1 FULL [OUTER] JOIN table2 ON table1.column = table2.column;

10- Câu truy vấn con (Subquery)

Trong MySQL, một subquery là một truy vấn trong một truy vấn. Bạn có thể tạo các truy vấn con trong câu lệnh SQL của bạn. Những truy vấn con có thể nằm trong mệnh đề WHERE, mệnh đề FROM, hoặc mệnh đề SELECT.

10.1- Subquery trong mệnh đề Where

Khá thường xuyên, các subquery sẽ được tìm thấy trong mệnh đề WHERE. Những truy vấn con còn được gọi là truy vấn con lồng nhau.

Select Acc.Account_Id ,Acc.Open_Date ,Acc.Product_Cd ,Acc.Avail_Balance From Account Acc Where Acc.Cust_Id In (Select Cus.Cust_Id From Customer Cus Where Cus.Cust_Type_Cd = 'B');

10.2- Subquery trong mệnh đề From

Một truy vấn phụ cũng có thể được tìm thấy trong mệnh đề FROM. Chúng được gọi là inline views.

Select Cus.Cust_Id ,Cus.Address ,Cus.Fed_Id ,Acc2.Sum_Avail_Balance From Customer Cus , -- Câu Subquery định nghĩa 1 bảng ảo (inline view) (Select Acc.Cust_Id ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance From Account Acc Group By Acc.Cust_Id) Acc2 Where Cus.Cust_Id = Acc2.Cust_Id;

10.3- Subquery trong mệnh đề Select

Một truy vấn phụ cũng có thể được tìm thấy trong mệnh đề SELECT.

Select Cus.Cust_Id ,Cus.Address ,Cus.Fed_Id ,(Select Sum(Acc.Avail_Balance) From Account Acc Where Acc.Cust_Id = Cus.Cust_Id) As Sum_Avail_Balance From Customer Cus;

Bí quyết để đặt một truy vấn phụ trong mệnh đề select là subquery phải trả lại một giá trị duy nhất. Đây là lý do tại sao một các hàm tổng hợp như hàm SUM, COUNT, MIN, hoặc MAX thường được sử dụng trong subquery.

11- Lập trình database với MySQL

Tiếp theo bạn có thể xem tiếp tài liệu "Lập trình database với MySQL" tại:

Chủ đề