24/05/2018, 14:54

Giới thiệu cơ sở dữ liệu MYSQL

Bài học này chúng ta sẽ làm quen cách thao tác trên cơ sở dữ liệu MySQL: Giới thiệu cơ sở dữ liệu MySQL Cài đặt MySQL Cấu hình Kiểu dữ liệu Khai báo các phát biểu MySQL là cơ sở dữ liệu được sử dụng cho các ứng dụng Web có quy mô ...

Bài học này chúng ta sẽ làm quen cách thao tác trên cơ sở dữ liệu MySQL:

  • Giới thiệu cơ sở dữ liệu MySQL
  • Cài đặt MySQL
  • Cấu hình
  • Kiểu dữ liệu
  • Khai báo các phát biểu

MySQL là cơ sở dữ liệu được sử dụng cho các ứng dụng Web có quy mô vừa và nhỏ. Tuy không phải là một cơ sở dữ liệu lớn nhưng chúng cũng có trình giao diện trên Windows hay Linux, cho phép người dùng có thể thao tác các hành động liên quan đến cơ sở dữ liệu.

Cũng giống như các cơ sở dữ liệu, khi làm việc với cơ sở dữ liệu MySQL, bạn đăng ký kết nối, tạo cơ sở dữ liệu, quản lý người dùng, phần quyền sử dụng, thiết kế đối tượng Table của cơ sở dữ liệu và xử lý dữ liệu.

Tuy nhiên, trong bất kỳ ứng dụng cơ sở dữ liệu nào cũng vậy, nếu bản thân chúng có hỗ trợ một trình giao diện đồ hoạ, bạn có thể sử dụng chúng tiện lợi hơn các sử dụng Command line. Bởi vì, cho dù bạn điều khiển MySQL dưới bất kỳ hình thức nào, mục đích cũng quản lý và thao tác cơ sở dữ liệu.

Để cài đặt MySQL trên nền Windows bạn theo các bước sau:

  1. Trước tiên bạn chép tập tin mysql-4.0.0a-alpha-win.zip vào đĩa cứng hoặc chọn chúng từ đĩaq CD và giải nén tập tin
  2. Chạy tập tin Setup.exe, chọn đĩa C hay D
  3. Sau khi cài đặt thành công, bạn kiểm tra trong Windows Services xuất hiện dịch vụ mySQL hay không?. Để sử dụng được MySQL thì trạng thái của dịch vụ này phải ở chế độ Started.
Trong trường hợp MySQL không thể chạy được, do dịch vụ của MySQL chưa Started như , để có thể chạy được MySQL thì bạn cần một số thay đổi trong tập tin my.ini trong thư mục WINNT
---------------------------------------------------------------------
#This File was made using the WinMySQLAdmin 1.3
#Tool
#9/11/2003 10:50:13 AM
#Uncomment or Add only the keys that you know how works.
#Read the MySQL Manual for instructions
[mysqld-nt]
basedir=C:/mysql
#bind-address=127.0.0.1
datadir=C:/mysql/data
#language=C:/mysql/share/your language directory
#slow query log#=
#tmpdir#=
#port=3306
#set-variable=key_buffer=16M
[WinMySQLadmin]
Server=C:/mysql/bin/mysqld-nt.exe user=root
password=
QueryInterval=10

Trong trường hợp bạn sử dụng giao diện đồ hoạ thì dùng ích quản trị cơ sở dữ liệu MySQL, bạn có thể chạy tập tin mysqlfront.exe trong thư mục MySQL Control, bằng cách chạy tập tin cửa sổ xuất hiện như hình 1. Nếu lần đầu tiên tạo kết nối cơ sở dữ liệu, bạn cần phải tạo một Connection, cung cấp tên Server hay IP của máy chứa MySQL.

Tuy nhiên, trong trường hợp máy chứa cơ sở dữ liệu MySQL là máy đang sử dụng, bạn có thể sử dụng localhost. Ngài ra, cũng giống như các cơ sở dữ liệu khác, Username mặc định của cơ sở dữ liệu MySQlrootPassword là rỗng.

Nếu bạn đã có cơ sở dữ liệu đang tồn tại, bạn có thể gõ tên cơ sở dữ liệu trong phần Databases ( nếu muốn mở nhiều database, bạn có thể dùng dấu ; để phân cách).

Trong trường hợp lần đầu tiên, bạn không cần cung cấp tên cơ sở dữ liệu, bạn có thể tạo chúng sau khi kết nối.

Kết nối cơ sở dữ liệu bằng MySQLFront Tool

Sau kết nối cơ sở dữ liệu thành công, trình điều khiển cơ sở dữ liệu MySQL có giao diện như hình 2, cộng việc đầu tiên bạn phải thực hiện là tạo cơ sở dữ liệu.

Bắt đầu từ menu có tên Tools | Create Database hay chọn tên root@localhost | R-Click | Create Database, cửa sổ xuất hiện như hình 3.

Giao diện điều khiển cơ sở dữ liệu MySQL

Cung cấp tên cơ sở dữ liệu, trong trường hợp này bạn có thể nhập Test, bấm nút OK, cơ sở dữ liệu xuất hiện trong cửa sổ điều khiển.

Tạo cơ sở dữ liệu có tên Test

Trong cả hai trường hợp tạo cơ sở dữ liệu bằng MySQL thành công như trên, bạn có thể tìm thấy tên cơ sở dữ liệu đó trong thư mục mysql/data như hình 4 sau:

Thư mục tin cơ sở dữ liệu Test

Quản lý người dùng

Làm thế nào để đăng nhậo vào cơ sở dữ liệu MySQL, bạn có thể sử dụng hai cách như trình bày ở trên. Tuy nhiên, sau khi tạo ra các username khác, bạn có thể sử dụng chúng để đăng nhập.

Để đăng nhập vào MySQL bằng Command line, bạn chỉ cần gõ >mysql – hostname –u username– p từ dấu nhắc hay đăng nhập bằng cách sử dụng trình giao diện đồ hoạ. Từ khoá -h hỉ ra rằng tên (computer name), IP, hay localhost của máy có sử dụng cơ sở dữ liệu MySQL, -u chỉ ra rằng bạn sử dụng username, username là tên username, -p được chỉ định khi username này có password. Trong trường hợp password là rỗng, bạn có thể không cung cấp tham số –p.

Để tạo User trong cơ sở dữ liệu MySQL, bạn có thể sử dụng hai cách trên. Nếu bạn thực hiện việc tạo một Username bằng Command line, bạn có thể gõ từ dấu nhắc như phát biểu sau:

GRANT
Select, Insert, Update, 
Delete, Index, Alter, 
Create, Drop, References ON *.* TO 'myis'@'%' IDENTIFIED BY '12345678'

Trong phát biểu trên, vừa tạo ra User có tên myis, với hostname là cơ sở dữ liệu hiện hành, password là 1234 và được các đặt quyền Select, Insert, Update, Delete, Index, Alter, Create, Drop trên cơ sở dữ liệu hiện hành.

Trong trường hợp bạn tạo ra một Username không cung cấp các đặt quyền trên cơ sở dữ liệu, bạn có thể thực hiện như phát biểu tạo username: test, password: 1234 sau:

GRANT
 usage
ON *.* TO 'test'@'%'
IDENTIFIED BY '1234'

Nếu bạn sử dụng giao diện đồ hoạ, bạn có thể tạo username và gán quyền như trên bằng cách sử dụng menu có tên Tools | User-Manager, cửa sổ xuất hiện như hình 5.

Tạo Username

Cấp quyền cho người dùng

Các đặt quyền Select, Insert, Update, Delete, Index, Alter, Create, Drop trên cơ sở dữ liệu, bạn có thể tham khảo chi tiết trong bảng 1.

Các đặt quyền trên cơ sở dữ liệu
Loại Áp dụng Diễn giải
select tables,columns Cho phép user truy vấn mẩu in từ Table.
insert tables,columns Cho phép user thêm mới mẩu tin vào Table
update tables,columns Cho phép user thêm đổi giá trị của mẩu tin tồn tại trong Table
delete tables Cho phép user mẩu tin tồn tại trong Table
index tables Cho phép user thêm mới hay xó chỉ mục của Table
alter tables Cho phép user thay đổi cấu trúc của đối tượng Table hay Database tồn tại, như thêm cột vào trong Table tồn tại, thay đổi kiểu dữ liệu của cột dữ liệu,..
create databases,tables Cho phép user tạo mới đối tượng Table hay Database
drop databases, tables Cho phép user xóa đối tượng Table hay Database

Xuất phát từ các quyền có ảnh hưởng đến cấu trúc cơ sở dữ liệu, các đối tượng của cơ sở dữ liệu và dữ liệu, bạn có thể xem xét kỹ càng trước khi cấp quyền cho user àm việc trên cơ sở dữ liệu.

Ngoài các quyền trên, trong MySQL còn có một số quyền không gán mặc định như trong bảng 2, bạn có thể xem xét các đặt quyền quản trị để cấp cho người dùng.

Các đặt quyền quản trị trên cơ sở dữ liệu
Loại Diễn giải
reload Cho phép người quản trị nạp lại các Table, quyền, host, logs và Table
shutdown Cho phép người quản trị chaamsdwts hoạt động MySQL Server
process Cho phép người quản trị xem quá trình thực hiện của trình chủ và có thể chấm dứt một số quá trình đang thực thi
file Cho phép dữ liệu ghi vào Table từ tập tin

Những username bình thường không nên cấp quyền như trong bảng 2 cho họ, trong trường hợp bạn muốn cầp tất cả các quyền trong bảng 1 và Bảng 2 cho username khi tạo ra họ, bạn Table sử dụng từ khoá All thay vì All Privileges trong phát biểu tạo user như sau:

GRANT
ALL
ON *.* TO 'ekhang'@'%' IDENTIFIED BY '12345678'
 

Tương tự như vậy, trong trường hợp bạn không cung cấp bất kỳ đặt quyền nào trên cơ sở dữ liệu hiện hành, bạn có thể khai báo phát biểu cấp uyền như sau:

GRANT
usage
ON *.* TO 'ekhang'@'%' IDENTIFIED BY '12345678'

Xóa quyền của User

Để xoá các quyền của user từ cơ sở dữ liệu hiện hành, bạn có thể sử dụng phát biểu SQL có tên Revoke, phát biểu Revoke ngược lại với phát biểu Grant.

Nếu bạn xoá một số quyền của user, bạn có thể sử dụng khai báo như phát biểu sau:

Revoke privileges [(columns)] ON item
From username

Trong trường hợp xoá tất cả các quyền của user, bạn có thể sử dụng phát biểu như sau:

Revoke All
ON item
From username

Nếu user đó được cấp quyền với tuỳ chọn Grant Option, để xoá các quyền đó của user, bạn có thể khai báo như sau:

Revoke Grant Option
ON item
From username

Để tham khảo chi tiết quá trình cấp và xoá quyền của một user, bạn có thể tham khảo một số phát biểu như sau:

Gán quyền Administrator cho user có tên fred trên mọi cơ sở dữ liệu trong MySQL, password của anh ta là mnb123, bạn có thể khai báo như sau:

Grant all
On *
To fred indetifyed by ‘mnb123’ With Grant Option;

Nếu bạn không muốn user có tên fred trong hệ thống, bạn có thể xoá anh ta bằng cách khai báo phát biểu sau:

Revoke all
On *
From fred;

Tạo một user có tên ekhang với password12345678, được làm việc trên cơ sở dữ liệu Test, không cấp quyền cho user này, bạn có thể khai báo như sau:

Grant usage
On Test.*
To ekhang identified by ‘12345678’;

Tương tự như vậy, trong trường hợp bạn muốn cấp một số quyền cho user có tên ekhang trên cơ sở dữ liệu Test, bạn có thể khai báo như sau:

Grant select, insert, delete, update, index, drop
On Test.* To ekhang;

Nếu bạn muốn xoá bớt một số quyền của user có tên ekhang trên cơ sở dữ liệu Test, bạn có thể khai báo như sau:

Revoke update, delete, drop
On Test.* From ekhang;

Nhưng trong trường hợp xoá tất cả các quyền của user có tên ekhang trên cơ sở dữ liệu Test, bạn có thể khai báo

Revoke All
On Test.* From ekhang;

Trước khi thiết kế cơ sở dữ liệu trên MySQL, bạn cần phải tham khảo một số kiểu dữ liệu thường dùng, chúng bao gồm các nhóm như: numeric, date and time và string.

Đều cần lưu ý trong khi thiết kế cơ sở dữ liệu, bạn cần phải xem xét kiểu dữ liệu cho môt cột trong Table sao cho phù hợp với dữ liệu của thế giới thực.

Điều này có nghĩa là khi chọn dữ liệu cho cột trong Table, bạn phải xem xét đến loại dữ liệu cần lưu trữ thuộc nhóm kiểu dữ liệu nào, chiều dài cũng như các ràng buộc khác, nhằm khai báo cho phù hợp.

Loại dữ liệu numeric

Kiểu dữ liệu numeric bao gồm kiểu số nguyên trình bày trong bảng 3 và kiểu số chấm động, trong trường hợp dữ liệu kiểu dấu chấm động bạn cần phải chỉ rõ bao nhiều số sau đấu phần lẻ như trong bảng 4.

Kiểu dữ liệu số nguyên
Loại Range Bytes Diễn giải
tinyint -127->128 hay 0..255 1 Số nguyên rất nhỏ.
smallint -32768 ->32767 hay 0..65535 2 Số nguyên nhỏ.
mediumint -32768 ->32767 hay 0..65535 3 Số nguyên vừa
int -263 ->263-1 hay 0..264-1 4 Số nguyên lớn.
bigint -263->263-1 hay 0..264-1 8 Số nguyên lớn.
Kiểu dữ liệu số chấm động
Loại Range Bytes Diễn giải
float phụ thuộc số thập phân Số thập phân dạng Single hay Double
Float(M,D) ±1.175494351E-38 ±3.40282346638 4 Số thập phân dạng Single
Double(M,D) ±1.7976931348623157308 ±2.2250738585072014E-308 8 Số thập phân dạng Double.
Float[M,[D]) Số chấm động lưu dưới dạng char.

Loại dữ liệu date và time

Kiểu dữ liệu Date and Time cho phép bạn nhập liệu dưới dạng chuỗi hay dạng số như trong bảng 5.

Kiểu dữ liệu số nguyên
Loại Range Diễn giải
Date 1000-01-01 Date trình bày dưới dạng yyyy-mm-dd.
Time -838:59:59 , 838:59:59 Time trình bày dưới dạng hh:mm:ss.
Datetime 1000-01-01 00:00:00,9999-12-31 23:59:59 Date và Time trình bày dưới dạng yyyy-mm-dd hh:mm:ss.
TimeStamp[(M)] 1970-01-01 00:00:00 TimeStamp trình bày dưới dạng yyyy-mm-dd hh:mm:ss.
Year[(2|4)] 1970-2069 1901-2155 Year trình bày dưới dạng 2 số hay 4 số.

Đối với kiểu dữ liệu TimeStamp, bạn có thể định dạng nhiều cách như trình bày trong bảng 6

Trình bày đại diện của TimeStamp
Loại Hiển thị
TimeStamp YYYYMMDDHHMMSS
TimeStamp(14) YYYYMMDDHHMMSS
TimeStamp(12) YYMMDDHHMMSS
TimeStamp(10) YYMMDDHHMM
TimeStamp(8) YYYYMMDD
TimeStamp(6) YYMMDD
TimeStamp(4) YYMM
TimeStamp(2) YY

Loại dữ liệu String

Kiểu dữ liệu String chia làm ba loại, loại thứ nhất như char (chiều dài cố định) và varchar (chiều dài biến thiên). Char cho phép bạn nhập liệu dưới dạng chuỗi với chiếu dài lớn nhất bằng chiều dài bạn đã định nghĩa, nhưng khi truy cập dữ liệu trên Field có khai báo dạng này, bạn cần phải xử lý khoảng trắng. Điều này có nghĩa là nếu khai báo chiều dài là 10, nhưng bạn chỉ nhập hcuỗi 4 ký tự, MySQL lưu trữ trong bộ nhớ chiều dài 10.

Ngược lại với kiểu dữ liệu CharVarchar, chiều dài lớn nhất người dùng có thể nhập vào bằng chiều dài bạn đã định nghĩa cho Field này, bộ nhớ chỉ lưu trữ chiều dài đúng với chiều dài của chuỗi bạn đã nhập.

Như vậy, có nghĩa là nếu bạn khai báo kiểu varchar 10 ký tự, nhưng bạn hcỉ nhập 5 ký tự, MySQL chỉ lưu trữ chiều dài 5 ký tự, ngoài ra, khi bạn truy cập đến Field có kiểu dữ liệu này, bạn không cần phải giải quyết khoảng trắng.

Loại thứ hai là Text hay Blob, Text cho phép lưu chuỗi rất lớn, Blob cho phép lưu đối tượng nhị phân. Loại thứ 3 là Enum và Set. Bạn có thể tham khảo cả ba loại trên trong bảng 7.

Kiểu dữ liệu String
Loại Range Diễn giải
char 1-255 characters Chiều dài của chuỗi lớn nhất 255 kí tự.
varchar 1-255 characters Chiều dài của chuỗi lớn nhất 255 kí tự(characters).
tinyblob 28-1 Khai báo cho Field chứa kiểu đối tượng nhị phân cỡ 255 kí tự.
tinytext 28-1 Khai báo cho Field chứa kiểu chuỗi cỡ 255 characters.
blob 216-1 Khai báo cho Field chứa kiểu blob cỡ 65,535 characters.
text 216-1 Khai báo cho Field chứa kiểu chuỗi dạng văn bản cỡ 65,535 characters.
mediumblob 224-1 Khai báo cho Field chứa kiểu blob vừa khoảng 16,777,215 characters.
mediumtext 224-1 Khai báo cho Field chứa kiểu chuỗi dạng văn bản vừa khoảng 16,777,215 characters.
longblob 232-1 Khai báo cho Field chứa kiểu blob lớn khoảng 4,294,967,295 characters.
longtext 232-1 Khai báo cho Field chứa kiểu chuỗi dạng văn bản lớn khoảng 4,294,967,295 characters.

MySQL là một hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS) hay còn được gọi là Relational Database Management System. RDBMS là một trong những mô hình cơ sở dữ liệu quan hệ thông dụng hiện nay.

Nhóm phát biểu SQL

Như đã trình bày trong bài , hầu hết sản phẩm cơ sở dữ liệu quan hệ hiện nay đều dựa trên chuẩn của SQL và ANSI-SQL, chẳng hạn như SQL Server, Oracle, PostgreSQL và MySQL . Điều này có nghĩa là tất cả những cơ sở dữ liệu quan hệ đều phải có những tiêu chuẩn theo cú pháp SQL và MySQL cũng không phải là ngoại lệ.

Ngôn ngữ SQL chia làm 4 loại sau:

  • DDL (Data Definition Language): Ngôn ngữ định nghĩa dữ liệu, dùng để tạo cơ sở dữ liệu, định nghĩa các đối tượng cơ sở dữ liệu như Table, Query, Views hay các đối tượng khác.
  • DML (Data Manipulation Language): Ngôn ngữ thao tác dữ liệu, dùng để thao tác dữ liệu, chẳng hạn như các phát biểu:Select, Inert, Delete, Update, ...
  • DCL: (Data Control Language): Ngôn ngữ sử dụng truy cập đối tượng cơ sở dữ liệu, dùng để thay đổi cấu trúc, tạo người dùng, gán quyền chẳng hạn như: Alter, Grant, Revoke, ...
  • TCL: (Transaction Control Language): Ngôn sử dụng để khai báo chuyển tác chẳng hạn như: Begin Tran, Rollback, Commit, ...

Phát biểu SQL thao tác dữ liệu

Phát biểu SQL bao gồm các loại như sau:

  • SELECT (Truy vấn mẩu tin).
  • INSERT (Thêm mẩu tin).
  • UPDATE (Cập nhật dữ liệu).
  • DELETE (Xoá mẩu tin).

Khái niệm cơ bản về Select

Phát biểu Select dùng để truy vấn dữ liệu từ một hay nhiều bảng khác nhau, kết quả trả về là một tập mẩu tin thoã các điều kiện cho trước nếu có, cú pháp của phát biểu SQL dạng SELECT:

SELECT <danh sách các cột>
[FROM <danh sách bảng>]
[WHERE <các điều kiện ràng buộc>]
[GROUP BY <tên cột / biểu thức trong SELECT> ]
[HAVING <điều kiện bắt buộc của GROUP BY>]
[ORDER BY <danh sách cột>]
[LIMIT FromNumber | ToNumber]

Danh sách các cột: Khai báo các tên cột, biểu thức kết hợp giữa các cột của Table bạn cần truy lục. Trong trường hợp có hai cột cùng tên của hai Table trong phát biểu, bạn cần phải chỉ định tên Table đi trước. Chẳng hạn, như ví dụ 1.

Phát biểu SELECT
Select ItemID,ItemName
From tblItems
Where Cost>100;

Select tblOrders.OrderID,OrderDate,ItemID,Qtty
From tblOrders,tblOrderDetails
Where tblOrders.OrderID = _ tblOrderDetail.OrderID;



Phát biểu SELECT với mệnh đề FROM

Phát biểu SQL dạng SELECT là một trong những phát biểu yêu cầu MySQL truy lục dữ liệu trên cơ sở dữ liệu chỉ định. SELECT dùng để đọc thông tin từ cơ sở dữ liệu theo những trường quy định, hay những biểu thức cho trường đó.

Mệnh đề FROM chỉ ra tên một bảng hay những bảng có quan hệ cần truy vấn thông tin. Thường chúng ta sử dụng công cụ MySQL-Front | Query để thực thi phát biểu SQL.

Sau khi thực thi phát biểu SQL, kết quả trả về số mẩu tin và tổng số mẩu tin được lấy ra từ bảng.

Dấu * cho phép lọc mẩu tin với tất cả các trường trong bảng, nếu muốn chỉ rõ những trường nào cần lọc bạn cần nêu tên cụ thể những trường đó.

Để tiện tham khảo trong giáo trình này chúng tôi sử dụng một phần cơ sở dữ liệu có sẵn của MySQL, đồng thời bổ sung thêm cơ sở dữ liệu dành cho ứng dụng bán hàng qua mạng.

Cơ sở dữ liệu bán hàng qua mạng có tên là Test, và bao gồm nhiều bảng. Bằng phát biểu SELECT chúng ta có thể biết số bảng hay đối tượng khác đang có trong cơ sở dữ liệu Test

/* Hiển thị tất cả tên bảng của cơ sở dữ liệu hiện hành */

show tables from Test

Kết quả trả về danh sách bảng như sau:

TABLES_IN_TEST
--------------------------------------
tblCountries tblProvinces
tblAuthors
tblPayment 
tblItemsion 
tblCustomers 
tblSoftware
Bạn có thể sử dụng phát biểu SQL trên để hiển thị những đối tượng trong cơ sở dữ liệu, bằng cách thay thế các tham số và điều kiện.

Cú pháp đơn giản

/* Lọc tất cả số liệu của tất cả các cột (field) của tablename*/

Select *
From tablename

/* Lọc tất cả số liệu của 2 field: field1, field2 của tablename*/

Select  field1,field2
From tablename

/* Lọc top 10 mẩu tin đầu tiên của tất cả các field của tablename*/

Select *
From tablename
Limit 0,10

/* Lọc top 10 mẩu tin đầu tiên của 2 fields field1, field2 của tablename */

Select field1, field2
From tablename
Limit 0,10
Select *
From tblCountries

/* Liệt kê tất cả các quốc gia trong bảng tblCountries hoặc bạn có thể liệt kê tên như phát biểu sau */

Select CountryName
From tblCountries

Kết quả trả về như sau:

Kết quả trả về tên các quốc gia trong bảng tblcountries
CountryCode CountryName
VNA VietNam
SNG singapore
USS United Stated
UKD United Kingdom
GER Germany
CAM Cambodia
THA ThaiLand
MAL Malaisia
INC Indonesia
CHN China

Phát biểu SQL dạng SELECT với mệnh đề Where

Khi bạn dùng mệnh đề WHERE để tạo nên tiêu chuẩn cần lọc mẩu tin theo tiêu chuẩn được định nghĩa, thông thường WHERE dùng cột (trường) để so sánh với giá trị, cột khác, hay biểu thức chứa cột (trường) bất kỳ có trong bảng. Phát biểu SQL dạng Select với mệnh đề Where cú pháp có dạng như sau:

Select *
from tablename where conditions


Select field1, field2, field3
from tablename where conditions

Với conditions trong cả hai phát biểu trên được định nghĩa điều kiện truy vấn như khai báo sau:

Select *
From tablename where field1>10

select *
from tblCountries
where CountryCode in('VNA','CHN')

Các phép toán so sánh trong conditions bao gồm:

  • > : Lớn hơn (where Amount > 100000)
  • < : Nhỏ hơn (where Amount < 100000)
  • >= : Lớn hơn hoặc bằng (where Amount >= 100000)
  • <= : Nhỏ hơn hoặc bằng (where Amount <= 100000)
  • = : Bằng (where CustID='12')
  • !=: Khác (where CustID!='12')
  • <>: Khác (where CustID <> '12')

Các phép toán logic có thể sử dụng trong conditions

  • And: Phép toán "and"
    SELECT *
    FROM tblOrders
    Where Amount!>100000
    And CustID='12';
    
  • Or : Phép toán "or"
    SELECT *
    FROM tblOrderDetails
    Where Amount!>100000
    Or CustID=‘12’;
    
  • Not : Phép toán phủ định (not)
    SELECT *
    FROM tblOrders
    where OrderDate is not null;
    
  • Not in : Phép toán phủ định (not in)
    SELECT *
    FROM tblOrders
    where OrderID not in (‘12’,’15’);
    
  • Between: Kết quả thuộc trong miền giá trị
    SELECT *
    FROM tblOrders
    Where Amount  between 10
    And 500;
    
  • Like : Phép toán so sánh gần giống, sử dụng dấu % để thể hiện thay thế bằng ký tự đại diện
    SELECT *
    FROM tblCustomers
    where CustName like '%A';
    
  • Not Like : Phép toán phủ định so sánh gần giống, sử dụng dấu % để thể hiện thay thế bằng ký tự đại diện
    SELECT *
    FROM tblCustomers
    where CustName not like '%A';
    
    
  • IN : Phép toán so sánh trong một tập hợp
    SELECT *
    FROM tblOrders
    Where OrderID in ('100','200','300');
Các phép toán logic

/* > : lớn hơn */

Select *
From tblOrders
Where Amount > 100000;

/* < : nhỏ hơn */

Select *
From tblOrders
Where Amount < 100000;

/* >= : lớn hơn hoặc bằng */

Select *
From tblOrders
Where Amount >= 100000;

/* >= : nhỏ hơn hoặc bằng */

Select *
From tblOrders
Where Amount <= 100000;

/* = : bằng */

Select *
From tblOrders
Where CustID=‘12’;

/* != :Khác */

Select *
From tblOrders
Where CustID !=‘12’;

/* <> : Khác */

Select *
From tblOrders
Where CustID <>‘12’;

/* !> : Không lớn hơn */

Select *
From tblOrders
Where Amount !> 100000;

/* !< : Không nhỏ hơn */

Select *
From tblOrders
Where Amount !< 100000;

/* and : Phép toán và */

Select *
From tblOrders
Where Amount !>100000
And CustID=‘12’;

/* Or : Phép toán hoặc */

Select *
From tblOrders
Where Amount !>100000
Or CustID=‘12’;

/* Not : Phép toán phủ định */

Select *
From tblOrders
Where OrderDate is NOT NULL;

/* Between: giá trị nằm trong miền */

Select *
From tblOrders Where Amount Between 10 and 500;

/* Like : Phép toán so sánh gần giống, sử dụng dấu % để thể hiện thay thế bất kỳ ký tự */

Select *
From tblOrders
Where Descriion like '%A' Or CustID ='152';

/* Not Like : Phép toán phủ định so sánh gần giống, sử dụng dấu % để thể hiện thay thế bất kỳ ký tự */

Select *
From tblOrders
Where Descriion not like '%A' Or CustID ='152';

/* IN : Phép toán so sánh trong một tập hợp */

Select *
From tblOrders
Where OrderID in ('134','244','433');

/* Not IN : Phép toán phủ định so sánh trong một tập hợp */

Select *
From tblOrders
Where OrderID not in ('134','244','433');

Mệnh đề Order by

Thông thường, trong khi truy vấn mẩu tin từ bảng dữ liệu, kết quả hiển thị cần sắp xếp theo chiều tăng hay giảm dựa trên ký tự ALPHABET. Nhưng bạn cũng có thể sắp xếp theo một tiêu chuẩn bất kỳ, chẳng hạn như biểu thức.

Khi sắp xếp dữ liệu trình bày trong kết quả, cần phải chọn trường hay biểu thức theo trật tự tăng dần hoặc giảm dần.

Cú pháp cho mệnh đề ORDER BY cùng với trạng thái tăng hay giảm, ứng với ASC sắp xếp tăng dần, DESC giảm dần.

Cú pháp có dạng như sau:

Order by columnname DESC
Order by columnname1 + columnname2 DESC 
Order by columnname ASC
Order by columnname1 ASC, columnname2 DESC
SELECT với mệnh đề Order by DESC

/*-- Giảm dần theo thời gian */

Select OrderID , OrderDate, CustID, Amount
From tblOrders
Where Amount >1000
Order by OrderDate DESC

Kết quả trả về như sau:

Bảng kết quả sau khi thực hiện lệnh select
OrderID OrderDate Custid Amount
17 2001-09-20 12 178.243
18 2001-09-20 12 2.78534
16 2001-09-19 12 398.798
15 2001-09-18 12 5.758.876
14 2001-09-17 12 5.539.647
12 2001-09-16 12 1.330
13 2001-09-16 12 1.585.563
31 2001-09-16 13 459.525
11 2001-09-15 11 1.401.803
28 2001-09-15 13 1.45200
SQL dạng SELECT với mệnh đề Order by và ASC

/*-- Tăng dần theo thời gian */

Select OrderID , OrderDate, CustID, Amount
From tblOrders
Where Amount >1000
Order by OrderDate ASC

Kết quả trả về như sau:

Kết quả trả về với mệnh đề select..Order by và ASC
OrderID OrderDate CustID Amount
01 2001-09-05 10 2.903.576
02 2001-09-05 10 48.168.56
03 2001-09-05 10 5.107.032
04 2001-09-08 10 2.355.537
05 2001-09-08 16 1.817.487
06 2001-09-10 16 26.000
19 2001-09-10 12 575.667
29 2001-09-10 13 466.500
07 2001-09-11 16 186.782
23 2001-09-11 12 459.162

Nếu muốn sắp xếp theo nhiều cột (trường), chỉ cần sử dụng dấu phẩy (,) để phân cách các cột.

SELECT với mệnh đề Order by với 2 cột dữ liệu
Select OrderID , OrderDate, CustID, Amount
From tblOrders
Where Amount >1000
Order by OrderID,CustID DESC

Kết quả trả về như sau:

Kết quả trả về của mệnh đề Select...Order by với 2 cột dữ liệu
OrderID OrderDate CustID Amount
31 2001-09-16 13 459.525
30 2001-09-15 13 153.120
29 2001-09-10 13 466.500
28 2001-09-15 13 145.200
27 2001-09-14 13 603.033
26 2001-09-13 13 230.000
25 2001-09-11 13 244.904
24 2001-09-12 13 1.367.228
23 2001-09-11 12 459.162
19 2001-09-10 12 575.667

Nếu muốn sắp xếp theo nhiều trường kết hợp, chỉ cần dùng thứ tự từng cột cách nhau bằng dấu +.

SELECT với mệnh đề Order by hợp 2 cột

/*-- Giảm dần theo số OrderID và CustID */

Select OrderID , OrderDate, CustID, Amount
From tblOrders
Where Amount >1000
Order by OrderID + CustID DESC

Kết quả trả về như sau:

Kết quả với mệnh đề Select...Order by hợp 2 cột
Orderid OrderDate CustID Amount
31 2001-09-16 13 459.525
30 2001-09-15 13 153.120
29 2001-09-10 13 466.500
28 2001-09-15 13 145.200
27 2001-09-14 13 603.033
26 2001-09-13 13 230.000
25 2001-09-11 13 244.904
24 2001-09-12 13 1.367.228
23 2001-09-11 12 459.162
19 2001-09-10 12 575.667

Nếu trong phát biểu SQL dạng SELECT có nhiều bảng kết hợp lại với nhau, bạn có thể dùng thêm tên bảng ứng với cột của bảng đó. Phần này sẽ được diễn giải cụ thể hơn trong phần kế tiếp ( JOIN -Phép hợp).

SQL dạng SELECT với mệnh đề GROUP BY

Khi truy vấn mẩu tin trên một hay nhiều bảng dữ liệu, thông thường có những nghiệp vụ thuộc trường nào đó có cùng giá trị, ví dụ khi hiển thị hợp đồng phát sinh trong tháng, kết quả sẽ có nhiều hợp đồng của khách hàng lặp đi lặp lại như ví dụ 8

SQL dạng SELECT
Select CustID, Amount from tblOrders

Với phát biểu trên kết quả trả về như sau:

Kết quả với mệnh đề Select
CustID Amount
10 2.903.576
10 48.168.567
10 5.107.032
10 2.3555347
16 181.074.847
16 26.000
16 1.867.682
16 3.600.000
16 195.713.899
16 961.804.228
16 140.180.347
12 138
12 158.555.638
12 5.539.647
12 575.887.767
12 39.879.489
12 17.824.938
12 278.503.048
12 5.756.667
12 459.162
13 136.727.628
13 244.904
13 230.000
13 603.033
13 1.452.000
13 4.665.100
13 1.531.200
13 459.525

Trong báo cáo chúng ta lại cần phải biết mỗi khách hàng có bao nhiêu lần trả tiền, tổng số tiền của mỗi khách hàng đã trả là bao nhiêu?

Để làm điều này, chúng ta sử dụng mệnh đề GROUP BY trong phát biểu SQL dạng SELECT cùng với một số hàm trong MySQL, bạn tham khảo ví dụ 9 được trình bày chi tiết từ ví dụ 8 nhưng nhóm mẩu tin bằng mệnh đề Group By.

SQL dạng SELECT với mệnh đề Group By
Select CustID, count (CustID), Sum(Amount)
From tblOrders Group by CustID Order by CustID

Kết quả trả về như sau:

Kết quả với mệnh đề Select...Group by
CustID
16 7 2.956.562.368
12 9 3.843.022.604
13 8 145.913.378
10 4 72.382.804

Các hàm thông dụng trong MySQL

Các hàm trong phát biểu GROUB BY

  • Hàm AVG: Hàm trả về giá trị bình quân của cột hay trường trong câu truy vấn, ví dụ như phát biểu sau:
    Select AVG(Amount) From tblOrders
    
  • Hàm MIN: Hàm trả về giá trị nhỏ nhất của cột hay trường trong câu truy vấn, ví dụ như phát biểu sau:
    Select Min(Amount) From tblOrders
    
  • Hàm MAX: Hàm trả về giá trị lớn nhất của cột hay trường trong câu truy vấn, ví dụ như các phát biểu sau:
    Select Max(Amount) From tblOrders
    
  • Hàm Count: Hàm trả về số lượng mẩu tin trong câu truy vấn trên bảng, ví dụ như các phát biểu sau:
    Select count(*) From tblOrders
    
    Select count(CustID) From tblOrders
    
    Select count(*)
    From tblOrderDetails
    
    
  • Hàm Sum: Hàm trả về tổng các giá trị của trường, cột trong câu truy vấn, ví dụ như các phát biểu sau:
    Select sum(Amount) From tblOrders
    

Chẳng hạn, bạn có thể tham khảo diễn giải toàn bộ các hàm dùng trong mệnh đề GROUP BY.

SQL dạng SELECT với Group By và các hàm
Select CustID,
Count (CustID),Sum(Amount), Max(Amount),
Min(Amount), Avg(Amount) From tblOrders
Group by CustID
Order by CustID

Kết quả trả về như sau:

Kết quả với mệnh đề Select...Group By và các hàm
CustID
16 7 2956562368 1.95713899 26000 422366052
12 9 3843022604 39879489 459162 427002511
13 8 145913378 1.36727628 230000 18239172.25
10 4 72382804 48168567 2903576 18095701

Các hàm xử lý chuỗi

  • Hàm ASCII: Hàm trả về giá trị mã ASCII của ký tự bên trái của chuỗi, ví dụ như khai báo:
    Select ASCII('TOI')
    

    Kết quả trả về như sau:

    84
  • Hàm Char: Hàm này chuyển đổi kiểu mã ASCII từ số nguyên sang dạng chuỗi:
    Select char(35)
    

    Kết quả trả về như sau:

    #
  • Hàm UPPER: Hàm này chuyển đổi chuỗi sang kiểu chữ hoạ:
    Select UPPER('Khang')
    

    Kết quả trả về như sau:

    KHANG
  • Hàm LOWER: Hàm này chuyển đổi chuỗi sang kiểu chữ thường:
    Select LOWER('Khang')
    

    Kết quả trả về như sau:

    khang
  • Hàm Len: Hàm này trả về chiều dài của chuỗi:
    Select len('I Love You')
    

    Kết quả trả về như sau:

    10
  • Thủ tục LTRIM: Thủ tục loại bỏ khoảng trắng bên trái của chuỗi:
    Select ltrim(' Khang')
    

    Kết quả trả về như sau:

    'khang'
  • Thủ tục RTRIM: Thủ tục loại bỏ khoảng trắng bên phải của chuỗi:
    Select ltrim('Khang  ')
    

    Kết quả trả về như sau:

    'khang'
    
  • Hàm Left: Hàm trả về chuỗi bên trái tính từ đầu cho đến vị trí thứ n:
    Select left('Khang',3)
    

    Kết quả trả về như sau:

    'Kha'
  • Hàm Right: Hàm trả về chuỗi bên phải tính từ cuối cho đến vị trí thứ n:
    Select Right('KHang',4)
    

    Kết quả trả về như sau:

    'Hang'
    
  • Hàm Instr: Hàm trả về vị trí chuỗi bắt đầu của chuỗi con trong chuỗi xét:
    Select INSTR ('Khang','Pham Huu Khang')
    

    Kết quả trả về như sau:

    11

    11 là tương đương vị trí thứ 11 của chữ Khang trong chuỗi "Pham Huu Khang"

Các hàm về xử lý thời gian

  • Hàm CurDate(): Hàm trả về ngày, tháng và năm hiện hành của hệ thống:
    Select curdate() as 'Today is’
    

    Kết quả trả về như sau

    Today is
    --------------------------
    2001-11-21
    
  • Hàm CurTime(): Hàm trả về giờ, phút và giây hiện hành của hệ thống:
    Select curtime() as 'Time is’
    
    

    Kết quả trả về như sau

    Time is
    ---------------------------
    09:12:05
    
  • Hàm Period_Diff: Hàm trả về số ngày trong khoảng thời gian giữa 2 ngày:
    Select
    Period_diff (OrderDate,  getdate())
     as 'So ngay giua ngay thu tien đen hom nay:'
    from tblOrders
    

    Kết quả trả về như sau

    So ngay giua ngay thu tien đen hom nay:
    ---------------------------------
    74
    72
    
  • Hàm dayofmonth: Hàm dayofmonth trả về ngày thứ mấy trong tháng:
    Select dayofmonth(curdate())
    as 'hom nay ngay
    

    Kết quả trả về như sau:

    21
    

Ngoài các hàm trình bày như trên, bạn có thể tìm thấy nhiều hàm xử lý về thời gian trong phần Funtions xuất hiện bên phải màn hình của trình điều khiển như hình 6.

Sử dụng chức năng Funcitons

Các hàm về toán học

  • Hàm sqrt: Hàm trả về là căn bật hai của một biểu thức:
    Select sqrt (4)

    Kết quả trả về là

    2
  • Hàm Round: Hàm trả về là số làm tròn của một biểu thức:
    Select round (748.58,-1)

    Kết quả trả về là

    7500

Để tham khảo thêm một số hàm khác bạn có thể tham khảo trong phần Functions như hình 6

Phát biểu SQL dạng Select với AS

Khi cần thiết phải thay đổi tên trường nào đó trong câu truy vấn, bạn chỉ cần dùng phát biểu AS. AS cho phép ánh xạ tên cũ, hay giá trị chưa có tên thành tên mới (header).

Ví dụ, khi sử dụng GROUP BY ở trong phần trên, những cột tạo ra từ các phép toán count, sum, max, min, ... cho ra kết quả không có header, nghĩa là không có tên cột để tham chiếu trong khi gọi đến chúng. Chúng ta phải cần phát biểu AS cho những trường hợp này.

SQL dạng SELECT với AS và các hàm
Select CustID,
Count (CustID) as No, Sum(Amount) as TIENHD,
Max(Amount) as HDLONNHAT,
Min(Amount) as HDNHONHAT, Avg(Amount) as TRUNGBINH
From tblOrders Group by CustID Order by CustID

Kết quả hiển thị như sau:

CustID No TIENHD HDLONNHAT HDNHONHAT TRUNGBINH
16 7 2956562368 1.95713899 26000 422366052
12 9 3843022604 39879489 459162 427002511
13 8 145913378 1.36727628 230000 18239172.25
10 4 72382804 48168567 2903576 18095701

Phát biểu SQL dạng Select với Limit N , M

Phát biểu SQL dạng SELECT cho phép truy lục chỉ một số mẩu tin tính từ vị trí thứ n đến vị trí thứ m trong Table (theo một tiêu chuẩn hay sắp xếp nào đó). Để làm điều này, trong phát biểu SQL dạng SELECT bạn dùng chỉ định từ khoá LIMIT với số lượng mẩu tin cần lấy từ vị trí thứ n đến m.

Chẳng hạn, trong trường hợp bạn khai báo Select * from tblOrders limit 0,10. Kết quả sẽ trả về 10 mẩu tin đầu tiên trong bảng tblOrders.

Bạn cũng có thể sử dụng kết hợp LIMIT với các mệnh đề như WHERE, ORDER BY nhằm tạo ra kết quả như ý muốn.

Do yêu cầu khác nhau thông qua phát biểu SQL dạng SELECT có sử dụng LIMIT, nghĩa là kết quả trả về số lượng 10 mẩu tin đầu tiên với tất cả các cột trong bảng tblOrders.

Phát biểu SQL dạng SELECT với Limit N,M
Select *
From tblOrders
Limit 0,10

Kết quả trả về như sau:

OrderID OrderDate CustID Amount
01 2001-09-05 10 2903576
02 2001-09-05 10 48168567
03 2001-09-05 10 5107032
04 2001-09-08 10 2.3555347
05 2001-09-08 16 1.81074847
06 2001-09-10 16 26000
07 2001-09-11 16 1867682
08 2001-09-12 16 3600000
09 2001-09-13 16 1.95713899
10 2001-09-14 16 9.61804228

Nếu muốn lọc ra 10 hợp đồng có số tiền nhiều nhất, bạn chỉ cần sử dụng sắp xếp theo cột TotalAmount hay Amount trong bảng tblOrders.

Phát biểu SQL dạng SELECT với Limit N,M
Select OrderID,OrderDate,CustID,Amount
From tblOrders
Order by Amount Desc
Limit 0,10

Kết quả trả về như sau:

OrderID OrderDate CustID Amount
06 2001-09-10 16 26000
26 2001-09-13 13 230000
25 2001-09-11 13 244904
23 2001-09-11 12 459162
31 2001-09-16 13 459525
27 2001-09-14 13 603033
28 2001-09-15 13 1452000
30 2001-09-15 13 1531200
07 2001-09-11 16 1867682
01 2001-09-05 10 2903576

Nếu muốn lọc ra 10 sản phẩm có số lượng bán nhiều nhất, bạn chỉ cần sử dụng sắp xếp theo cột số lượng Qtty.

Phát biểu SQL dạng Select với Limit N,M
Select ItemID,Qtty,Price,Amount from tblOrderDetails
Where Amount>10
order by Qtty
Limit 0,10

Kết quả trả về như sau:

Danh sách 10 sản phẩm có số lượng bán nhiều nhất
ItemID Qtty Price Amount
1 900 12000 12960000
2 1000 12000 14400000
3 5000 12000 72000000
3 6000 12000 86400000
4 8000 12000 15200000
4 8000 12000 15200000
4 8000 10000 15200000
5 9000 12000 29600000
5 9000 12000 129600000
5 9000 12000 129600000

Phát biểu SQL dạng SELECT với DISTINCT

Nếu có một hay nhiều bảng kết nối với nhau, sẽ xảy ra trùng lặp nhiều mẩu tin. Nhưng trong trường hợp này bạn chỉ cần lấy ra một mẩu tin trong tập mẩu tin trùng lặp, bạn sử dụng phát biểu SQL dạng SELECT với chỉ định DISTINCT.

Phát biểu SQL dạng SELECT
Select ItemID,Qtty,Price,Amount from tblOrderDetails
order by Qtty

Kết quả trả về như sau:

Kết quả cho thấy có sự trùng lặp
ItemID Qtty Price Amount
1 900 12000 12960000
2 1000 12000 14400000
3 5000 12000 72000000
3 6000 12000 86400000
4 8000 12000 115200000
4 8000 12000 115200000
4 8000 10000 115200000
5 9000 12000 129600000
5 9000 12000 129600000
5 9000 12000 129600000
...
...
Phát biểu SQL dạng SELECT với DISTINCT
Select Distinct ItemID,Qtty,Price,Amount
From tblOrderDetails
Order by Qtty

Kết quả loại bỏ những mẩu tin trùng lắp như sau:

Kết quả của mệnh đề Select Distinct..
ItemID Qtty Price Amount
1 900 12000 12960000
2 1000 12000 14400000
3 6000 12000 86400000
4 8000 12000 115200000
5 9000 12000 129600000
...
...
...

Nhập dữ liệu bằng phát biểu SQL dạng Insert

Khi cần thêm mẩu tin vào bảng trong cơ sở dữ liệu MySQL, bạn có nhiều cách để thực hiện công việc này. Trong Visual Basic 6.

0