sql cơ bản nâng cao

CREATE

DATABASE

mydb

;

USE

mydb

;

CREATE

TABLE

mytable

(

id

INT

PRIMARY

KEY

,

name

VARCHAR

(

20

)

);

INSERT

INTO

mytable

VALUES

(

1

,

'Will'

);

INSERT

INTO

mytable

VALUES

(

2

,

'Marry'

);

INSERT

INTO

mytable

VALUES

(

3

,

'Dean'

);

SELECT

id

,

name

FROM

mytable

WHERE

id

=

1

;

UPDATE

mytable

SET

name

=

'Willy'

WHERE

id

=

1

;

SELECT

id

,

name

FROM

mytable

;

DELETE

FROM

mytable

WHERE

id

=

1

;

SELECT

id

,

name

FROM

mytable

;

DROP

DATABASE

mydb

;

SELECT

count

(

1

)

from

mytable

;

gives

the

number

of

records

in

the

table

Lệnh CREATE DATABASE trong SQL được sử dụng để tạo Database mới trong SQL.

Cú pháp

Lệnh CREATE DATABASE có cú pháp như sau:

CREATE DATABASE ten_co_so_du_lieu;

Bước này, ten_co_so_du_lieu luôn luôn là duy nhất bên trong RDBMS.

Chẳng hạn

Nếu bạn mong muốn tạo Database mới là <SINHVIENvàgt;, thì lệnh CREATE DATABASE sẽ là như sau:

SQLvàgt; CREATE DATABASE SINHVIEN;

Bảo đảm rằng bạn có quyền như admin trước khi tạo bất kỳ Database nào. Khi một Database đã được tạo, bạn có thể kiểm soát nó trong danh mục Database như sau:

SQLvàgt; SHOW DATABASES;

+——————–+

| Database           |

+——————–+

| information_schema |

| AMROOD             |

| VIETJACK     |

| mysql              |

| orig               |

| check               |

| SINHVIEN             |

+——————–+

7 rows in set (0.00 sec)

Lệnh DROP DATABASE trong SQL được sử đụng để xóa một Database đang tồn tại.

Cú pháp

Cú pháp cơ bản của lệnh DROP DATABASE trong SQL là như sau:

DROP DATABASE ten_co_so_du_lieu;

Bước này, ten_co_so_du_lieu luôn luôn là duy nhất bên trong RDBMS.

Chẳng hạn

Nếu bạn mong muốn xóa một Database đang tồn tại tên là <SINHVIENvàgt;, thì lệnh DROP DATABASE sẽ là như sau:

SQLvàgt; DROP DATABASE SINHVIEN;

GHI CHÚ: Chúng ta nên thận trọng trước khi sử dụng hành động này, bởi vì xóa một Database đang tồn tại sẽ làm thất lạc hoàn toàn thông tin đã được cất giữ trong Database đó.

Bảo đảm rằng bạn có quyền như admin trước khi xóa bất kỳ Database nào. Khi một Database đã bị xóa, bạn có thể kiểm soát nó trong danh mục Database như sau:

SQLvàgt; SHOW DATABASES;+——————–+| Database           |+——————–+| information_schema || AMROOD             || VIETJACK     || mysql              || orig               || check               |+——————–+6 rows in set (0.00 sec)

Khi bạn có nhiều Database trong SQL Schema, thì trước khi khởi đầu hành động của các bạn, bạn sẽ cần chọn lọc một Database để thực hiện các hành động của các bạn trên đó.

Lệnh USE trong SQL được sử dụng để chọn bất kỳ Database nào đang tồn tại trong SQL Schema.

Cú pháp

Cú pháp cơ bản của lệnh USE trong SQL như sau:

USE ten_co_so_du_lieu;

Bước này, ten_co_so_du_lieu luôn luôn là duy nhất bên trong RDBMS.

Chẳng hạn

Bạn có thể kiểm soát các Database khả dụng như sau:

SQLvàgt; SHOW DATABASES;+——————–+| Database           |+——————–+| information_schema || AMROOD             || VIETJACK     || mysql              || orig               || check               |+——————–+6 rows in set (0.00 sec)

Lúc này, nếu bạn mong muốn làm việc với AMROOD, thì bạn cần thực thi lệnh SQL sau để khởi đầu làm việc với Database này:

SQLvàgt; USE AMROOD;

Lệnh SELECT trong SQL

Lệnh SELECT trong SQL được sử dụng để truy vấn hoặc thu nạp dữ liệu từ một bảng trong cơ sở dữ liệu. Lệnh đó là lệnh được sử dụng thông dụng & khá thường xuyên trong dãy các lệnh SQL. Nếu bạn mong muốn lấy thông tin từ cột rõ ràng hoặc toàn bộ các cột từ một bảng, bạn sử dụng truy vấn SELECT trong SQL.

Cú pháp cơ bản của lệnh SELECT như sau:

SQLvàgt; SELECT danh_sach_cot FROM ten_bang [Menh_de WHERE]  [Menh_de GROUP BY]  [Menh_de HAVING]  [Menh_de ORDER BY];

Ví dụ, với bảng SINHVIEN đã tạo ở các chương trước, bạn có thể có lệnh SELECT sau:

SQLvàgt; SELECT TEN, TUOI, HOCPHI FROM SINHVIEN;

Lệnh RENAME Table được sử dụng để thay tên một bảng. Đôi lúc bạn chọn một tên không đưa nhiều ý nghĩa cho bảng, cho nên thiết yếu phải biến đổi lại. Cú pháp để thay tên bảng từ cơ sở dữ liệu như sau:

Tất cả chúng ta cùng theo dõi phương pháp để thay tên Database trong MySQL & SQL.

Trong MySQL, để thay tên cho cơ sở dữ liệu, bạn cần sử dụng cú pháp sau:

RENAME DATABASE ten_cu TO ten_moi;

Với SQL Server 2005, 2008, 2008R2 & 2012, bạn có thể thay tên cho cơ sở dữ liệu như sau:

ALTER DATABASE ten_cu MODIFY NAME = ten_moi

Tạo một bảng về cơ bản bao gồm đặt tên cho bảng đó & xác nhận số cot & kiểu dữ liệu của mỗi cot.

Lệnh CREATE TABLE trong SQL được sử dụng để tạo một bảng mới.

Cú pháp

Cú pháp cơ bản của lệnh CREATE TABLE trong SQL như sau:

CREATE TABLE ten_bang(   kieu_du_lieu cot1,   kieu_du_lieu cot2,   kieu_du_lieu cot3,   …..   kieu_du_lieu cotN,   PRIMARY KEY( mot hoac nhieu cot ));

CREATE TABLE là một keyword nói cho Database System những gì bạn mong muốn làm. Trong trường hợp này, bạn mong muốn tạo một bảng mới. Tên hoặc định danh duy nhất cho bảng đó theo sau lệnh CREATE TABLE.

Sau đó, trong cặp dấu ngoặc đơn, bạn liệt kê phần khái niệm cho mỗi cột trong bảng & từng kiểu dữ liệu cho nó. Bạn theo dõi chẳng hạn sau để hiểu hơn về định nghĩa này.

Chẳng hạn

Chẳng hạn sau sẽ tạo một bảng SINHVIEN với ID là khóa chính (primary key) & ràng buộc là NOT NULL chỉ rằng các trường này chẳng thể là NULL trong lúc tạo các bản ghi trong bảng này.

SQLvàgt; CREATE TABLE SINHVIEN(   ID   INT              NOT NULL,   TEN VARCHAR (20)     NOT NULL,   TUOI  INT              NOT NULL,   KHOAHOC  CHAR (25) ,   HOCPHI   DECIMAL (18, 2),          PRIMARY KEY (ID));

Bạn có thể kiểm soát xem bảng của các bạn đã được tạo ra công hay chưa bằng việc nhìn vào cảnh báo được hiển thị bởi SQL Server, còn nếu không, bạn có thể sử dụng lệnh DESC như sau:

SQLvàgt; DESC SINHVIEN;+———+—————+——+—–+———+——-+| Field   | Type          | Null | Key | Default | Extra |+———+—————+——+—–+———+——-+| ID      | int(11)       | NO   | PRI |         |       || TEN    | varchar(20)   | NO   |     |         |       || TUOI     | int(11)       | NO   |     |         |       || KHOAHOC | char(25)      | YES  |     | NULL    |       || HOCPHI  | decimal(18,2) | YES  |     | NULL    |       |+———+—————+——+—–+———+——-+5 rows in set (0.00 sec)

Lúc này, bạn có SINHVIEN có sẵn trong Database của mình, & bạn có thể sử dụng để cất giữ các thông tin thiết yếu liên quan tới sinh viên.

Lệnh DROP TABLE trong SQL được sử dụng để xóa một bảng & toàn bộ dữ liệu, chỉ mục (index), trigger, ràng buộc & quyền được trao cho bảng đó.

GHI CHÚ: Bạn phải thật thận trọng trong lúc sử dụng lệnh này, bởi vì một khi một bảng bị xóa thì toàn bộ thông tin có sẵn trong bảng đó cũng sẽ bị xóa trọn đời.

Cú pháp

Cú pháp cơ bản của lệnh DROP TABLE trong SQL như sau:

DROP TABLE ten_bang;

Chẳng hạn

Trước tiên, tất cả chúng ta kiểm tra bảng SINHVIEN & sau đó tất cả chúng ta sẽ xóa nó khỏi Databse.

SQLvàgt; DESC SINHVIEN;+———+—————+——+—–+———+——-+| Field   | Type          | Null | Key | Default | Extra |+———+—————+——+—–+———+——-+| ID      | int(11)       | NO   | PRI |         |       || TEN    | varchar(20)   | NO   |     |         |       || TUOI     | int(11)       | NO   |     |         |       || KHOAHOC | char(25)      | YES  |     | NULL    |       || HOCPHI  | decimal(18,2) | YES  |     | NULL    |       |+———+—————+——+—–+———+——-+5 rows in set (0.00 sec)

Lệnh trên có nghĩa là bảng SINHVIEN là có sẵn trong Database, chính vì như vậy, tất cả chúng ta có thể xóa nó như sau:

SQLvàgt; DROP TABLE SINHVIEN;Query OK, 0 rows affected (0.01 sec)

Lúc này, nếu bạn thử lệnh DESC như trên một lần nữa, thì bạn sẽ nhận cảnh báo lỗi như sau:

SQLvàgt; DESC SINHVIEN;ERROR 1146 (42S02): Table ‘TEST.SINHVIEN’ doesn’t exist

Bước này, TEST là tên Database mà tất cả chúng ta đang sử dụng cho chẳng hạn này.

Lệnh DELETE được sử dụng để xóa các hàng từ một bảng. Nếu bạn mong muốn xóa một hàng rõ ràng từ một bảng, chúng ta nên sử dụng mệnh đề WHERE.

DELETE FROM ten_bang [WHERE dieu_kien];

Nhưng nếu bạn không xác số phận đề WHERE, thì nó sẽ xóa toàn bộ hàng từ bảng.

DELETE FROM ten_bang;

Có một số định nghĩa cũng giống như lệnh DELETE, ví dụ như lệnh DROP & lệnh TRUNCATE nhưng chúng không thực sự giống nhau, dưới đây là một số điểm khác nhau giữa chúng.

Điểm khác nhau giữa lệnh DELETE & lệnh TRUNCATE

Có 1 điểm khác nhau nhỏ giữa lệnh DELETE & lệnh TRUNCATE. Lệnh DELETE chỉ xóa các hàng từ bảng dựa vào điều kiện đã được khái niệm bởi mệnh đề WHERE hoặc xóa toàn bộ các hàng từ bảng nếu điều kiện này không được xác nhận. Nhưng nó không giải phóng bộ nhớ lưu trữ chứa bảng đó.

Trong lúc đó, lệnh TRUNCATE xóa toàn bộ các hàng từ bảng & giải phóng bộ nhớ lưu trữ chứa bảng đó. Để xóa toàn bộ các hàng từ bảng SINHVIEN, truy vấn như sau:

TRUNCATE TABLE SINHVIEN;

Điểm khác nhau giữa lệnh DROP & lệnh TRUNCATE

Khi bạn sử dụng lệnh DROP, nó xóa hàng của bảng cùng với khái niệm bảng, để toàn bộ các mối quan hệ giữa bảng đó với bảng khác là không còn hiệu lực nữa. Khi bạn DROP một bảng:

  • Cấu tạo bảng sẽ bị xóa.
  • Mối quan hệ sẽ bị xóa.
  • Các ràng buộc về chu toàn dữ liệu sẽ bị xóa.
  • Quyền truy cập cũng sẽ bị xóa.

Nói cách khác, khi tất cả chúng ta sử dụng lệnh TRUNCATE, thì kết cấu bảng vẫn như cũ, cho nên tất cả chúng ta không phải mất công tạo lại & không phải đương đầu với các vấn đề trên.

Lệnh RENAME Table được sử dụng để thay tên một bảng. Đôi lúc bạn chọn một tên không đưa nhiều ý nghĩa cho bảng, cho nên thiết yếu phải biến đổi lại. Cú pháp để thay tên bảng từ cơ sở dữ liệu như sau:

ALTER TABLE ten_bang

RENAME TO ten_bang_moi;

Một cách khác, bạn có thể viết lệnh sau để thay tên cho bảng.

RENAME ten_bang_cu To ten_bang_moi;

Bạn theo dõi với tên bảng SINHVIEN trước đây, do một số nguyên nhân tất cả chúng ta mong muốn thay tên bảng thành SINHVIENBK53 ví dụ.

+—-+———+—–+———–+——–+

| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |

+—-+———+—–+———–+———+

|  1 | Hoang   |  20 | công nghệ thông tin      | 4       |

|  2 | Viet    |  18 | DTVT      | 4.5     |

|  3 | Thanh   |  19 | KTDN      |  5      |

|  4 | Nhan    |  21 | CK        |   3.5   |

|  5 | Huong   |  19 | TCNH      |   4     |

+—-+———+—–+———–+———+

Bạn có thể sử dụng một trong các cú pháp sau để thay tên cho bảng:

ALTER TABLE SINHVIEN

RENAME TO SINHVIENBK53;

Hoặc

RENAME SINHVIEN TO SINHVIENBK53;

Sau đó, bảng SINHVIEN sẽ được đổi tên thành bảng SINHVIENBK53.

Lệnh TRUNCATE TABLE trong SQL được sử dụng để xóa hoàn toàn dữ liệu từ một bảng đang tồn tại.

Bạn cũng có thể sử dụng lệnh DROP TABLE để xóa toàn thể bảng, nhưng nó sẽ xóa toàn thể kết cấu bảng từ Database & nếu bạn cần cất giữ một vài dữ liệu trong kết cấu bảng như thế, bạn sẽ phải tạo lại bảng này lần nữa.

Cú pháp cơ bản của lệnh TRUNCATE TABLE trong SQL như sau:

TRUNCATE TABLE  ten_bang;

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3.0     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+5 rows in set (0.00 sec)

Sau đây là chẳng hạn của lệnh TRUNCATE TABLE:

SQL > TRUNCATE TABLE SINHVIEN;

Lúc này, bảng SINHVIEN đã bị biến đổi & sau đây là kết quả của lệnh SELECT:

SQLvàgt; SELECT * FROM SINHVIEN;Empty set (0.00 sec)

Lệnh ALTER TABLE trong SQL được sử dụng để thêm, xóa hoặc sửa đổi các cột trong một bảng đang tồn tại.

Bạn cũng sẽ sử dụng lệnh ALTER TABLE để thêm & xóa các ràng buộc phong phú trên một bảng đang tồn tại.

Cú pháp

Cú pháp cơ bản của lệnh ALTER TABLE để thêm một cột mới trong một bảng đang tồn tại là như sau:

ALTER TABLE ten_bang ADD ten_cot kieu_du_lieu;

Cú pháp cơ bản của lệnh ALTER TABLE để XÓA CỘT trong một bảng đang tồn tại là như sau:

ALTER TABLE ten_bang DROP COLUMN ten_cot;

Cú pháp cơ bản của lệnh ALTER TABLE để biến đổi KIỂU DỮ LIỆU của một cột trong một bảng là như sau:

ALTER TABLE ten_bang MODIFY COLUMN ten_cot kieu_du_lieu;

Cú pháp cơ bản của lệnh ALTER TABLE để THÊM một ràng buộc NOT NULL cho một cột trong một bảng là như sau:

ALTER TABLE ten_bang MODIFY ten_cot kieu_du_lieu NOT NULL;

Cú pháp cơ bản của lệnh ALTER TABLE để THÊM ràng buộc UNIQUE cho một bảng là như sau:

ALTER TABLE ten_bang ADD CONSTRAINT MyUniqueConstraint UNIQUE(cot1, cot2…);

Cú pháp cơ bản của lệnh ALTER TABLE để THÊM ràng buộc CHECK cho một bảng là như sau:

ALTER TABLE ten_bang ADD CONSTRAINT MyUniqueConstraint CHECK (CONDITION);

Cú pháp cơ bản của lệnh ALTER TABLE để THÊM ràng buộc PRIMARY KEY cho một bảng là như sau:

ALTER TABLE ten_bang ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (cot1, cot2…);

Cú pháp cơ bản của lệnh ALTER TABLE để XÓA RÀNG BUỘC cho một bảng là như sau:

ALTER TABLE ten_bang DROP CONSTRAINT MyUniqueConstraint;

Nếu bạn đang sử dụng MySQL, thì code là:

ALTER TABLE ten_bang DROP INDEX MyUniqueConstraint;

Cú pháp cơ bản của lệnh ALTER TABLE để XÓA ràng buộc PRIMARY KEY cho một bảng là như sau:

ALTER TABLE ten_bang DROP CONSTRAINT MyPrimaryKey;

Nếu bạn đang sử dụng MySQL, thì code là:

ALTER TABLE ten_bang DROP PRIMARY KEY;

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3.0     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Chẳng hạn sau minh họa cách THÊM một cột mới vào một bảng đang tồn tại:

ALTER TABLE SINHVIEN ADD GIOITINH char(1);

Lúc này, bảng SINHVIEN đã bị biến đổi & sau đây là kết quả của lệnh SELECT:

+—-+———+—–+———–+——–+———+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI | GIOITINH |+—-+———+—–+———–+———+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       |NULL     ||  2 | Viet    |  19 | DTVT      | 3.0     |NULL     ||  3 | Thanh   |  18 | KTDN      |  4      |NULL     ||  4 | Nhan    |  19 | CK        |   4.5   |NULL     ||  5 | Huong   |  20 | TCNH      |   5     |NULL     |+—-+———+—–+———–+———+———+

Dưới đây là chẳng hạn để XÓA cột GIOITINH từ bảng đang tồn tại:

ALTER TABLE SINHVIEN DROP GIOITINH;

Lúc này, bảng SINHVIEN đã bị biến đổi & sau đây là kết quả của lệnh SELECT:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3.0     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Mô phỏn bảng

Có một tình huống khi bạn cần một bản sao thực sự của một bảng & các lệnh CREATE TABLE … SELECT … không phù phù hợp với mục đích của các bạn, bởi vì bản sao phải bao gồm cùng chỉ mục, cùng giá trị mặc định, & …

Nếu bạn đang sử dụng MySQL RDBMS, bạn có thể giải quyết tình huống này theo các bước sau:

  • Sử dụng lệnh SHOW CREATE TABLE để lấy một lệnh CREATE TABLE mà xác nhận kết cấu, chỉ mục & toàn bộ thông tin của bảng nguồn.
  • Sửa đổi lệnh để biến đổi tên bảng thành tên một bảng mô phỏng & thực thi lệnh. Theo phương pháp này, bạn sẽ có bảng mô phỏng thực sự.
  • (Tùy ý) Nếu bạn cần sao các bài viết bảng, bạn cảnh báo một lệnh INSERT INTO … SELECT.

Chẳng hạn

Bạn thử chẳng hạn sau để tạo một bảng mô phỏng cho VIETJACK_DB có kết cấu như sau:

Bước 1

Lấy toàn thể kết cấu của bảng:

SQLvàgt; SHOW CREATE TABLE VIETJACK_DB ₲;*************************** 1. row ***************************       Table: VIETJACK_DBCreate Table: CREATE TABLE `VIETJACK_DB` (  `vietjack_id` int(11) NOT NULL auto_increment,  `vietjack_title` varchar(100) NOT NULL default ”,  `vietjack_author` varchar(40) NOT NULL default ”,  `submission_date` date default NULL,  PRIMARY KEY  (`vietjack_id`),  UNIQUE KEY `AUTHOR_INDEX` (`vietjack_author`)) TYPE=MyISAM1 row in set (0.00 sec)

Bước 2

Thay tên bảng này & tạo bảng khác.

SQLvàgt; CREATE TABLE `CLONE_TBL` (  -> `vietjack_id` int(11) NOT NULL auto_increment,  -> `vietjack_title` varchar(100) NOT NULL default ”,  -> `vietjack_author` varchar(40) NOT NULL default ”,  -> `submission_date` date default NULL,  -> PRIMARY KEY  (`vietjack_id`),  -> UNIQUE KEY `AUTHOR_INDEX` (`vietjack_author`)-> ) TYPE=MyISAM;Query OK, 0 rows affected (1.80 sec)

Bước 3

Sau thời điểm thực thi bước 2, bạn sẽ mô phỏng một bảng trong Database. Nếu bạn mong muốn copy dữ liệu từ bảng cũ, thì bạn có thể thực hiện bằng việc sử dụng lệnh INSERT INTO … SELECT.

SQLvàgt; INSERT INTO CLONE_TBL (vietjack_id,    ->                        vietjack_title,    ->                        vietjack_author,    ->                        submission_date)    -> SELECT vietjack_id,vietjack_title,    ->        vietjack_author,submission_date,    -> FROM VIETJACK_DB;Query OK, 3 rows affected (0.07 sec)Records: 3  Duplicates: 0  Warnings: 0

Cuối cùng, bạn sẽ có bảng mô phỏng thực sự như bạn mong muốn có.

Bảng tạm

Có nhiều RDBMS trợ giúp Bảng tạm (Temporary Table). Bảng tạm (Temporary Table) là một chức năng tuyệt vời giúp bạn cất giữ & giải quyết các kết quả trung gian bằng việc sử dụng các khả năng như chọn, update, phối hợp giống như bạn có thể sử dụng với các bảng điển hình trong SQL Server.

Bảng tạm (Temporary Table) có thể rất hữu dụng trong một số trường hợp khi bạn mong muốn cất giữ dữ liệu tạm thời. Điều trọng yếu nhất bạn cần nên biết về Bảng tạm (Temporary Table) là chúng có thể bị xóa khi Client Session hiện giờ chấm dứt.

Bảng tạm (Temporary Table) là có sẵn từ MySQL phiên bản 3.23 trở đi. Nếu bạn sử dụng một phiên bản cũ hơn, bạn chẳng thể sử dụng chức năng này, nhưng bạn có thể sử dụng các Heap Table.

Như đã đề cập, bảng tạm sẽ chỉ tồn tại khi session là còn có. Nếu bạn chạy code trong PHP script, bảng tạm sẽ bị hủy auto khi script chấm dứt việc thực thi. Nếu bạn được connect với MySQL Database thông qua chương trình MySQL Client, thì bảng tạm sẽ tồn tại tới khi bạn đóng Client hoặc hủy bảng.

Chẳng hạn

Chẳng hạn sau minh họa cách dùng của bảng tạm.

mysqlvàgt; CREATE TEMPORARY TABLE DOANHTHU (    -> ten_san_pham VARCHAR(50) NOT NULL    -> , tong_doanh_thu DECIMAL(12,2) NOT NULL DEFAULT 0.00    -> , gia_trung_binh DECIMAL(7,2) NOT NULL DEFAULT 0.00    -> , tong_so_luong INT UNSIGNED NOT NULL DEFAULT 0);Query OK, 0 rows affected (0.00 sec) mysqlvàgt; INSERT INTO DOANHTHU    -> (ten_san_pham, tong_doanh_thu, gia_trung_binh, tong_so_luong)    -> VALUES    -> (‘iphone7’, 30, 15, 2); mysqlvàgt; SELECT * FROM DOANHTHU;+————–+————-+—————-+——————+| ten_san_pham | tong_doanh_thu | gia_trung_binh | tong_so_luong |+————–+————-+—————-+——————+| iphone7     |      30 |          15 |                2 |+————–+————-+—————-+——————+1 row in set (0.00 sec)

Khi bạn cảnh báo một lệnh SHOW TABLES, thì bảng tạm của các bạn sẽ không được liệt kê trong danh mục. Lúc này, nếu bạn đăng xuất khỏi MySQL session & sau đó bạn cảnh báo một lệnh SELECT, thì bạn sẽ không thấy dữ liệu nào có sẵn trong Database. Ngay khi đó, bảng tạm của các bạn cũng sẽ không tồn tại.

Xóa bảng tạm trong SQL

Theo mặc định, toàn bộ bảng tạm bị xóa bởi MySQL khi connect tới Database của các bạn chấm dứt. Nếu bạn vấn mong muốn xóa chúng, bạn cảnh báo một lệnh DROP TABLE.

Chẳng hạn sau minh họa cách xóa một bảng tạm trong SQL.

mysqlvàgt; CREATE TEMPORARY TABLE DOANHTHU (    -> ten_san_pham VARCHAR(50) NOT NULL    -> , tong_doanh_thu DECIMAL(12,2) NOT NULL DEFAULT 0.00    -> , gia_trung_binh DECIMAL(7,2) NOT NULL DEFAULT 0.00    -> , tong_so_luong INT UNSIGNED NOT NULL DEFAULT 0);Query OK, 0 rows affected (0.00 sec) mysqlvàgt; INSERT INTO DOANHTHU    -> (ten_san_pham, tong_doanh_thu, gia_trung_binh, tong_so_luong)    -> VALUES    -> (‘iphone7’, 30, 90, 2); mysqlvàgt; SELECT * FROM DOANHTHU;+————–+————-+—————-+——————+| ten_san_pham | tong_doanh_thu | gia_trung_binh | tong_so_luong |+————–+————-+—————-+——————+| iphone7     |      30 |          15 |                2 |+————–+————-+—————-+——————+1 row in set (0.00 sec)mysqlvàgt; DROP TABLE DOANHTHU;mysqlvàgt;  SELECT * FROM DOANHTHU;ERROR 1146: Table ‘VIETJACK.DOANHTHU’ doesn’t exist

Cập nhật bảng

[Update trong SQL]Truy vấn UPDATE trong SQL được sử dụng để sửa đổi các bản ghi đang tồn tại trong một bảng.

Bạn có thể sử dụng mệnh đề WHERE với truy vấn UPDATE để update các hàng đã được lựa chọn, còn nếu không, toàn bộ các hàng sẽ bị ảnh hưởng.

Cú pháp

Cú pháp cơ bản của truy vấn UPDATE với mệnh đề WHERE như sau:

UPDATE ten_bangSET cot1 = giatri1, cot2 = giatri2…., cotN = giatriNWHERE [dieu_kien];

Cú pháp cơ bản của truy vấn UPDATE với mệnh đề WHERE như sau:

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3.0     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Chẳng hạn sau sẽ update KHOAHOC cho một sinh viên có ID là 4.

SQLvàgt; UPDATE SINHVIENSET KHOAHOC = ‘TTCK’WHERE ID = 4;

Lúc này, bảng SINHVIEN sẽ có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3.0     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | TTCK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Nếu bạn mong muốn sửa đổi toàn bộ giá trị các cột là KHOAHOC & HOCPHI trong bảng này, bạn không cần sử dụng mệnh đề WHERE & khi đó truy vấn UPDATE sẽ như sau:

SQLvàgt; UPDATE SINHVIENSET KHOAHOC = ‘CNTT’, HOCPHI = 4;

Lúc này, bảng SINHVIEN sẽ có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | công nghệ thông tin      | 4    ||  3 | Thanh   |  18 | công nghệ thông tin      |  4      ||  4 | Nhan    |  19 | công nghệ thông tin        |   4   ||  5 | Huong   |  20 | công nghệ thông tin      |   4     |+—-+———+—–+———–+———+

Insert to sql

Lệnh INSERT INTO trong SQL được sử dụng để thêm các hàng dữ liệu mới vào một bảng trong Database.

Cú pháp

Có hai dạng cú pháp cho lệnh INSERT INTO trong SQL như sau:

INSERT INTO TABLE_TEN (cot1, cot2, cot3,…cotN)]  VALUES (giatri1, giatri2, giatri3,…giatriN);

Bước này, cot1, cot2,…cotN là tên các cột trong bảng mà bạn mong muốn chèn dữ liệu.

Bạn có thể không cần xác nhận tên các cột trong truy vấn SQL nếu bạn đang thêm các giá trị cho toàn bộ cot của bảng đó. Nhưng chúng ta nên bảo đảm thứ tự của các giá trị là giống như thứ tự các cột trong bảng. Cú pháp của lệnh INSERT INTO này như sau:

INSERT INTO TABLE_TEN VALUES (giatri1,giatri2,giatri3,…giatriN);

Chẳng hạn

Các lệnh dưới đây sẽ tạo 4 bản ghi trong bảng SINHVIEN:

INSERT INTO SINHVIEN (ID,TEN,TUOI,KHOAHOC,HOCPHI)VALUES (1, ‘Hoang’, 21, ‘CNTT’, 4.0 ); INSERT INTO SINHVIEN (ID,TEN,TUOI,KHOAHOC,HOCPHI)VALUES (2, ‘Viet’, 19, ‘DTVT’, 3.0 ); INSERT INTO SINHVIEN (ID,TEN,TUOI,KHOAHOC,HOCPHI)VALUES (3, ‘Thanh’, 18, ‘KTDN’, 4.0 ); INSERT INTO SINHVIEN (ID,TEN,TUOI,KHOAHOC,HOCPHI)VALUES (4, ‘Nhan’, 19, ‘CK’, 4.5 );

Bạn có thể tạo thêm một bản ghi trong bảng SINHVIEN bởi sử dụng cú pháp thứ hai như sau:

INSERT INTO SINHVIEN VALUES (5, ‘Huong’, 20, ‘TCNH’, 5.0 );

Toàn bộ lệnh trên sẽ tạo các bản ghi sau trong bảng SINHVIEN:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4.0       ||  2 | Viet    |  19 | DTVT      | 3.0     ||  3 | Thanh   |  18 | KTDN      |  4.0      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5.0     |+—-+———+—–+———–+———+

Chèn dữ liệu vào một bảng bởi sử dụng bảng khác

Bạn có thể chèn dữ liệu vào một bảng thông qua một lệnh SELECT bởi sử dụng bảng khác mà có một tập hợp các trường, là thiết yếu để chèn dữ liệu cho bảng trước nhất. Dưới đây là cú pháp:

INSERT INTO ten_bang_dau_tien [(cot1, cot2, … cotN)]    SELECT cot1, cot2, …cotN    FROM ten_bang_thu_hai   [WHERE dieu_kien];

Select sql

Lệnh SELECT trong SQL được sử dụng để lấy dữ liệu từ một bảng trong Database mà trả về dữ liệu ở dạng bảng dữ liệu kết quả. Những bảng dữ liệu kết quả này được gọi là các tập hợp kết quả.

Cú pháp

Cú pháp cơ bản của lệnh SELECT trong SQL như sau:

SELECT cot1, cot2, cotN FROM ten_bang;

Bước này, cot1, cot2, … là các trường của một bảng có các giá trị mà bạn mong muốn lấy. Nếu bạn mong muốn lấy toàn bộ các trường có sẵn trong bảng, bạn có thể sử dụng cú pháp sau.

SELECT * FROM ten_bang;

Chẳng hạn

Bạn xét bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Chẳng hạn sau sẽ lấy các trường ID, TEN, & HOCPHI của sinh viên có trong bảng đó.

SQLvàgt; SELECT ID, TEN, HOCPHI FROM SINHVIEN;

Chẳng hạn trên sẽ cho kết quả:

+—-+———-+———-+| ID | TEN     | HOCPHI   |+—-+———-+———-+|  1 | Hoang   |  4 ||  2 | Viet   |  3 ||  3 | Thanh  |  4 ||  4 | Nhan |  4.5 ||  5 | Huong   |  5 |+—-+———-+———-+

Nếu bạn mong muốn lấy toàn bộ các trường của bảng SINHVIEN, bạn sử dụng truy vấn sau:

SQLvàgt; SELECT * FROM SINHVIEN;

Chẳng hạn trên sẽ cho kết quả:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Mệnh đề ORDER BY trong SQL được sử dụng để xếp đặt dữ liệu theo thứ tự tăng dần hoặc theo thứ tự giảm dần, trên một hoặc nhiều cột. Một số Database xếp đặt kết quả truy vấn theo thứ tự tăng dần theo mặc định.

Cú pháp

Cú pháp cơ bản của mệnh đề ORDER BY trong SQL như sau:

SELECT danh_sach_cot FROM ten_bang [WHERE dieu_kien] [ORDER BY cot1, cot2, .. cotN] [ASC | DESC];

Bạn có thể sử dụng nhiều hơn một cột trong mệnh đề ORDER BY. Bảo đảm rằng, bất kể cột nào bạn đang sử dụng để xếp đặt, thì nó cần có trong danh_sach_cot.

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Chẳng hạn sau minh họa cách xếp đặt theo thứ tự tăng dần cho TEN & HOCPHI.

SQLvàgt; SELECT * FROM SINHVIEN     ORDER BY TEN, HOCPHI;

Chẳng hạn trên sẽ cho kết quả:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  5 | Huong   |  20 | TCNH      |   5     ||  4 | Nhan    |  19 | CK        |   4.5   ||  3 | Thanh   |  18 | KTDN      |  4      ||  2 | Viet    |  19 | DTVT      | 3     |+—-+———+—–+———–+———+

Chẳng hạn sau sẽ xếp đặt theo thứ tự giảm dần cho TEN:

SQLvàgt; SELECT * FROM SINHVIEN     ORDER BY TEN DESC;

Chẳng hạn trên sẽ cho kết quả:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|   2 | Viet    |  19 | DTVT      | 3     ||   3 | Thanh   |  18 | KTDN      |  4      || 4 | Nhan    |  19 | CK        |   4.5   || 5 | Huong   |  20 | TCNH      |   5     || 1 | Hoang   |  21 | công nghệ thông tin      | 4       |+—-+———+—–+———–+———+

Group by

Mệnh đề GROUP BY trong SQL được sử dụng kết phù hợp với lệnh SELECT để xếp đặt dữ liệu đồng nhất vào trong các nhóm.

Trong SQL, mệnh đề GROUP BY theo sau mệnh đề WHERE trong một lệnh SELECT & ở trước mệnh đề ORDER BY.

Cú pháp

Cú pháp cơ bản của Mệnh đề GROUP BY trong SQL như dưới đây. Mệnh đề GROUP BY phải theo sau các điều kiện trong mệnh đề WHERE & phải đứng trước mệnh đề ORDER BY nếu được sử dụng.

SELECT cot1, cot2FROM ten_bangWHERE [ dieu_kien ]GROUP BY cot1, cot2ORDER BY cot1, cot2

Chẳng hạn

Bạn theo dõi bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Nếu bạn mong muốn biết tổng số học phí của mỗi sinh viên, thì truy vấn GROUP BY sẽ như sau:

SQLvàgt; SELECT TEN, SUM(HOCPHI) FROM SINHVIEN     GROUP BY TEN;

Chẳng hạn trên sẽ cho kết quả:

+———-+————-+| TEN     | SUM(HOCPHI) |+———-+————-+| Hoang |     4 || Huong   |     3 || Nhan  |     4 || Thanh   |     4.5 || Viet    |     5 |+———-+————-+

Lúc này, tất cả chúng ta có bảng sau với bản sao các tên:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Hoang   |  20 | DTVT      | 3       ||  3 | Viet    |  19 | DTVT      | 3     ||  4 | Thanh   |  18 | KTDN      |  4      ||  5 | Nhan    |  19 | CK        |   4.5   ||  6 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Giờ đây, nếu bạn mong muốn biết tổng số học phí của mỗi sinh viên, thì truy vấn GROUP BY sẽ như sau:

SQLvàgt; SELECT TEN, SUM(HOCPHI) FROM SINHVIEN     GROUP BY TEN;

Chẳng hạn trên sẽ cho kết quả:

+———+————-+| TEN    | SUM(HOCPHI) |+———+————-+| Hoang |     7 || Huong   |     3 || Nhan  |     4 || Thanh   |     4.5 || Viet    |     5 |+———+————-+

Keyword DISTINCT trong SQL được sử dụng kết phù hợp với lệnh SELECT để loại toàn bộ các bản sao của bản ghi & chỉ lấy các bản ghi duy nhất.

Có thể có tình huống bạn có nhiều bản sao của bản ghi trong một bảng. Trong lúc lấy các bản ghi này, nó là hợp lý khi chỉ lấy bản ghi duy nhất thay vì lấy nhiều bản sao của bản ghi đó.

Cú pháp

Cú pháp cơ bản của keyword DISTINCT để loại bỏ các bản sao của bản ghi là như sau:

SELECT DISTINCT cot1, cot2,…..cotN FROM ten_bangWHERE [dieu_kien]

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Trước tiên, tất cả chúng ta xem cách truy vấn SELECT trả về bản sao của HOCPHI:

SQLvàgt; SELECT HOCPHI FROM SINHVIEN     ORDER BY HOCPHI;

Trong kết quả nhận được, HOCPHI 4 hiện ra 2 lần, mà là một bản sao bản ghi từ bảng ban đầu.

+———-+| HOCPHI   |+———-+|  4 ||  3 ||  4 ||  4.5 ||  5 |+———-+

Lúc này, sử dụng keyword DISTINCT với truy vấn SELECT trên & theo dõi kết quả:

SQLvàgt; SELECT DISTINCT HOCPHI FROM SINHVIEN     ORDER BY HOCPHI;

Trong kết quả nhận được, tất cả chúng ta sẽ thấy không có bất kỳ bản sao nào.

+———-+| HOCPHI   |+———-+|  4 ||  5 ||  4.5 ||  5 |+———-+

Mệnh đề ORDER BY trong SQL được sử dụng để xếp đặt dữ liệu theo thứ tự tăng dần hoặc giảm dần, trên một hoặc nhiều cột. Một số Database xếp đặt kết quả truy vấn theo thứ tự tăng dần theo mặc định.

Cú pháp

Cú pháp cơ bản của mệnh đề ORDER BY được sử dụng để xếp đặt dữ liệu theo thứ tự tăng dần hoặc giảm dần là như sau (ASC là xếp đặt theo thứ tự tăng dần & DESC là giảm dần):

SELECT danh_sach_cot FROM ten_bang [WHERE dieu_kien] [ORDER BY cot1, cot2, .. cotN] [ASC | DESC];

Bạn có thể sử dụng nhiều hơn một cột trong mệnh đề ORDER BY này. Bảo đảm rằng bất kể cột nào bạn đang sử dụng để xếp đặt, thì nó nên có trong danh_sach_cot.

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Chẳng hạn sau sẽ xếp đặt kết quả theo thứ tự tăng dần cho TEN & HOCPHI.

SQLvàgt; SELECT * FROM SINHVIEN     ORDER BY TEN, HOCPHI;

Chẳng hạn trên sẽ cho kết quả:

+—-+———-+—–+———–+———-+| ID | TEN     | TUOI | KHOAHOC   | HOCPHI   |+—-+———-+—–+———–+———-+|  1 | Hoang |  21 | công nghệ thông tin    |  4 ||  5 | Huong   |  20 | TCNH    |  5 ||  4 | Nhan  |  19 | CK      |  4.5 ||  3 | Thanh   |  18 | KTDN     |  4 ||  2 | Viet    |  19 | DTVT        |  3 |+—-+———-+—–+———–+———-+

Chẳng hạn dưới đây xếp đặt kết quả theo thứ tự giảm dần cho TEN:

SQLvàgt; SELECT * FROM SINHVIEN     ORDER BY TEN DESC;

Chẳng hạn trên sẽ cho kết quả:

+—-+———-+—–+———–+———-+| ID | TEN     | TUOI | KHOAHOC   | HOCPHI   |+—-+———-+—–+———–+———-+|  2 | Viet    |  19 | DTVT        |  3 ||  3 | Thanh   |  18 | KTDN     |  4 ||  4 | Nhan  |  19 | CK      |  4.5 ||  5 | Huong   |  20 | TCNH    |  5 ||  1 | Hoang |  21 | công nghệ thông tin    |  4 |+—-+———-+—–+———–+———-+

Để lấy các hàng với thứ tự ưu tiên riêng, truy vấn SELECT sẽ như sau:

SQLvàgt; SELECT * FROM SINHVIEN    ORDER BY (CASE KHOAHOC    WHEN ‘TCNH’    THEN 1    WHEN ‘KTDN’    THEN 2    WHEN ‘CNTT’    THEN 3    ELSE 100 END) ASC, KHOAHOC DESC;

Chẳng hạn trên sẽ cho kết quả:

+—-+———-+—–+———–+———-+| ID | TEN     | TUOI | KHOAHOC   | HOCPHI   |+—-+———-+—–+———–+———-+|  5 | Huong   |  20 | TCNH    |  5 ||  3 | Thanh   |  18 | KTDN     |  4 ||  1 | Hoang |  21 | công nghệ thông tin    |  4 ||  2 | Viet    |  19 | DTVT        |  3 ||  4 | Nhan  |  19 | CK      |  4.5 |+—-+———-+—–+———–+———-+

Trước tiên, sẽ xếp đặt sinh viên theo KHOAHOC theo thứ tự của riêng bạn, sau đó, các KHOAHOC còn sót lại sẽ được xếp đặt thứ tự tự nhiên. Các KHOAHOC còn sót lại này cũng sẽ được xếp đặt theo thứ tự chữ cái đảo ngược.

Where

Mệnh đề WHERE trong SQL được sử dụng để xác nhận một điều kiện trong lúc lấy dữ liệu từ bảng đơn hoặc nhiều bảng phối hợp.

Nếu điều kiện đã cho được đáp ứng, thì nó chỉ trả về các giá trị rõ ràng từ bảng đó. Bạn sẽ sử dụng mệnh đề WHERE để lọc các bản ghi & chỉ lấy các bản ghi thiết yếu.

Mệnh đề WHERE không những được sử dụng trong lệnh SELECT, mà nó còn được sử dụng trong các lệnh UPDATE, DELETE, …, sẽ được trình bày trong các chương kế tiếp.

Cú pháp

Cú pháp cơ bản của lệnh SELECT với mệnh đề WHERE trong SQL như sau:

SELECT cot1, cot2, cotN FROM ten_bangWHERE [dieu_kien]

Bạn có cơ thể định một điều kiện bởi sử dụng các toán tử so sánh hoặc toán tử logicnhư >, <, =, LIKE, NOT, …. Chẳng hạn sau sẽ giúp bạn am hiểu định nghĩa này.

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Chẳng hạn sau sẽ lấy các trường ID, TEN, HOCPHI từ bảng này với điều kiện là HOCPHI to hơn 4:

SQLvàgt; SELECT ID, TEN, HOCPHI FROM SINHVIENWHERE HOCPHI > 2000;

Chẳng hạn trên sẽ cho kết quả:

+—-+———-+———-+| ID | TEN     | HOCPHI   |+—-+———-+———-+|  4 | Nhan    |  4.5   ||  5 | Huong   |   5     |+—-+———-+———-+

Chẳng hạn sau sẽ lấy các trường ID, TEN, HOCPHI của một sinh viên có tên Nhan. Bước này, điều trọng yếu cần ghi nhớ là toàn bộ các chuỗi nên ở trong các dấu trích dẫn đơn (”), trong lúc các giá trị số không cần bất kỳ trích dẫn nào, như sau:

SQLvàgt; SELECT ID, TEN, HOCPHI FROM SINHVIENWHERE TEN = ‘Nhan’;

Chẳng hạn trên sẽ cho kết quả:

+—-+———-+———-+| ID | TEN     | HOCPHI   |+—-+———-+———-+|  4 | Nhan    |  4.5   |+—-+———-+———-+

AND OR

Các toán tử AND & OR trong SQL được sử dụng để phối hợp nhiều điều kiện để thu hẹp phạm vi dữ liệu trong một lệnh SQL. Hai loại toán tử này được gọi là toán tử liên hợp.

Các toán tử này phân phối một phương tiện để tạo nhiều sự so sánh với các toán tử khác nhau trong cùng một lệnh SQL.

Toán tử AND trong SQL

Toán tử AND trong SQL cho phép tồn tại nhiều điều kiện trong mệnh đề WHERE của một lệnh SQL.

Cú pháp

Cú pháp cơ bản của toán tử AND với mệnh đề WHERE như sau:

SELECT cot1, cot2, cotN FROM ten_bangWHERE [dieu_kien_1] AND [dieu_kien_2]…AND [dieu_kien_N];

Bạn có thể phối hợp Ռ điều kiện bởi sử dụng toán tử AND. Để một hành động, ví dụ như một truy vấn, được thực hiện bởi lệnh SQL, thì toàn bộ điều kiện riêng lẻ trong AND phải là TRUE.

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Chẳng hạn sau sẽ lấy các trường ID, TEN, HOCPHI từ bảng này với điều kiện là HOCPHI to hơn 4  TUOI bé hơn 20.

SQLvàgt; SELECT ID, TEN, HOCPHI FROM SINHVIENWHERE HOCPHI > 2000 AND TUOI < 25;

Chẳng hạn trên sẽ cho kết quả:

+—-+——-+———-+| ID | TEN  | HOCPHI   |+—-+——-+———-+|  4 | Nhan |  4.5 |+—-+——-+———-+

Toán tử OR trong SQL

Toán tử OR trong SQL được sử dụng để phối hợp nhiều điều kiện trong mệnh đề WHERE của một lệnh SQL.

Cú pháp

Cú pháp của toán tử OR với mệnh đề WHERE như sau:

SELECT cot1, cot2, cotN FROM ten_bangWHERE [dieu_kien_1] OR [dieu_kien_2]…OR [dieu_kien_N]

Bạn có thể phối hợp Ռ điều kiện bởi sử dụng toán tử OR. Để một hành động, ví dụ như một truy vấn, được thực hiện bởi lệnh SQL, thì CHỈ MỘT trong toàn bộ điều kiện riêng lẻ trong OR phải là TRUE.

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Chẳng hạn sau sẽ lấy các trường ID, TEN, HOCPHI từ bảng này với điều kiện là HOCPHI to hơn 4 HOẶC TUOI bé hơn 20.

Xem Thêm  9. Lớp - Tài liệu Python 3.10.4 - lớp học python làm thế nào để

SQLvàgt; SELECT ID, TEN, HOCPHI FROM SINHVIENWHERE HOCPHI > 2000 OR TUOI < 25;

Chẳng hạn trên sẽ cho kết quả:

+—-+———-+———-+| ID | TEN     | HOCPHI   |+—-+———-+———-+|  4 | Nhan |  4.5 ||  5 | Huong    | 5 |+—-+———-+———-+

WITH

Chương này tất cả chúng ta sẽ khám phá về mệnh đề WITH & mệnh đề AS trong SQL. Mệnh đề WITH được sử dụng để phân phối một khối truy vấn con mà có thể được tham chiếu trong một số địa điểm bên trong truy vấn chính. Nó được giới thiệu bởi Oracle.

Dưới đây là cú pháp cho mệnh đề WITH trong SQL.

WITH ten_alias AS (lenh_truy_van_con)  SELECT danh_sach_cot FROM  ten_alias [ten_bang]  [WHERE dieu_kien_join]

Khi bạn sử dụng nhiều truy vấn con alias, cú pháp sẽ như sau:

WITH ten_alias_A  AS (lenh_truy_van_con)   ten_alias_B AS (lenh_truy_van_con_tu_ten_alias_A  HOAC lenh_truy_van_con)  SELECT danh_sach_cot  FROM  ten_alias_A , ten_alias_B , [cac_ten_bang]  [WHERE  dieu_kien_join]

SELECT AS trong SQL

AS trong SQL được sử dụng để gán tạm thời một tên mới cho một cột trong bảng. Việc này giúp trình diễn các kết quả truy vấn & cho phép lập trình viên gán nhãn cho các kết quả một cách phù hợp, mà không thay tên các cột trong bảng trọn đời. Dưới đây là chẳng hạn:

Giả sử tất cả chúng ta có bảng SINHVIEN như sau:

+———+—–+———–+——–+|  TEN    | TUOI|  KHOAHOC  | HOCPHI |++———+—–+———–+———+| Hoang   |  21 | công nghệ thông tin      | 4       || Viet    |  19 | DTVT      | 3     || Thanh   |  18 | KTDN      |  4      || Nhan    |  19 | CK        |   4.5   || Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Vận dụng cú pháp SELECT AS cho bảng trên, ví dụ như sau:

SELECT TEN AS “NAME”    TUOI As “AGE”,    KHOAHOC,    HOCPHI,    FROM SINHVIEN;

Kết quả của truy vấn trên sẽ là bảng SINHVIEN như sau:

+———+—–+———–+——–+|  NAME    | AGE|  KHOAHOC  | HOCPHI |++———+—–+———–+———+| Hoang   |  21 | công nghệ thông tin      | 4       || Viet    |  19 | DTVT      | 3     || Thanh   |  18 | KTDN      |  4      || Nhan    |  19 | CK        |   4.5   || Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Chú giải: SQL AS là giống như SQL ALIAS.

Mệnh đề LIKE trong SQL được sử dụng để so sánh một giá trị với các giá trị tương đương bởi sử dụng các toán tử wildcard. Có hai wildcard được sử dụng kết phù hợp với toán tử LIKE là:

  • Ký hiệu % (%)
  • Dấu gạch dưới (_)

Ký hiệu % trình diễn 0, 1 hoặc nhiều ký tự. Ký tự dấu gạch dưới trình diễn một số hoặc một ký tự đơn.

Cú pháp

Cú pháp cơ bản của các toán tử % & _ trong SQL là:

SELECT FROM ten_bang

WHERE column LIKE ‘XXXX%’

 

hoac

 

SELECT FROM ten_bang

WHERE column LIKE ‘%XXXX%’

 

hoac

 

SELECT FROM ten_bang

WHERE column LIKE ‘XXXX_’

 

hoac

 

SELECT FROM ten_bang

WHERE column LIKE ‘_XXXX’

 

hoac

 

SELECT FROM ten_bang

WHERE column LIKE ‘_XXXX_’

Bạn có thể phối hợp Ռ điều kiện bởi sử dụng toán tử AND hoặc OR. Bước này, XXX có thể là bất kỳ giá trị số hoặc chuỗi nào.

Chẳng hạn

Bảng dưới liệt kê một số chẳng hạn minh họa một phần mệnh đề WHERE có các mệnh đề LIKE khác nhau với các toán tử ‘%’ & ‘_’.

Lệnh
Diễn tả

WHERE HOCPHI LIKE ‘4%’
Tìm kiếm bất kỳ giá trị nào khởi đầu với 4

WHERE HOCPHI LIKE ‘%4%’
Tìm kiếm bất kỳ giá trị nào mà có 4 ở bất kỳ địa điểm nào

WHERE HOCPHI LIKE ‘_00%’
Tìm kiếm bất kỳ giá trị nào có 00 trong địa điểm thứ hai & ba

WHERE HOCPHI LIKE ‘4_%_%’
Tìm kiếm bất kỳ giá trị nào mà khởi đầu với 4 & có độ dài ít nhất là 3 ký tự

WHERE HOCPHI LIKE ‘%4’
Tìm kiếm bất kỳ giá trị nào mà chấm dứt với 4

WHERE HOCPHI LIKE ‘_4%0’
Tìm kiếm bất kỳ giá trị nào mà có 2 trong địa điểm thứ hai & chấm dứt với 3

WHERE HOCPHI LIKE ‘4___0’
Tìm kiếm bất kỳ giá trị nào có 5 chữ số khởi đầu với 4 & chấm dứt với 0

Sau đây là một chẳng hạn thực sự, bạn theo dõi bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+

| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |

+—-+———+—–+———–+———+

|  1 | Hoang   |  21 | công nghệ thông tin      | 4       |

|  2 | Viet    |  19 | DTVT      | 3     |

|  3 | Thanh   |  18 | KTDN      |  4      |

|  4 | Nhan    |  19 | CK        |   4.5   |

|  5 | Huong   |  20 | TCNH      |   5     |

+—-+———+—–+———–+———+

Chẳng hạn sau sẽ hiển thị toàn bộ bản ghi với điều kiện HOCPHI khởi đầu với ‘4’.

SQLvàgt; SELECT * FROM SINHVIEN

WHERE HOCPHI LIKE ‘4%’;

Chẳng hạn trên sẽ cho kết quả:

+—-+———+—–+———–+——–+

| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |

+—-+———+—–+———–+———+

|  1 | Hoang   |  21 | công nghệ thông tin      | 4       |

|  3 | Thanh   |  18 | KTDN      |  4      |

|  4 | Nhan    |  19 | CK        |   4.5   |

+—-+———-+—–+———–+———-+

Mệnh đề TOP được sử dụng để lấy dữ liệu của TOP Ռ số hoặc Ҳ % bản ghi từ một bảng.

Chú giải: Toàn bộ Database không trợ giúp mệnh đề TOP. Chẳng hạn, MySQL trợ giúp mệnh đề LIMIT để lấy số bản ghi đã hạn chế & Oracle sử dụng ROWNUM để thực hiện cùng thao tác này.

Cú pháp

Cú pháp cơ bản của mệnh đề TOP với lệnh SELECT như sau:

SELECT TOP number|percent ten_cotFROM ten_bangWHERE [dieu_kien]

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3     ||  3 | Thanh   |  18 | KTDN      |  4      ||  4 | Nhan    |  19 | CK        |   4.5   ||  5 | Huong   |  20 | TCNH      |   5     |+—-+———+—–+———–+———+

Chẳng hạn sau trên SQL Server, sẽ lấy 2 bản ghi trước nhất từ bảng này:

SQLvàgt; SELECT TOP 2 * FROM SINHVIEN;

Chẳng hạn trên sẽ cho kết quả:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3     |+—-+———+—–+———–+———+

Nếu bạn đang sử dụng MySQL Server, thì đây là một chẳng hạn tương tự:

SQLvàgt; SELECT * FROM SINHVIENLIMIT 2;

Chẳng hạn trên sẽ cho kết quả:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3     |+—-+———+—–+———–+———+

Nếu bạn đang sử dụng Oracle Server, thì đây là một chẳng hạn tương tự:

SQLvàgt; SELECT * FROM SINHVIENWHERE ROWNUM <= 2;

Chẳng hạn trên sẽ cho kết quả:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4       ||  2 | Viet    |  19 | DTVT      | 3     |+—-+———+—–+———–+———+

Mệnh đề/Toán tử UNION trong SQL được sử dụng để phối hợp kết quả của hai hoặc nhiều lệnh SELECT mà không trả về bất kể bản sao nào của bản ghi.

Để sử dụng UNION, mỗi lệnh SELECT cần có cùng số cột đã chọn, cùng số biểu thức của các cột, cùng kiểu dữ liệu, & chúng có cùng thứ tự, nhưng chúng không cần có cùng độ dài.

Cú pháp

Cú pháp cơ bản của mệnh đề UNION trong SQL như sau:

SELECT cot1 [, cot2 ]

FROM bang1 [, bang2 ]

[WHERE dieu_kien]

 

UNION

 

SELECT cot1 [, cot2 ]

FROM bang1 [, bang2 ]

[WHERE dieu_kien]

Tại đây, dieu_kien đã cho có thể là bất kỳ biểu thức nào dựa trên yêu cầu của các bạn.

Chẳng hạn

Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+

| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |

+—-+———+—–+———–+———+

|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       |

|  2 | Viet    |  19 | DTVT      | 3000000     |

|  3 | Thanh   |  18 | KTDN      |  4000000      |

|  4 | Nhan    |  19 | CK        |   4500000   |

|  5 | Huong   |  20 | TCNH      |   5000000     |

+—-+———+—–+———–+———+

Bảng MUONSACH có các bản ghi sau:

+—–+———————+————-+——–+

|STT  | NGAY                | SINHVIEN_ID | SOTIEN |

+—–+———————+————-+——–+

| 102 | 2009-10-08 00:00:00 |           3 |   320 |

| 100 | 2009-10-08 00:00:00 |           3 |   250 |

| 101 | 2009-11-20 00:00:00 |           2 |   280 |

| 103 | 2008-05-20 00:00:00 |           4 |   290 |

+—–+———————+————-+——–+

Lúc này, phối hợp hai bảng này trong lệnh SELECT như sau:

SQLvàgt; SELECT  ID, TEN, SOTIEN, NGAY

FROM SINHVIEN

LEFT JOIN MUONSACH

ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID

UNION

SELECT  ID, TEN, SOTIEN, NGAY

FROM SINHVIEN

RIGHT JOIN MUONSACH

ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID;

Chẳng hạn trên sẽ cho kết quả:

+——+———-+——–+———————+

| ID   | TEN     | SOTIEN | NGAY                |

+——+———-+——–+———————+

|    1 | Hoang   |   NULL | NULL                |

|    2 | Viet   |   280 | 2009-11-20 00:00:00 |

|    3 | Thanh  |   320 | 2009-10-08 00:00:00 |

|    3 | Thanh  |   250 | 2009-10-08 00:00:00 |

|    4 | Nhan |   290 | 2008-05-20 00:00:00 |

|    5 | Huong   |   NULL | NULL                |

+——+———-+——–+———————+

Mệnh đề UNION ALL trong SQL

Toán tử UNION ALL được sử dụng để phối hợp nhiều kết quả của hai lệnh SELECT bao gồm cả các bản sao của các hàng.

Các qui tắc ứng dụng cho UNION cũng ứng dụng cho toán tử UNION ALL.

Cú pháp

Cú pháp cơ bản của UNION ALL là như sau:

SELECT cot1 [, cot2 ]

FROM bang1 [, bang2 ]

[WHERE dieu_kien]

 

UNION ALL

 

SELECT cot1 [, cot2 ]

FROM bang1 [, bang2 ]

[WHERE dieu_kien]

Bước này, dieu_kien đã cho có thể là bất kỳ biểu thức đã phân phối nào dựa trên yêu cầu của các bạn.

Chẳng hạn

Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+

| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |

+—-+———+—–+———–+———+

|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       |

|  2 | Viet    |  19 | DTVT      | 3000000     |

|  3 | Thanh   |  18 | KTDN      |  4000000      |

|  4 | Nhan    |  19 | CK        |   4500000   |

|  5 | Huong   |  20 | TCNH      |   5000000     |

+—-+———+—–+———–+———+

Bảng MUONSACH có các bản ghi sau:

+—–+———————+————-+——–+

|STT  | NGAY                | SINHVIEN_ID | SOTIEN |

+—–+———————+————-+——–+

| 102 | 2009-10-08 00:00:00 |           3 |   320 |

| 100 | 2009-10-08 00:00:00 |           3 |   250 |

| 101 | 2009-11-20 00:00:00 |           2 |   280 |

| 103 | 2008-05-20 00:00:00 |           4 |   290 |

+—–+———————+————-+——–+

Lúc này, phối hợp hai bảng trên trong lệnh SELECT như sau:

SQLvàgt; SELECT  ID, TEN, SOTIEN, NGAY

FROM SINHVIEN

LEFT JOIN MUONSACH

ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID

UNION ALL

SELECT  ID, TEN, SOTIEN, NGAY

FROM SINHVIEN

RIGHT JOIN MUONSACH

ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID;

Chẳng hạn trên sẽ cho kết quả:

+——+———-+——–+———————+

| ID   | TEN     | SOTIEN | NGAY                |

+——+———-+——–+———————+

|    1 | Hoang   |   NULL | NULL                |

|    2 | Viet   |   280 | 2009-11-20 00:00:00 |

|    3 | Thanh  |   320 | 2009-10-08 00:00:00 |

|    3 | Thanh  |   250 | 2009-10-08 00:00:00 |

|    4 | Nhan |   290 | 2008-05-20 00:00:00 |

|    5 | Huong   |   NULL | NULL                |

|    3 | Thanh  |   320 | 2009-10-08 00:00:00 |

|    3 | Thanh  |   250 | 2009-10-08 00:00:00 |

|    2 | Viet   |   280 | 2009-11-20 00:00:00 |

|    4 | Nhan |   290 | 2008-05-20 00:00:00 |

+——+———-+——–+———————+

không chỉ thế, có hai mệnh đề khác (hoặc toán tử) mà khá cũng giống như mệnh đề UNION, bạn truy cập backlink để khám phá chúng:

  • Mệnh đề INTERSECT trong SQL: được sử dụng để phối hợp hai lệnh SELECT, nhưng trả về các hàng chỉ từ lệnh SELECT trước nhất mà là đồng nhất với một hàn trong lệnh SELECT thứ hai.
  • Mệnh đề EXCEPT trong SQL: phối hợp hai lệnh SELECT & trả về các hàng từ lệnh SELECT trước nhất mà không được trả về bởi lệnh SELECT thứ hai.
  • Giá trịNULL trong SQL là định nghĩa được sử dụng để trình diễn một giá trị bị khuyết thiếu. Một giá trị NULL trong một bảng là một giá trị trong một trường & bị bỏ trống.
  • Một trường với một giá trị NULL là một trường không có giá trị nào. Nó là thực sự trọng yếu để biết được một giá trị NULL là khác một giá trị 0 (zero value) hoặc một trường mà chứa các dấu cách.

·                   Cú pháp

  • Cú pháp cơ bản củaNULL trong lúc tạo một bảng là:
  • SQLvàgt; CREATE TABLE SINHVIEN(   ID   INT              NOT NULL,            TEN VARCHAR (20)     NOT NULL,            TUOI  INT              NOT NULL,            KHOAHOC  CHAR (25),            HOCPHI   DECIMAL (18,2),                   PRIMARY KEY (ID)         );
  • Bước này, ràng buộcNOT NULL xác nhận rằng cột nên luôn luôn đồng ý một giá trị tường minh của kiểu dữ liệu đã cho. Có hai cột mà tất cả chúng ta đã không sử dụng NOT NULL, nghĩa là những cột này có thể là NULL.
  • Một trường với một giá trị NULL là đã bị bỏ trống trong lúc tạo bản ghi.

·                   Chẳng hạn

  • Giá trị NULL có thể tạo các vấn đề trong lúc chọn lọc dữ liệu, ngoài ra, bởi vì khi so sánh với một giá trị không biết với bất kỳ giá trị nào khác, kết quả là luôn luôn chưa biết trước & không được bao trong các kết quả cuối cùng.
  • Bạn phải sử dụng các toán tửIS NULL hoặc IS NOT NULL để kiểm soát một giá trị NULL.
  • Xét bảng SINHVIEN có các bản ghi sau:
  • +—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |         +—-+———+—–+———–+———+         |  1|Hoang   |  21| công nghệ thông tin      |4       |         |  2|Viet    |  19| DTVT      |3     |         |  3|Thanh   |  18| KTDN      |  4      |         |  4|Nhan    |  19| CK        |      |         |  5|Huong   |  20| TCNH      |        |         +—-+———+—–+———–+———+
  • Sau đây là cách dùng của toán tửIS NOT NULL trong SQL:
  • SQLvàgt; SELECT ID, TEN, TUOI, KHOAHOC, HOCPHI              FROM SINHVIEN              WHERE HOCPHI IS NOT NULL;
  • Chẳng hạn trên sẽ cho kết quả:
  • +—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |         +—-+———+—–+———–+———+         |  1|Hoang   |  21| công nghệ thông tin      |4       |         |  2|Viet    |  19| DTVT      |3     |         |  3|Thanh   |  18| KTDN      |  4      |         +—-+———-+—–+———–+———-+
  • Sau đây là cách dùng của toán tửIS NULL trong SQL:
  • SQLvàgt; SELECT ID, TEN, TUOI, KHOAHOC, HOCPHI              FROM SINHVIEN              WHERE HOCPHI IS NULL;
  • Chẳng hạn trên sẽ cho kết quả:
  • +—-+———-+—–+———–+———-+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |         +—-+———-+—–+———–+———-+         |  4|Nhan    |  19| CK        |      |         |  5|Huong   |  20| TCNH      |        |         +—-+———-+—–+———–+———-+
  • Bạn có thể biến đổi tên tạm thời cho một bảng hoặc một cột bởi phân phối một tên khác, được biết tới như là alias (bí danh).
  • Sự sử dụng của Table alias (bí danh bảng) nghĩa là thay tên một bảng trong một lệnh SQL rõ ràng. Việc thay tên đó là sự biến đổi tạm thời & tên bảng thực sự không bao giờ thay đổi trong Database.
  • Column alias (bí danh cột) được sử dụng để thay tên tạm thời cho một cột trong bảng để thỏa mãn mục đích của một truy vấn SQL rõ ràng.

·                   Cú pháp

  • Cú pháp củaTable alias (bí danh bảng) là như sau:
  • SELECT cot1, cot2….FROM ten_bang AS ten_alias         WHERE [dieu_kien];
  • Cú pháp củaColumn alias (bí danh cột) là như sau:
  • SELECT ten_cot AS ten_aliasFROM ten_bang         WHERE [dieu_kien];

·                   Chẳng hạn

  • Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:
  • +—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |         +—-+———+—–+———–+———+         |  1|Hoang   |  21| công nghệ thông tin      |4000000       |         |  2|Viet    |  19| DTVT      |3000000     |         |  3|Thanh   |  18| KTDN      |  4000000      |         |  4|Nhan    |  19| CK        |   4500000   |         |  5|Huong   |  20| TCNH      |   5000000     |         +—-+———+—–+———–+———+
  • Bảng MUONSACH có các bản ghi sau:
  • +—–+———————+————-+——–+|STT  | NGAY                | SINHVIEN_ID | SOTIEN |         +—–+———————+————-+——–+         |102|2009-10-0800:00:00|           3|   320|         |100|2009-10-0800:00:00|           3|   250|         |101|2009-11-2000:00:00|           2|   280|         |103|2008-05-2000:00:00|           4|   290|         +—–+———————+————-+——–+
  • Đây là cách dùng củaTable alias (bí danh bảng) trong SQL:
  • SQLvàgt; SELECT Ş.ID, Ş.TEN, Ş.TUOI, ʍ.SOTIEN         FROM SINHVIEN AS Ş, MUONSACH AS ʍ                 WHERE  Ş.ID = ʍ.SINHVIEN_ID;
  • Chẳng hạn trên sẽ cho kết quả:
  • +—-+———-+—–+——–+| ID | TEN     | TUOI | SOTIEN |         +—-+———-+—–+——–+         |  3|Thanh  |  18|   320|         |  3|Thanh  |  18|   250|         |  2|Viet   |  19|   280|         |  4|Nhan|  19|   290|         +—-+———-+—–+——–+
  • Sau đây là cách dùng củaColumn alias (bí danh cột) trong SQL:
  • SQLvàgt; SELECT ID AS SINHVIEN_ID, TEN AS SINHVIEN_TEN              FROM SINHVIEN              WHERE HOCPHI IS NOT NULL;
  • Chẳng hạn trên sẽ cho kết quả:
  • +————-+—————+| SINHVIEN_ID | SINHVIEN_TEN |         +————-+—————+         |           1|Hoang        |         |           2|Viet        |         |           3|Thanh       |         |           4|Nhan      |         |           5|Huong        |         +————-+—————+

Chỉ mục (Index) là bảng tra cứu đặc biệt mà Database Search Engine có thể sử dụng để tăng nhanh thời gian & năng suất craw dữ liệu. Hiểu dễ dàng, một chỉ mục là một con trỏ tới dữ liệu trong một bảng. Một chỉ mục trong một Database là cũng giống như một chỉ mục trong Danh mục của quyển sách.

Chẳng hạn, nếu bạn mong muốn tham chiếu toàn bộ các trang trong một quyển sách về một đề tài nào đó, trước nhất bạn nghĩ ngay đến danh mục của nó, mà liệt kê toàn bộ các chương, đề tài theo thứ tự & sau đó được tham chiếu tới một hoặc nhiều trang rõ ràng.

Một chỉ mục giúp tăng tốc các truy vấn SELECT & các mệnh đề WHERE, nhưng nó làm chậm việc dữ liệu nhập vào, với các lệnh UPDATE & INSERT. Các chỉ mục có thể được tạo hoặc xóa mà không tác động tới dữ liệu.

Tạo một chỉ mục bởi sử dụng lệnh CREATE INDEX, mà cho phép bạn đặt tên cho chỉ mục, xác nhận bảng & cột hoặc các cột nào để lập chỉ mục, & để hướng dẫn chỉ mục là theo thứ tự tăng dần hoặc giảm dần.

Các chỉ mục cũng có thể là duy nhất, cũng giống như ràng buộc UNIQUE, trong đó chỉ mục ngăn ngừa các bản sao của các bản ghi trong cột hoặc việc tổ hợp của các cột có chỉ mục.

Lệnh CREATE INDEX trong SQL

Cú pháp cơ bản của lệnh CREATE INDEX trong SQL là như sau:

CREATE INDEX ten_chi_muc ON ten_bang;

Single-Column Index trong SQL

Chỉ mục cho một cột đơn là một chỉ mục được tạo dựa vào chỉ một cột trong bảng. Cú pháp cơ bản là:

CREATE INDEX ten_chi_mucON ten_bang (ten_cot);

Unique index trong SQL

Unique index được sử dụng không những để tăng năng suất, mà còn cho mục đích chu toàn dữ liệu. Một Unique index không cho phép bất kỳ bản sao giá trị nào được chèn vào trong bảng. Cú pháp cơ bản là:

CREATE UNIQUE INDEX ten_chi_mucon ten_bang (ten_cot);

Composite Index trong SQL

Composite Index là một chỉ mục cho hai hoặc nhiều cột trong một bảng. Cú pháp cơ bản của nó như sau:

CREATE INDEX ten_chi_mucon ten_bang (cot1, cot2);

Việc tạo một Single-column index hoặc một Composite index tùy theo vào sự xem xét của các bạn về các cột bạn có thể sử dụng thường xuyên trong mệnh đề WHERE của một truy vấn như là các điều kiện lọc.

Nếu chỉ có một cột được sử dụng, thì lựa chọn tốt đặc biệt là Single-column index. Nếu có hai hoặc nhiều cột được sử dụng thường xuyên trong mệnh đề WHERE như là các bộ lọc, thì dạng chỉ mục Composite index là lựa chọn tối ưu.

Implicit Index trong SQL

Implicit Index (có thể hiểu là chỉ mục ngầm định) là chỉ mục mà được tạo auto bởi Database Server khi một đối tượng được tạo. Các chỉ mục được tạo auto cho các ràng buộc Primary key & các ràng buộc Unique.

Lệnh DROP INDEX trong SQL

Một chỉ mục có thể bị xóa bởi sử dụng lệnh DROP INDEX trong SQL. Chúng ta nên thận trọng trong lúc xóa một chỉ mục, bởi vì khi đó năng suất có thể chậm hơn hoặc không được cải tổ.

Cú pháp cơ bản của lệnh DROP INDEX là như sau:

DROP INDEX ten_chi_muc;

Bạn có thể khám phá về Ràng buộc INDEX trong SQL để theo dõi các chẳng hạn về chỉ mục.

Lúc nào nên tránh sử dụng chỉ mục trong SQL?

Mặc dầu các chỉ mục có mục đích để nâng cao năng suất của Database, nhưng thỉnh thoảng, chúng ta nên tránh dùng chúng. Dưới đây là một số điểm bạn cần cân nhắc để quyết định có nên sử dụng chỉ mục hay không:

  • Các chỉ mục không nên được sử dụng trong các bảng nhỏ.
  • Bảng mà thường xuyên có các hoạt động cập nhật, insert.
  • Các chỉ mục không nên được sử dụng trên các cột mà chứa một sll giá trị NULL.
  • Không nên dùng chỉ mục trên các cột mà thường xuyên bị sửa đổi.

Một lượt xem là không gì khác ngoài môt lệnh SQL mà được cất giữ trong Database với một tên link. Một lượt xem thực sự là một thành phần của một bảng trong form của một truy vấn SQL đã được khái niệm trước.

Một lượt xem có thể chứa toàn bộ các hàng của một bảng hoặc các hàng đã được chọn từ một bảng. Một lượt xem có thể được tạo từ một hoặc nhiều bảng, lệ thuộc vào truy vấn SQL đã viết để tạo một lượt xem.

Lượt xem, về bản chất giống các Virtual Table (bảng ảo), cho phép người dùng thực hiện:

  • Cấu tạo dữ liệu theo cách mà người dùng tìm ra tính tự nhiên hoặc tính trực quan.
  • Hạn chế truy cập tới dữ liệu để mà một người dùng có thể thấy & (thỉnh thoảng) sửa đổi một cách đúng đắn nhưng gì họ cần.
  • Kết luận dữ liệu từ các bảng phong phú để tạo các bản giải trình.

Tạo Lượt xem trong SQL

Lượt xem được tạo bởi sử dụng lệnh CREATE VIEW. Các lượt xem có thể được tạo từ một bảng đơn, nhiều bảng hoặc từ lượt xem khác.

Để tạo một lượt xem, người dùng phải được trao quyền hệ thống phù hợp theo trình triển khai rõ ràng.

Cú pháp cơ bản của lệnh CREATE VIEW trong SQL là như sau:

CREATE VIEW ten_view ASSELECT cot1, cot2…..FROM ten_bangWHERE [dieu_kien];

Bạn có thể bao nhiều bảng trong lệnh SELECT theo cách cũng giống như bạn sử dụng chúng trong truy vấn SELECT thông thường.

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       ||  2 | Viet    |  19 | DTVT      | 3000000     ||  3 | Thanh   |  18 | KTDN      |  4000000      ||  4 | Nhan    |  19 | CK        |   4500000   ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———+—–+———–+———+

Lúc này là một chẳng hạn để tạo một lượt xem từ bảng này. Lượt xem này sẽ được sử dụng để có TEN & TUOI của sinh viên:

SQL > CREATE VIEW SINHVIEN_VIEW ASSELECT TEN, TUOIFROM  SINHVIEN;

Lúc này, bạn có thể truy vấn SINHVIEN_VIEW theo cách tương đương bạn truy vấn một bảng thực sự. Sau đây là chẳng hạn:

SQL > SELECT * FROM SINHVIEN_VIEW;

Chẳng hạn trên sẽ cho kết quả:

+———-+—–+| TEN     | TUOI |+———-+—–+| Hoang   |  21 || Viet   |  19 || Thanh  |  18 || Nhan |  19 || Huong   |  20 |+———-+—–+

WITH CHECK OPTION trong SQL

WITH CHECK OPTION là một tùy chọn của lệnh CREATE VIEW. Mục đích của WITH CHECK OPTION là để đảm bảo rằng toàn bộ UPDATE & INSERT đáp ứng các điều kiện trong khái niệm lượt xem.

Nếu chúng không đáp ứng các điều kiện, thì UPDATE & INSERT trả về một lỗi.

Chẳng hạn sau tạo cùng một lượt xem là SINHVIEN_VIEW với WITH CHECK OPTION.

CREATE VIEW SINHVIEN_VIEW ASSELECT TEN, TUOIFROM  SINHVIENWHERE TUOI IS NOT NULLWITH CHECK OPTION;

Trong trường hợp này, WITH CHECK OPTION nên khước từ bất kỳ giá trị NULL nào trong cột TUOI của lượt xem, bởi vì lượt xem được khái niệm bởi dữ liệu mà không có giá trị NULL trong cột TUOI.

Update một Lượt xem trong SQL

Một lượt xem có thể được update dưới các điều kiện rõ ràng sau:

  • Mệnh đề SELECT chẳng thể chứa keyword DISTINCT.
  • Mệnh đề SELECT chẳng thể chứa các hàm tổng.
  • Mệnh đề SELECT chẳng thể chứa các hàm tập hợp.
  • Mệnh đề SELECT chẳng thể chứa các toán tử tập hợp.
  • Mệnh đề SELECT chẳng thể chứa một mệnh đề ORDER BY.
  • Mệnh đề FROM chẳng thể chứa nhiều bảng.
  • Mệnh đề WHERE chẳng thể chứa các truy vấn phụ.
  • Truy vấn chẳng thể chứa GROUP BY hoặc HAVING.
  • Các cột được ước lượng chẳng thể bị update.
  • Toàn bộ các cột NOT NULL từ bảng ban đầu phải được bao trong lượt xem để cho truy vấn INSERT vận hành.

Vì vậy, nếu một lượt xem đáp ứng toàn bộ các qui tắc trên, thì bạn có thể update một lượt xem. Sau đây là chẳng hạn update TUOI của Hoang.

SQL > UPDATE SINHVIEN_VIEW      SET TUOI = 20      WHERE TEN=’Hoang’;

Cuối cùng, bảng SINHVIEN ban đầu được update & theo đó lượt xem được update. Lúc này, thử truy vấn bảng ban đầu, & lệnh SELECT sẽ cho kết quả:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  20 | công nghệ thông tin      | 4000000       ||  2 | Viet    |  19 | DTVT      | 3000000     ||  3 | Thanh   |  18 | KTDN      |  4000000      ||  4 | Nhan    |  19 | CK        |   4500000   ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———+—–+———–+———+

Chèn các hàng vào trong một Lượt xem trong SQL

Các hàng dữ liệu có thể được chèn vào trong một lượt xem. Các qui tắc ứng dụng cho lệnh UPDATE cũng sẽ được ứng dụng cho lệnh INSERT trong SQL.

Bước này, tất cả chúng ta chẳng thể chèn các hàng vào trong SINHVIEN_VIEW bởi vì tất cả chúng ta không được bao gồm toàn bộ cột NOT NULL trong lượt xem này. Tất cả chúng ta có thể chèn các hàng vào trong một lượt xem theo cách tương đương khi bạn chèn chúng vào trong một bảng.

Xóa hàng từ một Lượt xem trong SQL

Các hàng dữ liệu có thể bị xóa từ một lượt xem. Các qui tắc ứng dụng cho lệnh UPDATE & lệnh INSERT cũng sẽ được ứng dụng cho lệnh DELETE trong SQL.

Chẳng hạn sau sẽ xóa một hàng có TUOI = 18.

SQL > DELETE FROM SINHVIEN_VIEW      WHERE TUOI = 18;

Cuối cùng, một hàng trong bảng SINHVIEN ban đầu sẽ bị xóa & kết quả tương đương với chính lượt xem đó. Lúc này, thử truy vấn bảng ban đầu, & lệnh SELECT sẽ cho kết quả:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       ||  2 | Viet    |  19 | DTVT      | 3000000     ||  4 | Nhan    |  19 | CK        |   4500000   ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———+—–+———–+———+

Xóa Lượt xem trong SQL

Rõ ràng và cụ thể là, khi bạn đã sở hữu một lượt xem, & việc không thiết yếu sử dụng lượt xem này nữa thì vấn đề cần làm là xóa chúng đi. Cú pháp cơ bản để xóa lượt xem trong SQL như sau:

DROP VIEW ten_view;

Chẳng hạn sau để xóa SINHVIEN_VIEW từ bảng ban đầu.

DROP VIEW SINHVIEN_VIEW;

Mệnh đề HAVING trong SQL cho bạn khả năng để xác nhận các điều kiện để lọc nhóm kết quả nào sẽ hiện ra trong kết quả cuối cùng.

Mệnh đề WHERE đặt các điều kiện trên các cột đã lựa chọn, trong lúc mệnh đề HAVING đặt các điều kiện trên các nhóm đã được tạo bởi mệnh đề GROUP BY.

Cú pháp

Sau đây là địa điểm của mệnh đề HAVING trong một truy vấn SQL.

SELECTFROMWHEREGROUP BYHAVINGORDER BY

Mệnh đề HAVING phải theo sau mệnh đề GROUP By trong một truy vấn & cũng cần phải đặt trước mệnh đề ORDER BY nếu được sử dụng. Dưới đây là cú pháp của lệnh SELECT với mệnh đề HAVING.

SELECT cot1, cot2FROM bang1, bang2WHERE [ cac_dieu_kien ]GROUP BY cot1, cot2HAVING [ cac_dieu_kien ]ORDER BY cot1, cot2

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       ||  2 | Viet    |  19 | DTVT      | 3000000     ||  3 | Thanh   |  18 | KTDN      |  4000000      ||  4 | Nhan    |  19 | CK        |   4500000   ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———+—–+———–+———+

Chẳng hạn sau sẽ hiển thị bản ghi mà có điều kiện là COUNT (tuoi) >= 2.

SQL > SELECT ID, TEN, TUOI, KHOAHOC, HOCPHIFROM SINHVIENGROUP BY TUOIHAVING COUNT(TUOI) >= 2;

Transaction trong SQL là một nhà cung cấp công việc được thực hiện bởi một Database. Transaction là nhà cung cấp hoặc dãy công việc được thực hiện theo một thứ tự logic & hợp lý, có thể được thao tác bởi người dùng hoặc bởi một Database program.

Một transaction là một sự lan truyền của một hoặc nhiều biến đổi tới Database. Chẳng hạn, nếu bạn đang tạo một bản ghi hoặc update một bản ghi hoặc xóa một bản ghi từ một bảng, thì bạn đang thực hiện transaction trên bảng đó. Nó là trọng yếu để điều khiển các transaction để đảm bảo chu toàn dữ liệu & để giải quyết các Database Error.

Thực tiễn, bạn sẽ tập hợp nhiều truy vấn SQL vào trong một nhóm & sẽ thực thi toàn bộ truy vấn này bên cạnh nhau như là một phần của một transaction.

Property của Transaction trong SQL

Transaction có 4 property chuẩn, thường được tham chiếu bởi tên lược danh là ACID:

  • Atomicity:đảm bảo rằng toàn bộ hoạt động bên trong nhà cung cấp công việc được giải quyết một cách thành công; còn nếu không, transaction bị ngừng ở điểm thất bại, & các hoạt động trước được trao trả về hiện trạng trước đây.
  • Consistency:đảm bảo rằng Database biến đổi một cách đúng đắn hiện trạng theo một transaction đã được ký thác thành công.
  • Isolation:cho các transaction khả năng hoạt động một cách độc lập & không liên quan đến nhau.
  • Durability:đảm bảo rằng kết quả hoặc ảnh hưởng của một transaction, mà đã được ký thác, vẫn còn có trong trường hợp hệ thống thất bại.

Điều khiển transaction trong SQL

Trong SQL, có các lệnh sau được sử dụng để điều khiển transaction:

  • COMMIT:để lưu các biến đổi.
  • ROLLBACK:để quay trở lại hiện trạng trước khi có biến đổi.
  • SAVEPOINT:tạo các điểm (point) bên trong các nhóm transaction để ROLLBACK, tức là để quay trở lại điểm hiện trạng đó.
  • SET TRANSACTION:đặt một tên cho một transaction.

Các lệnh điều khiển transaction chỉ được sử dụng với các lệnh INSERT, UPDATE & DELETE. Chúng chẳng thể được sử dụng trong lúc tạo & xóa bảng, bởi vì những hoạt động này được ký thác auto trong Database.

Lệnh COMMIT trong SQL

Lệnh COMMIT là lệnh điều khiển transaction được sử dụng để lưu các biến đổi đã được triệu hồi bởi một transaction tới Database.

Lệnh COMMIT cất giữ toàn bộ transaction trong Database từ lệnh COMMIT hoặc ROLLBACK cuối cùng.

Cú pháp cơ bản của lệnh COMMIT là như sau:

COMMIT;

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       ||  2 | Viet    |  19 | DTVT      | 3000000     ||  3 | Thanh   |  18 | KTDN      |  4000000      ||  4 | Nhan    |  19 | CK        |   4500000   ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———+—–+———–+———+

Chẳng hạn sau sẽ xóa các bản ghi từ bảng mà có tuoi = 19 & sau đó COMMIT các biến đổi vào trong Database.

SQLvàgt; DELETE FROM SINHVIEN     WHERE TUOI = 19;SQLvàgt; COMMIT;

Trong kết quả nhận được, hai hàng của bảng sẽ bị xóa & lệnh SELECT sẽ cho kết quả sau:

+—-+———-+—–+———–+———-+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       ||  3 | Thanh   |  18 | KTDN      |  4000000      ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———-+—–+———–+———-+

Lệnh ROLLBACK trong SQL

Lệnh ROLLBACK là lệnh điều khiển transaction được sử dụng để trao trả transaction về hiện trạng trước khi có các biến đổi mà chưa được lưu tới Database.

Lệnh ROLLBACK chỉ có thể được sử dụng để undo các transaction từ lệnh COMMIT hoặc ROLLBACK cuối cùng được cảnh báo.

Cú pháp cơ bản của lệnh ROLLBACK như sau:

ROLLBACK;

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       ||  2 | Viet    |  19 | DTVT      | 3000000     ||  3 | Thanh   |  18 | KTDN      |  4000000      ||  4 | Nhan    |  19 | CK        |   4500000   ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———+—–+———–+———+

Lúc này sử dụng lệnh ROLLBACK với lệnh xóa tuoi = 19, mà chưa được commit như sau:

SQLvàgt; DELETE FROM SINHVIEN     WHERE TUOI = 19;SQLvàgt; ROLLBACK;

Trong kết quả nhận được, hoạt động Delete này không tác động tới bảng & lệnh SELECT sẽ cho kết quả:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       ||  2 | Viet    |  19 | DTVT      | 3000000     ||  3 | Thanh   |  18 | KTDN      |  4000000      ||  4 | Nhan    |  19 | CK        |   4500000   ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———+—–+———–+———+

Lệnh SAVEPOINT trong SQL

Một SAVEPOINT là 1 điểm (point) trong một transaction khi bạn có thể lùi transaction về 1 điểm rõ ràng mà không cần lùi transaction về hiện trạng đầu trước khi có biến đổi đó.

Cú pháp cơ bản của lệnh SAVEPOINT như sau:

SAVEPOINT TEN_CUA_SAVEPOINT;

Lệnh này chỉ phục vụ trong việc tạo một SAVEPOINT trong các lệnh điều khiển transaction. Lệnh ROLLBACK được sử dụng để undo một nhóm các transaction.

Cú pháp để lùi về một SAVEPOINT như sau:

ROLLBACK TO TEN_CUA_SAVEPOINT;

Trong chẳng hạn sau, bạn mong muốn xóa 3 bản ghi khác nhau từ bảng SINHVIEN. Bạn mong muốn tạo một SAVEPOINT trước mỗi lệnh DELETE, để mà bạn có thể ROLLBACK về bất kỳ SAVEPOINT nào tại bất kể bao giờ để trả dữ liệu phù hợp về hiện trạng ban đầu của nó.

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       ||  2 | Viet    |  19 | DTVT      | 3000000     ||  3 | Thanh   |  18 | KTDN      |  4000000      ||  4 | Nhan    |  19 | CK        |   4500000   ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———+—–+———–+———+

Dưới đây là một dãy các hoạt động:

SQLvàgt; SAVEPOINT SP1;Savepoint created.SQLvàgt; DELETE FROM SINHVIEN WHERE ID=1;1 row deleted.SQLvàgt; SAVEPOINT SP2;Savepoint created.SQLvàgt; DELETE FROM SINHVIEN WHERE ID=2;1 row deleted.SQLvàgt; SAVEPOINT SP3;Savepoint created.SQLvàgt; DELETE FROM SINHVIEN WHERE ID=3;1 row deleted.

Ở trên, có 3 hoạt động xóa diễn ra. Sau một lúc, bạn biến đổi nghĩ suy & quyết định ROLLBACK về SAVEPOINT mà bạn đã xác nhận là SP2. Bởi vì SP2 được tạo sau hoạt động xóa trước nhất, cho nên hai hoạt động xóa cuối cùng được undo.

SQLvàgt; ROLLBACK TO SP2;Rollback complete.

Note rằng, chỉ có hoạt động xóa trước nhất diễn ra khi bạn rollback về SP2.

SQLvàgt; SELECT * FROM SINHVIEN;+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  2 | Viet    |  19 | DTVT      | 3000000     ||  3 | Thanh   |  18 | KTDN      |  4000000      ||  4 | Nhan    |  19 | CK        |   4500000   ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———+—–+———–+———+4 rows selected.

Lệnh RELEASE SAVEPOINT trong SQL

Lệnh RELEASE SAVEPOINT được sử dụng để xóa một SAVEPOINT mà bạn đã tạo.

Cú pháp cơ bản của lệnh RELEASE SAVEPOINT trong SQL như sau:

RELEASE SAVEPOINT TEN_CUA_SAVEPOINT;

Một khi một SAVEPOINT đã bị xóa, bạn chẳng thể sử dụng lệnh ROLLBACK để lùi transaction về SAVEPOINT đó nữa.

Lệnh SET TRANSACTION trong SQL

Lệnh SET TRANSACTION có thể được sử dụng để khởi tạo một Database Transaction. Lệnh này được sử dụng để xác nhận đặc thù cho transaction đó.

Chẳng hạn, bạn có cơ thể định một transaction là read only hoặc read write.

Cú pháp cơ bản của lệnh SET TRANSACTION trong SQL như sau:

SET TRANSACTION [ READ WRITE | READ ONLY ];

Nếu bạn nhận User Input thông qua một Webpage & chèn nó vào trong một SQL Database, thì tự dưng, bạn đã mở rộng cửa bảo mật ra bên ngoài, mà được biết tới với cái tên là SQL Injection.

Chương này sẽ chỉ dẫn bạn cách ngăn cản tình huống này xảy ra & giúp bạn bảo vệ Script của các bạn & các lệnh SQL trong Server-Side Script như PERL Script.

Injection thường xảy ra khi bạn yêu cầu input từ một người dùng, như tên của họ, & thay vì phân phối tên, họ phân phối cho bạn một lệnh SQL mà bạn sẽ chạy trên Database của mình mà không hay biết.

Đừng lúc nào tin vào dữ liệu được phân phối bởi người dùng, giải quyết dữ liệu này, & như một qui tắc, điều này được thực hiện bởi Pattern Matching (so khớp mẫu).

Trong chẳng hạn dưới, name bị hạn chế là các ký tự chữ-số cộng với dấu gạch dưới & có độ dài từ 8 đến 20 ký tự (bạn có thể sửa đổi nếu thấy thiết yếu).

if (preg_match(“/^w{8,20}$/”, $_GET[‘username’], $matches)){   $result = mysql_query(“SELECT * FROM SINHVIEN                           WHERE name=$matches[0]”);}else {   echo “user name not accepted”;}

Để minh họa vấn đề, bạn xem phần trích sau:

// gia su ban co input la nhu sau$name = “Hoang’; DELETE FROM SINHVIEN;”;mysql_query(“SELECT * FROM CUSTOMSRS WHERE name='{$name}’”);

Lời gọi hàm được coi như để lấy một bản ghi từ bảng SINHVIEN, với cột name so khớp với name đã được xác nhận bởi người dùng. Thông thường, $name sẽ chỉ chứa các ký tự chữ-số & có thể có khoảng không. Nhưng bước này, bằng việc phụ thêm một truy vấn hoàn toàn mới tới $name, lời gọi tới Database sẽ gây ra vấn đề lớn: truy vấn DELETE bị tiêm vào sẽ xóa toàn bộ bản ghi từ bảng SINHVIEN.

May mắn là, nếu bạn sử dụng MySQL, hàm mysql_query() không cho phép Query Stacking hoặc thực thi nhiều truy vấn SQL trong một lời gọi hàm đơn. Nếu bạn phấn đấu để thực hiện nhiều truy vấn, lời gọi hàm sẽ thất bại.

Ngoài ra, với PHP Database, chẳng hạn như SQLite & PostgreSQL, lại cho thực hiện nhiều truy vấn, thực thi toàn bộ truy vấn được phân phối trong một chuỗi & điều này tạo nên một vấn đề rất cực kỳ nghiêm trọng.

Ngăn cản SQL Injection

Bạn có thể giải quyết toàn bộ Escape Character một cách khéo léo trong các từ ngữ Scripting như PERL & PHP. MySQL extension cho PHP phân phối hàm mysql_real_escape_string() để tránh các ký tự được nhập vào mà có ý nghĩa đặc biệt với MySQL.

if (get_magic_quotes_gpc()) {  $name = stripslashes($name);}$name = mysql_real_escape_string($name);mysql_query(“SELECT * FROM SINHVIEN WHERE name='{$name}’”);

LIKE Quandary trong SQL

Để định vị một LIKE Quandary, một kỹ thuật do người dùng tạo phải chuyển hóa các ký tự ‘%’ & ‘_’ do người dùng phân phối thành literal (hằng). Sử dụng hàm addcslashes(), một hàm mà giúp bạn xác nhận một dãy ký tự để thoát.

$sub = addcslashes(mysql_real_escape_string(“%str”), “%_”);// $sub == %str_mysql_query(“SELECT * FROM messages              WHERE subject LIKE ‘{$sub}%’”);

Có một tình huống khi bạn có nhiều bản sao của các bản ghi trong một bảng. Trong lúc lấy các bản ghi này, nó là hợp lý hơn khi chỉ lấy một bản ghi duy nhất thay vì lấy cả các bản sao của bản ghi.

Keyword DISTINCT trong SQL, đã được trình bày trong các chương trước, được sử dụng kết phù hợp với lệnh SELECT để loại bỏ toàn bộ bản sao & chỉ lấy các bản ghi duy nhất.

Xem Thêm  Mảng trong Java - tạo một mảng java

Cú pháp

Cú pháp cơ bản của keyword DISTINCT để loại bỏ các bản sao là như sau:

SELECT DISTINCT cot1, cot2,…..cotN FROM ten_bangWHERE [dieu_kien]

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       ||  2 | Viet    |  19 | DTVT      | 3000000     ||  3 | Thanh   |  18 | KTDN      |  4000000      ||  4 | Nhan    |  19 | CK        |   4500000   ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———+—–+———–+———+

Trước tiên, tất cả chúng ta xem cách truy vấn SELECT trả về bản sao của HOCPHI:

SQLvàgt; SELECT HOCPHI FROM SINHVIEN     ORDER BY HOCPHI;

Trong kết quả nhận được, HOCPHI 4000000 hiện ra hai lần, & là một bản sao từ bảng ban đầu.

+———-+| HOCPHI   |+———-+|  3000000 ||  4000000 ||  4000000 ||  4500000 ||  5000000 |+———-+

Lúc này, sử dụng keyword DISTINCT với truy vấn SELECT trên, & xem kết quả:

SQLvàgt; SELECT DISTINCT HOCPHI FROM SINHVIEN     ORDER BY HOCPHI;

Trong kết quả nhận được, bạn sẽ không thấy bất kỳ bản sao nào.

+———-+| HOCPHI   |+———-+|  3000000 ||  4000000 ||  4500000 ||  5000000 |+———-+

Tất cả chúng ta đã bàn bạc về toán tử LIKE trong SQL, được sử dụng để so sánh một giá trị với các giá trị tương đương bởi sử dụng các toán tử wildcard.

SQL phân phối hai toán tử wildcard để sử dụng kết phù hợp với toán tử LIKE:

Toán tử Wildcard
Diễn tả

Ký hiệu %
So khớp với một hoặc nhiều ký tự. Ghi nhớ rằng, MS Access sử dụng dấu sao (*) thay cho ký hiệu % (%)

Dấu gạch dưới (_)
So khớp với một ký tự. Ghi nhớ rằng, MS Access sử dụng dấu hỏi (?) thay cho dấu gạch dưới (_) để so khớp với bất kỳ ký tự nào

Ký hiệu % trình diễn 0, 1 hoặc nhiều ký tự. Dấu gạch dưới trình diễn một số hoặc một ký tự đơn. Các ký hiệu có thể được sử dụng kết phù hợp với nhau.

Cú pháp

Cú pháp cơ bản của ‘%’ & ‘_’ là như sau:

SELECT FROM ten_bang

WHERE cot LIKE ‘XXXX%’

 

hoac

 

SELECT FROM ten_bang

WHERE cot LIKE ‘%XXXX%’

 

hoac

 

SELECT FROM ten_bang

WHERE cot LIKE ‘XXXX_’

 

hoac

 

SELECT FROM ten_bang

WHERE cot LIKE ‘_XXXX’

 

hoac

 

SELECT FROM ten_bang

WHERE cot LIKE ‘_XXXX_’

Bạn có thể phối hợp Ռ điều kiện bởi sử dụng toán tử AND hoặc OR. Bước này, XXX có thể là bất kỳ giá trị số hoặc chuỗi nào.

Chẳng hạn

Dưới đây là chẳng hạn minh họa mệnh đề WHERE có các mệnh đề LIKE khác nhau với các toán tử ‘%’ & ‘_’.

Lệnh
Diễn tả

WHERE HOCPHI LIKE ‘200%’
Tìm kiếm bất kỳ giá trị nào khởi đầu với 200

WHERE HOCPHI LIKE ‘%200%’
Tìm kiếm bất kỳ giá trị nào mà có 200 ở bất kỳ địa điểm nào

WHERE HOCPHI LIKE ‘_00%’
Tìm kiếm bất kỳ giá trị nào có 00 trong địa điểm thứ hai & ba

WHERE HOCPHI LIKE ‘2_%_%’
Tìm kiếm bất kỳ giá trị nào mà khởi đầu với 2 & có độ dài ít nhất là 3 ký tự

WHERE HOCPHI LIKE ‘%2’
Tìm kiếm bất kỳ giá trị nào mà chấm dứt với 2

WHERE HOCPHI LIKE ‘_2%3’
Tìm kiếm bất kỳ giá trị nào mà có 2 trong địa điểm thứ hai & chấm dứt với 3

WHERE HOCPHI LIKE ‘2___3’
Tìm kiếm bất kỳ giá trị nào có 5 chữ số khởi đầu với 2 & chấm dứt với 3

Còn đây là chẳng hạn thực sự, bạn theo dõi bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+

| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |

+—-+———+—–+———–+———+

|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       |

|  2 | Viet    |  19 | DTVT      | 3000000     |

|  3 | Thanh   |  18 | KTDN      |  4000000      |

|  4 | Nhan    |  19 | CK        |   4500000   |

|  5 | Huong   |  20 | TCNH      |   5000000     |

+—-+———+—–+———–+———+

Chẳng hạn sau sẽ hiển thị toàn bộ bản ghi từ bảng SINHVIEN với HOCPHI khởi đầu với 400:

SQLvàgt; SELECT * FROM SINHVIEN

WHERE HOCPHI LIKE ‘400%’;

Chẳng hạn trên sẽ cho kết quả:

+—-+———-+—–+———–+———-+

| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |

+—-+———+—–+———–+———+

|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       |

|  3 | Thanh   |  18 | KTDN      |  4000000      |

+—-+———-+—–+———–+———-+

Truy vấn con (còn được gọi truy vấn phụ hay truy vấn lồng nhau) là một truy vấn bên trong truy vấn SQL khác & được nhúng bên trong mệnh đề WHERE.

Một truy vấn con được sử dụng để trả về dữ liệu mà sẽ được sử dụng trong truy vấn chính như là một điều kiện để thu hẹp dữ liệu được thu nạp.

Các truy vấn con có thể được sử dụng với các lệnh SELECT, INSERT, UPDATE VÀ DELETE cùng với các toán tử như: =, <, >, >=, <=, IN, BETWEEN …

Các truy vấn con phải tuân theo các qui tắc sau:

  • Các truy vấn con phải được bao trong các dấu ngoặc đơn.
  • Một truy vấn con có thể chỉ có một cột trong mệnh đề SELECT, trừ khi có nhiều cột là trong truy vấn chính cho truy vấn con để so sánh các cột đã chọn của nó.
  • Một ORDER BY chẳng thể được sử dụng trong một truy vấn con, dù rằng truy vấn chính có thể sử dụng một ORDER BY. GROUP BY có thể được sử dụng để thực hiện cùng chức năng như ORDER BY trong một truy vấn con.
  • Các truy vấn con, mà trả về nhiều hơn một hàng, có thể chỉ được sử dụng với các toán tử nhân, chẳng hạn: toán tử IN.
  • Danh mục của SELECT chẳng thể bao gồm bất kỳ tham chiếu nào tới các giá trị mà ước lượng một BLOB, ARRAY, CLOB hoặc NCLOB.
  • Một truy vấn con chẳng thể bị bao quanh một cách trực tiếp trong một hàm tập hợp.
  • Toán tử BETWEEN chẳng thể được sử dụng với một truy vấn con; ngoài ra, toán tử BETWEEN có thể được sử dụng bên trong truy vấn con.

Truy vấn con với lệnh SELECT trong SQL

Các truy vấn con thường xuyên được sử dụng với lệnh SELECT. Cú pháp cơ bản của truy vấn con với lệnh SELECT là như sau:

SELECT ten_cot [, ten_cot ]FROM   bang1 [, bang2 ]WHERE  ten_cot TOAN_TU      (SELECT ten_cot [, ten_cot ]      FROM bang1 [, bang2 ]      [WHERE])

Chẳng hạn

Bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       ||  2 | Viet    |  19 | DTVT      | 3000000     ||  3 | Thanh   |  18 | KTDN      |  4000000      ||  4 | Nhan    |  19 | CK        |   4500000   ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———+—–+———–+———+

Lúc này, tất cả chúng ta kiểm soát truy vấn con với lệnh SELECT như sau:

SQLvàgt; SELECT *      FROM SINHVIEN      WHERE ID IN (SELECT ID                   FROM SINHVIEN                   WHERE HOCPHI > 4000000) ;

Chẳng hạn trên sẽ cho kết quả:

+—-+———-+—–+———+———-+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———-+—–+———+———-+|  4 | Nhan    |  19 | CK        |   4500000   ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———-+—–+———+———-+

Truy vấn con với lệnh INSERT trong SQL

Các truy vấn con cũng có thể được sử dụng với lệnh INSERT. Lệnh INSERT sử dụng dữ liệu được trả về từ truy vấn con để chèn nó vào trong bảng khác. Dữ liệu được lựa chọn trong truy vấn con có thể được sửa đổi với bất kỳ hàm giải quyết ký tự, date hoặc số nào.

Cú pháp cơ bản của truy vấn con với lệnh INSERT là như sau:

INSERT INTO ten_bang [ (cot1 [, cot2 ]) ]           SELECT [ *|cot1 [, cot2 ]           FROM bang1 [, bang2 ]           [ WHERE GIA_TRI TOAN_TU ]

Chẳng hạn

Theo dõi bảng SINHVIEN_BK53 với kết cấu cũng giống như bảng SINHVIEN. Lúc này, copy cả bảng SINHVIEN vào trong bảng SINHVIEN_BK53, sau đây là cú pháp.

SQLvàgt; INSERT INTO SINHVIEN_BK53     SELECT * FROM SINHVIEN      WHERE ID IN (SELECT ID                   FROM SINHVIEN) ;

Truy vấn con với lệnh UPDATE trong SQL

Truy vấn con có thể được sử dụng kết phù hợp với lệnh UPDATE. Hoặc một cột đơn hoặc nhiều cột trong một bảng có thể được update khi sử dụng một truy vấn con với lệnh UPDATE trong SQL.

Cú pháp cơ bản của truy vấn con với lệnh UPDATE là như sau:

UPDATE tableSET ten_cot = gia_tri_moi[ WHERE TOAN_TU [ GIA_TRI ]   (SELECT TEN_COT   FROM TEN_BANG)   [ WHERE) ]

Chẳng hạn

Giả sử, tất cả chúng ta đã có bảng SINHVIEN_BK53 có sẵn, là một backup (sao lưu) của bảng SINHVIEN.

Chẳng hạn sau update HOCPHI * 1,2 trong bảng SINHVIEN cho toàn bộ sinh viên có TUOI là to hơn hoặc bằng 21.

SQLvàgt; UPDATE SINHVIEN     SET HOCPHI = HOCPHI * 1.2     WHERE TUOI IN (SELECT TUOI FROM SINHVIEN_BK53                   WHERE TUOI >= 21 );

Lệnh này sẽ ảnh hưởng lên một hàng & cuối cùng bảng SINHVIEN sẽ có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4800000       ||  2 | Viet    |  19 | DTVT      | 3000000     ||  3 | Thanh   |  18 | KTDN      |  4000000      ||  4 | Nhan    |  19 | CK        |   4500000   ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———+—–+———–+———+

Truy vấn con với lệnh DELETE trong SQL

Truy vấn con có thể được sử dụng kết phù hợp với lệnh DELETE giống như bất kỳ lệnh khác đã được đề cập ở trên.

Cú pháp cơ bản của truy vấn con với lệnh DELETE là như sau:

DELETE FROM TEN_BANG[ WHERE TOAN_TU [ VALUE ]   (SELECT TEN_COT   FROM TEN_BANG)   [ WHERE) ]

Chẳng hạn

Giả sử, tất cả chúng ta đã có bảng SINHVIEN_BK53 có sẵn, là một backup (sao lưu) của bảng SINHVIEN.

Chẳng hạn sau xóa các bản ghi của toàn bộ KH có TUOI to hơn 20 từ bảng SINHVIEN.

SQLvàgt; DELETE FROM SINHVIEN     WHERE TUOI IN (SELECT TUOI FROM SINHVIEN_BK53                   WHERE TUOI > 20 );

Lệnh này sẽ ảnh hưởng lên hai hàng & cuối cùng bảng SINHVIEN sẽ có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  2 | Viet    |  19 | DTVT      | 3000000     ||  3 | Thanh   |  18 | KTDN      |  4000000      ||  4 | Nhan    |  19 | CK        |   4500000   |+—-+———+—–+———–+———+

Một Sequence là một tập hợp các số nguyên 1, 2, 3, … mà được tạo theo nhu cầu. Các Sequence thường xuyên được sử dụng trong Database bởi vì nhiều vận dụng yêu cầu mỗi hàng trong bảng chứa một giá trị duy nhất, & các Sequence phân phối một cách đơn giản để tạo chúng.

Chương này trình bày cách dùng của Sequence trong MySQL.

Sử dụng AUTO_INCREMENT column

Cách dễ dàng nhất trong MySQL để sử dụng các Sequence là để khái niệm một cột dạng AUTO_INCREMENT & để phần còn sót lại cho MySQL giải quyết.

Chẳng hạn

Chẳng hạn sau sẽ tạo bảng & sau đó nó sẽ chèn một số hàng vào trong bảng này, mà không bắt buộc phân phối bản ghi ID bởi vì nó được auto tăng bởi MySQL.

mysqlvàgt; CREATE TABLE INSECT    -> (    -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,    -> PRIMARY KEY (id),    -> name VARCHAR(30) NOT NULL, # type of insect    -> date DATE NOT NULL, # date collected    -> origin VARCHAR(30) NOT NULL # where collected);Query OK, 0 rows affected (0.02 sec)mysqlvàgt; INSERT INTO INSECT (id,name,date,origin) VALUES    -> (NULL,’housefly’,’2001-09-10′,’kitchen’),    -> (NULL,’millipede’,’2001-09-10′,’driveway’),    -> (NULL,’grasshopper’,’2001-09-10′,’front yard’);Query OK, 3 rows affected (0.02 sec)Records: 3  Duplicates: 0  Warnings: 0mysqlvàgt; SELECT * FROM INSECT ORDER BY id;+—-+————-+————+————+| id | name        | date       | origin     |+—-+————-+————+————+|  1 | housefly    | 2001-09-10 | kitchen    ||  2 | millipede   | 2001-09-10 | driveway   ||  3 | grasshopper | 2001-09-10 | front yard |+—-+————-+————+————+3 rows in set (0.00 sec)

Lấy các giá trị AUTO_INCREMENT

Hàm LAST_INSERT_ID() là một hàm SQL, chính vì như vậy, bạn có thể sử dụng nó từ bên trong bất kỳ Client nào mà hiểu cách cảnh báo lệnh SQL. Riêng PERL & PHP Script phân phối các hàm riêng để lấy giá trị AUTO_INCREMENT của bản ghi cuối.

Chẳng hạn cho PERL

Sử dụng tính chất mysql_insertid để lấy giá trị AUTO_INCREMENT được tạo bởi một truy vấn. Tính chất này được truy cập thông qua hoặc một Database Handle hoặc một Statement Handle, lệ thuộc vào cách bạn cảnh báo truy vấn. Chẳng hạn sau tham chiếu nó thông qua Database Handle.

$dbh->do (“INSERT INTO INSECT (name,date,origin)VALUES(‘moth’,’2001-09-14′,’windowsill’)”);my $seq = $dbh->{mysql_insertid};

Chẳng hạn cho PHP

Sau thời điểm cảnh báo một truy vấn mà tạo một giá trị AUTO_INCREMENT, lấy giá trị này bằng cách gọi hàm mysql_insert_id():

mysql_query (“INSERT INTO INSECT (name,date,origin)VALUES(‘moth’,’2001-09-14′,’windowsill’)”, $conn_id);$seq = mysql_insert_id ($conn_id);

Đánh số lại một Sequence đang tồn tại

Có một tình huống khi bạn đã xóa nhiều bản ghi từ một bảng & bạn mong muốn đánh số lại toàn bộ các bản ghi. Điều này được thực hiện bởi sử dụng một bí quyết dễ dàng, nhưng chúng ta nên thận trọng khi thực hiện nếu trong trường hợp bảng của các bạn đang kết phù hợp với bảng khác.

Nếu bạn quyết định rằng việc đánh số lại một cột AUTO_INCREMENT là chẳng thể tránh khỏi, thì phương pháp để thực hiện là xóa cột từ bảng, sau đó thêm lại. Chẳng hạn sau minh họa cách đánh số lại các giá trị id trong bảng INSECT bởi sử dụng kỹ thuật này.

mysqlvàgt; ALTER TABLE INSECT DROP id;mysqlvàgt; ALTER TABLE insect    -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,    -> ADD PRIMARY KEY (id);

Khởi đầu một Sequence tại một giá trị rõ ràng

Theo mặc định, MySQL sẽ khởi đầu Sequence từ 1, nhưng bạn có cơ thể định bất kỳ số nào khác bạn mong muốn tại thời điểm tạo bảng. Chẳng hạn sau sẽ khởi đầu Sequence từ 100.

mysqlvàgt; CREATE TABLE INSECT    -> (    -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,    -> PRIMARY KEY (id),    -> name VARCHAR(30) NOT NULL, # type of insect    -> date DATE NOT NULL, # date collected    -> origin VARCHAR(30) NOT NULL # where collected);

Cách khác, bạn có thể tạo bảng & sau đó seting giá trị khởi tạo cho Sequence với lệnh ALTER TABLE.

mysqlvàgt; ALTER TABLE t AUTO_INCREMENT = 100;

Mệnh đề Joins trong SQL được sử dụng để phối hợp các bản ghi từ hai hoặc nhiều bảng trong một Database. Một JOIN là một phương tiện để phối hợp các trường từ hai bảng bằng việc sử dụng các giá trị chung của mỗi bảng.

Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:

+—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |+—-+———+—–+———–+———+|  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       ||  2 | Viet    |  19 | DTVT      | 3000000     ||  3 | Thanh   |  18 | KTDN      |  4000000      ||  4 | Nhan    |  19 | CK        |   4500000   ||  5 | Huong   |  20 | TCNH      |   5000000     |+—-+———+—–+———–+———+

Bảng MUONSACH có các bản ghi sau:

+—–+———————+————-+——–+|STT  | NGAY                | SINHVIEN_ID | SOTIEN |+—–+———————+————-+——–+| 102 | 2009-10-08 00:00:00 |           3 |   320 || 100 | 2009-10-08 00:00:00 |           3 |   250 || 101 | 2009-11-20 00:00:00 |           2 |   280 || 103 | 2008-05-20 00:00:00 |           4 |   290 |+—–+———————+————-+——–+

Lúc này, tất cả chúng ta phối hợp hai bảng này trong lệnh SELECT như sau:

SQLvàgt; SELECT ID, TEN, TUOI, SOTIEN        FROM SINHVIEN, MUONSACH        WHERE  SINHVIEN.ID = MUONSACH.SINHVIEN_ID;

Chẳng hạn trên sẽ cho kết quả:

+—-+———-+—–+——–+| ID | TEN     | TUOI | SOTIEN |+—-+———-+—–+——–+|  3 | Thanh  |  18 |   320 ||  3 | Thanh  |  18 |   250 ||  2 | Viet   |  19 |   280 ||  4 | Nhan |  19 |   290 |+—-+———-+—–+——–+

Bước này, điều đáng Note là, JOIN được thực hiện trong mệnh đề WHERE. Một số toán tử có thể được sử dụng để phối hợp các bảng là: =, <, >, <>, <=, >=, !=, BETWEEN, LIKE, & NOT; toàn bộ toán tử này có thể được sử dụng để phối hợp các bảng. Ngoài ra, toán tử được sử dụng thông dụng đặc biệt là dấu bằng (=).

Các loại JOIN trong SQL

Trong SQL, có một số loại JOIN có sẵn là:

  • INNER JOIN trong SQL:Trả về các hàng khi có một so khớp (match) trong các bảng.
  • LEFT JOIN trong SQL:Trả về toàn bộ các hàng từ bảng bên trái, ngay cả khi không có so khớp nào trong bảng bên phải.
  • RIGHT JOIN trong SQL:Trả về toàn bộ các hàng từ bảng bên phải, ngay cả khi không có so khớp nào trong bảng bên trái.
  • FULL JOIN trong SQL:Trả về các hàng khi có một so khớp ở một trong các bảng.
  • SELF JOIN trong SQL:Được sử dụng để phối hợp một bảng với chính nó, khi nếu table này là hai bảng dữ liệu, thay tên tạm thời cho tối thiểu một bảng trong lệnh SQL.
  • CARTESIAN JOIN trong SQL:Trả về tích Đề-các của tập hợp các bản ghi từ hai hoặc nhiều bảng phối hợp.
  • [INNER JOIN trong SQL]Loại JOIN hay được dùng nhất & trọng yếu đặc biệt là INNER JOIN. Chúng cũng được gọi là một EQUIJOIN.
  • INNER JOIN tạo một bảng kết quả mới bằng việc phối hợp các giá trị cột của hai bảng (bang1 & bang2) dựa vào join-predicate. Truy vấn này so sánh mỗi hàng trong bang1 với mỗi hàng trong bang2 để tìm thấy các cặp hàng mà đáp ứng join-predicate. Khi join-predicate được đáp ứng, các giá trị cột của mỗi cặp hàng được connect ? & β được phối hợp vào trong một hàng kết quả.

·                   Cú pháp

  • Cú pháp cơ bản củaINNER JOIN trong SQL là:
  • SELECT bang1.cot1, bang2.cot2…FROM bang1         INNER JOIN bang2         ON bang1.field_chung = bang2.field_chung;

·                   Chẳng hạn

  • Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:
  • +—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |         +—-+———+—–+———–+———+         |  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       |         |  2 | Viet    |  19 | DTVT      | 3000000     |         |  3 | Thanh   |  18 | KTDN      |  4000000      |         |  4 | Nhan    |  19 | CK        |   4500000   |         |  5 | Huong   |  20 | TCNH      |   5000000     |         +—-+———+—–+———–+———+
  • Bảng MUONSACH có các bản ghi sau:
  • +—–+———————+————-+——–+|STT  | NGAY                | SINHVIEN_ID | SOTIEN |         +—–+———————+————-+——–+         | 102 | 2009-10-08 00:00:00 |           3 |   320 |         | 100 | 2009-10-08 00:00:00 |           3 |   250 |         | 101 | 2009-11-20 00:00:00 |           2 |   280 |         | 103 | 2008-05-20 00:00:00 |           4 |   290 |         +—–+———————+————-+——–+
  • Lúc này, tất cả chúng ta phối hợp hai bảng bởi sử dụng INNER JOIN trong SQL như sau:
  • SQLvàgt; SELECT ID, TEN, SOTIEN, NGAY              FROM SINHVIEN              INNER JOIN MUONSACH              ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID;
  • Chẳng hạn trên sẽ cho kết quả:
  • +—-+———-+——–+———————+| ID | TEN     | SOTIEN | NGAY                |         +—-+———-+——–+———————+         |  3 | Thanh  |   320 | 2009-10-08 00:00:00 |         |  3 | Thanh  |   250 | 2009-10-08 00:00:00 |         |  2 | Viet   |   280 | 2009-11-20 00:00:00 |         |  4 | Nhan |   290 | 2008-05-20 00:00:00 |         +—-+———-+——–+———————+
  • LEFT JOINtrong SQL trả về toàn bộ các hàng từ bảng bên trái, ngay cả khi không có so khớp nào trong bảng bên phải. Nghĩa là, nếu mệnh đề ON so khớp với 0 bản ghi trong bảng bên phải, thì LEFT JOIN sẽ vẫn trả về một hàng trong kết quả, nhưng với NULL trong mỗi cột từ bảng bên phải.
  • Điều này nghĩa là LEFT JOIN trả về toàn bộ giá trị từ bảng bên trái, cộng với các giá trị được so khớp từ bảng bên phải hoặc NULL trong trường hợp không có so khớp nào.

·                   Cú pháp

  • Cú pháp cơ bản củaLEFT JOIN trong SQL như sau:
  • SELECT bang1.cot1, bang2.cot2…FROM bang1         LEFT JOIN bang2         ON bang1.field_chung = bang2.field_chung;

·                   Chẳng hạn

  • Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:
  • +—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |         +—-+———+—–+———–+———+         |  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       |         |  2 | Viet    |  19 | DTVT      | 3000000     |         |  3 | Thanh   |  18 | KTDN      |  4000000      |         |  4 | Nhan    |  19 | CK        |   4500000   |         |  5 | Huong   |  20 | TCNH      |   5000000     |         +—-+———+—–+———–+———+
  • Bảng MUONSACH có các bản ghi sau:
  • +—–+———————+————-+——–+|STT  | NGAY                | SINHVIEN_ID | SOTIEN |         +—–+———————+————-+——–+         | 102 | 2009-10-08 00:00:00 |           3 |   320 |         | 100 | 2009-10-08 00:00:00 |           3 |   250 |         | 101 | 2009-11-20 00:00:00 |           2 |   280 |         | 103 | 2008-05-20 00:00:00 |           4 |   290 |         +—–+———————+————-+——–+
  • Lúc này, tất cả chúng ta phối hợp hai bảng bởi sử dụng LEFT JOIN trong SQL như sau:
  • SQLvàgt; SELECT ID, TEN, SOTIEN, NGAY              FROM SINHVIEN              LEFT JOIN MUONSACH              ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID;
  • Chẳng hạn trên sẽ cho kết quả:
  • +—-+———-+——–+———————+| ID | TEN     | SOTIEN | NGAY                |         +—-+———-+——–+———————+         |  1 | Hoang   |   NULL | NULL                |         |  2 | Viet   |   280 | 2009-11-20 00:00:00 |         |  3 | Thanh  |   320 | 2009-10-08 00:00:00 |         |  3 | Thanh  |   250 | 2009-10-08 00:00:00 |         |  4 | Nhan |   290 | 2008-05-20 00:00:00 |         |  5 | Huong   |   NULL | NULL                |         +—-+———-+——–+———————+
  • RIGHT JOINtrong SQL trả về toàn bộ hàng từ bảng bên phải, ngay cả khi không có so khớp nào trong bảng bên trái. Nghĩa là nếu mệnh đề ON so khớp với 0 bản ghi trong bảng bên trái, thì RIGHT JOIN sẽ vẫn trả về một hàng trong kết quả, nhưng với NULL trong mỗi cột từ bảng bên trái.
  • Điều này nghĩa là RIGHT JOIN trả về toàn bộ giá trị từ bảng bên phải, cộng với các giá trị được so khớp từ bảng bên trái hoặc NULL trong trường hợp không có so khớp nào.
  • Cú pháp
  • Cú pháp cơ bản của RIGHT JOINtrong SQL như sau:
  • SELECT bang1.cot1, bang2.cot2…
  • FROM bang1
  • RIGHT JOIN bang2
  • ON bang1.field_chung = bang2.field_chung;
  • Chẳng hạn
  • Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:
  • +—-+———+—–+———–+——–+
  • | ID | TEN    | TUOI|  KHOAHOC  | HOCPHI |
  • +—-+———+—–+———–+———+
  • | 1 | Hoang   |  21 | công nghệ thông tin      | 4000000       |
  • | 2 | Viet    |  19 | DTVT      | 3000000     |
  • | 3 | Thanh   |  18 | KTDN      |  4000000      |
  • | 4 | Nhan    |  19 | CK        |   4500000   |
  • | 5 | Huong   |  20 | TCNH      |   5000000     |
  • +—-+———+—–+———–+———+
  • Bảng MUONSACH có các bản ghi sau:
  • +—–+———————+————-+——–+
  • |STT | NGAY                | SINHVIEN_ID | SOTIEN |
  • +—–+———————+————-+——–+
  • | 102 | 2009-10-08 00:00:00 | 3 |   320 |
  • | 100 | 2009-10-08 00:00:00 | 3 |   250 |
  • | 101 | 2009-11-20 00:00:00 | 2 |   280 |
  • | 103 | 2008-05-20 00:00:00 | 4 |   290 |
  • +—–+———————+————-+——–+
  • Lúc này, tất cả chúng ta phối hợp hai bảng bởi sử dụng RIGHT JOIN trong SQL như sau:
  • SQLvàgt; SELECT ID, TEN, SOTIEN, NGAY
  • FROM SINHVIEN
  • RIGHT JOIN MUONSACH
  • ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID;
  • Chẳng hạn trên sẽ cho kết quả:
  • +——+———-+——–+———————+
  • | ID | TEN     | SOTIEN | NGAY                |
  • +——+———-+——–+———————+
  • | 3 | Thanh  |   320 | 2009-10-08 00:00:00 |
  • | 3 | Thanh  |   250 | 2009-10-08 00:00:00 |
  • | 2 | Viet   |   280 | 2009-11-20 00:00:00 |
  • | 4 | Nhan |   290 | 2008-05-20 00:00:00 |
  • +——+———-+——–+———————+
  • Trang trước
  • PDF
  • Trang sau 
  • FULL JOINtrong SQL phối hợp kết quả của cả hai loại LEFT & RIGHT JOIN.
  • Bảng được phối hợp sẽ chứa toàn bộ bản ghi từ cả hai bảng, & điền vào đó giá trị NULL cho các giá trị không so khớp nhau.

·                   Cú pháp

  • Cú pháp cơ bản củaFULL JOIN trong SQL như sau:
  • SELECT bang1.cot1, bang2.cot2…FROM bang1         FULL JOIN bang2         ON bang1.field_chung = bang2.field_chung;

·                   Chẳng hạn

  • Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:
  • +—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |         +—-+———+—–+———–+———+         |  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       |         |  2 | Viet    |  19 | DTVT      | 3000000     |         |  3 | Thanh   |  18 | KTDN      |  4000000      |         |  4 | Nhan    |  19 | CK        |   4500000   |         |  5 | Huong   |  20 | TCNH      |   5000000     |         +—-+———+—–+———–+———+
  • Bảng MUONSACH có các bản ghi sau:
  • +—–+———————+————-+——–+|STT  | NGAY                | SINHVIEN_ID | SOTIEN |         +—–+———————+————-+——–+         | 102 | 2009-10-08 00:00:00 |           3 |   320 |         | 100 | 2009-10-08 00:00:00 |           3 |   250 |         | 101 | 2009-11-20 00:00:00 |           2 |   280 |         | 103 | 2008-05-20 00:00:00 |           4 |   290 |         +—–+———————+————-+——–+
  • Lúc này, tất cả chúng ta phối hợp hai bảng bởi sử dụng FULL JOIN trong SQL như sau:
  • SQLvàgt; SELECT ID, TEN, SOTIEN, NGAY              FROM SINHVIEN              FULL JOIN MUONSACH              ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID;
  • Chẳng hạn trên sẽ cho kết quả:
  • +——+———-+——–+———————+| ID   | TEN     | SOTIEN | NGAY                |         +——+———-+——–+———————+         |    1 | Hoang   |   NULL | NULL                |         |    2 | Viet   |   280 | 2009-11-20 00:00:00 |         |    3 | Thanh  |   320 | 2009-10-08 00:00:00 |         |    3 | Thanh  |   250 | 2009-10-08 00:00:00 |         |    4 | Nhan |   290 | 2008-05-20 00:00:00 |         |    5 | Huong   |   NULL | NULL                |         |    3 | Thanh  |   320 | 2009-10-08 00:00:00 |         |    3 | Thanh  |   250 | 2009-10-08 00:00:00 |         |    2 | Viet   |   280 | 2009-11-20 00:00:00 |         |    4 | Nhan |   290 | 2008-05-20 00:00:00 |         +——+———-+——–+———————+
  • Nếu Database của các bạn không trợ giúp FULL JOIN (ví dụ như MySQL), thì bạn có thể sử dụng mệnh đềUNION ALL để phối hợp hai JOIN như sau:
  • SQLvàgt; SELECT ID, TEN, SOTIEN, NGAY              FROM SINHVIEN              LEFT JOIN MUONSACH              ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID         UNION ALL              SELECT  ID, TEN, SOTIEN, NGAY              FROM SINHVIEN              RIGHT JOIN MUONSACH              ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID
  • SELF JOINtrong SQL được sử dụng để phối hợp một bảng với chính nó như khi coi bảng này là hai bảng, thay tên tạm thời tối thiểu một bảng trong lệnh SQL.

·                   Cú pháp

  • Cú pháp cơ bản củaSELF JOIN trong SQL như sau:
  • SELECT α.ten_cot, ɓ.ten_cot…FROM bang1 α, bang1 ɓ         WHERE α.field_chung = ɓ.field_chung;
  • Bước này, mệnh đề WHERE có thể là bất kỳ biểu thức nào theo yêu cầu của các bạn.

·                   Chẳng hạn

  • Giả sử có hai bảng, bảng NHANVIEN có các bản ghi sau:
  • +—-+———-+—–+———–+———-+| ID | TEN     | TUOI | DIACHI   | LUONG   |         +—-+———-+—–+———–+———-+         |  1 | Hoang   |  32 | DongDa |  00 |         |  2 | Thanh   |  25 | QuangTrung     |  1500.00 |         |  3 | Viet  |  23 | KimLien      |  2000.00 |         |  4 | Nhan |  25 | BaDinh    |  6500.00 |         |  5 | Huong   |  27 | CauGiay    |  8500.00 |         |  6 | Long    |  22 | TrungKinh        |  4500.00 |         |  7 | Nam    |  24 | GiapBat    | 10000.00 |         +—-+———-+—–+———–+———-+
  • Lúc này, tất cả chúng ta phối hợp bảng này với chính nó bởi sử dụng SELF JOIN trong SQL như sau:
  • SQLvàgt; SELECT α.ID, ɓ.NAME, α.LUONG              FROM NHANVIEN α, NHANVIEN ɓ              WHERE α.LUONG < ɓ.LUONG;
  • Chẳng hạn trên sẽ cho kết quả:
  • +—-+———-+———+| ID | TEN     | LUONG  |         +—-+———-+———+         |  2 | Hoang   | 00 |         |  2 | Viet  | 1500.00 |         |  1 | Nhan | 2000.00 |         |  2 | Nhan | 1500.00 |         |  3 | Nhan | 2000.00 |         |  6 | Nhan | 4500.00 |         |  1 | Huong   | 2000.00 |         |  2 | Huong   | 1500.00 |         |  3 | Huong   | 2000.00 |         |  4 | Huong   | 6500.00 |         |  6 | Huong   | 4500.00 |         |  1 | Long    | 2000.00 |         |  2 | Long    | 1500.00 |         |  3 | Long    | 2000.00 |         |  1 | Nam    | 2000.00 |         |  2 | Nam    | 1500.00 |         |  3 | Nam    | 2000.00 |         |  4 | Nam    | 6500.00 |         |  5 | Nam    | 8500.00 |         |  6 | Nam    | 4500.00 |         +—-+———-+———+
  • CARTESIAN JOINhoặc CROSS JOIN trong SQL trả về tích Đề-các của các tập hợp bản ghi từ hai hoặc nhiều bảng đã được phối hợp. Vì vậy, nó tương tự như một INNER JOIN khi join-condition luôn luôn ước lượng là True hoặc khi join-condition là vắng mặt trong lệnh.

·                   Cú pháp

  • Cú pháp cơ bản củaCARTESIAN JOIN hoặc CROSS JOIN trong SQL như sau:
  • SELECT bang1.cot1, bang2.cot2…FROM  bang1, bang2 [, bang3 ]

·                   Chẳng hạn

  • Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:
  • +—-+———+—–+———–+——–+| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |         +—-+———+—–+———–+———+         |  1 | Hoang   |  21 | công nghệ thông tin      | 4000000       |         |  2 | Viet    |  19 | DTVT      | 3000000     |         |  3 | Thanh   |  18 | KTDN      |  4000000      |         |  4 | Nhan    |  19 | CK        |   4500000   |         |  5 | Huong   |  20 | TCNH      |   5000000     |         +—-+———+—–+———–+———+
  • Bảng MUONSACH có các bản ghi sau:
  • +—–+———————+————-+——–+|STT  | NGAY                | SINHVIEN_ID | SOTIEN |         +—–+———————+————-+——–+         | 102 | 2009-10-08 00:00:00 |           3 |   320 |         | 100 | 2009-10-08 00:00:00 |           3 |   250 |         | 101 | 2009-11-20 00:00:00 |           2 |   280 |         | 103 | 2008-05-20 00:00:00 |           4 |   290 |         +—–+———————+————-+——–+
  • Lúc này, tất cả chúng ta phối hợp hai bảng bởi sử dụng CARTESIAN JOIN trong SQL như sau:
  • SQLvàgt; SELECT ID, TEN, SOTIEN, NGAY              FROM SINHVIEN, MUONSACH;
  • Chẳng hạn trên sẽ cho kết quả:
  • +—-+———-+——–+———————+| ID | TEN     | SOTIEN | NGAY                |         +—-+———-+——–+———————+         |  1 | Hoang   |   320 | 2009-10-08 00:00:00 |         |  1 | Hoang   |   250 | 2009-10-08 00:00:00 |         |  1 | Hoang   |   280 | 2009-11-20 00:00:00 |         |  1 | Hoang   |   290 | 2008-05-20 00:00:00 |         |  2 | Viet   |   320 | 2009-10-08 00:00:00 |         |  2 | Viet   |   250 | 2009-10-08 00:00:00 |         |  2 | Viet   |   280 | 2009-11-20 00:00:00 |         |  2 | Viet   |   290 | 2008-05-20 00:00:00 |         |  3 | Thanh  |   320 | 2009-10-08 00:00:00 |         |  3 | Thanh  |   250 | 2009-10-08 00:00:00 |         |  3 | Thanh  |   280 | 2009-11-20 00:00:00 |         |  3 | Thanh  |   290 | 2008-05-20 00:00:00 |         |  4 | Nhan |   320 | 2009-10-08 00:00:00 |         |  4 | Nhan |   250 | 2009-10-08 00:00:00 |         |  4 | Nhan |   280 | 2009-11-20 00:00:00 |         |  4 | Nhan |   290 | 2008-05-20 00:00:00 |         |  5 | Huong   |   320 | 2009-10-08 00:00:00 |         |  5 | Huong   |   250 | 2009-10-08 00:00:00 |         |  5 | Huong   |   280 | 2009-11-20 00:00:00 |         |  5 | Huong   |   290 | 2008-05-20 00:00:00 |         +—-+———-+——–+———————+

QL có nhiều hàm có sẵn để thực thi quá trình giải quyết trên dữ liệu dạng chuỗi hoặc số. Dưới đây là danh mục toàn bộ hàm hữu dụng mà có sẵn trong SQL.

Follow https://www.facebook.com/vietjackteam/ để tiếp tục theo dõi các loạt bài tiên tiến nhất về Java,₵,₵++,Javascript,HTML,Python,Database,Mobile…. tiên tiến nhất của chúng tôi.

Bảng dưới liệt kê toàn bộ các hàm trọng yếu liên quan tới giải quyết Date & Time trong SQL. Có các hàm phong phú khác nhau được trợ giúp bởi RDBMS của các bạn. Danh mục dưới đây dựa vào MySQL RDBMS.

Hàm ADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days)

Khi được triệu hồi với tham số thứ hai INTERVAL, hàm ADDDATE() là giống hàm DATE_ADD(). Hàm SUBDATE() là giống hàm DATE_SUB(). Để hiểu cụ thể về tham số INTERVAL, bạn xem hàm DATE_ADD().

mysqlvàgt; SELECT DATE_ADD(‘1998-01-02’, INTERVAL 31 DAY);

+———————————————————+

| DATE_ADD(‘1998-01-02’, INTERVAL 31 DAY)                 |

+———————————————————+

| 1998-02-02                                              |

+———————————————————+

1 row in set (0.00 sec)

 

mysqlvàgt; SELECT ADDDATE(‘1998-01-02’, INTERVAL 31 DAY);

+———————————————————+

| ADDDATE(‘1998-01-02’, INTERVAL 31 DAY)                  |

+———————————————————+

| 1998-02-02                                              |

+———————————————————+

1 row in set (0.00 sec)

Khi được triệu hồi với các days của tham số thứ hai, MySQL xem nó như là một số nguyên để được cộng vào expr.

mysqlvàgt; SELECT ADDDATE(‘1998-01-02’, 31);

+———————————————————+

| DATE_ADD(‘1998-01-02’, INTERVAL 31 DAY)                 |

+———————————————————+

| 1998-02-02                                              |

+———————————————————+

1 row in set (0.00 sec)

Hàm ADDTIME(expr1,expr2)

Hàm ADDTIME() cộng expr2 với expr1 & trả về kết quả. Tham số expr1 là một biểu thức time hoặc datetime, & expr2 là một biểu thức time.

mysqlvàgt; SELECT ADDTIME(‘1997-12-31 23:59:59.999999′,’1 1:1:1.000002’);

+———————————————————+

| DATE_ADD(‘1997-12-31 23:59:59.999999′,’1 1:1:1.000002’) |

+———————————————————+

| 1998-01-02 01:01:01.000001                              |

+———————————————————+

1 row in set (0.00 sec)

Hàm CONVERT_TZ(dt,from_tz,to_tz)

Hàm này chuyển hóa một giá trị datetime dt từ Timezone đã cho bởi from_tz sang Timezone đã cho bởi to_tz & trả về giá trị kết quả. Hàm này trả về NULL nếu các tham số là không hợp lệ.

mysqlvàgt; SELECT CONVERT_TZ(‘2004-01-01 12:00:00′,’GMT’,’MET’);

+———————————————————+

| CONVERT_TZ(‘2004-01-01 12:00:00′,’GMT’,’MET’)           |

+———————————————————+

| 2004-01-01 13:00:00                                     |

+———————————————————+

1 row in set (0.00 sec)

 

mysqlvàgt; SELECT CONVERT_TZ(‘2004-01-01 12:00:00′,’+00:00′,’+10:00’);

+———————————————————+

| CONVERT_TZ(‘2004-01-01 12:00:00′,’+00:00′,’+10:00’)     |

+———————————————————+

| 2004-01-01 22:00:00                                     |

+———————————————————+

1 row in set (0.00 sec)

Hàm CURDATE()

Trả về date dưới dạng một giá trị trong định dạng ‘YYYY-MM-DD’ hoặc YYYYMMDD, lệ thuộc vào hàm này được sử dụng trong ngữ cảnh chuỗi hay ngữ cảnh số.

mysqlvàgt; SELECT CURDATE();

+———————————————————+

| CURDATE()                                               |

+———————————————————+

| 1997-12-15                                              |

+———————————————————+

1 row in set (0.00 sec)

 

mysqlvàgt; SELECT CURDATE() + 0;

+———————————————————+

| CURDATE() + 0                                           |

+———————————————————+

| 19971215                                                |

+———————————————————+

1 row in set (0.00 sec)

Hàm CURRENT_DATE & CURRENT_DATE()

Hàm CURRENT_DATE & CURRENT_DATE() là giống hàm CURDATE().

Hàm CURTIME()

Trả về time hiện giờ dưới dạng một giá trị trong định dạng ‘HH:MM:SS’ hoặc HHMMSS, lệ thuộc vào hàm được sử dụng trong ngữ cảnh chuỗi hoặc ngữ cảnh số. Giá trị được trình diễn trong Timezone hiện giờ.

mysqlvàgt; SELECT CURTIME();

+———————————————————+

| CURTIME()                                               |

+———————————————————+

| 23:50:26                                                |

+———————————————————+

1 row in set (0.00 sec)

 

mysqlvàgt; SELECT CURTIME() + 0;

+———————————————————+

| CURTIME() + 0                                           |

+———————————————————+

| 235026                                                  |

+———————————————————+

1 row in set (0.00 sec)

Hàm CURRENT_TIME & CURRENT_TIME()

Hàm CURRENT_TIME & CURRENT_TIME() là giống hàm CURTIME().

Hàm CURRENT_TIMESTAMP & CURRENT_TIMESTAMP()

Hàm CURRENT_TIMESTAMP & CURRENT_TIMESTAMP() là giống hàm NOW().

Hàm DATE(expr)

Trích một phần date từ biểu thức expr của date hoặc datetime.

mysqlvàgt; SELECT DATE(‘2003-12-31 01:02:03’);

+———————————————————+

| DATE(‘2003-12-31 01:02:03’)                             |

+———————————————————+

|  2003-12-31                                             |

+———————————————————+

1 row in set (0.00 sec)

Hàm DATEDIFF(expr1,expr2)

DATEDIFF() trả về expr1 – expr2 được trình diễn dưới dạng số ngày từ một date tới date khác. Hai tham số expr1 & expr2 là các biểu thức trình diễn date hoặc datetime. Chỉ một phần của biểu thức được sử dụng để tính toán.

mysqlvàgt; SELECT DATEDIFF(‘1997-12-31 23:59:59′,’1997-12-30’);

+———————————————————+

| DATEDIFF(‘1997-12-31 23:59:59′,’1997-12-30’)            |

+———————————————————+

| 1                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)

Các hàm này thực hiện các phép toán số học trên date. Bước này, date là một giá trị DATE hoặc DATETIME mà xác nhận date ban đầu. Tham số expr là một biểu thức xác nhận giá trị khoảng thời gian để được cộng hoặc bị trừ từ date ban đầu. Tham số expr là một chuỗi; nó có thể khởi đầu với một dấu ‘-‘ cho khoảng thời gian âm. unit là một keyword chỉ các nhà cung cấp trong biểu thức nên được thông dịch.

Keyword INTERVAL & unit specifier là không phân biệt kiểu chữ.

Bảng dưới liệt kê các form của tham số expr cho mỗi giá trị unit:

Giá trị unit
Định dạngexpr

MICROSECOND
MICROSECONDS

SECOND
SECONDS

MINUTE
MINUTES

HOUR
HOURS

DAY
DAYS

WEEK
WEEKS

MONTH
MONTHS

QUARTER
QUARTERS

YEAR
YEARS

SECOND_MICROSECOND
‘SECONDS.MICROSECONDS’

MINUTE_MICROSECOND
‘MINUTES.MICROSECONDS’

MINUTE_SECOND
‘MINUTES:SECONDS’

HOUR_MICROSECOND
‘HOURS.MICROSECONDS’

HOUR_SECOND
‘HOURS:MINUTES:SECONDS’

HOUR_MINUTE
‘HOURS:MINUTES’

DAY_MICROSECOND
‘DAYS.MICROSECONDS’

DAY_SECOND
‘DAYS HOURS:MINUTES:SECONDS’

DAY_MINUTE
‘DAYS HOURS:MINUTES’

DAY_HOUR
‘DAYS HOURS’

YEAR_MONTH
‘YEARS-MONTHS’

Các giá trị QUARTER & WEEK là có sẵn bắt nguồn từ MySQL 5.0.0.

mysqlvàgt; SELECT DATE_ADD(‘1997-12-31 23:59:59’,

-> INTERVAL ‘1:1’ MINUTE_SECOND);

+———————————————————+

| DATE_ADD(‘1997-12-31 23:59:59’, INTERVAL…             |

+———————————————————+

| 1998-01-01 00:01:00                                     |

+———————————————————+

1 row in set (0.00 sec)

 

mysqlvàgt; SELECT DATE_ADD(‘1999-01-01’, INTERVAL 1 HOUR);

+———————————————————+

| DATE_ADD(‘1999-01-01’, INTERVAL 1 HOUR)                 |

+———————————————————+

| 1999-01-01 01:00:00                                     |

+———————————————————+

1 row in set (0.00 sec)

Hàm DATE_FORMAT(date,format)

Định dạng giá trị date theo chuỗi format.

Dưới đây là các specifier có thể được sử dụng trong chuỗi format. Ký tự ‘%’ là bắt buộc trước các ký tự specifier này.

Specifier
Diễn tả


Tên ngày trong tuần viết tắt (Sun..Sat)


Tên tháng viết tắt (Jan..Dec)


Tháng, dạng giá trị số (0..12)

%?
Ngày vào thời điểm tháng với English suffix (0th, 1st, 2nd, 3rd, .)

%{d}
Ngày vào thời điểm tháng, dạng giá trị số (00..31)

%e
Ngày vào thời điểm tháng, dạng giá trị số (0..31)


Microsecond (000000..999999)


Giờ, dạng (00..23)


Giờ, dạng (01..12)


Giờ, dạng (01..12)


Phút, dạng giá trị số (00..59)

%j
Ngày trong năm (001..366)


Giờ, dạng (0..23)


Giờ, dạng (1..12)


Tên tháng (January..December)


Tháng, dạng giá trị số (00..12)


AM hoặc phần mềm

%r
Time, 12h (hh:mm:ss được theo sau bởi AM hoặc phần mềm)


Giây (00..59)

%s
Giây (00..59)


Time, 24h (hh:mm:ss)

%ᑗ
Tuần trong năm (00..53), với Sunday là ngày trước nhất của tuần

%u
Tuần trong năm (00..53), với Monday là ngày trước nhất của tuần

%?
Tuần trong năm (01..53), với Sunday là ngày trước nhất của tuần; được sử dụng với %Ҳ

%?
Tuần trong năm (01..53), với Monday là ngày trước nhất của tuần; được sử dụng với %Ҳ

%?
Tên ngày trong tuần (Sunday..Saturday)

%w
Ngày trong tuần, dạng số (0=Sunday..6=Saturday)


Năm cho tuần, với Sunday là ngày trước nhất của tuần, giá trị số, 4 chữ số; được sử dụng với %?


Năm cho tuần, với Monday là ngày trước nhất của tuần, giá trị số, 4 chữ số; được sử dụng với %?


Năm, giá trị số, 4 chữ số

%y
Năm, giá trị số, 2 chữ số

%%
Một hằng ký tự .%.

mysqlvàgt; SELECT DATE_FORMAT(‘1997-10-04 22:23:00’, ‘%W %M %Y’);

+———————————————————+

| DATE_FORMAT(‘1997-10-04 22:23:00’, ‘%W %M %Y’)          |

+———————————————————+

| Saturday October 1997                                   |

+———————————————————+

1 row in set (0.00 sec)

 

mysqlvàgt; SELECT DATE_FORMAT(‘1997-10-04 22:23:00’

-> ‘%H %k %I %r %T %S %w’);

+———————————————————+

| DATE_FORMAT(‘1997-10-04 22:23:00…….                 |

+———————————————————+

|  22 22 10 10:23:00 phần mềm 22:23:00 00 6                     |

+———————————————————+

1 row in set (0.00 sec)

Hàm DATE_SUB(date,INTERVAL expr unit)

Hàm này giống hàm DATE_ADD().

Hàm DAY(date)

DAY() giống hàm DAYOFMONTH().

Hàm DAYNAME(date)

Trả về tên ngày trong tuần cho date.

mysqlvàgt; SELECT DAYNAME(‘1998-02-05’);

+———————————————————+

| DAYNAME(‘1998-02-05’)                                   |

+———————————————————+

| Thursday                                                |

+———————————————————+

1 row in set (0.00 sec)

Hàm DAYOFMONTH(date)

Trả về ngày vào thời điểm tháng cho date, trong phạm vi 0 tới 31.

mysqlvàgt; SELECT DAYOFMONTH(‘1998-02-03’);

+———————————————————+

| DAYOFMONTH(‘1998-02-03’)                                |

+———————————————————+

| 3                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm DAYOFWEEK(date)

Trả về chỉ mục ngày trong tuần cho date (1 = Sunday, 2 = Monday, ., 7 = Saturday). Những giá trị chỉ mục này tương ứng với chuẩn ODBC.

mysqlvàgt; SELECT DAYOFWEEK(‘1998-02-03’);

+———————————————————+

|DAYOFWEEK(‘1998-02-03’)                                  |

+———————————————————+

| 3                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm DAYOFYEAR(date)

Trả về ngày trong năm cho date, trong phạm vi 1 tới 366.

mysqlvàgt; SELECT DAYOFYEAR(‘1998-02-03’);

+———————————————————+

| DAYOFYEAR(‘1998-02-03’)                                 |

+———————————————————+

| 34                                                      |

+———————————————————+

1 row in set (0.00 sec)

Hàm EXTRACT(unit FROM date)

Hàm EXTRACT() sử dụng các unit specifier giống như hàm DATE_ADD() hoặc DATE_SUB(), nhưng nó trích các phần từ date chứ không thực hiện các phép toán số học trên date.

mysqlvàgt; SELECT EXTRACT(YEAR FROM ‘1999-07-02’);

+———————————————————+

| EXTRACT(YEAR FROM ‘1999-07-02’)                         |

+———————————————————+

| 1999                                                    |

+———————————————————+

1 row in set (0.00 sec)

 

mysqlvàgt; SELECT EXTRACT(YEAR_MONTH FROM ‘1999-07-02 01:02:03’);

+———————————————————+

| EXTRACT(YEAR_MONTH FROM ‘1999-07-02 01:02:03’)          |

+———————————————————+

| 199907                                                  |

+———————————————————+

1 row in set (0.00 sec)

Hàm FROM_DAYS(Ռ)

Với số ngày đã cho Ռ, hàm này trả về một giá trị DATE.

mysqlvàgt; SELECT FROM_DAYS(729669);

+———————————————————+

| FROM_DAYS(729669)                                       |

+———————————————————+

| 1997-10-07                                              |

+———————————————————+

1 row in set (0.00 sec)

Hàm FROM_UNIXTIME(unix_timestamp)

Hàm FROM_UNIXTIME(unix_timestamp,format)

Trả về một trình diễn của tham số unix_timestamp dưới dạng một giá trị trong định dạng ‘YYYY-MM-DD HH:MM:SS’ hoặc YYYYMMDDHHMMSS, lệ thuộc vào hàm này được sử dụng trong ngữ cảnh chuỗi hay ngữ cảnh số. Giá trị được trình diễn trong Timezone hiện giờ. Tham số unix_timestamp là một giá trị timestamp nội tại được tạo bởi hàm UNIX_TIMESTAMP().

Nếu format được phân phối, kết quả được định dạng theo chuỗi format, mà được sử dụng giống như cách đã được liệt kê trong hàm DATE_FORMAT().

mysqlvàgt; SELECT FROM_UNIXTIME(875996580);

+———————————————————+

| FROM_UNIXTIME(875996580)                                |

+———————————————————+

| 1997-10-04 22:23:00                                     |

+———————————————————+

1 row in set (0.00 sec)

Hàm HOUR(time)

Trả về giờ cho time. Dãy giá trị trả về là từ 0 tới 23. Ngoài ra, dãy giá trị TIME thực sự là to hơn, chính vì như vậy HOUR có thể trả về giá trị to hơn 23.

mysqlvàgt; SELECT HOUR(’10:05:03′);

+———————————————————+

| HOUR(’10:05:03′)                                        |

+———————————————————+

| 10                                                      |

+———————————————————+

1 row in set (0.00 sec)

Hàm LAST_DAY(date)

Nhận một giá trị date hoặc datetime & trả về giá trị tương ứng cho ngày cuối cùng của tháng đó. Trả về NULL nếu tham số là không hợp lệ.

mysqlvàgt; SELECT LAST_DAY(‘2003-02-05’);

+———————————————————+

| LAST_DAY(‘2003-02-05’)                                  |

+———————————————————+

| 2003-02-28                                              |

+———————————————————+

1 row in set (0.00 sec)

Hàm LOCALTIME & LOCALTIME()

Hàm LOCALTIME & LOCALTIME() là giống hàm NOW().

Hàm LOCALTIMESTAMP & LOCALTIMESTAMP()

Hàm LOCALTIMESTAMP & LOCALTIMESTAMP() là giống hàm NOW().

Hàm MAKEDATE(year,dayofyear)

Trả về một date, với các giá trị year & dayofyear đã cho. Tham số dayofyear phải to hơn 0 còn nếu không kết quả trả về là NULL.

Xem Thêm  Tìm các lần xuất hiện đầu tiên, cuối cùng và tất cả các đối tượng trong một mảng - tìm một phần tử trong một python mảng

mysqlvàgt; SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);

+———————————————————+

| MAKEDATE(2001,31), MAKEDATE(2001,32)                    |

+———————————————————+

| ‘2001-01-31’, ‘2001-02-01′                              |

+———————————————————+

1 row in set (0.00 sec)

Hàm MAKETIME(hour,minute,second)

Trả về một giá trị time được ước lượng từ các tham số hour, minute, & second.

mysqlvàgt; SELECT MAKETIME(12,15,30);

+———————————————————+

| MAKETIME(12,15,30)                                      |

+———————————————————+

| ’12:15:30′                                              |

+———————————————————+

1 row in set (0.00 sec)

Hàm MICROSECOND(expr)

Trả về số microsecond từ biểu thức expr trình diễn time hoặc datetime dưới dạng một số trong dãy từ 0 tới 999999.

mysqlvàgt; SELECT MICROSECOND(’12:00:00.123456′);

+———————————————————+

| MICROSECOND(’12:00:00.123456′)                          |

+———————————————————+

| 123456                                                  |

+———————————————————+

1 row in set (0.00 sec)

Hàm MINUTE(time)

Trả về phút cho time đã cho, trong dãy từ 0 tới 59.

mysqlvàgt; SELECT MINUTE(’98-02-03 10:05:03′);

+———————————————————+

| MINUTE(’98-02-03 10:05:03’)                             |

+———————————————————+

| 5                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm MONTH(date)

Trả về tháng cho date đã cho, trong dãy từ 0 tới 12.

mysqlvàgt; SELECT MONTH(‘1998-02-03’)

+———————————————————+

| MONTH(‘1998-02-03’)                                     |

+———————————————————+

| 2                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm MONTHNAME(date)

Trả về tên tháng đầy đủ cho date đã cho.

mysqlvàgt; SELECT MONTHNAME(‘1998-02-05’);

+———————————————————+

| MONTHNAME(‘1998-02-05’)                                 |

+———————————————————+

| February                                                |

+———————————————————+

1 row in set (0.00 sec)

Hàm NOW()

Trả về date & time hiện giờ dưới dạng một giá trị trong định dạng ‘YYYY-MM-DD HH:MM:SS’ hoặc YYYYMMDDHHMMSS, lệ thuộc vào hàm được sử dụng trong ngữ cảnh chuỗi hay ngữ cảnh số. Giá trị được trình diễn trong Timezone hiện giờ.

mysqlvàgt; SELECT NOW();

+———————————————————+

| NOW()                                                   |

+———————————————————+

| 1997-12-15 23:50:26                                     |

+———————————————————+

1 row in set (0.00 sec)

Hàm PERIOD_ADD(ᴘ,Ռ)

Cộng Ռ tháng vào period ᴘ (trong định dạng YYMM hoặc YYYYMM). Trả về một giá trị trong định dạng YYYYMM. Chú giải rằng tham số ᴘ không phải là một giá trị date.

mysqlvàgt; SELECT PERIOD_ADD(9801,2);

+———————————————————+

| PERIOD_ADD(9801,2)                                      |

+———————————————————+

| 199803                                                  |

+———————————————————+

1 row in set (0.00 sec)

Hàm PERIOD_DIFF(P1,P2)

Trả về số tháng giữa period P1 & P2. P1 & P2 nên trong định dạng YYMM hoặc YYYYMM. Chú giải rằng các tham số P1 & P2 không phải là một giá trị date.

mysqlvàgt; SELECT PERIOD_DIFF(9802,199703);

+———————————————————+

| PERIOD_DIFF(9802,199703)                                |

+———————————————————+

| 11                                                      |

+———————————————————+

1 row in set (0.00 sec)

Hàm QUARTER(date)

Trả về Quí của năm cho date, trong dãy giá trị từ 1 tới 4.

mysqlvàgt; SELECT QUARTER(’98-04-01′);

+———————————————————+

| QUARTER(’98-04-01′)                                     |

+———————————————————+

| 2                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm SECOND(time)

Trả về giây cho time đã cho, trong phạm vi từ 0 tới 59.

mysqlvàgt; SELECT SECOND(’10:05:03′);

+———————————————————+

| SECOND(’10:05:03′)                                      |

+———————————————————+

| 3                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm SEC_TO_TIME(seconds)

Trả về tham số seconds, đã được thay đổi thành giờ, phút, giây, trong định dạng ‘HH:MM:SS’ hoặc HHMMSS, phục thuộc vào hàm được sử dụng trong ngữ cảnh số hay ngữ cảnh chuỗi.

mysqlvàgt; SELECT SEC_TO_TIME(2378);

+———————————————————+

| SEC_TO_TIME(2378)                                       |

+———————————————————+

| 00:39:38                                                |

+———————————————————+

1 row in set (0.00 sec)

Hàm STR_TO_DATE(str,format)

Hàm này ngược với hàm DATE_FORMAT(). Nó nhận một chuỗi str & một định dạng chuỗi format. Hàm STR_TO_DATE() trả về một giá trị DATETIME nếu định dạng chuỗi chứa cả hai phần date & time hoặc một giá trị DATE hoặc TIME nếu chuỗi chỉ chứa các phần date hoặc time.

mysqlvàgt; SELECT STR_TO_DATE(’04/31/2004′, ‘%m/%d/%Y’);

+———————————————————+

| STR_TO_DATE(’04/31/2004′, ‘%m/%d/%Y’)                   |

+———————————————————+

| 2004-04-31                                              |

+———————————————————+

1 row in set (0.00 sec)

Hàm SUBDATE(date,INTERVAL expr unit) & SUBDATE(expr,days)

Khi được triệu hồi với tham số thứ hai INTERNAL, hàm SUBDATE() giống hàm DATE_SUB(). Để có thông tin cụ thể về tham số INTERNAL, bạn theo dõi hàm DATE_ADD().

mysqlvàgt; SELECT DATE_SUB(‘1998-01-02’, INTERVAL 31 DAY);

+———————————————————+

| DATE_SUB(‘1998-01-02’, INTERVAL 31 DAY)                 |

+———————————————————+

| 1997-12-02                                              |

+———————————————————+

1 row in set (0.00 sec)

 

mysqlvàgt; SELECT SUBDATE(‘1998-01-02’, INTERVAL 31 DAY);

+———————————————————+

| SUBDATE(‘1998-01-02’, INTERVAL 31 DAY)                  |

+———————————————————+

| 1997-12-02                                              |

+———————————————————+

1 row in set (0.00 sec)

Hàm SUBTIME(expr1,expr2)

Hàm SUBTIME() trả về kết quả expr1 – expr2 được trình diễn dưới dạng một giá trị trong cùng định dạng với expr1. Tham số expr1 là một biểu thức time hoặc datetime, & expr2 là một time.

mysqlvàgt; SELECT SUBTIME(‘1997-12-31 23:59:59.999999’,

-> ‘1 1:1:1.000002’);

+———————————————————+

| SUBTIME(‘1997-12-31 23:59:59.999999’…                 |

+———————————————————+

| 1997-12-30 22:58:58.999997                              |

+———————————————————+

1 row in set (0.00 sec)

Hàm SYSDATE()

Trả về date & time hiện giờ dưới dạng một giá trị trong định dạng ‘YYYY-MM-DD HH:MM:SS’ hoặc YYYYMMDDHHMMSS, lệ thuộc vào hàm được sử dụng trong ngữ cảnh chuỗi hay ngữ cảnh số.

mysqlvàgt; SELECT SYSDATE();

+———————————————————+

| SYSDATE()                                               |

+———————————————————+

| 2006-04-12 13:47:44                                     |

+———————————————————+

1 row in set (0.00 sec)

Hàm TIME(expr)

Trích một phần time từ biểu thức expr trình diễn time hoặc datetime & trả về dưới dạng chuỗi.

mysqlvàgt; SELECT TIME(‘2003-12-31 01:02:03’);

+———————————————————+

| TIME(‘2003-12-31 01:02:03’)                             |

+———————————————————+

| 01:02:03                                                |

+———————————————————+

1 row in set (0.00 sec)

Hàm TIMEDIFF(expr1,expr2)

Hàm TIMEDIFF() trả về kết quả expr1 – expr2 được trình diễn dưới dạng một giá trị time. Tham số expr1 & expr2 là các biểu thức time hoặc datetime, & cả hai phải cùng kiểu.

mysqlvàgt; SELECT TIMEDIFF(‘1997-12-31 23:59:59.000001’,

-> ‘1997-12-30 01:01:01.000002’);

+———————————————————+

| TIMEDIFF(‘1997-12-31 23:59:59.000001’…..              |

+———————————————————+

|  46:58:57.999999                                        |

+———————————————————+

1 row in set (0.00 sec)

Hàm TIMESTAMP(expr), TIMESTAMP(expr1,expr2)

Với một tham số đơn, hàm này trả về biểu thức expr trình diễn date hoặc datetime dưới dạng một giá trị datetime. Với hai tham số, hàm này tính tổng expr1 & expr2 & trả về kết quả dưới dạng một giá trị datetime.

mysqlvàgt; SELECT TIMESTAMP(‘2003-12-31’);

+———————————————————+

| TIMESTAMP(‘2003-12-31′)                                 |

+———————————————————+

| 2003-12-31 00:00:00                                     |

+———————————————————+

1 row in set (0.00 sec)

Hàm TIMESTAMPADD(unit,interval,datetime_expr)

Cộng một biểu thức interval số nguyên vào biểu thức datetime_expr. Nhà cung cấp cho interval được phân phối bởi tham số unit, nên là một trong các giá trị: FRAC_SECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER hoặc YEAR.

Giá trị unit có thể được xác nhận bởi sử dụng một trong các keyword trên hoặc với một tiền tố là SQL_TSI_. Chẳng hạn, DAY & SQL_TSI_DAY đều hợp lệ.

mysqlvàgt; SELECT TIMESTAMPADD(MINUTE,1,’2003-01-02′);

+———————————————————+

| TIMESTAMPADD(MINUTE,1,’2003-01-02′)                     |

+———————————————————+

| 2003-01-02 00:01:00                                     |

+———————————————————+

1 row in set (0.00 sec)

Hàm TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

Trả về sự khác nhau (được trình diễn dạng số nguyên) giữa các biểu thức trình diễn date hoặc datetime là datetime_expr1 & datetime_expr2. Nhà cung cấp cho kết quả được phân phối bởi tham số unit. Các giá trị hợp lệ của unit là cũng giống như đã được liệt kê trong phần diễn đạt hàm TIMESTAMPADD().

mysqlvàgt; SELECT TIMESTAMPDIFF(MONTH,’2003-02-01′,’2003-05-01′);

+———————————————————+

| TIMESTAMPDIFF(MONTH,’2003-02-01′,’2003-05-01’)          |

+———————————————————+

| 3                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm TIME_FORMAT(time,format)

Hàm này được sử dụng giống hàm DATE_FORMAT(), nhưng chuỗi định dạng format chỉ có thể chứa hour, minute, & second.

Nếu giá trị time chứa một phần giờ to hơn 23, thì %Н & %ƙ sẽ cho một giá trị to hơn dãy giá trị thường dùng 0…23.

mysqlvàgt; SELECT TIME_FORMAT(‘100:00:00’, ‘%H %k %h %I %l’);

+———————————————————+

| TIME_FORMAT(‘100:00:00’, ‘%H %k %h %I %l’)              |

+———————————————————+

| 100 100 04 04 4                                         |

+———————————————————+

1 row in set (0.00 sec)

Hàm TIME_TO_SEC(time)

Trả về tham số time đã được chuyển hóa thành giây.

mysqlvàgt; SELECT TIME_TO_SEC(’22:23:00′);

+———————————————————+

| TIME_TO_SEC(’22:23:00′)                                 |

+———————————————————+

| 80580                                                   |

+———————————————————+

1 row in set (0.00 sec)

Hàm TO_DAYS(date)

Với một date đã cho, hàm này trả về số ngày (số ngày từ năm 0).

mysqlvàgt; SELECT TO_DAYS(950501);

+———————————————————+

| TO_DAYS(950501)                                         |

+———————————————————+

| 728779                                                  |

+———————————————————+

1 row in set (0.00 sec)

Hàm UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

Nếu hàm được gọi với 0 tham số, hàm sẽ trả về một Unix Timestamp (số giây từ ‘1970-01-01 00:00:00’ UTC) dưới dạng một số unsigned int. Nếu hàm này được gọi với một tham số date, nó trả về giá trị của tham số dưới dạng số giây từ ‘1970-01-01 00:00:00’ UTC. Tham số date có thể là một chuỗi DATE, một chuỗi DATETIME, một TIMESTAMP, hoặc một số trong định dạng YYMMDD hoặc YYYYMMDD.

mysqlvàgt; SELECT UNIX_TIMESTAMP();

+———————————————————+

| UNIX_TIMESTAMP()                                        |

+———————————————————+

| 882226357                                               |

+———————————————————+

1 row in set (0.00 sec)

 

mysqlvàgt; SELECT UNIX_TIMESTAMP(‘1997-10-04 22:23:00’);

+———————————————————+

| UNIX_TIMESTAMP(‘1997-10-04 22:23:00’)                   |

+———————————————————+

| 875996580                                               |

+———————————————————+

1 row in set (0.00 sec)

Hàm UTC_DATE, UTC_DATE()

Trả về UTC date hiện giờ dưới dạng một giá trị trong định dạng ‘YYYY-MM-DD’ hoặc YYYYMMDD, lệ thuộc vào hàm được sử dụng trong ngữ cảnh chuỗi hay ngữ cảnh số.

mysqlvàgt; SELECT UTC_DATE(), UTC_DATE() + 0;

+———————————————————+

| UTC_DATE(), UTC_DATE() + 0                              |

+———————————————————+

| 2003-08-14, 20030814                                    |

+———————————————————+

1 row in set (0.00 sec)

Hàm UTC_TIME, UTC_TIME()

Trả về UTC time hiện giờ dưới dạng một giá trị trong định dạng ‘HH:MM:SS’ hoặc HHMMSS, lệ thuộc vào hàm được sử dụng trong ngữ cảnh chuỗi hay ngữ cảnh số.

mysqlvàgt; SELECT UTC_TIME(), UTC_TIME() + 0;

+———————————————————+

| UTC_TIME(), UTC_TIME() + 0                              |

+———————————————————+

| 18:07:53, 180753                                        |

+———————————————————+

1 row in set (0.00 sec)

Hàm UTC_TIMESTAMP, UTC_TIMESTAMP()

Trả về UTC date & time hiện giờ dưới dạng một giá trị trong định dạng ‘YYYY-MM-DD HH:MM:SS’ hoặc YYYYMMDDHHMMSS, lệ thuộc vào hàm được sử dụng trong ngữ cảnh chuỗi hay ngữ cảnh số.

mysqlvàgt; SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;

+———————————————————+

| UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0                    |

+———————————————————+

| 2003-08-14 18:08:04, 20030814180804                     |

+———————————————————+

1 row in set (0.00 sec)

Hàm WEEK(date[,mode])

Hàm này trả về số tuần cho date. Tham số thứ hai của hàm WEEK() cho phép bạn xác nhận rằng tuần bắt nguồn từ Sunday hay Monday & xác nhận rằng giá trị nên trong dãy từ 0 tới 53 hay từ 1 tới 53. Nếu tham số mode này bị bỏ qua, giá trị của biến hệ thống default_week_format sẽ được sử dụng.

Mode
Ngày trước nhất của tuần
Dãy giá trị
Week 1 là tuần trước nhất


Sunday
0-53
với một Sunday trong năm này

1
Monday
0-53
với nhiều hơn 3 ngày trong năm này

2
Sunday
1-53
với một Sunday trong năm này

3
Monday
1-53
với nhiều hơn 3 ngày trong năm này

4
Sunday
0-53
với nhiều hơn 3 ngày trong năm này

5
Monday
0-53
với một Monday trong năm này

6
Sunday
1-53
với nhiều hơn 3 ngày trong năm này

7
Monday
1-53
với một Monday trong năm này

mysqlvàgt; SELECT WEEK(‘1998-02-20’);

+———————————————————+

| WEEK(‘1998-02-20’)                                      |

+———————————————————+

| 7                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm WEEKDAY(date)

Hàm này trả về chỉ mục ngày trong tuần cho date (0 = Monday, 1 = Tuesday, . 6 = Sunday).

mysqlvàgt; SELECT WEEKDAY(‘1998-02-03 22:23:00’);

+———————————————————+

| WEEKDAY(‘1998-02-03 22:23:00’)                          |

+———————————————————+

| 1                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm WEEKOFYEAR(date)

Hàm trả về tuần theo lịch của date dưới dạng một số trong dãy từ 1 đến 53. Hàm WEEKOFYEAR() là tương tự với hàm WEEK(date,3).

mysqlvàgt; SELECT WEEKOFYEAR(‘1998-02-20’);

+———————————————————+

| WEEKOFYEAR(‘1998-02-20′)                                |

+———————————————————+

| 8                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm YEAR(date)

Trả về năm cho date, trong dãy từ 1000 tới 9999, hoặc 0 cho .zero. date.

mysqlvàgt; SELECT YEAR(’98-02-03′);

+———————————————————+

| YEAR(’98-02-03’)                                        |

+———————————————————+

| 1998                                                    |

+———————————————————+

1 row in set (0.00 sec)

Hàm YEARWEEK(date), YEARWEEK(date,mode)

Hàm trả về năm & tuần cho một date. Tham số mode làm việc cũng giống như tham số mode trong hàm WEEK(). Năm trong kết quả trả về phải khác năm trong tham số date, bởi vì tuần trước nhất & tuần cuối cùng của năm.

mysqlvàgt; SELECT YEARWEEK(‘1987-01-01′);

+———————————————————+

| YEAR(’98-02-03’)YEARWEEK(‘1987-01-01’)                  |

+———————————————————+

| 198653                                                  |

+———————————————————+

1 row in set (0.00 sec)

Để có thêm thông tin về các hàm trên, bạn truy cập: MySQL Official Trang web – Date and Time Functions

Hàm giải quyết chuỗi trong SQL được sử dụng để thao tác với chuỗi. Bảng dưới liệt kê cụ thể các hàm giải quyết chuỗi trọng yếu trong SQL.

Hàm ASCII(str)

Trả về giá trị số của ký tự bên trái nhất (cực tả) của chuỗi str. Trả về 0 nếu str là chuỗi trống. Trả về NULL nếu str là NULL. Hàm ASCII() làm việc với các ký tự có giá trị số từ 0 tới 255.

SQLvàgt; SELECT ASCII(‘2’);

+———————————————————+

| ASCII(‘2’)                                              |

+———————————————————+

| 50                                                      |

+———————————————————+

1 row in set (0.00 sec)

 

SQLvàgt; SELECT ASCII(‘dx’);

+———————————————————+

| ASCII(‘dx’)                                             |

+———————————————————+

| 100                                                     |

+———————————————————+

1 row in set (0.00 sec)

Hàm BIN(Ռ)

Trả về một trình diễn chuỗi của giá trị nhị phân Ռ, với Ռ là một số long BIGINT. Hàm này tương tự với CONV(Ռ,10,2). Hàm trả về NULL nếu Ռ là NULL.

SQLvàgt; SELECT BIN(12);

+———————————————————+

| BIN(12)                                                 |

+———————————————————+

| 1100                                                    |

+———————————————————+

1 row in set (0.00 sec)

Hàm BIT_LENGTH(str)

Trả về độ dài (số bit) của chuỗi str.

SQLvàgt; SELECT BIT_LENGTH(‘text’);

+———————————————————+

| BIT_LENGTH(‘text’)                                      |

+———————————————————+

| 32                                                      |

+———————————————————+

1 row in set (0.00 sec)

Hàm CHAR(Ռ,… [USING ten_charset])

Hàm CHAR() thông dịch mỗi tham số Ռ như là một số nguyên & trả về một chuỗi gồm các ký tự được phân phối bởi các giá trị mã hóa của các số nguyên đó. Các giá trị NULL bị bỏ qua.

SQLvàgt; SELECT CHAR(77,121,83,81,’76’);

+———————————————————+

| CHAR(77,121,83,81,’76’)                                 |

+———————————————————+

| SQL                                                   |

+———————————————————+

1 row in set (0.00 sec)

Hàm CHAR_LENGTH(str)

Trả về độ dài (số ký tự) của chuỗi str. Một ký tự được trình diễn bởi nhiều byte được đếm như là một ký tự đơn. Nghĩa là, với một chuỗi chứa 5 ký tự, mỗi ký tự có độ dài 2 byte, thì hàm LENGTH() trả về 10 còn hàm CHAR_LENGTH() trả về 5.

SQLvàgt; SELECT CHAR_LENGTH(“text”);

+———————————————————+

| CHAR_LENGTH(“text”)                                     |

+———————————————————+

| 4                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm CHARACTER_LENGTH(str)

CHARACTER_LENGTH() là giống hàm CHAR_LENGTH().

Hàm CONCAT(str1,str2,…)

Trả về chuỗi là kết quả của việc nối chuỗi các tham số. Có thể có 1 hoặc nhiều tham số. Nếu toàn bộ tham số là các chuỗi không phải nhị phân (non-binary), kết quả là một chuỗi không phải là nhị phân. Nếu các tham số bao gồm bất kỳ chuỗi nhị phân nào, thì kết quả là một chuỗi nhị phân. Một tham số dạng số được chuyển hóa thành dạng chuỗi tương tự. Nếu bạn mong muốn tránh điều này, bạn có thể sử dụng một type cast tường minh, như trong chẳng hạn sau:

SQLvàgt; SELECT CONCAT(‘My’, ‘S’, ‘QL’);

+———————————————————+

| CONCAT(‘My’, ‘S’, ‘QL’)                                 |

+———————————————————+

| SQL                                                   |

+———————————————————+

1 row in set (0.00 sec)

Hàm CONCAT_WS(separator,str1,str2,…)

Hàm CONCAT_WS() là viết tắt của Concatenate With Separator & là một dạng hàm CONCAT() đặc biệt. Tham số trước nhất là Separator cho các tham số còn sót lại. Separator này được thêm vào giữa các chuỗi để được nối chuỗi. Separator có thể là một chuỗi. Nếu Separator là NULL thì kết quả trả về là NULL.

SQLvàgt; SELECT CONCAT_WS(‘,’,’First name’,’Last Name’ );

+———————————————————+

| CONCAT_WS(‘,’,’First name’,’Last Name’ )                |

+———————————————————+

| First name, Last Name                                   |

+———————————————————+

1 row in set (0.00 sec)

Hàm CONV(Ռ,tu_co_so,sang_co_so)

Chuyển hóa số giữa các hệ cơ số khác nhau. Trả về một chuỗi trình diễn số Ռ, đã được chuyển hóa từ hệ cơ số tu_co_so sang hệ cơ số sang_co_so. Trả về NULL nếu bất kỳ tham số nào là NULL. Tham số Ռ được thông dịch như là một số nguyên, nhưng có thể được xác nhận như là một số nguyên hoặc một chuỗi. Nếu sang_co_so là một số âm, thì Ռ được coi như một số có dấu. Còn nếu như không thì, Ռ được coi như một số không dấu. Hàm CONV() làm việc với 64 bit.

SQLvàgt; SELECT CONV(‘a’,16,2);

+———————————————————+

| CONV(‘a’,16,2)                                          |

+———————————————————+

| 1010                                                    |

+———————————————————+

1 row in set (0.00 sec)

Hàm ELT(Ռ,str1,str2,str3,…)

Hàm trả về str1 nếu Ռ = 1, trả về str2 nếu Ռ = 2, & cứ tiếp tục như thế. Trả về NULL nếu Ռ bé hơn 1 hoặc to hơn số tham số. Hàm ELT() là sự bổ sung của FIELD().

SQLvàgt; SELECT ELT(1, ‘ej’, ‘Heja’, ‘hej’, ‘foo’);

+———————————————————+

| ELT(1, ‘ej’, ‘Heja’, ‘hej’, ‘foo’)                      |

+———————————————————+

| ej                                                      |

+———————————————————+

1 row in set (0.00 sec)

Hàm EXPORT_SET(bits,on,off[,separator[,so_luong_bit]])

Trả về một chuỗi để mà với một bit được seting trong bits, bạn lấy một chuỗi on, & với mỗi khi không được seting trong bits, bạn lấy chuỗi off. Các bit trong tham số bits được tính từ phải qua trái. Các chuỗi được thêm vào kết quả từ trái qua phải, phân biệt nhau bởi separator (theo mặc định là dấu phảy). Số lượng bit nên được cân nhắc được phân phối bởi tham số so_luong_bit (mặc định là 64).

SQLvàgt; SELECT EXPORT_SET(5,’У’,’Ռ’,’,’,4);

+———————————————————+

| EXPORT_SET(5,’У’,’Ռ’,’,’,4)                             |

+———————————————————+

| У,Ռ,У,Ռ                                                 |

+———————————————————+

1 row in set (0.00 sec)

Hàm FIELD(str,str1,str2,str3,…)

Trả về chỉ mục (địa điểm bắt nguồn từ 1) của str trong danh mục str1, str2, str3, … Trả về 0 nếu str không được tìm ra.

SQLvàgt; SELECT FIELD(‘ej’, ‘Hej’, ‘ej’, ‘Heja’, ‘hej’, ‘foo’);

+———————————————————+

| FIELD(‘ej’, ‘Hej’, ‘ej’, ‘Heja’, ‘hej’, ‘foo’)          |

+———————————————————+

| 2                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm FIND_IN_SET(str,danh_sach_str)

Trả về một giá trị trong dãy từ 1 tới Ռ nếu chuỗi str là trong danh mục chuỗi danh_sach_str chứa Ռ chuỗi con.

SQLvàgt; SELECT FIND_IN_SET(‘b’,’α,ɓ,ͼ,{d}’);

+———————————————————+

| SELECT FIND_IN_SET(‘b’,’α,ɓ,ͼ,{d}’)                       |

+———————————————————+

| 2                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm FORMAT(Ҳ,?)

Định dạng số Ҳ trong định dạng như ‘#,###,###.##’, được làm tròn về ? địa điểm sau dấu phảy, & trả về kết quả dưới dạng một chuỗi. Nếu ? là 0, thì kết quả không có dấu thập phân hay phần thập phân.

SQLvàgt; SELECT FORMAT(12332.123456, 4);

+———————————————————+

| FORMAT(12332.123456, 4)                                 |

+———————————————————+

| 12,332.1235                                             |

+———————————————————+

1 row in set (0.00 sec)

Hàm HEX(So_hoac_Chuoi)

Nếu So_hoac_Chuoi là một số, trả về một trình diễn chuỗi của giá trị thập lục phân Ռ, với Ռ là một số long BIGINT. Hàm này tương tự với hàm CONV(Ռ,10,16).

Nếu So_hoac_Chuoi là một chuỗi, trả về trình diễn chuỗi thập lục phân của So_hoac_Chuoi với mỗi ký tự trong đó được chuyển hóa thành hai chữ số thập lục phân.

SQLvàgt; SELECT HEX(255);

+———————————————————+

| HEX(255)                                                |

+———————————————————+

| FF                                                      |

+———————————————————+

1 row in set (0.00 sec)

 

SQLvàgt; SELECT 0x616263;

+———————————————————+

| 0x616263                                                |

+———————————————————+

| abc                                                     |

+———————————————————+

1 row in set (0.00 sec)

Hàm INSERT(str,pos,len,newstr)

Trả về chuỗi str, với chuỗi con khởi đầu tại địa điểm pos tới len được thay thế với chuỗi newstr. Trả về chuỗi ban đầu nếu giá trị tham số pos là không nằm trong độ dài của chuỗi. Thay thế phần còn sót lại của chuỗi từ địa điểm pos nếu giá trị tham số len là không ở trong độ dài phần còn sót lại của chuỗi. Trả về NULL nếu bất kỳ tham số nào là NULL.

SQLvàgt; SELECT INSERT(‘Quadratic’, 3, 4, ‘What’);

+———————————————————+

| INSERT(‘Quadratic’, 3, 4, ‘What’)                       |

+———————————————————+

| QuWhattic                                               |

+———————————————————+

1 row in set (0.00 sec)

Hàm INSTR(str,substr)

Trả về địa điểm của lần hiện ra trước nhất của chuỗi con substr trong chuỗi str. Hàm này cũng giống như dạng hai tham số của hàm LOCATE(), loại trừ việc thứ tự của tham số bị đảo ngược.

SQLvàgt; SELECT INSTR(‘foobarbar’, ‘bar’);

+———————————————————+

| INSTR(‘foobarbar’, ‘bar’)                               |

+———————————————————+

| 4                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm LCASE(str)

Hàm LCASE() là giống hàm LOWER().

Hàm LEFT(str,len)

Trả về các ký tự có độ dài len bắt nguồn từ bên trái nhất của chuỗi str, hoặc trả về NULL nếu bất kỳ tham số nào là NULL.

SQLvàgt; SELECT LEFT(‘foobarbar’, 5);

+———————————————————+

| LEFT(‘foobarbar’, 5)                                    |

+———————————————————+

| fooba                                                   |

+———————————————————+

1 row in set (0.00 sec)

Hàm LENGTH(str)

Trả về độ dài (số byte) của chuỗi str. Một ký tự được trình diễn bằng bao nhiêu byte thì đếm từng ấy byte. Nghĩa là, với một chuỗi chứa 5 ký tự, mỗi ký tự có độ dài 2 byte, hàm LENGTH() trả về 10, trong lúc hàm CHAR_LENGTH() trả về 5.

SQLvàgt; SELECT LENGTH(‘text’);

+———————————————————+

| LENGTH(‘text’)                                          |

+———————————————————+

| 4                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm LOAD_FILE(ten_file)

Đọc file & trả về các bài viết file dưới dạng chuỗi. Để sử dụng hàm này, file phải được đặt trên Server Hosting, bạn phải xác nhận pathname đầy đủ tới file đó, & bạn cần có quyền FILE. File phải là có thể đọc bởi toàn bộ mọi người & kích thước của nó bé hơn max_allowed_packet byte.

Nếu file không tồn tại hoặc chẳng thể đọc bởi vì một trong các điều kiện trước đây không được đáp ứng, hàm sẽ trả về NULL.

Như trong SQL 5.0.19, biến hệ thống character_set_filesystem điều khiển trình thông dịch các filename mà được phân phối ở dạng literal string (chuỗi hằng).

SQLvàgt; UPDATE table_test

-> SET blob_col=LOAD_FILE(‘/tmp/picture’)

-> WHERE id=1;

…………………………………………………..

Hàm LOCATE(substr,str), LOCATE(substr,str,pos)

Cú pháp trước nhất trả về địa điểm của lần hiện ra trước nhất của chuỗi phụ substr trong chuỗi str. Cú pháp thứ hai trả về địa điểm của lần hiện ra trước nhất của chuỗi phụ substr trong chuỗi str, bắt nguồn từ địa điểm pos. Trả về 0 nếu substr là không trong str.

SQLvàgt; SELECT LOCATE(‘bar’, ‘foobarbar’);

+———————————————————+

| LOCATE(‘bar’, ‘foobarbar’)                              |

+———————————————————+

| 4                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm LOWER(str)

Trả về chuỗi str với toàn bộ ký tự đã được chuyển hóa thành chữ thường.

SQLvàgt; SELECT LOWER(‘QUADRATICALLY’);

+———————————————————+

| LOWER(‘QUADRATICALLY’)                                  |

+———————————————————+

| quadratically                                           |

+———————————————————+

1 row in set (0.00 sec)

Hàm LPAD(str,len,padstr)

Trả về chuỗi str, đã được phụ thêm vào bên trái bởi chuỗi padstr với len ký tự. Nếu str là dài hơn len, thì giá trị trả về bị đúc kết về len ký tự.

SQLvàgt; SELECT LPAD(‘hi’,4,’??’);

+———————————————————+

| LPAD(‘hi’,4,’??’)                                       |

+———————————————————+

| ??hi                                                    |

+———————————————————+

1 row in set (0.00 sec)

Hàm LTRIM(str)

Trả về chuỗi str sau thời điểm gỡ bỏ các Leading space.

SQLvàgt; SELECT LTRIM(‘  barbar’);

+———————————————————+

| LTRIM(‘  barbar’)                                       |

+———————————————————+

| barbar                                                  |

+———————————————————+

1 row in set (0.00 sec)

Hàm MAKE_SET(bits,str1,str2,…)

Trả về một tập giá trị (một chuỗi chứa các chuỗi con phân biệt nhau bởi dấu chấm phảy) gồm các chuỗi mà có bit tương ứng trong tập bits. Tham số str1 tương ứng với bit 0, str2 tương ứng bit 1, & cứ tiếp tục. Các giá trị NULL trong str1, str2, … không được phụ thêm vào kết quả.

SQLvàgt; SELECT MAKE_SET(1,’α’,’ɓ’,’ͼ’);

+———————————————————+

| MAKE_SET(1,’α’,’ɓ’,’ͼ’)                                 |

+———————————————————+

| α                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm MID(str,pos,len)

Hàm MID(str,pos,len) là giống hàm SUBSTRING(str,pos,len).

Hàm OCT(Ռ)

Trả về một trình diễn chuỗi của giá trị bát phân Ռ, với Ռ là một số long BIGINT. Hàm này tương tự với hàm CONV(Ռ,10,8). Trả về NULL nếu Ռ là NULL.

SQLvàgt; SELECT OCT(12);

+———————————————————+

| OCT(12)                                                 |

+———————————————————+

| 14                                                      |

+———————————————————+

1 row in set (0.00 sec)

Hàm OCTET_LENGTH(str)

Hàm OCTET_LENGTH() là giống hàm LENGTH().

Hàm ORD(str)

Nếu ký tự bên trái nhất của chuỗi str là một ký tự được trình diễn bởi nhiều byte, trả về mã hóa cho ký tự đó, được tính toán từ các giá trị số của các byte cấu thành bởi sử dụng bí quyết này.

(1st byte code)

+ (2nd byte code . 256)

+ (3rd byte code . 2562) …

Nếu ký tự bên trái nhất không là một ký tự được trình diễn bởi nhiều byte, hàm ORD() trả về cùng giá trị như hàm ASCII().

SQLvàgt; SELECT ORD(‘2’);

+———————————————————+

| ORD(‘2’)                                                |

+———————————————————+

| 50                                                      |

+———————————————————+

1 row in set (0.00 sec)

Hàm POSITION(substr IN str)

Hàm POSITION(substr IN str) là giống hàm LOCATE(substr,str).

Hàm QUOTE(str)

Trích dẫn một chuỗi để cho một kết quả mà có thể được sử dụng như là một giá trị dữ liệu bị thoát trong một lệnh SQL. Chuỗi được trả về được bao trong các trích dẫn đơn & với mỗi sự trổ tài của (‘), (‘’), ASCII NULL, & Control-Ż đều được đặt trước bởi một dấu gạch chéo ngược (). Nếu tham số là NULL, giá trị trả về là từ NULL không được bao trong dấu trích dẫn đơn.

SQLvàgt; SELECT QUOTE(‘Don’t!’);

+———————————————————+

| QUOTE(‘Don’t!’)                                        |

+———————————————————+

| ‘Don’t!’                                               |

+———————————————————+

1 row in set (0.00 sec)

GHI CHÚ: Nếu bạn kiểm soát lại thiết lập, & nếu có bất kỳ bug với hàm này, thì tốt hơn cả là đừng sử dụng nó.

Hàm expr REGEXP pattern

Hàm này thực hiện một so khớp mẫu (pattern match) của expr với pattern. Trả về 1 nếu expr so khớp với pattern, còn nếu không thì trả về 0. Nếu expr hoặc pattern là NULL, thì kết quả là NULL. REGEXP là không phân biệt kiểu chữ, loại trừ khi được sử dụng với các chuỗi nhị phân.

SQLvàgt; SELECT ‘ABCDEF’ REGEXP ‘A%C%%’;

+———————————————————+

| ‘ABCDEF’ REGEXP ‘A%C%%’                                 |

+———————————————————+

| 0                                                       |

+———————————————————+

1 row in set (0.00 sec)

Một chẳng hạn khác là:

SQLvàgt; SELECT ‘ABCDE’ REGEXP ‘.*’;

+———————————————————+

|  ‘ABCDE’ REGEXP ‘.*’                                    |

+———————————————————+

| 1                                                       |

+———————————————————+

1 row in set (0.00 sec)

Thêm một chẳng hạn nữa:

SQLvàgt; SELECT ‘new*n*line’ REGEXP ‘new*.*line’;

+———————————————————+

| ‘new*n*line’ REGEXP ‘new*.*line’                   |

+———————————————————+

| 1                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm REPEAT(str,count)

Trả về một chuỗi chứa chuỗi str được lặp lại count lần. Nếu count là bé hơn 1, trả về chuỗi trống. Trả về NULL nếu str hoặc count là NULL.

SQLvàgt; SELECT REPEAT(‘SQL’, 3);

+———————————————————+

| REPEAT(‘SQL’, 3)                                      |

+———————————————————+

| SQLSQLSQL                                         |

+———————————————————+

1 row in set (0.00 sec)

Hàm REPLACE(str,from_str,to_str)

Trả về chuỗi str với toàn bộ lần hiện ra của chuỗi từ from_str được thay thế bởi chuỗi to_str. Hàm REPLACE() thực hiện một so khớp phân biệt kiểu chữ khi tìm kiếm cho from_str.

SQLvàgt; SELECT REPLACE(‘www.mysql.com’, ‘w’, ‘Ww’);

+———————————————————+

| REPLACE(‘www.mysql.com’, ‘w’, ‘Ww’)                     |

+———————————————————+

| WwWwWw.mysql.com                                        |

+———————————————————+

1 row in set (0.00 sec)

Hàm REVERSE(str)

Trả về chuỗi str với thứ tự các ký tự bị đảo ngược.

SQLvàgt; SELECT REVERSE(‘abcd’);

+———————————————————+

| REVERSE(‘abcd’)                                         |

+———————————————————+

| dcba                                                    |

+———————————————————+

1 row in set (0.00 sec)

Hàm RIGHT(str,len)

Trả về len ký tự ở bên phải nhất từ chuỗi str, hoặc NULL nếu bất kỳ tham số nào là NULL.

SQLvàgt; SELECT RIGHT(‘foobarbar’, 4);

+———————————————————+

| RIGHT(‘foobarbar’, 4)                                   |

+———————————————————+

| rbar                                                    |

+———————————————————+

1 row in set (0.00 sec)

Hàm RPAD(str,len,padstr)

Trả về chuỗi str, đã được thêm vào bên phải với chuỗi padstr với độ dài là len ký tự. Nếu str là dài hơn len, giá trị trả về bị đúc kết về len ký tự.

SQLvàgt; SELECT RPAD(‘hi’,5,’?’);

+———————————————————+

| RPAD(‘hi’,5,’?’)                                        |

+———————————————————+

| hi???                                                   |

+———————————————————+

1 row in set (0.00 sec)

Hàm RTRIM(str)

Trả về chuỗi str sau thời điểm đã loại bỏ các Trailing space.

SQLvàgt; SELECT RTRIM(‘barbar   ‘);

+———————————————————+

| RTRIM(‘barbar   ‘)                                      |

+———————————————————+

| barbar                                                  |

+———————————————————+

1 row in set (0.00 sec)

Hàm SOUNDEX(str)

Trả về một chuỗi soundex từ str.

SQLvàgt; SELECT SOUNDEX(‘Hello’);

+———————————————————+

| SOUNDEX(‘Hello’)                                        |

+———————————————————+

| H400                                                    |

+———————————————————+

1 row in set (0.00 sec)

Hàm bieu_thuc_1 SOUNDS LIKE bieu_thuc_2

Hàm này giống dạng SOUNDEX(bieu_thuc_1) = SOUNDEX(bieu_thuc_2).

Hàm SPACE(Ռ)

Trả về một chuỗi chứa Ռ ký tự khoảng không.

SQLvàgt; SELECT SPACE(6);

+———————————————————+

| SELECT SPACE(6)                                         |

+———————————————————+

| ‘      ‘                                                |

+———————————————————+

1 row in set (0.00 sec)

Hàm STRCMP(str1, str2)

So sánh hai chuỗi & trả về 0 nếu cả hai chuỗi là tương tự, trả về -1 nếu tham số đầu là bé hơn tham số thứ hai theo thứ tự xếp đặt hiện giờ, còn nếu không thì trả về 1.

SQLvàgt; SELECT STRCMP(‘MOHD’, ‘MOHD’);

+———————————————————+

| STRCMP(‘MOHD’, ‘MOHD’)                                  |

+———————————————————+

| 0                                                       |

+———————————————————+

1 row in set (0.00 sec)

Một chẳng hạn khác:

SQLvàgt; SELECT STRCMP(‘AMOHD’, ‘MOHD’);

+———————————————————+

| STRCMP(‘AMOHD’, ‘MOHD’)                                 |

+———————————————————+

| -1                                                      |

+———————————————————+

1 row in set (0.00 sec)

Bạn theo dõi thêm một chẳng hạn:

SQLvàgt; SELECT STRCMP(‘MOHD’, ‘AMOHD’);

+———————————————————+

| STRCMP(‘MOHD’, ‘AMOHD’)                                 |

+———————————————————+

| 1                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm SUBSTRING(str,pos)

Hàm SUBSTRING(str FROM pos)

Hàm SUBSTRING(str,pos,len)

Hàm SUBSTRING(str FROM pos FOR len)

Mẫu hàm mà không có tham số len sẽ trả về một chuỗi con từ chuỗi str khởi đầu tại địa điểm pos. Mẫu hàm với tham số len trả về một chuỗi phụ có độ dài là len ký tự từ chuỗi str bắt nguồn từ địa điểm pos. Mẫu hàm sử dụng FROM là cú pháp SQL chuẩn. Cũng có thể sử dụng một giá trị âm cho pos. Trong trường hợp này, phần khởi đầu của chuỗi phụ là các ký tự pos từ phần cuối của chuỗi, thay vì phần khởi đầu. Một giá trị âm có thể được sử dụng cho pos trong bất kỳ mẫu hàm nào.

SQLvàgt; SELECT SUBSTRING(‘Quadratically’,5);

+———————————————————+

| SSUBSTRING(‘Quadratically’,5)                           |

+———————————————————+

| ratically                                               |

+———————————————————+

1 row in set (0.00 sec)

 

SQLvàgt; SELECT SUBSTRING(‘foobarbar’ FROM 4);

+———————————————————+

| SUBSTRING(‘foobarbar’ FROM 4)                           |

+———————————————————+

| barbar                                                  |

+———————————————————+

1 row in set (0.00 sec)

 

SQLvàgt; SELECT SUBSTRING(‘Quadratically’,5,6);

+———————————————————+

| SUBSTRING(‘Quadratically’,5,6)                          |

+———————————————————+

| ratica                                                  |

+———————————————————+

1 row in set (0.00 sec)

Hàm SUBSTRING_INDEX(str,delim,count)

Trả về chuỗi con từ chuỗi str trước count lần hiện ra của delimiter được xác nhận bởi delim. Nếu count là dương, mọi thứ bên trái của delimeter cuối cùng (đếm từ trái) sẽ được trả về. Nếu count là âm, mọi thứ bên phải của delimiter cuối cùng (đếm từ phải) sẽ được trả về. Hàm SUBSTRING_INDEX() thực hiện một so khớp phân biệt kiểu chữ khi tìm kiếm cho delim.

SQLvàgt; SELECT SUBSTRING_INDEX(‘www.mysql.com’, ‘.’, 2);

+———————————————————+

| SUBSTRING_INDEX(‘www.mysql.com’, ‘.’, 2)                |

+———————————————————+

| http://www.mysql                                               |

+———————————————————+

1 row in set (0.00 sec)

Hàm TRIM([ LEADING [remstr] FROM] str)

Hàm TRIM([remstr FROM] str)

Trả về chuỗi str với toàn bộ tiền tố hoặc hậu tố remstr đã bị gỡ bỏ. Còn nếu như không có specifier nào (chẳng hạn: BOTH, LEADING, TRAILING) được phân phối, thì BOTH là mặc định. Tham số remstr là tùy ý & còn nếu không được xác nhận, các khoảng không bị gỡ bỏ.

SQLvàgt; SELECT TRIM(‘  bar   ‘);

+———————————————————+

| TRIM(‘  bar   ‘)                                        |

+———————————————————+

| bar                                                     |

+———————————————————+

1 row in set (0.00 sec)

 

SQLvàgt; SELECT TRIM(LEADING ‘x’ FROM ‘xxxbarxxx’);

+———————————————————+

| TRIM(LEADING ‘x’ FROM ‘xxxbarxxx’)                      |

+———————————————————+

| barxxx                                                  |

+———————————————————+

1 row in set (0.00 sec)

 

SQLvàgt; SELECT TRIM(BOTH ‘x’ FROM ‘xxxbarxxx’);

+———————————————————+

| TRIM(BOTH ‘x’ FROM ‘xxxbarxxx’)                         |

+———————————————————+

| bar                                                     |

+———————————————————+

1 row in set (0.00 sec)

 

SQLvàgt; SELECT TRIM(TRAILING ‘xyz’ FROM ‘barxxyz’);

+———————————————————+

| TRIM(TRAILING ‘xyz’ FROM ‘barxxyz’)                     |

+———————————————————+

| barx                                                    |

+———————————————————+

1 row in set (0.00 sec)

Hàm UCASE(str)

Hàm UCASE() là giống hàm UPPER().

Hàm UNHEX(str)

Thực hiện trái lại với hàm HEX(str). Nghĩa là, nó thông dịch mỗi cặp chữ số thập lục phân trong tham số như là một số & chuyển hóa nó sang ký tự được trình diễn bởi số đó. Các ký tự kết quả được trả về dưới dạng một chuỗi nhị phân.

SQLvàgt; SELECT UNHEX(‘4D7953514C’);

+———————————————————+

| UNHEX(‘4D7953514C’)                                     |

+———————————————————+

| SQL                                                   |

+———————————————————+

1 row in set (0.00 sec)

Các ký tự trong chuỗi tham số phải là các chữ số thập lục phân: ‘0’ … ‘9’, ‘A’ … ‘Z’, ‘a … ‘z’. Nếu hàm UNHEX() gặp bất kỳ chữ số không phải thập lục phân trong tham số, nó trả về NULL.

Hàm UPPER(str)

Trả về chuỗi str với toàn bộ ký tự đã được chuyển hóa thành chữ hoa.

SQLvàgt; SELECT UPPER(‘Allah-hus-samad’);

+———————————————————+

| UPPER(‘Allah-hus-samad’)                                |

+———————————————————+

| ALLAH-HUS-SAMAD                                         |

+———————————————————+

Hàm giải quyết số trong SQL được sử dụng để thao tác trên các số & thực hiện các phép tính số học. Bảng dưới liệt kê cụ thể các hàm giải quyết số này:

Hàm ABS(Ҳ)

Hàm ABS() trả về giá trị tuyệt đối của Ҳ. Bạn theo dõi chẳng hạn sau:

SQLvàgt; SELECT ABS(2);

+———————————————————+

| ABS(2)                                                  |

+———————————————————+

| 2                                                       |

+———————————————————+

1 row in set (0.00 sec)

 

SQLvàgt; SELECT ABS(-2);

+———————————————————+

| ABS(2)                                                  |

+———————————————————+

| 2                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm ACOS(Ҳ)

Hàm này trả về arcos của Ҳ. Giá trị Ҳ phải nằm trong dãy giữa -1 & 1, còn nếu không NULL sẽ được trả về. Bạn theo dõi chẳng hạn sau:

SQLvàgt; SELECT ACOS(1);

+———————————————————+

| ACOS(1)                                                 |

+———————————————————+

| 0.000000                                                |

+———————————————————+

1 row in set (0.00 sec)

Hàm ASIN(Ҳ)

Hàm ASIN() trả về arcsin của Ҳ. Giá trị Ҳ phải nằm trong dãy giữa -1 & 1, còn nếu không NULL sẽ được trả về.

SQLvàgt; SELECT ASIN(1);

+———————————————————+

| ASIN(1)                                                 |

+———————————————————+

| 1.5707963267949                                         |

+———————————————————+

1 row in set (0.00 sec)

Hàm ATAN(Ҳ)

Hàm ATAN() trả về arctan của Ҳ.

SQLvàgt; SELECT ATAN(1);

+———————————————————+

| ATAN(1)                                                 |

+———————————————————+

| 0.78539816339745                                        |

+———————————————————+

1 row in set (0.00 sec)

Hàm ATAN2(У,Ҳ)

Hàm này trả về arctan của hai tham số: Ҳ & У. Nó là cũng giống như arctan của У/Ҳ, loại trừ góc của cả hai được sử dụng để tìm góc phần tư của kết quả.

SQLvàgt; SELECT ATAN2(3,6);

+———————————————————+

| ATAN2(3,6)                                              |

+———————————————————+

| 0.46364760900081                                        |

+———————————————————+

1 row in set (0.00 sec)

Hàm BIT_AND(bieu_thuc)

Hàm BIT_AND trả về Bitwise AND toàn bộ các bit trong bieu_thuc. Bitwise AND dựa vào: nếu hai bit tương ứng là giống nhau, thì một hoạt động Bitwise AND sẽ trả về 1, nếu khác nhau thì trả về 0. Hàm trả về một giá trị nguyên 64 bit. Còn nếu như không có so khớp nào, thì nó trả về 18446744073709551615. Chẳng hạn sau sẽ thực hiện hàm BIT_AND trên cột PRICE đã được nhóm bởi MAKER (nhà cung cấp) của xe.

SQLvàgt; SELECT

MAKER, BIT_AND(PRICE) BITS

FROM CARS GROUP BY MAKER

+———————————————————+

|MAKER           BITS                                     |

+———————————————————+

|CHRYSLER        512                                      |

|FORD            12488                                    |

|HONDA           2144                                     |

+———————————————————+

1 row in set (0.00 sec)

Hàm BIT_COUNT(gia_tri_so)

Hàm BIT_COUNT() trả về số bit mà là active trong gia_tri_so. Chẳng hạn sau minh họa cách dùng của hàm này để trả về số active bit cho một dãy các số.

SQLvàgt; SELECT

BIT_COUNT(2) AS TWO,

BIT_COUNT(4) AS FOUR,

BIT_COUNT(7) AS SEVEN

+—–+——+——-+

| TWO | FOUR | SEVEN |

+—–+——+——-+

|   1 |    1 |     3 |

+—–+——+——-+

1 row in set (0.00 sec)

Hàm BIT_OR(bieu_thuc)

Hàm BIT_OR() trả về Bitwise OR của toàn bộ các bit trong bieu_thuc. Bitwise OR dựa vào: nếu hai bit tương ứng là giống nhau thì trả về 0, trái lại trả về 1. Hàm trả về số nguyên 64 bit. Chẳng hạn sau thực hiện hàm này trên cột PRICE của bảng CARS, đã được nhóm bởi MAKER.

SQLvàgt; SELECT

MAKER, BIT_OR(PRICE) BITS

FROM CARS GROUP BY MAKER

+———————————————————+

|MAKER           BITS                                     |

+———————————————————+

|CHRYSLER        62293                                    |

|FORD            16127                                    |

|HONDA           32766                                    |

+———————————————————+

1 row in set (0.00 sec)

Hàm CEIL(Ҳ)

Hàm CEILING(Ҳ)

Các hàm này trả về giá trị nguyên nhỏ nhất mà không bé hơn Ҳ. Bạn theo dõi chẳng hạn:

SQLvàgt; SELECT CEILING(3.46);

+———————————————————+

| CEILING(3.46)                                           |

+———————————————————+

| 4                                                       |

+———————————————————+

1 row in set (0.00 sec)

 

SQLvàgt; SELECT CEIL(-6.43);

+———————————————————+

| CEIL(-6.43)                                             |

+———————————————————+

| -6                                                      |

+———————————————————+

1 row in set (0.00 sec)

Hàm CONV(Ռ,tu_co_so,sang_co_so)

Mục đích của hàm CONV() là để chuyển hóa các số sang hệ cơ số khác. Hàm này trả về một chuỗi của Ռ đã được chuyển hóa từ cơ số tu_co_so sang cơ số sang_co_so. Cơ số nhỏ đặc biệt là 2 & lớn đặc biệt là 36. Nếu bất kỳ tham số nào là NULL, thì hàm trả về NULL. Chẳng hạn sau sẽ chuyển hóa số 5 từ cơ số 16 sang cơ số 2.

SQLvàgt; SELECT CONV(5,16,2);

+———————————————————+

| CONV(5,16,2)                                            |

+———————————————————+

| 101                                                     |

+———————————————————+

1 row in set (0.00 sec)

Hàm COS(Ҳ)

Hàm này trả về cos của Ҳ. Giá trị Ҳ được phân phối với giá trị radian.

SQLvàgt;SELECT COS(90);

+———————————————————+

| COS(90)                                                 |

+———————————————————+

| -0.44807361612917                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm COT(Ҳ)

Hàm này trả về cotan của Ҳ. Bạn theo dõi chẳng hạn sau:

SQLvàgt;SELECT COT(1);

+———————————————————+

| COT(1)                                                  |

+———————————————————+

| 0.64209261593433                                        |

+———————————————————+

1 row in set (0.00 sec)

Hàm DEGREES(Ҳ)

Hàm này trả về giá trị Ҳ sau thời điểm đã được thay đổi từ radian sang độ.

SQLvàgt;SELECT DEGREES(PI());

+———————————————————+

| DEGREES(PI())                                           |

+———————————————————+

| 180.000000                                              |

+———————————————————+

1 row in set (0.00 sec)

Hàm EXP(Ҳ)

Hàm này trả về giá trị của e mũ Ҳ.

SQLvàgt;SELECT EXP(3);

+———————————————————+

| EXP(3)                                                  |

+———————————————————+

| 20.085537                                               |

+———————————————————+

1 row in set (0.00 sec)

Hàm FLOOR(Ҳ)

Hàm này trả về giá trị nguyên lớn nhất mà không to hơn Ҳ.

SQLvàgt;SELECT FLOOR(7.55);

+———————————————————+

| FLOOR(7.55)                                             |

+———————————————————+

| 7                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm FORMAT(Ҳ,?)

Hàm FORMAT() được sử dụng để định dạng Ҳ trong định dạng: ###,###,###.## đã được cắt ? địa điểm sau dấu phảy. Chẳng hạn sau minh họa cách dùng của hàm FORMAT().

SQLvàgt;SELECT FORMAT(423423234.65434453,2);

+———————————————————+

| FORMAT(423423234.65434453,2)                            |

+———————————————————+

| 423,423,234.65                                          |

+———————————————————+

1 row in set (0.00 sec)

Hàm GREATEST(n1,n2,n3,……….)

Hàm GREATEST() trả về giá trị lớn nhất trong tập hợp các tham số input là (n1, n2, n3, …). Chẳng hạn sau sử dụng hàm GREATEST() trả về số lớn nhất trong một tập hợp các biểu thức số.

SQLvàgt;SELECT GREATEST(3,5,1,8,33,99,34,55,67,43);

+———————————————————+

| GREATEST(3,5,1,8,33,99,34,55,67,43)                     |

+———————————————————+

| 99                                                      |

+———————————————————+

1 row in set (0.00 sec)

Hàm INTERVAL(Ռ,N1,N2,N3,……….)

Hàm INTERVAL() so sánh giá trị Ռ với các giá trị trong danh mục (N1, N2, N3, …). Hàm trả về 0 nếu Ռ < N1, 1 nếu Ռ < N2, 2 nếu Ռ <N3, & …. Nó sẽ trả về -1 nếu Ռ là NULL. Danh mục giá trị phải theo thứ tự N1 < N2 < N3 để làm việc hợp lý. Chẳng hạn sau minh họa cách hàm INTERVAL() làm việc.

SQLvàgt;SELECT INTERVAL(6,1,2,3,4,5,6,7,8,9,10);

+———————————————————+

| INTERVAL(6,1,2,3,4,5,6,7,8,9,10)                        |

+———————————————————+

| 6                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm LEAST(N1,N2,N3,N4,……)

Hàm LEAST() là ngược với hàm GREATEST(). Mục đích của nó là trả về giá trị nhỏ nhất trong danh mục giá trị nhập vào (N1, N2, N3, N4, …). Chẳng hạn sau minh họa cách dùng của hàm này:

SQLvàgt;SELECT LEAST(3,5,1,8,33,99,34,55,67,43);

+———————————————————+

| LEAST(3,5,1,8,33,99,34,55,67,43)                        |

+———————————————————+

| 1                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm LOG(Ҳ)

Hàm LOG(β,Ҳ)

Dạng hàm một tham số sẽ trả về ln (loga nepe) của Ҳ. Nếu hàm được gọi với hai tham số, nó trả về loga của Ҳ với một cơ số tùy ý β. Bạn theo dõi chẳng hạn:

SQLvàgt;SELECT LOG(45);

+———————————————————+

| LOG(45)                                                 |

+———————————————————+

| 3.806662                                                |

+———————————————————+

1 row in set (0.00 sec)

 

SQLvàgt;SELECT LOG(2,65536);

+———————————————————+

| LOG(2,65536)                                            |

+———————————————————+

| 16.000000                                               |

+———————————————————+

1 row in set (0.00 sec)

Hàm LOG10(Ҳ)

Hàm này trả về log10(Ҳ).

SQLvàgt;SELECT LOG10(100);

+———————————————————+

| LOG10(100)                                              |

+———————————————————+

| 2.000000                                                |

+———————————————————+

1 row in set (0.00 sec)

Hàm MOD(Ռ,ʍ)

Hàm này trả về phần dư của phép chia Ռ/ʍ. Chẳng hạn:

SQLvàgt;SELECT MOD(29,3);

+———————————————————+

| MOD(29,3)                                               |

+———————————————————+

| 2                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm OCT(Ռ)

Hàm OCT() trả về trình diễn chuỗi của số Ռ trong hệ cơ số 8. Hàm này tương tự với hàm CONV(Ռ,10,8).

SQLvàgt;SELECT OCT(12);

+———————————————————+

| OCT(12)                                                 |

+———————————————————+

| 14                                                      |

+———————————————————+

1 row in set (0.00 sec)

Hàm PI()

Hàm này trả về giá trị PI. Trong nội tại, SQL cất giữ giá trị đầy đủ của PI.

SQLvàgt;SELECT PI();

+———————————————————+

| PI()                                                    |

+———————————————————+

| 3.141593                                                |

+———————————————————+

1 row in set (0.00 sec)

Hàm POW(Ҳ,У)

Hàm POWER(Ҳ,У)

Hai hàm này trả về giá trị Ҳ mũ У.

SQLvàgt; SELECT POWER(3,3);

+———————————————————+

| POWER(3,3)                                              |

+———————————————————+

| 27                                                      |

+———————————————————+

1 row in set (0.00 sec)

Hàm RADIANS(Ҳ)

Hàm này trả về giá trị của Ҳ đã được chuyển hóa từ độ sang radian.

SQLvàgt;SELECT RADIANS(90);

+———————————————————+

| RADIANS(90)                                             |

+———————————————————+

|1.570796                                                 |

+———————————————————+

1 row in set (0.00 sec)

Hàm ROUND(Ҳ)

Hàm ROUND(Ҳ,?)

Hàm này trả về Ҳ được làm tròn về số nguyên gần nhất. Nếu phân phối tham số thứ hai ?, thì hàm này trả về Ҳ đã được làm tròn về địa điểm sau dấu phảy đã được xác nhận bởi ?. ? phải là dương & toàn bộ chữ số còn sót lại ở bên phải của địa điểm thập phân đã cho sẽ bị gỡ bỏ. Chẳng hạn:

SQLvàgt;SELECT ROUND(5.693893);

+———————————————————+

| ROUND(5.693893)                                         |

+———————————————————+

| 6                                                       |

+———————————————————+

1 row in set (0.00 sec)

 

SQLvàgt;SELECT ROUND(5.693893,2);

+———————————————————+

| ROUND(5.693893,2)                                       |

+———————————————————+

| 5.69                                                    |

+———————————————————+

1 row in set (0.00 sec)

Hàm SIGN(Ҳ)

Hàm này trả về dấu của Ҳ, theo qui tắc: âm thì trả về -1, 0 trả về 0, & dương thì trả về 1.

SQLvàgt;SELECT SIGN(-4.65);

+———————————————————+

| SIGN(-4.65)                                             |

+———————————————————+

| -1                                                      |

+———————————————————+

1 row in set (0.00 sec)

 

SQLvàgt;SELECT SIGN(0);

+———————————————————+

| SIGN(0)                                                 |

+———————————————————+

| 0                                                       |

+———————————————————+

1 row in set (0.00 sec)

 

SQLvàgt;SELECT SIGN(4.65);

+———————————————————+

| SIGN(4.65)                                              |

+———————————————————+

| 1                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm SIN(Ҳ)

Hàm này trả về sin(Ҳ). Chẳng hạn:

SQLvàgt;SELECT SIN(90);

+———————————————————+

| SIN(90)                                                 |

+———————————————————+

| 0.893997                                                |

+———————————————————+

1 row in set (0.00 sec)

Hàm SQRT(Ҳ)

Trả về căn bậc hai của số không âm Ҳ. Chẳng hạn:

SQLvàgt;SELECT SQRT(49);

+———————————————————+

| SQRT(49)                                                |

+———————————————————+

| 7                                                       |

+———————————————————+

1 row in set (0.00 sec)

Hàm STD(bieu_thuc)

Hàm STDDEV(bieu_thuc)

Hàm STD() được sử dụng để trả về độ lệch chuẩn (phương sai) của biểu thức. Hàm này tương tự với việc lấy căn bậc hai của hàm VARIANCE(bieu_thuc). Chẳng hạn sau tính độ lệch chuẩn của cột PRICE của bảng CARS.

SQLvàgt;SELECT STD(PRICE) STD_DEVIATION FROM CARS;

+———————————————————+

| STD_DEVIATION                                           |

+———————————————————+

| 7650.2146                                               |

+———————————————————+

1 row in set (0.00 sec)

Hàm TAN(Ҳ)

Hàm này trả về tan của tham số Ҳ, đã được trình diễn trong radian.

SQLvàgt;SELECT TAN(45);

+———————————————————+

| TAN(45)                                                 |

+———————————————————+

| 1.619775                                                |

+———————————————————+

1 row in set (0.00 sec)

Hàm TRUNCATE(Ҳ,?)

Hàm này được sử dụng để trả về giá trị Ҳ sau thời điểm đã cắt ? địa điểm sau dấu phảy. Nếu ? là 0, thì dấu thập phân bị xóa. Nếu ? là âm, thì phần nguyên của ? xác nhận địa điểm để cắt. Chẳng hạn:

SQLvàgt;SELECT TRUNCATE(7.536432,2);

+———————————————————+

| TRUNCATE(7.536432,2)                                    |

+———————————————————+

| 7.53                                                    |

+———————————————————+

1 row in set (0.00 sec)

 

Share this:

Thích bài này:

Thích

Đang tải…

Viết một bình luận