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:
- 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
- Chạy tập tin Setup.exe, chọn đĩa C hay D
- 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.
--------------------------------------------------------------------- #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 MySQl là root và Password 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.
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.
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 password là 12345678, đượ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.
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. |
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.
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
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 Char là Varchar, 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.
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.
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
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:
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');
/* > : 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
/*-- 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:
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 |
/*-- 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:
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 OrderID , OrderDate, CustID, Amount From tblOrders Where Amount >1000 Order by OrderID,CustID DESC
Kết quả trả về như sau:
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 +.
/*-- 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:
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
Select CustID, Amount from tblOrders
Với phát biểu trên kết quả trả về như sau:
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.
Select CustID, count (CustID), Sum(Amount) From tblOrders Group by CustID Order by CustID
Kết quả trả về như sau:
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.
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:
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.
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.
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.
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.
Select ItemID,Qtty,Price,Amount from tblOrderDetails Where Amount>10 order by Qtty Limit 0,10
Kết quả trả về như sau:
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.
Select ItemID,Qtty,Price,Amount from tblOrderDetails order by Qtty
Kết quả trả về như sau:
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 |
... | |||
... |
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:
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.
- 1 Thiết bị chống sét
- 2 Khái quát chung về xuất khẩu hàng hóa
- 3 Động cơ tên lửa
- 4 Sống núi giữa đại dương
- 5 Đa thức nội suy Newton.
- 6 Hạch toán chi tiết tài sản cố định hữu hình
- 7 Các bệnh dẫn đến từ thực phẩm (Food-borne Diseases)
- 8 Đặc điểm nền kinh tế thị trường
- 9 Hệ thống định vị Galileo
- 10 Bảo hiểm xã hội Việt Nam trước NĐ 43CP - 1993