SQL - Hướng dẫn nhanh

SQL là một ngôn ngữ để vận hành cơ sở dữ liệu; nó bao gồm tạo cơ sở dữ liệu, xóa, tìm nạp hàng, sửa đổi hàng, v.v. SQL là mộtANSI (Viện Tiêu chuẩn Quốc gia Hoa Kỳ) ngôn ngữ chuẩn, nhưng có nhiều phiên bản khác nhau của ngôn ngữ SQL.

SQL là gì?

SQL là ngôn ngữ truy vấn có cấu trúc, là một ngôn ngữ máy tính để lưu trữ, thao tác và truy xuất dữ liệu được lưu trữ trong cơ sở dữ liệu quan hệ.

SQL là ngôn ngữ tiêu chuẩn cho Hệ cơ sở dữ liệu quan hệ. Tất cả các Hệ thống quản lý cơ sở dữ liệu quan hệ (RDMS) như MySQL, MS Access, Oracle, Sybase, Informix, Postgres và SQL Server đều sử dụng SQL làm ngôn ngữ cơ sở dữ liệu chuẩn của chúng.

Ngoài ra, họ đang sử dụng các phương ngữ khác nhau, chẳng hạn như -

  • MS SQL Server sử dụng T-SQL,
  • Oracle sử dụng PL / SQL,
  • Phiên bản MS Access của SQL được gọi là JET SQL (định dạng gốc), v.v.

Tại sao sử dụng SQL?

SQL phổ biến rộng rãi vì nó mang lại những ưu điểm sau:

  • Cho phép người dùng truy cập dữ liệu trong hệ quản trị cơ sở dữ liệu quan hệ.

  • Cho phép người dùng mô tả dữ liệu.

  • Cho phép người dùng xác định dữ liệu trong cơ sở dữ liệu và thao tác với dữ liệu đó.

  • Cho phép nhúng trong các ngôn ngữ khác bằng cách sử dụng mô-đun, thư viện và trình biên dịch trước SQL.

  • Cho phép người dùng tạo và thả cơ sở dữ liệu và bảng.

  • Cho phép người dùng tạo chế độ xem, thủ tục lưu trữ, chức năng trong cơ sở dữ liệu.

  • Cho phép người dùng thiết lập quyền trên bảng, thủ tục và dạng xem.

Sơ lược về lịch sử SQL

  • 1970- Tiến sĩ Edgar F. "Ted" Codd của IBM được biết đến là cha đẻ của cơ sở dữ liệu quan hệ. Ông đã mô tả một mô hình quan hệ cho cơ sở dữ liệu.

  • 1974 - Ngôn ngữ truy vấn có cấu trúc xuất hiện.

  • 1978 - IBM đã làm việc để phát triển các ý tưởng của Codd và phát hành một sản phẩm có tên là System / R.

  • 1986- IBM đã phát triển nguyên mẫu đầu tiên của cơ sở dữ liệu quan hệ và được chuẩn hóa bởi ANSI. Cơ sở dữ liệu quan hệ đầu tiên được phát hành bởi Relational Software mà sau này được gọi là Oracle.

Quy trình SQL

Khi bạn đang thực hiện một lệnh SQL cho bất kỳ RDBMS nào, hệ thống sẽ xác định cách tốt nhất để thực hiện yêu cầu của bạn và công cụ SQL tìm ra cách diễn giải tác vụ.

Có nhiều thành phần khác nhau được bao gồm trong quá trình này.

Các thành phần này là -

  • Người điều phối truy vấn
  • Công cụ tối ưu hóa
  • Công cụ truy vấn cổ điển
  • Công cụ truy vấn SQL, v.v.

Công cụ truy vấn cổ điển xử lý tất cả các truy vấn không phải SQL, nhưng công cụ truy vấn SQL sẽ không xử lý các tệp logic.

Sau đây là một sơ đồ đơn giản cho thấy Kiến trúc SQL:

Lệnh SQL

Các lệnh SQL tiêu chuẩn để tương tác với cơ sở dữ liệu quan hệ là CREATE, SELECT, INSERT, UPDATE, DELETE và DROP. Các lệnh này có thể được phân loại thành các nhóm sau dựa trên bản chất của chúng:

DDL - Ngôn ngữ định nghĩa dữ liệu

Sr.No. Lệnh & Mô tả
1

CREATE

Tạo bảng mới, dạng xem bảng hoặc đối tượng khác trong cơ sở dữ liệu.

2

ALTER

Sửa đổi đối tượng cơ sở dữ liệu hiện có, chẳng hạn như bảng.

3

DROP

Xóa toàn bộ bảng, dạng xem bảng hoặc các đối tượng khác trong cơ sở dữ liệu.

DML - Ngôn ngữ thao tác dữ liệu

Sr.No. Lệnh & Mô tả
1

SELECT

Truy xuất các bản ghi nhất định từ một hoặc nhiều bảng.

2

INSERT

Tạo kỷ lục.

3

UPDATE

Sửa đổi hồ sơ.

4

DELETE

Xóa hồ sơ.

DCL - Ngôn ngữ điều khiển dữ liệu

Sr.No. Lệnh & Mô tả
1

GRANT

Cung cấp một đặc quyền cho người dùng.

2

REVOKE

Lấy lại các đặc quyền đã cấp từ người dùng.

RDBMS là gì?

RDBMS là viết tắt của Rphấn chấn Database Msự suy yếu System. RDBMS là cơ sở cho SQL và cho tất cả các hệ thống cơ sở dữ liệu hiện đại như MS SQL Server, IBM DB2, Oracle, MySQL và Microsoft Access.

Hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) là một hệ quản trị cơ sở dữ liệu (DBMS) dựa trên mô hình quan hệ như được giới thiệu bởi EF Codd.

Bảng là gì?

Dữ liệu trong RDBMS được lưu trữ trong các đối tượng cơ sở dữ liệu được gọi là tables. Bảng này về cơ bản là một tập hợp các mục dữ liệu liên quan và nó bao gồm nhiều cột và hàng.

Hãy nhớ rằng, bảng là hình thức lưu trữ dữ liệu phổ biến nhất và đơn giản nhất trong cơ sở dữ liệu quan hệ. Chương trình sau đây là một ví dụ về bảng CUSTOMERS -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Trường là gì?

Mỗi bảng được chia thành các thực thể nhỏ hơn được gọi là trường. Các trường trong bảng KHÁCH HÀNG bao gồm ID, TÊN, TUỔI, ĐỊA CHỈ và LƯƠNG.

Trường là một cột trong bảng được thiết kế để duy trì thông tin cụ thể về mọi bản ghi trong bảng.

Bản ghi hay Hàng là gì?

Một bản ghi còn được gọi là một hàng dữ liệu là mỗi mục nhập riêng lẻ tồn tại trong một bảng. Ví dụ, có 7 bản ghi trong bảng KHÁCH HÀNG ở trên. Sau đây là một hàng dữ liệu hoặc bản ghi trong bảng CUSTOMERS -

+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

Bản ghi là một thực thể nằm ngang trong một bảng.

Cột là gì?

Cột là một thực thể dọc trong một bảng chứa tất cả thông tin được liên kết với một trường cụ thể trong bảng.

Ví dụ: một cột trong bảng KHÁCH HÀNG là ĐỊA CHỈ, đại diện cho mô tả vị trí và sẽ như hình dưới đây -

+-----------+
| ADDRESS   |
+-----------+
| Ahmedabad |
| Delhi     |
| Kota      |
| Mumbai    |
| Bhopal    |
| MP        |
| Indore    |
+----+------+

Giá trị NULL là gì?

Giá trị NULL trong bảng là giá trị trong trường có vẻ trống, có nghĩa là trường có giá trị NULL là trường không có giá trị.

Điều rất quan trọng là phải hiểu rằng giá trị NULL khác với giá trị 0 hoặc một trường có chứa khoảng trắng. Trường có giá trị NULL là trường đã bị bỏ trống trong quá trình tạo bản ghi.

Các ràng buộc SQL

Ràng buộc là các quy tắc được thực thi trên các cột dữ liệu trên bảng. Chúng được sử dụng để giới hạn loại dữ liệu có thể đi vào bảng. Điều này đảm bảo tính chính xác và độ tin cậy của dữ liệu trong cơ sở dữ liệu.

Các ràng buộc có thể là cấp cột hoặc cấp bảng. Các ràng buộc mức cột chỉ được áp dụng cho một cột trong khi các ràng buộc mức bảng được áp dụng cho toàn bộ bảng.

Sau đây là một số ràng buộc được sử dụng phổ biến nhất hiện có trong SQL:

  • Ràng buộc NOT NULL - Đảm bảo rằng một cột không thể có giá trị NULL.

  • Ràng buộc DEFAULT - Cung cấp giá trị mặc định cho một cột khi không có cột nào được chỉ định.

  • Ràng buộc DUY NHẤT - Đảm bảo rằng tất cả các giá trị trong một cột là khác nhau.

  • Khóa CHÍNH - Xác định duy nhất từng hàng / bản ghi trong bảng cơ sở dữ liệu.

  • Khóa FOREIGN - Xác định duy nhất một hàng / bản ghi trong bất kỳ bảng cơ sở dữ liệu nào khác.

  • Ràng buộc CHECK - Ràng buộc CHECK đảm bảo rằng tất cả các giá trị trong một cột thỏa mãn các điều kiện nhất định.

  • INDEX - Được sử dụng để tạo và lấy dữ liệu từ cơ sở dữ liệu rất nhanh chóng.

Toàn vẹn dữ liệu

Các loại dữ liệu toàn vẹn sau tồn tại với mỗi RDBMS:

  • Entity Integrity − Không có hàng trùng lặp nào trong bảng.

  • Domain Integrity − Thực thi các mục nhập hợp lệ cho một cột nhất định bằng cách hạn chế loại, định dạng hoặc phạm vi giá trị.

  • Referential integrity − Hàng không thể bị xóa, được sử dụng bởi các bản ghi khác.

  • User-Defined Integrity − Thực thi một số quy tắc kinh doanh cụ thể không nằm trong tính toàn vẹn của thực thể, miền hoặc tham chiếu.

Chuẩn hóa cơ sở dữ liệu

Chuẩn hóa cơ sở dữ liệu là quá trình tổ chức dữ liệu một cách hiệu quả trong cơ sở dữ liệu. Có hai lý do của quá trình chuẩn hóa này -

  • Loại bỏ dữ liệu dư thừa, chẳng hạn như lưu trữ cùng một dữ liệu trong nhiều bảng.

  • Đảm bảo các phụ thuộc dữ liệu có ý nghĩa.

Cả hai lý do này đều là những mục tiêu xứng đáng vì chúng làm giảm dung lượng mà cơ sở dữ liệu sử dụng và đảm bảo rằng dữ liệu được lưu trữ một cách hợp lý. Chuẩn hóa bao gồm một loạt các nguyên tắc giúp hướng dẫn bạn tạo một cấu trúc cơ sở dữ liệu tốt.

Hướng dẫn chuẩn hóa được chia thành các dạng thông thường; nghĩ về một biểu mẫu như là định dạng hoặc cách một cấu trúc cơ sở dữ liệu được trình bày. Mục đích của các biểu mẫu thông thường là tổ chức cấu trúc cơ sở dữ liệu, sao cho nó tuân thủ các quy tắc của biểu mẫu chuẩn đầu tiên, sau đó là biểu mẫu chuẩn thứ hai và cuối cùng là biểu mẫu chuẩn thứ ba.

Bạn có thể chọn nó xa hơn và chuyển sang dạng chuẩn thứ tư, dạng chuẩn thứ năm, v.v., nhưng nói chung, dạng chuẩn thứ ba là quá đủ.

  • Dạng chuẩn đầu tiên (1NF)
  • Dạng chuẩn thứ hai (2NF)
  • Dạng chuẩn thứ ba (3NF)

Có rất nhiều RDBMS phổ biến có sẵn để làm việc. Hướng dẫn này cung cấp tổng quan ngắn gọn về một số RDBMS phổ biến nhất. Điều này sẽ giúp bạn so sánh các tính năng cơ bản của chúng.

MySQL

MySQL là một cơ sở dữ liệu SQL mã nguồn mở, được phát triển bởi một công ty Thụy Điển - MySQL AB. MySQL được phát âm là "my ess-que-ell", trái ngược với SQL, được phát âm là "phần tiếp theo".

MySQL đang hỗ trợ nhiều nền tảng khác nhau bao gồm Microsoft Windows, các bản phân phối Linux chính, UNIX và Mac OS X.

MySQL có các phiên bản miễn phí và trả phí, tùy thuộc vào cách sử dụng (phi thương mại / thương mại) và các tính năng của nó. MySQL đi kèm với một máy chủ cơ sở dữ liệu SQL rất nhanh, đa luồng, nhiều người dùng và mạnh mẽ.

Lịch sử

  • Sự phát triển của MySQL bởi Michael Widenius và David Axmark bắt đầu vào năm 1994.

  • Phát hành nội bộ đầu tiên vào ngày 23 thứ tháng năm 1995.

  • Phiên bản Windows được phát hành vào 8 ngày tháng 1 năm 1998 cho Windows 95 và NT.

  • Phiên bản 3.23: beta từ tháng 6 năm 2000, bản sản xuất tháng 1 năm 2001.

  • Phiên bản 4.0: beta từ tháng 8 năm 2002, bản sản xuất tháng 3 năm 2003 (công đoàn).

  • Phiên bản 4.1: beta từ tháng 6 năm 2004, bản sản xuất tháng 10 năm 2004.

  • Phiên bản 5.0: beta từ tháng 3 năm 2005, bản sản xuất tháng 10 năm 2005.

  • Sun Microsystems mua MySQL AB trên 26 ngày tháng 2 năm 2008.

  • Version 5.1: sản xuất phát hành 27 ngày tháng 11 năm 2008.

Đặc trưng

  • Hiệu suất cao.
  • Tính khả dụng cao.
  • Khả năng mở rộng và tính linh hoạt Chạy mọi thứ.
  • Hỗ trợ giao dịch mạnh mẽ.
  • Điểm mạnh của Kho dữ liệu và Web.
  • Bảo vệ dữ liệu mạnh mẽ.
  • Phát triển ứng dụng toàn diện.
  • Quản lý dễ dàng.
  • Nguồn mở Tự do và Hỗ trợ 24 x 7.
  • Tổng chi phí sở hữu thấp nhất.

Máy chủ MS SQL

MS SQL Server là Hệ thống quản lý cơ sở dữ liệu quan hệ được phát triển bởi Microsoft Inc. Các ngôn ngữ truy vấn chính của nó là:

  • T-SQL
  • ANSI SQL

Lịch sử

  • 1987 - Sybase phát hành SQL Server cho UNIX.

  • 1988 - Microsoft, Sybase và Aston-Tate chuyển SQL Server sang OS / 2.

  • 1989 - Microsoft, Sybase và Aston-Tate phát hành SQL Server 1.0 cho OS / 2.

  • 1990 - SQL Server 1.1 được phát hành với sự hỗ trợ cho các máy khách Windows 3.0.

  • Aston - Tate ngừng phát triển SQL Server.

  • 2000 - Microsoft phát hành SQL Server 2000.

  • 2001 - Microsoft phát hành XML cho SQL Server Web Release 1 (tải xuống).

  • 2002 - Microsoft phát hành SQLXML 2.0 (được đổi tên từ XML cho SQL Server).

  • 2002 - Microsoft phát hành SQLXML 3.0.

  • 2005 - Microsoft phát hành SQL Server 2005 vào ngày 7 tháng 11 năm 2005.

Đặc trưng

  • Hiệu suất cao
  • Tính khả dụng cao
  • Phản chiếu cơ sở dữ liệu
  • Ảnh chụp nhanh cơ sở dữ liệu
  • Tích hợp CLR
  • Người môi giới dịch vụ
  • Trình kích hoạt DDL
  • Chức năng xếp hạng
  • Các mức cách ly dựa trên phiên bản hàng
  • Tích hợp XML
  • TRY...CATCH
  • Thư cơ sở dữ liệu

ORACLE

Nó là một hệ thống quản lý cơ sở dữ liệu dựa trên nhiều người dùng rất lớn. Oracle là một hệ quản trị cơ sở dữ liệu quan hệ được phát triển bởi 'Oracle Corporation'.

Oracle làm việc để quản lý hiệu quả tài nguyên của mình, một cơ sở dữ liệu thông tin giữa nhiều máy khách yêu cầu và gửi dữ liệu trong mạng.

Nó là một sự lựa chọn máy chủ cơ sở dữ liệu tuyệt vời cho máy khách / máy chủ. Oracle hỗ trợ tất cả các hệ điều hành chính cho cả máy khách và máy chủ, bao gồm MSDOS, NetWare, UnixWare, OS / 2 và hầu hết các phiên bản UNIX.

Lịch sử

Oracle bắt đầu hoạt động vào năm 1977 và kỷ niệm 32 năm tuyệt vời trong ngành (từ 1977 đến 2009).

  • 1977 - Larry Ellison, Bob Miner và Ed Oates thành lập Phòng thí nghiệm Phát triển Phần mềm để đảm nhận công việc phát triển.

  • 1979 - Phiên bản 2.0 của Oracle được phát hành và nó trở thành cơ sở dữ liệu quan hệ thương mại đầu tiên và cơ sở dữ liệu SQL đầu tiên. Công ty đổi tên thành Relational Software Inc. (RSI).

  • 1981 - RSI bắt đầu phát triển các công cụ cho Oracle.

  • 1982 - RSI được đổi tên thành Oracle Corporation.

  • 1983 - Oracle phát hành phiên bản 3.0, được viết lại bằng ngôn ngữ C và chạy trên nhiều nền tảng.

  • 1984 - Oracle phiên bản 4.0 được phát hành. Nó chứa các tính năng như kiểm soát đồng thời - tính nhất quán đọc nhiều phiên bản, v.v.

  • 1985 - Oracle phiên bản 4.0 được phát hành. Nó chứa các tính năng như kiểm soát đồng thời - tính nhất quán đọc nhiều phiên bản, v.v.

  • 2007 - Oracle phát hành Oracle11g. Phiên bản mới tập trung vào phân vùng tốt hơn, di chuyển dễ dàng, v.v.

Đặc trưng

  • Concurrency
  • Đọc nhất quán
  • Cơ chế khóa
  • Cơ sở dữ liệu Quiesce
  • Portability
  • Cơ sở dữ liệu tự quản lý
  • SQL*Plus
  • ASM
  • Scheduler
  • Quản lý tài nguyên
  • Kho dữ liệu
  • Chế độ xem cụ thể hóa
  • Chỉ mục bitmap
  • Nén bảng
  • Thực hiện song song
  • SQL phân tích
  • Khai thác dữ liệu
  • Partitioning

TRUY CẬP MS

Đây là một trong những sản phẩm phổ biến nhất của Microsoft. Microsoft Access là một phần mềm quản lý cơ sở dữ liệu cấp mục nhập. Cơ sở dữ liệu MS Access không chỉ rẻ mà còn là một cơ sở dữ liệu mạnh mẽ cho các dự án quy mô nhỏ.

MS Access sử dụng công cụ cơ sở dữ liệu Jet, sử dụng phương ngữ ngôn ngữ SQL cụ thể (đôi khi được gọi là Jet SQL).

MS Access đi kèm với phiên bản chuyên nghiệp của gói MS Office. MS Access có giao diện đồ họa trực quan dễ sử dụng.

  • 1992 - Access phiên bản 1.0 được phát hành.

  • 1993 - Access 1.1 được phát hành để cải thiện khả năng tương thích với việc đưa vào ngôn ngữ lập trình Access Basic.

  • Sự chuyển đổi quan trọng nhất là từ Access 97 sang Access 2000.

  • 2007 - Access 2007, một định dạng cơ sở dữ liệu mới được giới thiệu ACCDB hỗ trợ các kiểu dữ liệu phức tạp như trường đa giá trị và trường đính kèm.

Đặc trưng

  • Người dùng có thể tạo bảng, truy vấn, biểu mẫu và báo cáo và kết nối chúng với nhau bằng macro.

  • Tùy chọn nhập và xuất dữ liệu sang nhiều định dạng bao gồm Excel, Outlook, ASCII, dBase, Paradox, FoxPro, SQL Server, Oracle, ODBC, v.v.

  • Ngoài ra còn có định dạng Cơ sở dữ liệu phản lực (MDB hoặc ACCDB trong Access 2007), có thể chứa ứng dụng và dữ liệu trong một tệp. Điều này làm cho nó rất thuận tiện để phân phối toàn bộ ứng dụng cho một người dùng khác, người có thể chạy nó trong môi trường không kết nối.

  • Microsoft Access cung cấp các truy vấn được tham số hóa. Các truy vấn và bảng Access này có thể được tham chiếu từ các chương trình khác như VB6 và .NET thông qua DAO hoặc ADO.

  • Các phiên bản dành cho máy tính để bàn của Microsoft SQL Server có thể được sử dụng với Access như một sự thay thế cho Công cụ cơ sở dữ liệu phản lực.

  • Microsoft Access là một cơ sở dữ liệu dựa trên máy chủ tệp. Không giống như hệ quản trị cơ sở dữ liệu quan hệ máy khách-máy chủ (RDBMS), Microsoft Access không triển khai các trình kích hoạt cơ sở dữ liệu, các thủ tục được lưu trữ hoặc ghi nhật ký giao dịch.

SQL - Cú pháp

Theo sau SQL là một bộ quy tắc và hướng dẫn duy nhất được gọi là Cú pháp. Hướng dẫn này giúp bạn bắt đầu nhanh với SQL bằng cách liệt kê tất cả Cú pháp SQL cơ bản.

Tất cả các câu lệnh SQL bắt đầu bằng bất kỳ từ khóa nào như SELECT, INSERT, UPDATE, DELETE, ALTER, DROP, CREATE, USE, SHOW và tất cả các câu kết thúc bằng dấu chấm phẩy (;).

Điểm quan trọng nhất cần lưu ý ở đây là SQL không phân biệt chữ hoa chữ thường, có nghĩa là SELECT và select có cùng ý nghĩa trong các câu lệnh SQL. Trong khi, MySQL tạo ra sự khác biệt trong tên bảng. Vì vậy, nếu bạn đang làm việc với MySQL, thì bạn cần đặt tên bảng khi chúng tồn tại trong cơ sở dữ liệu.

Cú pháp khác nhau trong SQL

Tất cả các ví dụ được đưa ra trong hướng dẫn này đã được thử nghiệm với máy chủ MySQL.

Câu lệnh SQL SELECT

SELECT column1, column2....columnN
FROM   table_name;

Mệnh đề DISTINCT trong SQL

SELECT DISTINCT column1, column2....columnN
FROM   table_name;

Mệnh đề WHERE trong SQL

SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION;

Mệnh đề SQL AND / OR

SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION-1 {AND|OR} CONDITION-2;

Mệnh đề SQL IN

SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name IN (val-1, val-2,...val-N);

Mệnh đề SQL GIỮA

SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name BETWEEN val-1 AND val-2;

Mệnh đề LIKE trong SQL

SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name LIKE { PATTERN };

Mệnh đề SQL ORDER BY

SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION
ORDER BY column_name {ASC|DESC};

Mệnh đề GROUP BY trong SQL

SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name;

Mệnh đề COUNT trong SQL

SELECT COUNT(column_name)
FROM   table_name
WHERE  CONDITION;

Mệnh đề HAVING trong SQL

SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name
HAVING (arithematic function condition);

Câu lệnh SQL CREATE TABLE

CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns )
);

Câu lệnh SQL DROP TABLE

DROP TABLE table_name;

Câu lệnh SQL CREATE INDEX

CREATE UNIQUE INDEX index_name
ON table_name ( column1, column2,...columnN);

Câu lệnh SQL DROP INDEX

ALTER TABLE table_name
DROP INDEX index_name;

Câu lệnh SQL DESC

DESC table_name;

Câu lệnh SQL TRUNCATE TABLE

TRUNCATE TABLE table_name;

Câu lệnh SQL ALTER TABLE

ALTER TABLE table_name {ADD|DROP|MODIFY} column_name {data_ype};

Câu lệnh SQL ALTER TABLE (Đổi tên)

ALTER TABLE table_name RENAME TO new_table_name;

SQL INSERT INTO Statement

INSERT INTO table_name( column1, column2....columnN)
VALUES ( value1, value2....valueN);

Câu lệnh SQL UPDATE

UPDATE table_name
SET column1 = value1, column2 = value2....columnN=valueN
[ WHERE  CONDITION ];

Câu lệnh SQL DELETE

DELETE FROM table_name
WHERE  {CONDITION};

Câu lệnh SQL CREATE DATABASE

CREATE DATABASE database_name;

Câu lệnh SQL DROP DATABASE

DROP DATABASE database_name;

Tuyên bố SỬ DỤNG SQL

USE database_name;

Câu lệnh SQL COMMIT

COMMIT;

Câu lệnh SQL ROLLBACK

ROLLBACK;

SQL - Các kiểu dữ liệu

Kiểu dữ liệu SQL là một thuộc tính chỉ định kiểu dữ liệu của bất kỳ đối tượng nào. Mỗi cột, biến và biểu thức có một kiểu dữ liệu liên quan trong SQL. Bạn có thể sử dụng các kiểu dữ liệu này trong khi tạo bảng của mình. Bạn có thể chọn kiểu dữ liệu cho cột bảng dựa trên yêu cầu của mình.

SQL Server cung cấp sáu danh mục kiểu dữ liệu để bạn sử dụng được liệt kê bên dưới:

Các kiểu dữ liệu số chính xác

LOẠI DỮ LIỆU TỪ ĐẾN
bigint -9.223.372.036.854.775.808 9.223.372.036.854.775.807
int -2.147.483.648 2.147.483.647
lửa -32.768 32.767
tí hon 0 255
bit 0 1
thập phân -10 ^ 38 +1 10 ^ 38 -1
số -10 ^ 38 +1 10 ^ 38 -1
tiền bạc -922.337.203.685.477.5808 +922.337.203.685.477.5807
tiền nhỏ -214.748,3648 +214.748.3647

Các kiểu dữ liệu số gần đúng

LOẠI DỮ LIỆU TỪ ĐẾN
Phao nổi -1,79E + 308 1,79E + 308
thực tế -3.40E + 38 3,40E + 38

Loại dữ liệu ngày và giờ

LOẠI DỮ LIỆU TỪ ĐẾN
ngày giờ 1 tháng 1 năm 1753 Ngày 31 tháng 12 năm 9999
smalldatetime 1 tháng 1 năm 1900 6 tháng 6 năm 2079
ngày Lưu ngày như 30 tháng 6 năm 1991
thời gian Lưu trữ một thời gian trong ngày như 12:30 chiều

Note - Ở đây, datetime có độ chính xác 3,33 mili giây trong khi smalldatetime có độ chính xác 1 phút.

Các kiểu dữ liệu chuỗi ký tự

Sr.No. LOẠI DỮ LIỆU & Mô tả
1

char

Độ dài tối đa là 8.000 ký tự. (Độ dài cố định không phải ký tự Unicode)

2

varchar

Tối đa 8.000 ký tự. (Dữ liệu không phải Unicode có độ dài thay đổi).

3

varchar(max)

Độ dài tối đa 2E + 31 ký tự, dữ liệu không phải Unicode có độ dài thay đổi (chỉ dành cho SQL Server 2005).

4

text

Dữ liệu không phải Unicode có độ dài thay đổi với độ dài tối đa là 2.147.483.647 ký tự.

Các kiểu dữ liệu chuỗi ký tự Unicode

Sr.No. LOẠI DỮ LIỆU & Mô tả
1

nchar

Độ dài tối đa 4.000 ký tự. (Unicode độ dài cố định)

2

nvarchar

Độ dài tối đa là 4.000 ký tự. (Unicode có độ dài thay đổi)

3

nvarchar(max)

Độ dài tối đa 2E + 31 ký tự (chỉ dành cho SQL Server 2005). (Độ dài thay đổi Unicode)

4

ntext

Độ dài tối đa 1.073.741.823 ký tự. (Unicode có độ dài thay đổi)

Kiểu dữ liệu nhị phân

Sr.No. LOẠI DỮ LIỆU & Mô tả
1

binary

Độ dài tối đa 8.000 byte (Dữ liệu nhị phân có độ dài cố định)

2

varbinary

Độ dài tối đa 8.000 byte. (Dữ liệu nhị phân có độ dài thay đổi)

3

varbinary(max)

Độ dài tối đa 2E + 31 byte (chỉ dành cho SQL Server 2005). (Độ dài thay đổi Dữ liệu nhị phân)

4

image

Độ dài tối đa 2.147.483.647 byte. (Dữ liệu nhị phân có độ dài thay đổi)

Các loại dữ liệu khác

Sr.No. LOẠI DỮ LIỆU & Mô tả
1

sql_variant

Lưu trữ các giá trị của nhiều kiểu dữ liệu được SQL Server hỗ trợ, ngoại trừ văn bản, văn bản và dấu thời gian.

2

timestamp

Lưu trữ một số duy nhất trên toàn cơ sở dữ liệu được cập nhật mỗi khi một hàng được cập nhật

3

uniqueidentifier

Lưu trữ số nhận dạng duy nhất trên toàn cầu (GUID)

4

xml

Lưu trữ dữ liệu XML. Bạn có thể lưu trữ các phiên bản xml trong một cột hoặc một biến (chỉ dành cho SQL Server 2005).

5

cursor

Tham chiếu đến một đối tượng con trỏ

6

table

Lưu trữ tập hợp kết quả để xử lý sau

SQL - Toán tử

Toán tử trong SQL là gì?

Toán tử là một từ dành riêng hoặc một ký tự được sử dụng chủ yếu trong mệnh đề WHERE của câu lệnh SQL để thực hiện (các) hoạt động, chẳng hạn như so sánh và các phép toán số học. Các toán tử này được sử dụng để chỉ định các điều kiện trong một câu lệnh SQL và dùng làm các liên từ cho nhiều điều kiện trong một câu lệnh.

  • Toán tử số học
  • Toán tử so sánh
  • Toán tử logic
  • Các toán tử được sử dụng để phủ định các điều kiện

Toán tử số học SQL

Giả định 'variable a' giữ 10 và 'variable b' giữ 20, sau đó -

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
+ (Bổ sung) Thêm giá trị vào hai bên của toán tử. a + b sẽ cho 30
- (Phép trừ) Trừ toán hạng bên phải khỏi toán hạng bên trái. a - b sẽ cho -10
* (Phép nhân) Nhân các giá trị ở hai bên của toán tử. a * b sẽ cho 200
/ (Bộ phận) Chia toán hạng bên trái cho toán hạng bên phải. b / a sẽ cho 2
% (Mô-đun) Chia toán hạng bên trái cho toán hạng bên phải và trả về phần dư. b% a sẽ cho 0

Toán tử so sánh SQL

Giả định 'variable a' giữ 10 và 'variable b' giữ 20, sau đó -

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
= Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu có thì điều kiện trở thành true. (a = b) không đúng.
! = Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu các giá trị không bằng nhau thì điều kiện trở thành true. (a! = b) là đúng.
<> Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu các giá trị không bằng nhau thì điều kiện trở thành true. (a <> b) là đúng.
> Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành đúng. (a> b) không đúng.
< Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (a <b) là đúng.
> = Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn hoặc bằng giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (a> = b) không đúng.
<= Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn hoặc bằng giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (a <= b) là đúng.
! < Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (a! <b) là false.
!> Kiểm tra nếu giá trị của toán hạng bên trái không lớn hơn giá trị của toán hạng bên phải, nếu có thì điều kiện trở thành true. (a!> b) là đúng.

Toán tử logic SQL

Đây là danh sách tất cả các toán tử logic có sẵn trong SQL.

Hiển thị các ví dụ

Sr.No. Nhà điều hành & Mô tả
1

ALL

Toán tử ALL được sử dụng để so sánh một giá trị với tất cả các giá trị trong tập giá trị khác.

2

AND

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

3

ANY

Toán tử BẤT KỲ được sử dụng để so sánh một giá trị với bất kỳ giá trị áp dụng nào trong danh sách theo điều kiện.

4

BETWEEN

Toán tử BETWEEN được sử dụng để tìm kiếm các giá trị nằm trong một bộ giá trị, cho giá trị nhỏ nhất và giá trị lớn nhất.

5

EXISTS

Toán tử EXISTS được sử dụng để tìm kiếm sự hiện diện của một hàng trong một bảng được chỉ định đáp ứng một tiêu chí nhất định.

6

IN

Toán tử IN được sử dụng để so sánh một giá trị với danh sách các giá trị theo nghĩa đen đã được chỉ định.

7

LIKE

Toán tử LIKE được sử dụng để so sánh một giá trị với các giá trị tương tự bằng cách sử dụng các toán tử ký tự đại diện.

số 8

NOT

Toán tử NOT đảo ngược ý nghĩa của toán tử logic mà nó được sử dụng. Vd: KHÔNG TỒN TẠI, KHÔNG GIỮA, KHÔNG VÀO, v.v.This is a negate operator.

9

OR

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

10

IS NULL

Toán tử NULL được sử dụng để so sánh một giá trị với một giá trị NULL.

11

UNIQUE

Toán tử UNIQUE tìm kiếm mọi hàng của một bảng được chỉ định để tìm tính duy nhất (không trùng lặp).

SQL - Biểu thức

Một biểu thức là sự kết hợp của một hoặc nhiều giá trị, toán tử và hàm SQL đánh giá thành một giá trị. Các SQL EXPRESSION này giống như các công thức và chúng được viết bằng ngôn ngữ truy vấn. Bạn cũng có thể sử dụng chúng để truy vấn cơ sở dữ liệu cho một tập dữ liệu cụ thể.

Cú pháp

Hãy xem xét cú pháp cơ bản của câu lệnh SELECT như sau:

SELECT column1, column2, columnN 
FROM table_name 
WHERE [CONDITION|EXPRESSION];

Có các loại biểu thức SQL khác nhau, được đề cập bên dưới:

  • Boolean
  • Numeric
  • Date

Bây giờ chúng ta hãy thảo luận chi tiết từng điều này.

Biểu thức Boolean

Biểu thức Boolean trong SQL tìm nạp dữ liệu dựa trên việc so khớp một giá trị. Sau đây là cú pháp:

SELECT column1, column2, columnN 
FROM table_name 
WHERE SINGLE VALUE MATCHING EXPRESSION;

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
7 rows in set (0.00 sec)

Bảng sau đây là một ví dụ đơn giản cho thấy việc sử dụng các Biểu thức Boolean SQL khác nhau:

SQL> SELECT * FROM CUSTOMERS WHERE SALARY = 10000;
+----+-------+-----+---------+----------+
| ID | NAME  | AGE | ADDRESS | SALARY   |
+----+-------+-----+---------+----------+
|  7 | Muffy |  24 | Indore  | 10000.00 |
+----+-------+-----+---------+----------+
1 row in set (0.00 sec)

Biểu thức số

Các biểu thức này được sử dụng để thực hiện bất kỳ phép toán nào trong bất kỳ truy vấn nào. Sau đây là cú pháp:

SELECT numerical_expression as  OPERATION_NAME
[FROM table_name
WHERE CONDITION] ;

Ở đây, biểu thức số được sử dụng cho một biểu thức toán học hoặc bất kỳ công thức nào. Sau đây là một ví dụ đơn giản cho thấy cách sử dụng Biểu thức số trong SQL:

SQL> SELECT (15 + 6) AS ADDITION
+----------+
| ADDITION |
+----------+
|       21 |
+----------+
1 row in set (0.00 sec)

Có một số hàm tích hợp sẵn như avg (), sum (), count (), v.v., để thực hiện những gì được gọi là tính toán dữ liệu tổng hợp dựa trên một bảng hoặc một cột bảng cụ thể.

SQL> SELECT COUNT(*) AS "RECORDS" FROM CUSTOMERS; 
+---------+
| RECORDS |
+---------+
|       7 |
+---------+
1 row in set (0.00 sec)

Biểu thức ngày

Biểu thức ngày trả về giá trị ngày và giờ hệ thống hiện tại -

SQL>  SELECT CURRENT_TIMESTAMP;
+---------------------+
| Current_Timestamp   |
+---------------------+
| 2009-11-12 06:40:23 |
+---------------------+
1 row in set (0.00 sec)

Một biểu thức ngày tháng khác như được hiển thị bên dưới -

SQL>  SELECT  GETDATE();;
+-------------------------+
| GETDATE                 |
+-------------------------+
| 2009-10-22 12:07:18.140 |
+-------------------------+
1 row in set (0.00 sec)

SQL - TẠO Cơ sở dữ liệu

SQL CREATE DATABASE câu lệnh được sử dụng để tạo cơ sở dữ liệu SQL mới.

Cú pháp

Cú pháp cơ bản của câu lệnh CREATE DATABASE này như sau:

CREATE DATABASE DatabaseName;

Tên cơ sở dữ liệu luôn phải là duy nhất trong RDBMS.

Thí dụ

Nếu bạn muốn tạo một cơ sở dữ liệu mới <testDB>, thì câu lệnh CREATE DATABASE sẽ như hình dưới đây:

SQL> CREATE DATABASE testDB;

Đảm bảo bạn có đặc quyền quản trị trước khi tạo bất kỳ cơ sở dữ liệu nào. Sau khi cơ sở dữ liệu được tạo, bạn có thể kiểm tra nó trong danh sách cơ sở dữ liệu như sau:

SQL> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| AMROOD             |
| TUTORIALSPOINT     |
| mysql              |
| orig               |
| test               |
| testDB             |
+--------------------+
7 rows in set (0.00 sec)

Cơ sở dữ liệu SQL - DROP hoặc DELETE

SQL DROP DATABASE câu lệnh được sử dụng để loại bỏ một cơ sở dữ liệu hiện có trong lược đồ SQL.

Cú pháp

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

DROP DATABASE DatabaseName;

Tên cơ sở dữ liệu luôn phải là duy nhất trong RDBMS.

Thí dụ

Nếu bạn muốn xóa một cơ sở dữ liệu hiện có <testDB>, thì câu lệnh DROP DATABASE sẽ như hình dưới đây:

SQL> DROP DATABASE testDB;

NOTE - Hãy cẩn thận trước khi sử dụng thao tác này vì việc xóa cơ sở dữ liệu hiện có sẽ làm mất thông tin đầy đủ được lưu trữ trong cơ sở dữ liệu.

Đảm bảo rằng bạn có đặc quyền quản trị trước khi bỏ bất kỳ cơ sở dữ liệu nào. Sau khi cơ sở dữ liệu bị loại bỏ, bạn có thể kiểm tra nó trong danh sách cơ sở dữ liệu như hình dưới đây:

SQL> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| AMROOD             |
| TUTORIALSPOINT     |
| mysql              |
| orig               |
| test               |
+--------------------+
6 rows in set (0.00 sec)

SQL - Cơ sở dữ liệu CHỌN, Tuyên bố SỬ DỤNG

Khi bạn có nhiều cơ sở dữ liệu trong Lược đồ SQL, thì trước khi bắt đầu thao tác, bạn cần chọn một cơ sở dữ liệu nơi tất cả các thao tác sẽ được thực hiện.

SQL USE câu lệnh được sử dụng để chọn bất kỳ cơ sở dữ liệu hiện có nào trong lược đồ SQL.

Cú pháp

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

USE DatabaseName;

Tên cơ sở dữ liệu luôn phải là duy nhất trong RDBMS.

Thí dụ

Bạn có thể kiểm tra các cơ sở dữ liệu có sẵn như hình dưới đây -

SQL> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| AMROOD             |
| TUTORIALSPOINT     |
| mysql              |
| orig               |
| test               |
+--------------------+
6 rows in set (0.00 sec)

Bây giờ, nếu bạn muốn làm việc với cơ sở dữ liệu AMROOD, thì bạn có thể thực thi lệnh SQL sau và bắt đầu làm việc với cơ sở dữ liệu AMROOD.

SQL> USE AMROOD;

SQL - TẠO Bảng

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

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

Cú pháp

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

CREATE TABLE table_name(
   column1 datatype,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
   PRIMARY KEY( one or more columns )
);

CREATE TABLE là từ khóa cho hệ thống cơ sở dữ liệu biết bạn muốn làm gì. Trong trường hợp này, bạn muốn tạo một bảng mới. Tên hoặc định danh duy nhất cho bảng tuân theo câu lệnh CREATE TABLE.

Sau đó, trong dấu ngoặc là danh sách xác định từng cột trong bảng và kiểu dữ liệu đó là gì. Cú pháp trở nên rõ ràng hơn với ví dụ sau.

Bản sao của bảng hiện có có thể được tạo bằng cách sử dụng kết hợp câu lệnh CREATE TABLE và câu lệnh SELECT. Bạn có thể kiểm tra chi tiết đầy đủ tại Tạo Bảng Sử dụng Bảng khác.

Thí dụ

Khối mã sau đây là một ví dụ, khối này tạo bảng CUSTOMERS với ID làm khóa chính và KHÔNG ĐỦ là các ràng buộc cho thấy rằng các trường này không thể là NULL khi tạo bản ghi trong bảng này -

SQL> CREATE TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);

Bạn có thể xác minh xem bảng của mình đã được tạo thành công hay chưa bằng cách xem thông báo do máy chủ SQL hiển thị, nếu không, bạn có thể sử dụng DESC lệnh như sau:

SQL> DESC CUSTOMERS;
+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| ID      | int(11)       | NO   | PRI |         |       |
| NAME    | varchar(20)   | NO   |     |         |       |
| AGE     | int(11)       | NO   |     |         |       |
| ADDRESS | char(25)      | YES  |     | NULL    |       |
| SALARY  | decimal(18,2) | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Bây giờ, bạn có sẵn bảng CUSTOMERS trong cơ sở dữ liệu của mình mà bạn có thể sử dụng để lưu trữ thông tin cần thiết liên quan đến khách hàng.

SQL - bảng DROP hoặc DELETE

SQL DROP TABLE câu lệnh được sử dụng để xóa định nghĩa bảng và tất cả dữ liệu, chỉ mục, trình kích hoạt, ràng buộc và đặc tả quyền cho bảng đó.

NOTE - Bạn nên hết sức cẩn thận khi sử dụng lệnh này vì khi một bảng bị xóa thì tất cả thông tin có trong bảng đó cũng sẽ bị mất vĩnh viễn.

Cú pháp

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

DROP TABLE table_name;

Thí dụ

Trước tiên hãy để chúng tôi xác minh bảng KHÁCH HÀNG và sau đó chúng tôi sẽ xóa nó khỏi cơ sở dữ liệu như hình dưới đây -

SQL> DESC CUSTOMERS;
+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| ID      | int(11)       | NO   | PRI |         |       |
| NAME    | varchar(20)   | NO   |     |         |       |
| AGE     | int(11)       | NO   |     |         |       |
| ADDRESS | char(25)      | YES  |     | NULL    |       |
| SALARY  | decimal(18,2) | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Điều này có nghĩa là bảng CUSTOMERS có sẵn trong cơ sở dữ liệu, vì vậy bây giờ chúng ta hãy thả nó xuống như hình dưới đây.

SQL> DROP TABLE CUSTOMERS;
Query OK, 0 rows affected (0.01 sec)

Bây giờ, nếu bạn thử lệnh DESC, thì bạn sẽ gặp lỗi sau:

SQL> DESC CUSTOMERS;
ERROR 1146 (42S02): Table 'TEST.CUSTOMERS' doesn't exist

Ở đây, TEST là tên cơ sở dữ liệu mà chúng tôi đang sử dụng cho các ví dụ của mình.

SQL - Truy vấn CHÈN

SQL INSERT INTO Câu lệnh được sử dụng để thêm các hàng dữ liệu mới vào bảng trong cơ sở dữ liệu.

Cú pháp

Có hai cú pháp cơ bản của câu lệnh INSERT INTO được hiển thị bên dưới.

INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)  
VALUES (value1, value2, value3,...valueN);

Ở đây, column1, column2, column3, ... columnN là tên của các cột trong bảng mà bạn muốn chèn dữ liệu vào.

Bạn có thể không cần chỉ định (các) tên cột trong truy vấn SQL nếu bạn đang thêm giá trị cho tất cả các cột của bảng. Nhưng đảm bảo thứ tự của các giá trị theo thứ tự như các cột trong bảng.

Các SQL INSERT INTO cú pháp sẽ như sau:

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

Thí dụ

Các câu lệnh sau sẽ tạo sáu bản ghi trong bảng CUSTOMERS.

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );

Bạn có thể tạo bản ghi trong bảng KHÁCH HÀNG bằng cú pháp thứ hai như hình dưới đây.

INSERT INTO CUSTOMERS 
VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );

Tất cả các câu lệnh trên sẽ tạo ra các bản ghi sau trong bảng CUSTOMERS như được hiển thị bên dưới.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Điền vào một bảng bằng một bảng khác

Bạn có thể điền dữ liệu vào một bảng thông qua câu lệnh select trên một bảng khác; miễn là bảng kia có một tập hợp các trường, bắt buộc phải điền vào bảng đầu tiên.

Đây là cú pháp -

INSERT INTO first_table_name [(column1, column2, ... columnN)] 
   SELECT column1, column2, ...columnN 
   FROM second_table_name
   [WHERE condition];

SQL - Truy vấn CHỌN

SQL SELECTcâu lệnh được sử dụng để tìm nạp dữ liệu từ một bảng cơ sở dữ liệu trả về dữ liệu này dưới dạng một bảng kết quả. Các bảng kết quả này được gọi là tập kết quả.

Cú pháp

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

SELECT column1, column2, columnN FROM table_name;

Ở đây, column1, column2 ... là các trường của bảng có các giá trị bạn muốn tìm nạp. Nếu bạn muốn tìm nạp tất cả các trường có sẵn trong trường, thì bạn có thể sử dụng cú pháp sau.

SELECT * FROM table_name;

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Đoạn mã sau là một ví dụ, sẽ lấy các trường ID, Tên và Mức lương của các khách hàng có sẵn trong bảng CUSTOMERS.

SQL> SELECT ID, NAME, SALARY FROM CUSTOMERS;

Điều này sẽ tạo ra kết quả sau:

+----+----------+----------+
| ID | NAME     | SALARY   |
+----+----------+----------+
|  1 | Ramesh   |  2000.00 |
|  2 | Khilan   |  1500.00 |
|  3 | kaushik  |  2000.00 |
|  4 | Chaitali |  6500.00 |
|  5 | Hardik   |  8500.00 |
|  6 | Komal    |  4500.00 |
|  7 | Muffy    | 10000.00 |
+----+----------+----------+

Nếu bạn muốn tìm nạp tất cả các trường của bảng CUSTOMERS, thì bạn nên sử dụng truy vấn sau.

SQL> SELECT * FROM CUSTOMERS;

Điều này sẽ tạo ra kết quả như hình dưới đây.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

SQL - Mệnh đề WHERE

SQL WHEREmệnh đề được sử dụng để chỉ định một điều kiện trong khi tìm nạp dữ liệu từ một bảng hoặc bằng cách kết hợp với nhiều bảng. Nếu điều kiện đã cho được thỏa mãn, thì chỉ nó trả về một giá trị cụ thể từ bảng. Bạn nên sử dụng mệnh đề WHERE để lọc các bản ghi và chỉ tìm nạp các bản ghi cần thiết.

Mệnh đề WHERE không chỉ được sử dụng trong câu lệnh SELECT mà nó còn được sử dụng trong câu lệnh UPDATE, DELETE, v.v., mà chúng ta sẽ xem xét trong các chương tiếp theo.

Cú pháp

Cú pháp cơ bản của câu lệnh SELECT với mệnh đề WHERE như hình dưới đây.

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition]

Bạn có thể chỉ định một điều kiện bằng cách sử dụng các toán tử so sánh hoặc lôgic như>, <, =,LIKE, NOT, vv Các ví dụ sau đây sẽ làm rõ khái niệm này.

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Đoạn mã sau là một ví dụ sẽ tìm nạp các trường ID, Tên và Lương từ bảng KHÁCH HÀNG, trong đó mức lương lớn hơn 2000 -

SQL> SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE SALARY > 2000;

Điều này sẽ tạo ra kết quả sau:

+----+----------+----------+
| ID | NAME     | SALARY   |
+----+----------+----------+
|  4 | Chaitali |  6500.00 |
|  5 | Hardik   |  8500.00 |
|  6 | Komal    |  4500.00 |
|  7 | Muffy    | 10000.00 |
+----+----------+----------+

Truy vấn sau là một ví dụ, truy vấn này sẽ tìm nạp các trường ID, Tên và Mức lương từ bảng CUSTOMERS cho khách hàng có tên Hardik.

Ở đây, điều quan trọng cần lưu ý là tất cả các chuỗi phải được đưa ra bên trong dấu nháy đơn (''). Trong khi đó, các giá trị số nên được đưa ra mà không có bất kỳ dấu ngoặc kép nào như trong ví dụ trên.

SQL> SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE NAME = 'Hardik';

Điều này sẽ tạo ra kết quả sau:

+----+----------+----------+
| ID | NAME     | SALARY   |
+----+----------+----------+
|  5 | Hardik   |  8500.00 |
+----+----------+----------+

SQL - Toán tử kết hợp AND và OR

SQL AND & ORtoán tử được sử dụng để kết hợp nhiều điều kiện để thu hẹp dữ liệu trong một câu lệnh SQL. Hai toán tử này được gọi là toán tử liên hợp.

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

Toán tử AND

Các AND toán tử cho phép tồn tại nhiều điều kiện trong mệnh đề WHERE của câu 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 column1, column2, columnN 
FROM table_name
WHERE [condition1] AND [condition2]...AND [conditionN];

Bạn có thể kết hợp N số điều kiện bằng cách sử dụng toán tử AND. Đối với một hành động được thực hiện bởi câu lệnh SQL, cho dù đó là một giao dịch hay một truy vấn, tất cả các điều kiện được phân tách bởi AND phải là TRUE.

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Sau đây là một ví dụ, sẽ lấy các trường ID, Tên và Lương từ bảng KHÁCH HÀNG, trong đó mức lương lớn hơn 2000 và tuổi dưới 25 -

SQL> SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE SALARY > 2000 AND age < 25;

Điều này sẽ tạo ra kết quả sau:

+----+-------+----------+
| ID | NAME  | SALARY   |
+----+-------+----------+
|  6 | Komal |  4500.00 |
|  7 | Muffy | 10000.00 |
+----+-------+----------+

Toán tử HOẶC

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

Cú pháp

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

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] OR [condition2]...OR [conditionN]

Bạn có thể kết hợp N số điều kiện bằng cách sử dụng toán tử OR. Đối với một hành động được thực hiện bởi câu lệnh SQL, cho dù đó là một giao dịch hay truy vấn, thì điều kiện duy nhất bất kỳ MỘT trong các điều kiện được phân tách bằng OR phải là TRUE.

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Truy vấn băm khối mã sau, sẽ tìm nạp các trường ID, Tên và Mức lương từ bảng KHÁCH HÀNG, trong đó mức lương lớn hơn 2000 HOẶC tuổi dưới 25 tuổi.

SQL> SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE SALARY > 2000 OR age < 25;

Điều này sẽ tạo ra kết quả sau:

+----+----------+----------+
| ID | NAME     | SALARY   |
+----+----------+----------+
|  3 | kaushik  |  2000.00 |
|  4 | Chaitali |  6500.00 |
|  5 | Hardik   |  8500.00 |
|  6 | Komal    |  4500.00 |
|  7 | Muffy    | 10000.00 |
+----+----------+----------+

SQL - CẬP NHẬT Truy vấn

SQL UPDATETruy vấn được sử dụng để sửa đổi các bản ghi hiện có trong bảng. Bạn có thể sử dụng mệnh đề WHERE với truy vấn UPDATE để cập nhật các hàng đã chọn, nếu không tất cả 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 table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

Bạn có thể kết hợp N số điều kiện bằng cách sử dụng toán tử VÀ hoặc HOẶC.

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Truy vấn sau sẽ cập nhật ĐỊA CHỈ cho khách hàng có số ID là 6 trong bảng.

SQL> UPDATE CUSTOMERS
SET ADDRESS = 'Pune'
WHERE ID = 6;

Bây giờ, bảng CUSTOMERS sẽ có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | Pune      |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Nếu bạn muốn sửa đổi tất cả các giá trị cột ĐỊA CHỈ và LƯƠNG trong bảng KHÁCH HÀNG, bạn không cần sử dụng mệnh đề WHERE vì truy vấn CẬP NHẬT sẽ đủ như được hiển thị trong khối mã sau.

SQL> UPDATE CUSTOMERS
SET ADDRESS = 'Pune', SALARY = 1000.00;

Bây giờ, bảng CUSTOMERS sẽ có các bản ghi sau:

+----+----------+-----+---------+---------+
| ID | NAME     | AGE | ADDRESS | SALARY  |
+----+----------+-----+---------+---------+
|  1 | Ramesh   |  32 | Pune    | 1000.00 |
|  2 | Khilan   |  25 | Pune    | 1000.00 |
|  3 | kaushik  |  23 | Pune    | 1000.00 |
|  4 | Chaitali |  25 | Pune    | 1000.00 |
|  5 | Hardik   |  27 | Pune    | 1000.00 |
|  6 | Komal    |  22 | Pune    | 1000.00 |
|  7 | Muffy    |  24 | Pune    | 1000.00 |
+----+----------+-----+---------+---------+

SQL - Truy vấn DELETE

Truy vấn SQL DELETE được sử dụng để xóa các bản ghi hiện có khỏi bảng.

Bạn có thể sử dụng mệnh đề WHERE với truy vấn DELETE để xóa các hàng đã chọn, nếu không tất cả các bản ghi sẽ bị xóa.

Cú pháp

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

DELETE FROM table_name
WHERE [condition];

Bạn có thể kết hợp N số điều kiện bằng cách sử dụng toán tử AND hoặc OR.

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Đoạn mã sau có một truy vấn, sẽ XÓA một khách hàng có ID là 6.

SQL> DELETE FROM CUSTOMERS
WHERE ID = 6;

Bây giờ, bảng CUSTOMERS sẽ có các bản ghi sau.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Nếu bạn muốn XÓA tất cả các bản ghi khỏi bảng KHÁCH HÀNG, bạn không cần sử dụng mệnh đề WHERE và truy vấn XÓA sẽ như sau:

SQL> DELETE FROM CUSTOMERS;

Bây giờ, bảng CUSTOMERS sẽ không có bất kỳ bản ghi nào.

SQL - Mệnh đề LIKE

SQL LIKEmệnh đề được sử dụng để so sánh một giá trị với các giá trị tương tự bằng cách sử dụng các toán tử ký tự đại diện. Có hai ký tự đại diện được sử dụng cùng với toán tử LIKE.

  • Dấu phần trăm (%)
  • Dấu gạch dưới (_)

Dấu phần trăm đại diện cho không, một hoặc nhiều ký tự. Dấu gạch dưới thể hiện một số hoặc một ký tự. Các ký hiệu này có thể được sử dụng trong các tổ hợp.

Cú pháp

Cú pháp cơ bản của% và _ như sau:

SELECT FROM table_name
WHERE column LIKE 'XXXX%'

or 

SELECT FROM table_name
WHERE column LIKE '%XXXX%'

or

SELECT FROM table_name
WHERE column LIKE 'XXXX_'

or

SELECT FROM table_name
WHERE column LIKE '_XXXX'

or

SELECT FROM table_name
WHERE column LIKE '_XXXX_'

Bạn có thể kết hợp N số điều kiện bằng cách sử dụng toán tử AND hoặc OR. Ở đây, XXXX có thể là bất kỳ giá trị số hoặc chuỗi nào.

Thí dụ

Bảng sau đây có một vài ví dụ cho thấy phần WHERE có mệnh đề LIKE khác nhau với các toán tử '%' và '_' -

Sr.No. Tuyên bố & Mô tả
1

WHERE SALARY LIKE '200%'

Tìm bất kỳ giá trị nào bắt đầu bằng 200.

2

WHERE SALARY LIKE '%200%'

Tìm bất kỳ giá trị nào có 200 ở bất kỳ vị trí nào.

3

WHERE SALARY LIKE '_00%'

Tìm bất kỳ giá trị nào có 00 ở vị trí thứ hai và thứ ba.

4

WHERE SALARY LIKE '2_%_%'

Tìm bất kỳ giá trị nào bắt đầu bằng 2 và có độ dài ít nhất 3 ký tự.

5

WHERE SALARY LIKE '%2'

Tìm bất kỳ giá trị nào kết thúc bằng 2.

6

WHERE SALARY LIKE '_2%3'

Tìm bất kỳ giá trị nào có số 2 ở vị trí thứ hai và kết thúc bằng số 3.

7

WHERE SALARY LIKE '2___3'

Tìm bất kỳ giá trị nào trong một số có năm chữ số bắt đầu bằng 2 và kết thúc bằng 3.

Chúng ta hãy lấy một ví dụ thực tế, hãy xem xét bảng CUSTOMERS có các bản ghi như hình dưới đây.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Sau đây là một ví dụ, sẽ hiển thị tất cả các bản ghi từ bảng KHÁCH HÀNG, trong đó LƯƠNG bắt đầu bằng 200.

SQL> SELECT * FROM CUSTOMERS
WHERE SALARY LIKE '200%';

Điều này sẽ tạo ra kết quả sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
+----+----------+-----+-----------+----------+

SQL - Mệnh đề TOP, LIMIT hoặc ROWNUM

SQL TOP mệnh đề được sử dụng để lấy số TOP N hoặc bản ghi phần trăm X từ một bảng.

Note- Tất cả các cơ sở dữ liệu không hỗ trợ mệnh đề TOP. Ví dụ: MySQL hỗ trợLIMIT mệnh đề tìm nạp số lượng bản ghi hạn chế trong khi Oracle sử dụng ROWNUM lệnh để tìm nạp một số lượng bản ghi hạn chế.

Cú pháp

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

SELECT TOP number|percent column_name(s)
FROM table_name
WHERE [condition]

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Truy vấn sau đây là một ví dụ trên máy chủ SQL, sẽ tìm nạp 3 bản ghi hàng đầu từ bảng CUSTOMERS.

SQL> SELECT TOP 3 * FROM CUSTOMERS;

Điều này sẽ tạo ra kết quả sau:

+----+---------+-----+-----------+---------+
| ID | NAME    | AGE | ADDRESS   | SALARY  |
+----+---------+-----+-----------+---------+
|  1 | Ramesh  |  32 | Ahmedabad | 2000.00 |
|  2 | Khilan  |  25 | Delhi     | 1500.00 |
|  3 | kaushik |  23 | Kota      | 2000.00 |
+----+---------+-----+-----------+---------+

Nếu bạn đang sử dụng máy chủ MySQL, thì đây là một ví dụ tương đương:

SQL> SELECT * FROM CUSTOMERS
LIMIT 3;

Điều này sẽ tạo ra kết quả sau:

+----+---------+-----+-----------+---------+
| ID | NAME    | AGE | ADDRESS   | SALARY  |
+----+---------+-----+-----------+---------+
|  1 | Ramesh  |  32 | Ahmedabad | 2000.00 |
|  2 | Khilan  |  25 | Delhi     | 1500.00 |
|  3 | kaushik |  23 | Kota      | 2000.00 |
+----+---------+-----+-----------+---------+

Nếu bạn đang sử dụng máy chủ Oracle, thì khối mã sau có một ví dụ tương đương.

SQL> SELECT * FROM CUSTOMERS
WHERE ROWNUM <= 3;

Điều này sẽ tạo ra kết quả sau:

+----+---------+-----+-----------+---------+
| ID | NAME    | AGE | ADDRESS   | SALARY  |
+----+---------+-----+-----------+---------+
|  1 | Ramesh  |  32 | Ahmedabad | 2000.00 |
|  2 | Khilan  |  25 | Delhi     | 1500.00 |
|  3 | kaushik |  23 | Kota      | 2000.00 |
+----+---------+-----+-----------+---------+

SQL - Mệnh đề ORDER BY

SQL ORDER BYmệnh đề được sử dụng để sắp xếp dữ liệu theo thứ tự tăng dần hoặc giảm dần, dựa trên một hoặc nhiều cột. Một số cơ sở dữ liệu sắp xếp các 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 như sau:

SELECT column-list 
FROM table_name 
[WHERE condition] 
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

Bạn có thể sử dụng nhiều hơn một cột trong mệnh đề ORDER BY. Đảm bảo rằng bất kỳ cột nào bạn đang sử dụng để sắp xếp cột đó phải nằm trong danh sách cột.

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Khối mã sau có một ví dụ, sẽ sắp xếp kết quả theo thứ tự tăng dần theo TÊN và LƯƠNG -

SQL> SELECT * FROM CUSTOMERS
   ORDER BY NAME, SALARY;

Điều này sẽ tạo ra kết quả sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

Khối mã sau đây có một ví dụ, sẽ sắp xếp kết quả theo thứ tự giảm dần của NAME.

SQL> SELECT * FROM CUSTOMERS
   ORDER BY NAME DESC;

Điều này sẽ tạo ra kết quả sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
+----+----------+-----+-----------+----------+

SQL - Nhóm theo

SQL GROUP BYmệnh đề được sử dụng phối hợp với câu lệnh SELECT để sắp xếp dữ liệu giống nhau thành các nhóm. Mệnh đề GROUP BY này đứng sau mệnh đề WHERE trong câu lệnh SELECT và đứng trước mệnh đề ORDER BY.

Cú pháp

Cú pháp cơ bản của mệnh đề GROUP BY được hiển thị trong khối mã sau. Mệnh đề GROUP BY phải tuân theo các điều kiện trong mệnh đề WHERE và phải đứng trước mệnh đề ORDER BY nếu được sử dụng.

SELECT column1, column2
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2
ORDER BY column1, column2

Thí dụ

Hãy xem xét bảng CUSTOMERS có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Nếu bạn muốn biết tổng số tiền lương của mỗi khách hàng, thì truy vấn GROUP BY sẽ như sau.

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
   GROUP BY NAME;

Điều này sẽ tạo ra kết quả sau:

+----------+-------------+
| NAME     | SUM(SALARY) |
+----------+-------------+
| Chaitali |     6500.00 |
| Hardik   |     8500.00 |
| kaushik  |     2000.00 |
| Khilan   |     1500.00 |
| Komal    |     4500.00 |
| Muffy    |    10000.00 |
| Ramesh   |     2000.00 |
+----------+-------------+

Bây giờ, chúng ta hãy xem một bảng trong đó bảng CUSTOMERS có các bản ghi sau với tên trùng lặp:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Ramesh   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | kaushik  |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Bây giờ một lần nữa, nếu bạn muốn biết tổng số tiền lương của mỗi khách hàng, thì truy vấn GROUP BY sẽ như sau:

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
   GROUP BY NAME;

Điều này sẽ tạo ra kết quả sau:

+---------+-------------+
| NAME    | SUM(SALARY) |
+---------+-------------+
| Hardik  |     8500.00 |
| kaushik |     8500.00 |
| Komal   |     4500.00 |
| Muffy   |    10000.00 |
| Ramesh  |     3500.00 |
+---------+-------------+

SQL - Từ khóa riêng biệt

SQL DISTINCT từ khóa được sử dụng cùng với câu lệnh SELECT để loại bỏ tất cả các bản ghi trùng lặp và chỉ tìm nạp các bản ghi duy nhất.

Có thể có một tình huống khi bạn có nhiều bản ghi trùng lặp trong một bảng. Trong khi tìm nạp các bản ghi như vậy, sẽ hợp lý hơn nếu chỉ tìm nạp các bản ghi duy nhất đó thay vì tìm nạp các bản ghi trùng lặp.

Cú pháp

Cú pháp cơ bản của từ khóa DISTINCT để loại bỏ các bản ghi trùng lặp như sau:

SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition]

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Đầu tiên, chúng ta hãy xem cách truy vấn SELECT sau đây trả về các bản ghi lương trùng lặp.

SQL> SELECT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

Điều này sẽ tạo ra kết quả sau, trong đó mức lương (2000) tăng gấp đôi, đây là một bản ghi trùng lặp từ bảng gốc.

+----------+
| SALARY   |
+----------+
|  1500.00 |
|  2000.00 |
|  2000.00 |
|  4500.00 |
|  6500.00 |
|  8500.00 |
| 10000.00 |
+----------+

Bây giờ, chúng ta hãy sử dụng từ khóa DISTINCT với truy vấn SELECT ở trên và sau đó xem kết quả.

SQL> SELECT DISTINCT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

Điều này sẽ tạo ra kết quả sau đây mà chúng tôi không có bất kỳ mục nhập trùng lặp nào.

+----------+
| SALARY   |
+----------+
|  1500.00 |
|  2000.00 |
|  4500.00 |
|  6500.00 |
|  8500.00 |
| 10000.00 |
+----------+

SQL - SẮP XẾP Kết quả

SQL ORDER BYmệnh đề được sử dụng để sắp xếp dữ liệu theo thứ tự tăng dần hoặc giảm dần, dựa trên một hoặc nhiều cột. Một số cơ sở dữ liệu sắp xếp các 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 sẽ được sử dụng để sắp xếp kết quả theo thứ tự tăng dần hoặc giảm dần như sau:

SELECT column-list 
FROM table_name 
[WHERE condition] 
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

Bạn có thể sử dụng nhiều hơn một cột trong mệnh đề ORDER BY. Đảm bảo rằng bất kỳ cột nào bạn đang sử dụng để sắp xếp, cột đó phải nằm trong danh sách cột.

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Sau đây là một ví dụ, sẽ sắp xếp kết quả theo thứ tự tăng dần theo TÊN và LƯƠNG.

SQL> SELECT * FROM CUSTOMERS
   ORDER BY NAME, SALARY;

Điều này sẽ tạo ra kết quả sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

Khối mã sau có một ví dụ, sẽ sắp xếp kết quả theo thứ tự giảm dần theo NAME.

SQL> SELECT * FROM CUSTOMERS
   ORDER BY NAME DESC;

Điều này sẽ tạo ra kết quả sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
+----+----------+-----+-----------+----------+

Để tìm nạp các hàng với thứ tự ưu tiên của riêng chúng, truy vấn SELECT được sử dụng sẽ như sau:

SQL> SELECT * FROM CUSTOMERS
   ORDER BY (CASE ADDRESS
   WHEN 'DELHI' 	 THEN 1
   WHEN 'BHOPAL' 	 THEN 2
   WHEN 'KOTA' 	 THEN 3
   WHEN 'AHMEDABAD' THEN 4
   WHEN 'MP' 	THEN 5
   ELSE 100 END) ASC, ADDRESS DESC;

Điều này sẽ tạo ra kết quả sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

Điều này sẽ phân loại khách hàng theo ĐỊA CHỈ trong ownoOrderưu tiên trước và theo thứ tự tự nhiên cho các địa chỉ còn lại. Ngoài ra, các Địa chỉ còn lại sẽ được sắp xếp theo thứ tự bảng chữ cái ngược lại.

SQL - Ràng buộc

Ràng buộc là các quy tắc được thực thi trên các cột dữ liệu của bảng. Chúng được sử dụng để giới hạn loại dữ liệu có thể đi vào bảng. Điều này đảm bảo tính chính xác và độ tin cậy của dữ liệu trong cơ sở dữ liệu.

Các ràng buộc có thể ở cấp cột hoặc cấp bảng. Các ràng buộc mức cột chỉ được áp dụng cho một cột, trong khi các ràng buộc mức bảng được áp dụng cho toàn bộ bảng.

Sau đây là một số ràng buộc được sử dụng phổ biến nhất hiện có trong SQL. Những ràng buộc này đã được thảo luận trong chương Các khái niệm về SQL - RDBMS , nhưng bạn nên sửa đổi chúng tại thời điểm này.

  • Ràng buộc NOT NULL - Đảm bảo rằng một cột không thể có giá trị NULL.

  • Ràng buộc DEFAULT - Cung cấp giá trị mặc định cho một cột khi không có cột nào được chỉ định.

  • Ràng buộc DUY NHẤT - Đảm bảo rằng tất cả các giá trị trong một cột là khác nhau.

  • Khóa CHÍNH - Xác định duy nhất từng hàng / bản ghi trong bảng cơ sở dữ liệu.

  • Khóa FOREIGN - Xác định duy nhất một hàng / bản ghi trong bất kỳ bảng cơ sở dữ liệu đã cho.

  • Ràng buộc CHECK - Ràng buộc CHECK đảm bảo rằng tất cả các giá trị trong một cột thỏa mãn các điều kiện nhất định.

  • INDEX - Được sử dụng để tạo và lấy dữ liệu từ cơ sở dữ liệu rất nhanh chóng.

Các ràng buộc có thể được chỉ định khi một bảng được tạo bằng câu lệnh CREATE TABLE hoặc bạn có thể sử dụng câu lệnh ALTER TABLE để tạo các ràng buộc ngay cả sau khi bảng được tạo.

Ràng buộc bỏ qua

Bất kỳ ràng buộc nào mà bạn đã xác định đều có thể bị loại bỏ bằng lệnh ALTER TABLE với tùy chọn DROP CONSTRAINT.

Ví dụ: để loại bỏ ràng buộc khóa chính trong bảng NHÂN VIÊN, bạn có thể sử dụng lệnh sau.

ALTER TABLE EMPLOYEES DROP CONSTRAINT EMPLOYEES_PK;

Một số triển khai có thể cung cấp các phím tắt để loại bỏ các ràng buộc nhất định. Ví dụ, để loại bỏ ràng buộc khóa chính cho một bảng trong Oracle, bạn có thể sử dụng lệnh sau.

ALTER TABLE EMPLOYEES DROP PRIMARY KEY;

Một số triển khai cho phép bạn tắt các ràng buộc. Thay vì loại bỏ vĩnh viễn một ràng buộc khỏi cơ sở dữ liệu, bạn có thể muốn tạm thời vô hiệu hóa ràng buộc và sau đó kích hoạt nó sau.

Ràng buộc hoàn toàn

Các ràng buộc về tính toàn vẹn được sử dụng để đảm bảo tính chính xác và nhất quán của dữ liệu trong cơ sở dữ liệu quan hệ. Toàn vẹn dữ liệu được xử lý trong cơ sở dữ liệu quan hệ thông qua khái niệm toàn vẹn tham chiếu.

Có nhiều loại ràng buộc toàn vẹn đóng một vai trò trong Referential Integrity (RI). Những ràng buộc này bao gồm Khóa chính, Khóa ngoại, Ràng buộc duy nhất và các ràng buộc khác được đề cập ở trên.

SQL - Sử dụng tham gia

SQL Joinsmệnh đề được sử dụng để kết hợp các bản ghi từ hai hoặc nhiều bảng trong cơ sở dữ liệu. JOIN là một phương tiện để kết hợp các trường từ hai bảng bằng cách sử dụng các giá trị chung cho mỗi bảng.

Hãy xem xét hai bảng sau:

Table 1 - Bảng KHÁCH HÀNG

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Table 2 - Bảng ĐƠN HÀNG

+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   3000 |
| 100 | 2009-10-08 00:00:00 |           3 |   1500 |
| 101 | 2009-11-20 00:00:00 |           2 |   1560 |
| 103 | 2008-05-20 00:00:00 |           4 |   2060 |
+-----+---------------------+-------------+--------+

Bây giờ, chúng ta hãy nối hai bảng này trong câu lệnh SELECT như hình dưới đây.

SQL> SELECT ID, NAME, AGE, AMOUNT
   FROM CUSTOMERS, ORDERS
   WHERE  CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Điều này sẽ tạo ra kết quả sau.

+----+----------+-----+--------+
| ID | NAME     | AGE | AMOUNT |
+----+----------+-----+--------+
|  3 | kaushik  |  23 |   3000 |
|  3 | kaushik  |  23 |   1500 |
|  2 | Khilan   |  25 |   1560 |
|  4 | Chaitali |  25 |   2060 |
+----+----------+-----+--------+

Ở đây, điều đáng chú ý là phép nối được thực hiện trong mệnh đề WHERE. Một số toán tử có thể được sử dụng để nối các bảng, chẳng hạn như =, <,>, <>, <=,> =,! =, BETWEEN, LIKE và NOT; chúng đều có thể được sử dụng để tham gia các bảng. Tuy nhiên, toán tử phổ biến nhất là ký hiệu bằng.

Có nhiều kiểu nối khác nhau có sẵn trong SQL -

  • INNER JOIN - trả về các hàng khi có sự trùng khớp trong cả hai bảng.

  • LEFT JOIN - trả về tất cả các hàng từ bảng bên trái, ngay cả khi không có hàng nào phù hợp trong bảng bên phải.

  • RIGHT JOIN - trả về tất cả các hàng từ bảng bên phải, ngay cả khi không có hàng nào phù hợp trong bảng bên trái.

  • FULL JOIN - trả về các hàng khi có một kết quả phù hợp trong một trong các bảng.

  • SELF JOIN - được sử dụng để nối một bảng với chính nó như thể bảng là hai bảng, tạm thời đổi tên ít nhất một bảng trong câu lệnh SQL.

  • CARTESIAN JOIN - trả về tích Descartes của các tập hợp các bản ghi từ hai hoặc nhiều bảng được kết hợp.

Bây giờ chúng ta hãy thảo luận chi tiết về từng kết hợp này.

SQL - UNIONS CLAUSE

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

Để sử dụng mệnh đề UNION này, mỗi câu lệnh SELECT phải có

  • Cùng một số cột được chọn
  • Số biểu thức cột giống nhau
  • Cùng một kiểu dữ liệu và
  • Đặt chúng theo thứ tự

Nhưng chúng không cần phải có cùng độ dài.

Cú pháp

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

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

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

Thí dụ

Hãy xem xét hai bảng sau.

Table 1 - Bảng KHÁCH HÀNG như sau.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Table 2 - Bảng ĐƠN HÀNG như sau.

+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   3000 |
| 100 | 2009-10-08 00:00:00 |           3 |   1500 |
| 101 | 2009-11-20 00:00:00 |           2 |   1560 |
| 103 | 2008-05-20 00:00:00 |           4 |   2060 |
+-----+---------------------+-------------+--------+

Bây giờ, chúng ta hãy nối hai bảng này trong câu lệnh SELECT như sau:

SQL> SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS
   LEFT JOIN ORDERS
   ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
UNION
   SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS
   RIGHT JOIN ORDERS
   ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Điều này sẽ tạo ra kết quả sau:

+------+----------+--------+---------------------+
| ID   | NAME     | AMOUNT | DATE                |
+------+----------+--------+---------------------+
|    1 | Ramesh   |   NULL | NULL                |
|    2 | Khilan   |   1560 | 2009-11-20 00:00:00 |
|    3 | kaushik  |   3000 | 2009-10-08 00:00:00 |
|    3 | kaushik  |   1500 | 2009-10-08 00:00:00 |
|    4 | Chaitali |   2060 | 2008-05-20 00:00:00 |
|    5 | Hardik   |   NULL | NULL                |
|    6 | Komal    |   NULL | NULL                |
|    7 | Muffy    |   NULL | NULL                |
+------+----------+--------+---------------------+

Mệnh đề UNION ALL

Toán tử UNION ALL được sử dụng để kết hợp các kết quả của hai câu lệnh SELECT bao gồm các hàng trùng lặp.

Các quy tắc tương tự áp dụng cho mệnh đề UNION sẽ áp 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 column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION ALL

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

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

Thí dụ

Hãy xem xét hai bảng sau,

Table 1 - Bảng KHÁCH HÀNG như sau.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Table 2 - Bảng ORDERS như sau.

+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   3000 |
| 100 | 2009-10-08 00:00:00 |           3 |   1500 |
| 101 | 2009-11-20 00:00:00 |           2 |   1560 |
| 103 | 2008-05-20 00:00:00 |           4 |   2060 |
+-----+---------------------+-------------+--------+

Bây giờ, chúng ta hãy nối hai bảng này trong câu lệnh SELECT như sau:

SQL> SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS
   LEFT JOIN ORDERS
   ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
UNION ALL
   SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS
   RIGHT JOIN ORDERS
   ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Điều này sẽ tạo ra kết quả sau:

+------+----------+--------+---------------------+
| ID   | NAME     | AMOUNT | DATE                |
+------+----------+--------+---------------------+
|    1 | Ramesh   |   NULL | NULL                |
|    2 | Khilan   |   1560 | 2009-11-20 00:00:00 |
|    3 | kaushik  |   3000 | 2009-10-08 00:00:00 |
|    3 | kaushik  |   1500 | 2009-10-08 00:00:00 |
|    4 | Chaitali |   2060 | 2008-05-20 00:00:00 |
|    5 | Hardik   |   NULL | NULL                |
|    6 | Komal    |   NULL | NULL                |
|    7 | Muffy    |   NULL | NULL                |
|    3 | kaushik  |   3000 | 2009-10-08 00:00:00 |
|    3 | kaushik  |   1500 | 2009-10-08 00:00:00 |
|    2 | Khilan   |   1560 | 2009-11-20 00:00:00 |
|    4 | Chaitali |   2060 | 2008-05-20 00:00:00 |
+------+----------+--------+---------------------+

Có hai mệnh đề khác (tức là toán tử), giống như mệnh đề UNION.

  • Mệnh đề INTERSECT của SQL - Điều này được sử dụng để kết hợp hai câu lệnh SELECT, nhưng chỉ trả về các hàng từ câu lệnh SELECT đầu tiên giống với một hàng trong câu lệnh SELECT thứ hai.

  • Mệnh đề SQL EXCEPT - Điều này kết hợp hai câu lệnh SELECT và trả về các hàng từ câu lệnh SELECT đầu tiên mà không được trả về bởi câu lệnh SELECT thứ hai.

SQL - Giá trị NULL

SQL NULLlà thuật ngữ được sử dụng để biểu thị một giá trị bị thiếu. Giá trị NULL trong bảng là giá trị trong trường có vẻ như là trống.

Trường có giá trị NULL là trường không có giá trị. Điều rất quan trọng là phải hiểu rằng giá trị NULL khác với giá trị 0 hoặc một trường có chứa khoảng trắng.

Cú pháp

Cú pháp cơ bản của NULL trong khi tạo bảng.

SQL> CREATE TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);

Đây, NOT NULLbiểu thị rằng cột phải luôn chấp nhận một giá trị rõ ràng của kiểu dữ liệu đã cho. Có hai cột mà chúng tôi không sử dụng NOT NULL, có nghĩa là các cột này có thể là NULL.

Trường có giá trị NULL là trường đã bị bỏ trống trong quá trình tạo bản ghi.

Thí dụ

Giá trị NULL có thể gây ra sự cố khi chọn dữ liệu. Tuy nhiên, vì khi so sánh một giá trị chưa biết với bất kỳ giá trị nào khác, kết quả luôn là ẩn số và không được đưa vào kết quả. Bạn phải sử dụngIS NULL hoặc là IS NOT NULL toán tử để kiểm tra giá trị NULL.

Hãy xem xét bảng KHÁCH HÀNG sau có các bản ghi như hình dưới đây.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |          |
|  7 | Muffy    |  24 | Indore    |          |
+----+----------+-----+-----------+----------+

Bây giờ, sau đây là cách sử dụng IS NOT NULLnhà điều hành.

SQL> SELECT  ID, NAME, AGE, ADDRESS, SALARY
   FROM CUSTOMERS
   WHERE SALARY IS NOT NULL;

Điều này sẽ tạo ra kết quả sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
+----+----------+-----+-----------+----------+

Bây giờ, sau đây là cách sử dụng IS NULL nhà điều hành.

SQL> SELECT  ID, NAME, AGE, ADDRESS, SALARY
   FROM CUSTOMERS
   WHERE SALARY IS NULL;

Điều này sẽ tạo ra kết quả sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  6 | Komal    |  22 | MP        |          |
|  7 | Muffy    |  24 | Indore    |          |
+----+----------+-----+-----------+----------+

SQL - Cú pháp bí danh

Bạn có thể tạm thời đổi tên bảng hoặc cột bằng cách đặt một tên khác được gọi là Alias. Việc sử dụng bí danh bảng là để đổi tên bảng trong một câu lệnh SQL cụ thể. Việc đổi tên là một thay đổi tạm thời và tên bảng thực tế không thay đổi trong cơ sở dữ liệu. Bí danh cột được sử dụng để đổi tên các cột của bảng cho mục đích của một truy vấn SQL cụ thể.

Cú pháp

Cú pháp cơ bản của một table bí danh như sau.

SELECT column1, column2....
FROM table_name AS alias_name
WHERE [condition];

Cú pháp cơ bản của một column bí danh như sau.

SELECT column_name AS alias_name
FROM table_name
WHERE [condition];

Thí dụ

Hãy xem xét hai bảng sau.

Table 1 - Bảng KHÁCH HÀNG như sau.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Table 2 - Bảng ĐƠN HÀNG như sau.

+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   3000 |
| 100 | 2009-10-08 00:00:00 |           3 |   1500 |
| 101 | 2009-11-20 00:00:00 |           2 |   1560 |
| 103 | 2008-05-20 00:00:00 |           4 |   2060 |
+-----+---------------------+-------------+--------+

Bây giờ, khối mã sau đây cho thấy việc sử dụng table alias.

SQL> SELECT C.ID, C.NAME, C.AGE, O.AMOUNT 
   FROM CUSTOMERS AS C, ORDERS AS O
   WHERE  C.ID = O.CUSTOMER_ID;

Điều này sẽ tạo ra kết quả sau.

+----+----------+-----+--------+
| ID | NAME     | AGE | AMOUNT |
+----+----------+-----+--------+
|  3 | kaushik  |  23 |   3000 |
|  3 | kaushik  |  23 |   1500 |
|  2 | Khilan   |  25 |   1560 |
|  4 | Chaitali |  25 |   2060 |
+----+----------+-----+--------+

Sau đây là cách sử dụng column alias.

SQL> SELECT  ID AS CUSTOMER_ID, NAME AS CUSTOMER_NAME
   FROM CUSTOMERS
   WHERE SALARY IS NOT NULL;

Điều này sẽ tạo ra kết quả sau.

+-------------+---------------+
| CUSTOMER_ID | CUSTOMER_NAME |
+-------------+---------------+
|           1 | Ramesh        |
|           2 | Khilan        |
|           3 | kaushik       |
|           4 | Chaitali      |
|           5 | Hardik        |
|           6 | Komal         |
|           7 | Muffy         |
+-------------+---------------+

SQL - Chỉ mục

Chỉ mục là special lookup tablesmà công cụ tìm kiếm cơ sở dữ liệu có thể sử dụng để tăng tốc độ truy xuất dữ liệu. Nói một cách đơn giản, chỉ mục là một con trỏ đến dữ liệu trong một bảng. Một chỉ mục trong cơ sở dữ liệu rất giống với một chỉ mục ở phía sau một cuốn sách.

Ví dụ: nếu bạn muốn tham chiếu đến tất cả các trang trong một cuốn sách thảo luận về một chủ đề nhất định, trước tiên bạn tham khảo chỉ mục, mục lục này liệt kê tất cả các chủ đề theo thứ tự bảng chữ cái và sau đó được tham chiếu đến một hoặc nhiều số trang cụ thể.

Một chỉ mục giúp tăng tốc SELECT truy vấn và WHERE nhưng nó làm chậm quá trình nhập dữ liệu, với UPDATEINSERTcác câu lệnh. Chỉ mục có thể được tạo hoặc giảm mà không ảnh hưởng đến dữ liệu.

Tạo một chỉ mục bao gồm CREATE INDEX câu lệnh, cho phép bạn đặt tên cho chỉ mục, để chỉ định bảng và cột hoặc các cột nào để lập chỉ mục và cho biết chỉ mục theo thứ tự tăng dần hay giảm dần.

Các chỉ mục cũng có thể là duy nhất, như UNIQUE ràng buộc, trong đó chỉ mục ngăn chặn các mục nhập trùng lặp trong cột hoặc tổ hợp các cột có chỉ mục.

Lệnh CREATE INDEX

Cú pháp cơ bản của một CREATE INDEX là như sau.

CREATE INDEX index_name ON table_name;

Chỉ mục một cột

Chỉ mục một cột được tạo chỉ dựa trên một cột của bảng. Cú pháp cơ bản như sau.

CREATE INDEX index_name
ON table_name (column_name);

Chỉ mục duy nhất

Chỉ mục duy nhất không chỉ được sử dụng cho hiệu suất mà còn cho tính toàn vẹn của dữ liệu. Chỉ mục duy nhất không cho phép chèn bất kỳ giá trị trùng lặp nào vào bảng. Cú pháp cơ bản như sau.

CREATE UNIQUE INDEX index_name
on table_name (column_name);

Chỉ mục tổng hợp

Chỉ mục tổng hợp là một chỉ mục trên hai hoặc nhiều cột của bảng. Cú pháp cơ bản của nó như sau.

CREATE INDEX index_name
on table_name (column1, column2);

Cho dù tạo chỉ mục cột đơn hay chỉ mục tổng hợp, hãy xem xét (các) cột mà bạn có thể sử dụng rất thường xuyên trong mệnh đề WHERE của truy vấn làm điều kiện lọc.

Nếu chỉ có một cột được sử dụng, chỉ mục một cột nên là lựa chọn. Nếu có hai hoặc nhiều cột thường được sử dụng trong mệnh đề WHERE làm bộ lọc, chỉ mục tổng hợp sẽ là lựa chọn tốt nhất.

Chỉ mục ngầm định

Chỉ mục ngầm định là chỉ mục được tạo tự động bởi máy chủ cơ sở dữ liệu khi một đối tượng được tạo. Chỉ mục được tạo tự động cho các ràng buộc khóa chính và các ràng buộc duy nhất.

Lệnh DROP INDEX

Một chỉ mục có thể bị xóa bằng cách sử dụng SQL DROPchỉ huy. Cần cẩn thận khi giảm chỉ số vì hiệu suất có thể chậm lại hoặc cải thiện.

Cú pháp cơ bản như sau:

DROP INDEX index_name;

Bạn có thể kiểm tra chương Ràng buộc INDEX để xem một số ví dụ thực tế về Chỉ mục.

Khi nào nên tránh lập chỉ mục?

Mặc dù các chỉ mục nhằm mục đích nâng cao hiệu suất của cơ sở dữ liệu, nhưng đôi khi chúng nên được tránh.

Các hướng dẫn sau đây cho biết khi nào việc sử dụng một chỉ mục nên được xem xét lại.

  • Chỉ mục không nên được sử dụng trên các bảng nhỏ.

  • Các bảng có cập nhật hàng loạt lớn hoặc hoạt động chèn thường xuyên.

  • Chỉ mục không được sử dụng trên các cột chứa nhiều giá trị NULL.

  • Các cột được thao tác thường xuyên sẽ không được lập chỉ mục.

SQL - Lệnh ALTER TABLE

SQL ALTER TABLElệnh được sử dụng để thêm, xóa hoặc sửa đổi các cột trong bảng hiện có. Bạn cũng nên sử dụng lệnh ALTER TABLE để thêm và bỏ các ràng buộc khác nhau trên bảng hiện có.

Cú pháp

Cú pháp cơ bản của lệnh ALTER TABLE để thêm New Column trong một bảng hiện có như sau.

ALTER TABLE table_name ADD column_name datatype;

Cú pháp cơ bản của lệnh ALTER TABLE để DROP COLUMN trong một bảng hiện có như sau.

ALTER TABLE table_name DROP COLUMN column_name;

Cú pháp cơ bản của lệnh ALTER TABLE để thay đổi DATA TYPE của một cột trong bảng như sau.

ALTER TABLE table_name MODIFY COLUMN column_name datatype;

Cú pháp cơ bản của lệnh ALTER TABLE để thêm NOT NULL ràng buộc đối với một cột trong bảng như sau.

ALTER TABLE table_name MODIFY column_name datatype NOT NULL;

Cú pháp cơ bản của ALTER TABLE thành ADD UNIQUE CONSTRAINT thành một bảng như sau.

ALTER TABLE table_name 
ADD CONSTRAINT MyUniqueConstraint UNIQUE(column1, column2...);

Cú pháp cơ bản của lệnh ALTER TABLE để ADD CHECK CONSTRAINT thành một bảng như sau.

ALTER TABLE table_name 
ADD CONSTRAINT MyUniqueConstraint CHECK (CONDITION);

Cú pháp cơ bản của lệnh ALTER TABLE để ADD PRIMARY KEY ràng buộc với một bảng như sau.

ALTER TABLE table_name 
ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (column1, column2...);

Cú pháp cơ bản của lệnh ALTER TABLE để DROP CONSTRAINT từ một bảng như sau.

ALTER TABLE table_name 
DROP CONSTRAINT MyUniqueConstraint;

Nếu bạn đang sử dụng MySQL, mã như sau:

ALTER TABLE table_name 
DROP INDEX MyUniqueConstraint;

Cú pháp cơ bản của lệnh ALTER TABLE để DROP PRIMARY KEY ràng buộc từ một bảng như sau.

ALTER TABLE table_name 
DROP CONSTRAINT MyPrimaryKey;

Nếu bạn đang sử dụng MySQL, mã như sau:

ALTER TABLE table_name 
DROP PRIMARY KEY;

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Sau đây là ví dụ để THÊM một New Column vào một bảng hiện có -

ALTER TABLE CUSTOMERS ADD SEX char(1);

Bây giờ, bảng CUSTOMERS đã được thay đổi và phần sau sẽ được xuất ra từ câu lệnh SELECT.

+----+---------+-----+-----------+----------+------+
| ID | NAME    | AGE | ADDRESS   | SALARY   | SEX  |
+----+---------+-----+-----------+----------+------+
|  1 | Ramesh  |  32 | Ahmedabad |  2000.00 | NULL |
|  2 | Ramesh  |  25 | Delhi     |  1500.00 | NULL |
|  3 | kaushik |  23 | Kota      |  2000.00 | NULL |
|  4 | kaushik |  25 | Mumbai    |  6500.00 | NULL |
|  5 | Hardik  |  27 | Bhopal    |  8500.00 | NULL |
|  6 | Komal   |  22 | MP        |  4500.00 | NULL |
|  7 | Muffy   |  24 | Indore    | 10000.00 | NULL |
+----+---------+-----+-----------+----------+------+

Sau đây là ví dụ để XÓA cột giới tính khỏi bảng hiện có.

ALTER TABLE CUSTOMERS DROP SEX;

Bây giờ, bảng CUSTOMERS đã được thay đổi và sau đây sẽ là kết quả từ câu lệnh SELECT.

+----+---------+-----+-----------+----------+
| ID | NAME    | AGE | ADDRESS   | SALARY   |
+----+---------+-----+-----------+----------+
|  1 | Ramesh  |  32 | Ahmedabad |  2000.00 |
|  2 | Ramesh  |  25 | Delhi     |  1500.00 |
|  3 | kaushik |  23 | Kota      |  2000.00 |
|  4 | kaushik |  25 | Mumbai    |  6500.00 |
|  5 | Hardik  |  27 | Bhopal    |  8500.00 |
|  6 | Komal   |  22 | MP        |  4500.00 |
|  7 | Muffy   |  24 | Indore    | 10000.00 |
+----+---------+-----+-----------+----------+

SQL - Lệnh TRUNCATE TABLE

SQL TRUNCATE TABLE lệnh được sử dụng để xóa dữ liệu hoàn chỉnh khỏi bảng hiện có.

Bạn cũng có thể sử dụng lệnh DROP TABLE để xóa bảng hoàn chỉnh nhưng nó sẽ xóa cấu trúc bảng hoàn chỉnh trong cơ sở dữ liệu và bạn sẽ cần phải tạo lại bảng này một lần nữa nếu muốn lưu trữ một số dữ liệu.

Cú pháp

Cú pháp cơ bản của một TRUNCATE TABLE lệnh như sau.

TRUNCATE TABLE  table_name;

Thí dụ

Hãy xem xét một bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Sau đây là ví dụ về lệnh Truncate.

SQL > TRUNCATE TABLE CUSTOMERS;

Bây giờ, bảng CUSTOMERS bị cắt bớt và đầu ra từ câu lệnh SELECT sẽ như được hiển thị trong khối mã bên dưới:

SQL> SELECT * FROM CUSTOMERS;
Empty set (0.00 sec)

SQL - Sử dụng Chế độ xem

Một khung nhìn không gì khác hơn là một câu lệnh SQL được lưu trữ trong cơ sở dữ liệu với một tên liên quan. Một khung nhìn thực sự là một thành phần của một bảng dưới dạng một truy vấn SQL được xác định trước.

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

Chế độ xem, là một loại bảng ảo cho phép người dùng thực hiện những việc sau:

  • Cấu trúc dữ liệu theo cách mà người dùng hoặc lớp người dùng thấy tự nhiên hoặc trực quan.

  • Hạn chế quyền truy cập vào dữ liệu theo cách mà người dùng có thể nhìn thấy và (đôi khi) sửa đổi chính xác những gì họ cần và không cần nữa.

  • Tổng hợp dữ liệu từ các bảng khác nhau có thể được sử dụng để tạo báo cáo.

Tạo chế độ xem

Chế độ xem cơ sở dữ liệu được tạo bằng cách sử dụng CREATE VIEWtuyên bố. Các dạng xem có thể được tạo từ một bảng, nhiều bảng hoặc một dạng xem khác.

Để tạo chế độ xem, người dùng phải có đặc quyền hệ thống thích hợp theo cách triển khai cụ thể.

Cơ bản CREATE VIEW cú pháp như sau:

CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

Bạn có thể bao gồm nhiều bảng trong câu lệnh SELECT của mình theo cách tương tự như khi bạn sử dụng chúng trong một truy vấn SQL SELECT thông thường.

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Sau đây là một ví dụ để tạo chế độ xem từ bảng CUSTOMERS. Chế độ xem này sẽ được sử dụng để có tên và tuổi của khách hàng từ bảng CUSTOMERS.

SQL > CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS;

Bây giờ, bạn có thể truy vấn CUSTOMERS_VIEW theo cách tương tự như khi bạn truy vấn một bảng thực tế. Sau đây là một ví dụ cho tương tự.

SQL > SELECT * FROM CUSTOMERS_VIEW;

Điều này sẽ tạo ra kết quả sau.

+----------+-----+
| name     | age |
+----------+-----+
| Ramesh   |  32 |
| Khilan   |  25 |
| kaushik  |  23 |
| Chaitali |  25 |
| Hardik   |  27 |
| Komal    |  22 |
| Muffy    |  24 |
+----------+-----+

LỰA CHỌN CÓ KIỂM TRA

TÙY CHỌN VỚI KIỂM TRA là một tùy chọn câu lệnh TẠO CHẾ ĐỘ XEM. Mục đích của LỰA CHỌN VỚI KIỂM TRA là để đảm bảo rằng tất cả CẬP NHẬT và CHÈN thỏa mãn (các) điều kiện trong định nghĩa chế độ xem.

Nếu chúng không thỏa mãn (các) điều kiện, UPDATE hoặc INSERT trả về lỗi.

Khối mã sau đây có một ví dụ về việc tạo cùng một chế độ xem CUSTOMERS_VIEW với TÙY CHỌN CÓ KIỂM TRA.

CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;

LỰA CHỌN VỚI KIỂM TRA trong trường hợp này sẽ từ chối nhập bất kỳ giá trị NULL nào trong cột TUỔI của chế độ xem, vì chế độ xem được xác định bởi dữ liệu không có giá trị NULL trong cột TUỔI.

Cập nhật Chế độ xem

Chế độ xem có thể được cập nhật trong các điều kiện nhất định được đưa ra dưới đây -

  • Mệnh đề SELECT không được chứa từ khóa DISTINCT.

  • Mệnh đề SELECT có thể không chứa các hàm tóm tắt.

  • Mệnh đề SELECT có thể không chứa các hàm thiết lập.

  • Mệnh đề SELECT có thể không chứa các toán tử tập hợp.

  • Mệnh đề SELECT không được chứa mệnh đề ORDER BY.

  • Mệnh đề FROM không được chứa nhiều bảng.

  • Mệnh đề WHERE có thể không chứa các truy vấn con.

  • Truy vấn không được chứa GROUP BY hoặc HAVING.

  • Các cột được tính toán có thể không được cập nhật.

  • Tất cả các cột NOT NULL từ bảng cơ sở phải được đưa vào dạng xem để truy vấn INSERT hoạt động.

Vì vậy, nếu một chế độ xem đáp ứng tất cả các quy tắc nêu trên thì bạn có thể cập nhật chế độ xem đó. Khối mã sau đây có một ví dụ để cập nhật tuổi của Ramesh.

SQL > UPDATE CUSTOMERS_VIEW
   SET AGE = 35
   WHERE name = 'Ramesh';

Điều này cuối cùng sẽ cập nhật bảng cơ sở CUSTOMERS và điều tương tự sẽ phản ánh trong chính chế độ xem. Bây giờ, hãy thử truy vấn bảng cơ sở và câu lệnh SELECT sẽ tạo ra kết quả sau.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Chèn hàng vào chế độ xem

Các hàng dữ liệu có thể được chèn vào một dạng xem. Các quy tắc tương tự áp dụng cho lệnh UPDATE cũng áp dụng cho lệnh INSERT.

Ở đây, chúng tôi không thể chèn các hàng trong CUSTOMERS_VIEW vì chúng tôi chưa bao gồm tất cả các cột KHÔNG ĐẦY ĐỦ trong dạng xem này, nếu không bạn có thể chèn các hàng trong dạng xem theo cách tương tự như khi bạn chèn chúng vào bảng.

Xóa hàng vào chế độ xem

Hàng dữ liệu có thể bị xóa khỏi chế độ xem. Các quy tắc tương tự áp dụng cho lệnh UPDATE và INSERT áp dụng cho lệnh DELETE.

Sau đây là một ví dụ để xóa một bản ghi có AGE = 22.

SQL > DELETE FROM CUSTOMERS_VIEW
   WHERE age = 22;

Điều này cuối cùng sẽ xóa một hàng khỏi bảng cơ sở CUSTOMERS và hàng tương tự sẽ phản ánh trong chính chế độ xem. Bây giờ, hãy thử truy vấn bảng cơ sở và câu lệnh SELECT sẽ tạo ra kết quả sau.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Giảm lượt xem

Rõ ràng, khi bạn có một chế độ xem, bạn cần một cách để bỏ chế độ xem nếu nó không còn cần thiết nữa. Cú pháp rất đơn giản và được đưa ra dưới đây:

DROP VIEW view_name;

Dưới đây là một ví dụ để loại bỏ CUSTOMERS_VIEW khỏi bảng CUSTOMERS.

DROP VIEW CUSTOMERS_VIEW;

SQL - Có mệnh đề

Các HAVING Clause cho phép bạn chỉ định các điều kiện lọc kết quả nhóm nào xuất hiện trong kết quả.

Mệnh đề WHERE đặt điều kiện vào các cột đã chọn, trong khi mệnh đề HAVING đặt điều kiện cho các nhóm được tạo bởi mệnh đề GROUP BY.

Cú pháp

Khối mã sau đây hiển thị vị trí của Mệnh đề HAVING trong một truy vấn.

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

Mệnh đề HAVING phải theo sau mệnh đề GROUP BY trong một truy vấn và cũng phải đứng trước mệnh đề ORDER BY nếu được sử dụng. Khối mã sau có cú pháp của câu lệnh SELECT bao gồm mệnh đề HAVING -

SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Sau đây là một ví dụ, sẽ hiển thị một bản ghi cho số tuổi tương tự sẽ lớn hơn hoặc bằng 2.

SQL > SELECT ID, NAME, AGE, ADDRESS, SALARY
FROM CUSTOMERS
GROUP BY age
HAVING COUNT(age) >= 2;

Điều này sẽ tạo ra kết quả sau:

+----+--------+-----+---------+---------+
| ID | NAME   | AGE | ADDRESS | SALARY  |
+----+--------+-----+---------+---------+
|  2 | Khilan |  25 | Delhi   | 1500.00 |
+----+--------+-----+---------+---------+

SQL - Giao dịch

Giao dịch là một đơn vị công việc được thực hiện dựa trên cơ sở dữ liệu. Giao dịch là các đơn vị hoặc chuỗi công việc được thực hiện theo một thứ tự logic, cho dù theo cách thủ công bởi người dùng hay tự động bởi một số loại chương trình cơ sở dữ liệu.

Giao dịch là sự truyền bá một hoặc nhiều thay đổi đối với cơ sở dữ liệu. Ví dụ: nếu bạn đang tạo bản ghi hoặc cập nhật bản ghi hoặc xóa bản ghi khỏi bảng, thì bạn đang thực hiện một giao dịch trên bảng đó. Điều quan trọng là phải kiểm soát các giao dịch này để đảm bảo tính toàn vẹn của dữ liệu và xử lý các lỗi cơ sở dữ liệu.

Thực tế, bạn sẽ kết hợp nhiều truy vấn SQL thành một nhóm và bạn sẽ thực hiện tất cả chúng cùng nhau như một phần của giao dịch.

Thuộc tính của giao dịch

Giao dịch có bốn thuộc tính tiêu chuẩn sau, thường được gọi bằng từ viết tắt ACID.

  • Atomicity- đảm bảo rằng tất cả các hoạt động trong đơn vị công việc được hoàn thành thành công. Nếu không, giao dịch sẽ bị hủy bỏ tại điểm không thành công và tất cả các hoạt động trước đó được khôi phục lại trạng thái cũ của chúng.

  • Consistency - đảm bảo rằng cơ sở dữ liệu thay đổi đúng các trạng thái khi giao dịch được cam kết thành công.

  • Isolation - cho phép các giao dịch hoạt động độc lập và minh bạch với nhau.

  • Durability - đảm bảo rằng kết quả hoặc hiệu lực của một giao dịch đã cam kết vẫn tồn tại trong trường hợp hệ thống bị lỗi.

Kiểm soát giao dịch

Các lệnh sau được sử dụng để kiểm soát các giao dịch.

  • COMMIT - để lưu các thay đổi.

  • ROLLBACK - để quay lại các thay đổi.

  • SAVEPOINT - tạo điểm trong các nhóm giao dịch để QUAY LẠI.

  • SET TRANSACTION - Đặt tên cho một giao dịch.

Lệnh điều khiển giao dịch

Các lệnh điều khiển giao dịch chỉ được sử dụng với DML Commandschẳng hạn như - chỉ INSERT, UPDATE và DELETE. Chúng không thể được sử dụng trong khi tạo bảng hoặc bỏ chúng vì các hoạt động này được tự động cam kết trong cơ sở dữ liệu.

Lệnh COMMIT

Lệnh COMMIT là lệnh giao dịch được sử dụng để lưu các thay đổi được gọi bởi một giao dịch vào cơ sở dữ liệu.

Lệnh COMMIT là lệnh giao dịch được sử dụng để lưu các thay đổi được gọi bởi một giao dịch vào cơ sở dữ liệu. Lệnh COMMIT lưu tất cả các giao dịch vào cơ sở dữ liệu kể từ lệnh COMMIT hoặc ROLLBACK cuối cùng.

Cú pháp của lệnh COMMIT như sau.

COMMIT;

Example

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Sau đây là một ví dụ sẽ xóa các bản ghi đó khỏi bảng có age = 25 và sau đó COMMIT các thay đổi trong cơ sở dữ liệu.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> COMMIT;

Do đó, hai hàng trong bảng sẽ bị xóa và câu lệnh SELECT sẽ tạo ra kết quả sau.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Lệnh ROLLBACK

Lệnh ROLLBACK là lệnh giao dịch được sử dụng để hoàn tác các giao dịch chưa được lưu vào cơ sở dữ liệu. Lệnh này chỉ có thể được sử dụng để hoàn tác các giao dịch kể từ khi lệnh COMMIT hoặc ROLLBACK cuối cùng được phát hành.

Cú pháp của lệnh ROLLBACK như sau:

ROLLBACK;

Example

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Sau đây là một ví dụ, sẽ xóa các bản ghi đó khỏi bảng có age = 25 và sau đó QUAY LẠI các thay đổi trong cơ sở dữ liệu.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> ROLLBACK;

Do đó, thao tác xóa sẽ không ảnh hưởng đến bảng và câu lệnh SELECT sẽ tạo ra kết quả sau.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Lệnh SAVEPOINT

SAVEPOINT là một điểm trong giao dịch khi bạn có thể chuyển giao dịch trở lại một điểm nhất định mà không cần quay lại toàn bộ giao dịch.

Cú pháp của lệnh SAVEPOINT như hình dưới đây.

SAVEPOINT SAVEPOINT_NAME;

Lệnh này chỉ phục vụ trong việc tạo SAVEPOINT trong số tất cả các câu lệnh giao dịch. Lệnh ROLLBACK được sử dụng để hoàn tác một nhóm giao dịch.

Cú pháp để quay trở lại SAVEPOINT như hình dưới đây.

ROLLBACK TO SAVEPOINT_NAME;

Sau đây là một ví dụ mà bạn định xóa ba bản ghi khác nhau khỏi bảng CUSTOMERS. Bạn muốn tạo một SAVEPOINT trước mỗi lần xóa, để bạn có thể QUAY LẠI bất kỳ SAVEPOINT nào bất kỳ lúc nào để trả dữ liệu thích hợp về trạng thái ban đầu.

Example

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Khối mã sau đây chứa một loạt các hoạt động.

SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.

Bây giờ ba lần xóa đã diễn ra, hãy giả sử rằng bạn đã thay đổi ý định và quyết định QUAY LẠI về SAVEPOINT mà bạn đã xác định là SP2. Vì SP2 được tạo sau lần xóa đầu tiên, hai lần xóa cuối cùng sẽ được hoàn tác -

SQL> ROLLBACK TO SP2;
Rollback complete.

Lưu ý rằng chỉ lần xóa đầu tiên diễn ra kể từ khi bạn quay trở lại SP2.

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
6 rows selected.

Lệnh RELEASE SAVEPOINT

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

Cú pháp của lệnh RELEASE SAVEPOINT như sau.

RELEASE SAVEPOINT SAVEPOINT_NAME;

Sau khi SAVEPOINT đã được phát hành, bạn không thể sử dụng lệnh ROLLBACK để hoàn tác các giao dịch đã thực hiện kể từ SAVEPOINT cuối cùng.

Lệnh SET GIAO DỊCH

Lệnh SET TRANSACTION có thể được sử dụng để bắt đầu một giao dịch cơ sở dữ liệu. Lệnh này được sử dụng để chỉ định các đặc điểm cho giao dịch sau đó. Ví dụ: bạn có thể chỉ định một giao dịch là chỉ đọc hoặc đọc ghi.

Cú pháp của lệnh SET TRANSACTION như sau.

SET TRANSACTION [ READ WRITE | READ ONLY ];

SQL - Toán tử ký tự đại diện

Chúng ta đã thảo luận 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 tự bằng cách sử dụng các toán tử ký tự đại diện.

SQL hỗ trợ hai toán tử ký tự đại diện kết hợp với toán tử LIKE được giải thích chi tiết trong bảng sau.

Sr.No. Ký tự đại diện & Mô tả
1

The percent sign (%)

Khớp một hoặc nhiều ký tự.

Note - MS Access sử dụng ký tự đại diện dấu hoa thị (*) thay vì ký tự đại diện dấu phần trăm (%).

2

The underscore (_)

Khớp một ký tự.

Note - MS Access sử dụng dấu chấm hỏi (?) Thay vì dấu gạch dưới (_) để khớp với một ký tự bất kỳ.

Dấu phần trăm đại diện cho không, một hoặc nhiều ký tự. Dấu gạch dưới thể hiện một số hoặc một ký tự. Các ký hiệu này có thể được sử dụng trong các tổ hợp.

Cú pháp

Cú pháp cơ bản của toán tử '%' và '_' như sau.

SELECT * FROM table_name
WHERE column LIKE 'XXXX%'

or 

SELECT * FROM table_name
WHERE column LIKE '%XXXX%'

or

SELECT * FROM table_name
WHERE column LIKE 'XXXX_'

or

SELECT * FROM table_name
WHERE column LIKE '_XXXX'

or

SELECT * FROM table_name
WHERE column LIKE '_XXXX_'

Bạn có thể kết hợp N số điều kiện bằng cách sử dụng toán tử VÀ hoặc HOẶC. Ở đây, XXXX có thể là bất kỳ giá trị số hoặc chuỗi nào.

Thí dụ

Bảng sau đây có một số ví dụ cho thấy phần WHERE có các mệnh đề LIKE khác nhau với các toán tử '%' và '_'.

Sr.No. Tuyên bố & Mô tả
1

WHERE SALARY LIKE '200%'

Tìm bất kỳ giá trị nào bắt đầu bằng 200.

2

WHERE SALARY LIKE '%200%'

Tìm bất kỳ giá trị nào có 200 ở bất kỳ vị trí nào.

3

WHERE SALARY LIKE '_00%'

Tìm bất kỳ giá trị nào có 00 ở vị trí thứ hai và thứ ba.

4

WHERE SALARY LIKE '2_%_%'

Tìm bất kỳ giá trị nào bắt đầu bằng 2 và có độ dài ít nhất 3 ký tự.

5

WHERE SALARY LIKE '%2'

Tìm bất kỳ giá trị nào kết thúc bằng 2.

6

WHERE SALARY LIKE '_2%3'

Tìm bất kỳ giá trị nào có số 2 ở vị trí thứ hai và kết thúc bằng số 3.

7

WHERE SALARY LIKE '2___3'

Tìm bất kỳ giá trị nào trong một số có năm chữ số bắt đầu bằng 2 và kết thúc bằng 3.

Chúng ta hãy lấy một ví dụ thực tế, hãy xem xét bảng CUSTOMERS có các bản ghi sau.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Khối mã sau là một ví dụ, khối này sẽ hiển thị tất cả các bản ghi từ bảng CUSTOMERS trong đó SALARY bắt đầu bằng 200.

SQL> SELECT * FROM CUSTOMERS
WHERE SALARY LIKE '200%';

Điều này sẽ tạo ra kết quả sau.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
+----+----------+-----+-----------+----------+

SQL - Hàm ngày

Bảng sau đây có danh sách tất cả các hàm quan trọng liên quan đến Ngày và Giờ có sẵn thông qua SQL. Có nhiều chức năng khác được hỗ trợ bởi RDBMS của bạn. Danh sách đã cho dựa trên MySQL RDBMS.

Sr.No. Mô tả chức năng
1 THÊM ()

Thêm ngày

2 THÊM THỜI GIAN()

Thêm thời gian

3 CONVERT_TZ ()

Chuyển đổi từ múi giờ này sang múi giờ khác

4 CURDATE ()

Trả về ngày hiện tại

5 CURRENT_DATE (), CURRENT_DATE

Từ đồng nghĩa với CURDATE ()

6 CURRENT_TIME (), CURRENT_TIME

Từ đồng nghĩa với CURTIME ()

7 CURRENT_TIMESTAMP (), CURRENT_TIMESTAMP

Từ đồng nghĩa với NOW ()

số 8 CURTIME ()

Trả về thời gian hiện tại

9 DATE_ADD ()

Thêm hai ngày

10 ĐỊNH DẠNG NGÀY THÁNG()

Định dạng ngày như đã chỉ định

11 DATE_SUB ()

Trừ hai ngày

12 NGÀY()

Trích xuất phần ngày của biểu thức ngày tháng hoặc ngày giờ

13 DATEDIFF ()

Trừ hai ngày

14 NGÀY()

Từ đồng nghĩa với DAYOFMONTH ()

15 DAYNAME ()

Trả về tên của ngày trong tuần

16 DAYOFMONTH ()

Trả về ngày trong tháng (1-31)

17 NGÀY TRONG TUẦN()

Trả về chỉ mục ngày trong tuần của đối số

18 DAYOFYEAR ()

Trả về ngày trong năm (1-366)

19 TRÍCH XUẤT

Trích xuất một phần của ngày

20 FROM_DAYS ()

Chuyển đổi một số ngày thành một ngày

21 FROM_UNIXTIME ()

Định dạng ngày dưới dạng dấu thời gian UNIX

22 HOUR ()

Trích xuất giờ

23 NGÀY CUỐI

Trả về ngày cuối cùng của tháng cho đối số

24 LOCALTIME (), LOCALTIME

Từ đồng nghĩa với NOW ()

25 LOCALTIMESTAMP, LOCALTIMESTAMP ()

Từ đồng nghĩa với NOW ()

26 MAKEDATE ()

Tạo một ngày trong năm và ngày trong năm

27 MAKETIME

MAKETIME ()

28 MICROSECOND ()

Trả về micro giây từ đối số

29 PHÚT()

Trả về phút từ đối số

30 THÁNG()

Trả lại tháng kể từ ngày đã qua

31 MONTHNAME ()

Trả về tên của tháng

32 HIỆN NAY()

Trả về ngày và giờ hiện tại

33 PERIOD_ADD ()

Thêm một khoảng thời gian vào một năm tháng

34 PERIOD_DIFF ()

Trả về số tháng giữa các khoảng thời gian

35 PHẦN TƯ()

Trả về phần tư từ đối số ngày

36 SEC_TO_TIME ()

Chuyển đổi giây sang định dạng 'HH: MM: SS'

37 THỨ HAI()

Trả về thứ hai (0-59)

38 STR_TO_DATE ()

Chuyển đổi một chuỗi thành một ngày

39 SUBDATE ()

Khi được gọi với ba đối số, một từ đồng nghĩa với DATE_SUB ()

40 SUBTIME ()

Trừ lần

41 SYSDATE ()

Trả về thời gian mà hàm thực thi

42 TIME_FORMAT ()

Định dạng theo thời gian

43 TIME_TO_SEC ()

Trả về đối số được chuyển đổi thành giây

44 THỜI GIAN()

Trích xuất phần thời gian của biểu thức đã qua

45 TIMEDIFF ()

Trừ thời gian

46 TIMESTAMP ()

Với một đối số duy nhất, hàm này trả về ngày tháng hoặc biểu thức ngày giờ. Với hai đối số, tổng các đối số

47 TIMESTAMPADD ()

Thêm khoảng thời gian vào biểu thức ngày giờ

48 TIMESTAMPDIFF ()

Trừ một khoảng thời gian khỏi biểu thức ngày giờ

49 TO_DAYS ()

Trả về đối số ngày được chuyển đổi thành ngày

50 UNIX_TIMESTAMP ()

Trả về dấu thời gian UNIX

51 UTC_DATE ()

Trả về ngày UTC hiện tại

52 UTC_TIME ()

Trả về thời gian UTC hiện tại

53 UTC_TIMESTAMP ()

Trả về ngày và giờ UTC hiện tại

54 TUẦN()

Trả về số tuần

55 WEEKDAY ()

Trả về chỉ mục ngày trong tuần

56 WEEKOFYEAR ()

Trả về tuần lịch của ngày (1-53)

57 NĂM()

Trả về năm

58 NĂM TUẦN ()

Trả về năm và tuần

ADDDATE (ngày, đơn vị thời hạn INTERVAL), ADDDATE (expr, ngày)

Khi được gọi với dạng INTERVAL của đối số thứ hai, ADDDATE () là một từ đồng nghĩa với DATE_ADD (). Hàm liên quan SUBDATE () là một từ đồng nghĩa với DATE_SUB (). Để biết thông tin về đối số đơn vị INTERVAL, hãy xem thảo luận cho DATE_ADD ().

mysql> 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)

mysql> 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 gọi với dạng ngày của đối số thứ hai, MySQL coi nó như một số nguyên ngày sẽ được thêm vào expr.

mysql> SELECT ADDDATE('1998-01-02', 31);
+---------------------------------------------------------+
| DATE_ADD('1998-01-02', INTERVAL 31 DAY)                 |
+---------------------------------------------------------+
| 1998-02-02                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

ADDTIME (expr1, expr2)

ADDTIME () thêm expr2 vào expr1 và trả về kết quả. Expr1 là một biểu thức thời gian hoặc ngày giờ, trong khi expr2 là một biểu thức thời gian.

mysql> 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)

CONVERT_TZ (dt, from_tz, to_tz)

Điều này chuyển đổi giá trị datetime dt từ múi giờ do from_tz cung cấp thành múi giờ do to_tz cung cấp và trả về giá trị kết quả. Hàm này trả về NULL nếu các đối số không hợp lệ.

mysql> 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)

mysql> 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)

CURDATE ()

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

mysql> SELECT CURDATE();
+---------------------------------------------------------+
| CURDATE()                                               |
+---------------------------------------------------------+
| 1997-12-15                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CURDATE() + 0;
+---------------------------------------------------------+
| CURDATE() + 0                                           |
+---------------------------------------------------------+
| 19971215                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CURRENT_DATE và CURRENT_DATE ()

CURRENT_DATE và CURRENT_DATE () là từ đồng nghĩa của CURDATE ()

CURTIME ()

Trả về thời gian hiện tại dưới dạng giá trị ở định dạng 'HH: MM: SS' hoặc HHMMSS, tùy thuộc vào việc hàm được sử dụng trong chuỗi hay trong ngữ cảnh số. Giá trị được biểu thị theo múi giờ hiện tại.

mysql> SELECT CURTIME();
+---------------------------------------------------------+
| CURTIME()                                               |
+---------------------------------------------------------+
| 23:50:26                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CURTIME() + 0;
+---------------------------------------------------------+
| CURTIME() + 0                                           |
+---------------------------------------------------------+
| 235026                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CURRENT_TIME và CURRENT_TIME ()

CURRENT_TIME và CURRENT_TIME () là từ đồng nghĩa của CURTIME ().

CURRENT_TIMESTAMP và CURRENT_TIMESTAMP ()

CURRENT_TIMESTAMP và CURRENT_TIMESTAMP () là từ đồng nghĩa với NOW ().

DATE (expr)

Trích xuất phần ngày của ngày hoặc biểu thức datetime expr.

mysql> 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)

DATEDIFF (expr1, expr2)

DATEDIFF () trả về expr1. expr2 được biểu thị dưới dạng giá trị tính theo ngày từ ngày này sang ngày khác. Cả expr1 và expr2 đều là biểu thức ngày tháng hoặc ngày giờ. Chỉ phần ngày của các giá trị được sử dụng trong tính toán.

mysql> 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)

DATE_ADD (ngày, đơn vị thời hạn INTERVAL), DATE_SUB (ngày, đơn vị thời hạn INTERVAL)

Các hàm này thực hiện số học ngày tháng. Cácdatelà giá trị DATETIME hoặc DATE xác định ngày bắt đầu. Cácexprlà một biểu thức chỉ định giá trị khoảng thời gian được thêm vào hoặc trừ đi từ ngày bắt đầu. Expr là một chuỗi; nó có thể bắt đầu bằng dấu '-' cho các khoảng âm.

A unit là một từ khóa cho biết các đơn vị mà biểu thức cần được diễn giải.

Các INTERVAL từ khóa và mã định đơn vị không phân biệt chữ hoa chữ thường.

Bảng sau đây cho thấy dạng mong đợi của đối số expr cho mỗi giá trị đơn vị.

giá trị đơn vị ExprFormat dự kiến
MICROSECOND MICROSECONDS
THỨ HAI GIÂY
PHÚT PHÚT
GIỜ GIỜ
NGÀY NGÀY
TUẦN TUẦN
THÁNG THÁNG
PHẦN TƯ QUARTERS
NĂM NĂM
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 GIỜ: MINUTES: SECONDS'
DAY_MINUTE 'NGÀY GIỜ: PHÚT'
DAY_HOUR 'NGÀY GIỜ'
NĂM THÁNG 'NĂM-THÁNG'

Giá trị QUARTERWEEKcó sẵn từ MySQL 5.0.0. phiên bản.

mysql> 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)

mysql> 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)

DATE_FORMAT (ngày, định dạng)

Lệnh này định dạng giá trị ngày tháng theo chuỗi định dạng.

Các thông số sau có thể được sử dụng trong chuỗi định dạng. Ký tự '%' là bắt buộc trước các ký tự chỉ định định dạng.

Sr.No. Chỉ định & Mô tả
1

%a

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

2

%b

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

3

%c

Tháng, số (0..12)

4

%D

Ngày trong tháng với hậu tố tiếng Anh (0th, 1, 2, 3,.)

5

%d

Ngày trong tháng, số (00..31)

6

%e

Ngày trong tháng, số (0..31)

7

%f

Microseconds (000000..999999)

số 8

%H

Giờ (00..23)

9

%h

Giờ (01..12)

10

%I

Giờ (01..12)

11

%i

Phút, số (00..59)

12

%j

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

13

%k

Giờ (0..23)

14

%l

Giờ (1..12)

15

%M

Tên tháng (Tháng 1.. Tháng 12)

16

%m

Tháng, số (00..12)

17

%p

SA hoặc CH

18

%r

Thời gian, 12 giờ (hh: mm: ss sau đó là SA hoặc CH)

19

%S

Giây (00..59)

20

%s

Giây (00..59)

21

%T

Thời gian, 24 giờ (hh: mm: ss)

22

%U

Tuần (00..53), trong đó Chủ nhật là ngày đầu tiên trong tuần

23

%u

Tuần (00..53), trong đó Thứ Hai là ngày đầu tiên trong tuần

24

%V

Tuần (01..53), trong đó Chủ nhật là ngày đầu tiên trong tuần; được sử dụng với% X

25

%v

Tuần (01..53), trong đó Thứ Hai là ngày đầu tiên trong tuần; được sử dụng với% x

26

%W

Tên ngày trong tuần (Chủ nhật .. Thứ bảy)

27

%w

Ngày trong tuần (0 = Chủ nhật..6 = Thứ bảy)

28

%X

Năm cho tuần mà Chủ nhật là ngày đầu tiên trong tuần, là số, bốn chữ số; được sử dụng với% V

29

%x

Năm trong tuần, trong đó Thứ Hai là ngày đầu tiên của tuần, dạng số, bốn chữ số; được sử dụng với% v

30

%Y

Năm, số, bốn chữ số

31

%y

Năm, số (hai chữ số)

32

%%

Một nghĩa đen.%. tính cách

33

%x

x, cho bất kỳ.x. không được liệt kê ở trên

mysql> 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)

mysql> 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 PM 22:23:00 00 6                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DATE_SUB (ngày, đơn vị thời hạn INTERVAL)

Điều này tương tự với hàm DATE_ADD ().

DAY (ngày)

DAY () là một từ đồng nghĩa với hàm DAYOFMONTH ().

DAYNAME (ngày)

Trả về tên của ngày trong tuần cho ngày.

mysql> SELECT DAYNAME('1998-02-05');
+---------------------------------------------------------+
| DAYNAME('1998-02-05')                                   |
+---------------------------------------------------------+
| Thursday                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DAYOFMONTH (ngày)

Trả về ngày trong tháng cho ngày, trong phạm vi từ 0 đến 31.

mysql> SELECT DAYOFMONTH('1998-02-03');
+---------------------------------------------------------+
| DAYOFMONTH('1998-02-03')                                |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DAYOFWEEK (ngày)

Trả về chỉ số ngày trong tuần cho ngày (1 = Chủ nhật, 2 = Thứ Hai,., 7 = Thứ Bảy). Các giá trị chỉ số này tương ứng với tiêu chuẩn ODBC.

mysql> SELECT DAYOFWEEK('1998-02-03');
+---------------------------------------------------------+
|DAYOFWEEK('1998-02-03')                                  |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DAYOFYEAR (ngày)

Trả về ngày trong năm cho ngày, trong phạm vi từ 1 đến 366.

mysql> SELECT DAYOFYEAR('1998-02-03');
+---------------------------------------------------------+
| DAYOFYEAR('1998-02-03')                                 |
+---------------------------------------------------------+
| 34                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TRÍCH (đơn vị TỪ ngày)

Hàm EXTRACT () sử dụng các loại mã định đơn vị giống như DATE_ADD () hoặc DATE_SUB (), nhưng trích xuất các phần từ ngày thay vì thực hiện số học ngày.

mysql> SELECT EXTRACT(YEAR FROM '1999-07-02');
+---------------------------------------------------------+
| EXTRACT(YEAR FROM '1999-07-02')                         |
+---------------------------------------------------------+
| 1999                                                    |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 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)

FROM_DAYS (N)

Cho một số ngày N, trả về giá trị DATE.

mysql> SELECT FROM_DAYS(729669);
+---------------------------------------------------------+
| FROM_DAYS(729669)                                       |
+---------------------------------------------------------+
| 1997-10-07                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Note- Sử dụng FROM_DAYS () một cách thận trọng vào các ngày cũ. Nó không được thiết kế để sử dụng với các giá trị trước khi lịch Gregorian ra đời (1582).

FROM_UNIXTIME (unix_timestamp)

FROM_UNIXTIME (unix_timestamp, định dạng)

Trả về một đại diện của unix_timestampđối số dưới dạng giá trị ở định dạng 'YYYY-MM-DD HH: MM: SS hoặc YYYYMMDDHHMMSS, tùy thuộc vào việc hàm được sử dụng trong chuỗi hay trong ngữ cảnh số. Giá trị được biểu thị theo múi giờ hiện tại. Đối số unix_timestamp là một giá trị dấu thời gian bên trong, được tạo ra bởiUNIX_TIMESTAMP() chức năng.

Nếu định dạng được cung cấp, kết quả được định dạng theo chuỗi định dạng, được sử dụng theo cách giống như được liệt kê trong mục nhập cho DATE_FORMAT() chức năng.

mysql> SELECT FROM_UNIXTIME(875996580);
+---------------------------------------------------------+
| FROM_UNIXTIME(875996580)                                |
+---------------------------------------------------------+
| 1997-10-04 22:23:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

HOUR (thời gian)

Trả về giờ cho thời gian. Phạm vi của giá trị trả về là 0 đến 23 đối với giá trị thời gian trong ngày. Tuy nhiên, phạm vi giá trị TIME thực sự lớn hơn nhiều, vì vậy HOUR có thể trả về giá trị lớn hơn 23.

mysql> SELECT HOUR('10:05:03');
+---------------------------------------------------------+
| HOUR('10:05:03')                                        |
+---------------------------------------------------------+
| 10                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

LAST_DAY (ngày)

Lấy giá trị ngày hoặc giờ và trả về giá trị tương ứng cho ngày cuối cùng của tháng. Trả về NULL nếu đối số không hợp lệ.

mysql> SELECT LAST_DAY('2003-02-05');
+---------------------------------------------------------+
| LAST_DAY('2003-02-05')                                  |
+---------------------------------------------------------+
| 2003-02-28                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

LOCALTIME và LOCALTIME ()

LOCALTIME và LOCALTIME () là từ đồng nghĩa của NOW ().

LOCALTIMESTAMP và LOCALTIMESTAMP ()

LOCALTIMESTAMP và LOCALTIMESTAMP () là từ đồng nghĩa với NOW ().

MAKEDATE (năm, hàng ngày)

Trả về một ngày, giá trị năm nhất định và ngày trong năm. Giá trị dayofyear phải lớn hơn 0 nếu không kết quả sẽ là NULL.

mysql> 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)

MAKETIME (giờ, phút, giây)

Trả về giá trị thời gian được tính từ các đối số giờ, phút và giây.

mysql> SELECT MAKETIME(12,15,30);
+---------------------------------------------------------+
| MAKETIME(12,15,30)                                      |
+---------------------------------------------------------+
| '12:15:30'                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

MICROSECOND (expr)

Trả về micro giây từ biểu thức thời gian hoặc ngày giờ (expr) dưới dạng một số trong phạm vi từ 0 đến 999999.

mysql> SELECT MICROSECOND('12:00:00.123456');
+---------------------------------------------------------+
| MICROSECOND('12:00:00.123456')                          |
+---------------------------------------------------------+
| 123456                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

MINUTE (thời gian)

Trả về phút cho thời gian, trong phạm vi từ 0 đến 59.

mysql> SELECT MINUTE('98-02-03 10:05:03');
+---------------------------------------------------------+
| MINUTE('98-02-03 10:05:03')                             |
+---------------------------------------------------------+
| 5                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Ngày tháng)

Trả về tháng cho ngày, trong phạm vi từ 0 đến 12.

mysql> SELECT MONTH('1998-02-03')
+---------------------------------------------------------+
| MONTH('1998-02-03')                                     |
+---------------------------------------------------------+
| 2                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

MONTHNAME (ngày)

Trả về tên đầy đủ của tháng cho một ngày.

mysql> SELECT MONTHNAME('1998-02-05');
+---------------------------------------------------------+
| MONTHNAME('1998-02-05')                                 |
+---------------------------------------------------------+
| February                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

HIỆN NAY()

Trả về ngày và giờ hiện tại dưới dạng giá trị ở định dạng 'YYYY-MM-DD HH: MM: SS' hoặc YYYYMMDDHHMMSS, tùy thuộc vào việc hàm được sử dụng trong ngữ cảnh chuỗi hay số. Giá trị này được biểu thị bằng múi giờ hiện tại.

mysql> SELECT NOW();
+---------------------------------------------------------+
| NOW()                                                   |
+---------------------------------------------------------+
| 1997-12-15 23:50:26                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

PERIOD_ADD (P, N)

Thêm N tháng vào khoảng thời gian P (ở định dạng YYMM hoặc YYYYMM). Trả về một giá trị ở định dạng YYYYMM. Lưu ý rằng đối số khoảng thời gian P không phải là giá trị ngày tháng.

mysql> SELECT PERIOD_ADD(9801,2);
+---------------------------------------------------------+
| PERIOD_ADD(9801,2)                                      |
+---------------------------------------------------------+
| 199803                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

PERIOD_DIFF (P1, P2)

Trả về số tháng giữa các khoảng thời gian P1 và P2. Các khoảng thời gian P1 và P2 này phải ở định dạng YYMM hoặc YYYYMM. Lưu ý rằng các đối số dấu chấm P1 và P2 không phải là giá trị ngày.

mysql> SELECT PERIOD_DIFF(9802,199703);
+---------------------------------------------------------+
| PERIOD_DIFF(9802,199703)                                |
+---------------------------------------------------------+
| 11                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

QUARTER (ngày)

Trả về phần tư của năm cho ngày, trong phạm vi từ 1 đến 4.

mysql> SELECT QUARTER('98-04-01');
+---------------------------------------------------------+
| QUARTER('98-04-01')                                     |
+---------------------------------------------------------+
| 2                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Lần thứ hai)

Trả về thời gian thứ hai, trong phạm vi từ 0 đến 59.

mysql> SELECT SECOND('10:05:03');
+---------------------------------------------------------+
| SECOND('10:05:03')                                      |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

SEC_TO_TIME (giây)

Trả về đối số giây, được chuyển đổi thành giờ, phút và giây, dưới dạng giá trị ở định dạng 'HH: MM: SS' hoặc HHMMSS, tùy thuộc vào việc hàm được sử dụng trong ngữ cảnh chuỗi hay số.

mysql> SELECT SEC_TO_TIME(2378);
+---------------------------------------------------------+
| SEC_TO_TIME(2378)                                       |
+---------------------------------------------------------+
| 00:39:38                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

STR_TO_DATE (str, định dạng)

Đây là nghịch đảo của hàm DATE_FORMAT (). Nó có một chuỗi str và một định dạng chuỗi định dạng. Hàm STR_TO_DATE () trả về giá trị DATETIME nếu chuỗi định dạng chứa cả phần ngày và giờ. Ngược lại, nó trả về giá trị DATE hoặc TIME nếu chuỗi chỉ chứa các phần ngày hoặc giờ.

mysql> 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)

SUBDATE (ngày, đơn vị INTERVAL expr) và SUBDATE (expr, days)

Khi được gọi với dạng INTERVAL của đối số thứ hai, SUBDATE () là một từ đồng nghĩa với DATE_SUB (). Để biết thông tin về đối số đơn vị INTERVAL, hãy xem thảo luận cho DATE_ADD ().

mysql> 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)

mysql> 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)

SUBTIME (expr1, expr2)

Hàm SUBTIME () trả về expr1. expr2 được biểu thị dưới dạng một giá trị có cùng định dạng với expr1. Giá trị expr1 là thời gian hoặc biểu thức ngày giờ, trong khi giá trị expr2 là biểu thức thời gian.

mysql> 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)

SYSDATE ()

Trả về ngày và giờ hiện tại dưới dạng giá trị ở định dạng 'YYYY-MM-DD HH: MM: SS' hoặc YYYYMMDDHHMMSS, tùy thuộc vào việc hàm được sử dụng trong chuỗi hay trong ngữ cảnh số.

mysql> SELECT SYSDATE();
+---------------------------------------------------------+
| SYSDATE()                                               |
+---------------------------------------------------------+
| 2006-04-12 13:47:44                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIME (expr)

Trích xuất phần thời gian của biểu thức thời gian hoặc ngày giờ expr và trả về nó dưới dạng một chuỗi.

mysql> 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)

TIMEDIFF (expr1, expr2)

Hàm TIMEDIFF () trả về expr1. expr2 được biểu thị dưới dạng giá trị thời gian. Các giá trị expr1 và expr2 này là biểu thức thời gian hoặc ngày tháng, nhưng cả hai phải cùng loại.

mysql> 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)

TIMESTAMP (expr), TIMESTAMP (expr1, expr2)

Với một đối số duy nhất, hàm này trả về ngày tháng hoặc biểu thức datetime expr dưới dạng giá trị datetime. Với hai đối số, nó thêm biểu thức thời gian expr2 vào ngày tháng hoặc biểu thức ngày giờexpr1 và trả về kết quả dưới dạng giá trị datetime.

mysql> SELECT TIMESTAMP('2003-12-31');
+---------------------------------------------------------+
| TIMESTAMP('2003-12-31')                                 |
+---------------------------------------------------------+
| 2003-12-31 00:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIMESTAMPADD (đơn vị, khoảng thời gian, datetime_expr)

Hàm này thêm khoảng biểu thức số nguyên vào biểu thức ngày tháng hoặc ngày giờ datetime_expr. Đơn vị cho khoảng thời gian được đưa ra bởi đối số đơn vị, phải là một trong các giá trị sau:

  • FRAC_SECOND
  • SECOND, MINUTE
  • HOUR, DAY
  • WEEK
  • MONTH
  • QUARTER hoặc
  • YEAR

Giá trị đơn vị có thể được chỉ định bằng cách sử dụng một trong các từ khóa như được hiển thị hoặc với tiền tố SQL_TSI_.

Ví dụ: DAY và SQL_TSI_DAY đều hợp pháp.

mysql> 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)

TIMESTAMPDIFF (đơn vị, datetime_expr1, datetime_expr2)

Trả về sự khác biệt số nguyên giữa biểu thức ngày tháng hoặc ngày giờ datetime_expr1 và datetime_expr2. Đơn vị cho kết quả được đưa ra bởi đối số đơn vị. Các giá trị pháp lý cho đơn vị giống như các giá trị được liệt kê trong mô tả của hàm TIMESTAMPADD ().

mysql> 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)

TIME_FORMAT (thời gian, định dạng)

Hàm này được sử dụng giống như hàm DATE_FORMAT (), nhưng chuỗi định dạng chỉ có thể chứa từ định dạng cho giờ, phút và giây.

Nếu giá trị thời gian chứa phần giờ lớn hơn 23, thì%H và%k Các mã định dạng giờ tạo ra giá trị lớn hơn phạm vi thông thường từ 0 đến 23. Các mã định dạng giờ khác tạo ra mô-đun giá trị giờ 12.

mysql> 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)

TIME_TO_SEC (thời gian)

Trả về đối số thời gian được chuyển đổi thành giây.

mysql> SELECT TIME_TO_SEC('22:23:00');
+---------------------------------------------------------+
| TIME_TO_SEC('22:23:00')                                 |
+---------------------------------------------------------+
| 80580                                                   |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TO_DAYS (ngày)

Đã cho một ngày, trả về một số ngày (số ngày kể từ năm 0).

mysql> SELECT TO_DAYS(950501);
+---------------------------------------------------------+
| TO_DAYS(950501)                                         |
+---------------------------------------------------------+
| 728779                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

UNIX_TIMESTAMP (), UNIX_TIMESTAMP (ngày)

Nếu được gọi không có đối số, hàm này trả về dấu thời gian Unix (giây kể từ '1970-01-01 00:00:00' UTC) dưới dạng số nguyên không dấu. Nếu UNIX_TIMESTAMP () được gọi với một đối số ngày, nó trả về giá trị của đối số dưới dạng giây kể từ '1970-01-01 00:00:00' UTC. ngày có thể là chuỗi DATE, chuỗi DATETIME, TIMESTAMP hoặc một số ở định dạng YYMMDD hoặc YYYYMMDD.

mysql> SELECT UNIX_TIMESTAMP();
+---------------------------------------------------------+
| UNIX_TIMESTAMP()                                        |
+---------------------------------------------------------+
| 882226357                                               |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 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)

UTC_DATE, UTC_DATE ()

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

mysql> SELECT UTC_DATE(), UTC_DATE() + 0;
+---------------------------------------------------------+
| UTC_DATE(), UTC_DATE() + 0                              |
+---------------------------------------------------------+
| 2003-08-14, 20030814                                    |
+---------------------------------------------------------+
1 row in set (0.00 sec)

UTC_TIME, UTC_TIME ()

Trả về thời gian UTC hiện tại dưới dạng giá trị ở định dạng 'HH: MM: SS' hoặc HHMMSS, tùy thuộc vào việc hàm được sử dụng trong ngữ cảnh chuỗi hay số.

mysql> SELECT UTC_TIME(), UTC_TIME() + 0;
+---------------------------------------------------------+
| UTC_TIME(), UTC_TIME() + 0                              |
+---------------------------------------------------------+
| 18:07:53, 180753                                        |
+---------------------------------------------------------+
1 row in set (0.00 sec)

UTC_TIMESTAMP, UTC_TIMESTAMP ()

Trả về ngày và giờ UTC hiện tại dưới dạng giá trị trong 'YYYY-MM-DD HH: MM: SS' hoặc ở định dạng YYYYMMDDHHMMSS, tùy thuộc vào việc hàm được sử dụng trong chuỗi hay trong ngữ cảnh số.

mysql> 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)

TUẦN (ngày [, chế độ])

Hàm này trả về số tuần cho ngày. Dạng hai đối số của WEEK () cho phép bạn chỉ định tuần bắt đầu vào Chủ Nhật hay Thứ Hai và giá trị trả về phải nằm trong phạm vi từ 0 đến 53 hoặc từ 1 đến 53. Nếu đối số chế độ bị bỏ qua, giá trị của biến hệ thống default_week_format được sử dụng

Chế độ Ngày đầu tuần Phạm vi Tuần 1 là tuần đầu tiên.
0 chủ nhật 0-53 với một ngày chủ nhật trong năm nay
1 Thứ hai 0-53 với hơn 3 ngày trong năm nay
2 chủ nhật 1-53 với một ngày chủ nhật trong năm nay
3 Thứ hai 1-53 với hơn 3 ngày trong năm nay
4 chủ nhật 0-53 với hơn 3 ngày trong năm nay
5 Thứ hai 0-53 với một ngày thứ Hai trong năm nay
6 chủ nhật 1-53 với hơn 3 ngày trong năm nay
7 Thứ hai 1-53 với một ngày thứ Hai trong năm nay
mysql> SELECT WEEK('1998-02-20');
+---------------------------------------------------------+
| WEEK('1998-02-20')                                      |
+---------------------------------------------------------+
| 7                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

WEEKDAY (ngày)

Trả về chỉ số ngày trong tuần cho ngày (0 = Thứ Hai, 1 = Thứ Ba,. 6 = Chủ Nhật).

mysql> SELECT WEEKDAY('1998-02-03 22:23:00');
+---------------------------------------------------------+
| WEEKDAY('1998-02-03 22:23:00')                          |
+---------------------------------------------------------+
| 1                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

WEEKOFYEAR (ngày)

Trả về tuần lịch của ngày dưới dạng một số trong phạm vi từ 1 đến 53. WEEKOFYEAR () là một hàm tương thích tương đương với WEEK (ngày, 3).

mysql> SELECT WEEKOFYEAR('1998-02-20');
+---------------------------------------------------------+
| WEEKOFYEAR('1998-02-20')                                |
+---------------------------------------------------------+
| 8                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

YEAR (ngày)

Trả về năm cho ngày, trong phạm vi 1000 đến 9999 hoặc 0 cho .zero. ngày.

mysql> SELECT YEAR('98-02-03');
+---------------------------------------------------------+
| YEAR('98-02-03')                                        |
+---------------------------------------------------------+
| 1998                                                    |
+---------------------------------------------------------+
1 row in set (0.00 sec)

YEARWEEK (ngày), YEARWEEK (ngày, chế độ)

Trả về năm và tuần cho một ngày. Đối số mode hoạt động chính xác giống như đối số mode đối với hàm WEEK (). Năm trong kết quả có thể khác với năm trong đối số ngày cho tuần đầu tiên và tuần cuối cùng của năm.

mysql> SELECT YEARWEEK('1987-01-01');
+---------------------------------------------------------+
| YEAR('98-02-03')YEARWEEK('1987-01-01')                  |
+---------------------------------------------------------+
| 198653                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Note - Số tuần khác với số mà hàm WEEK () sẽ trả về (0) cho các đối số tùy chọn 0 hoặc 1, vì WEEK () sau đó trả về tuần trong ngữ cảnh của năm nhất định.

SQL - Bảng tạm thời

Bảng tạm thời là gì?

Có RDBMS, hỗ trợ các bảng tạm thời. Bảng tạm thời là một tính năng tuyệt vời cho phép bạnstore and process intermediate results bằng cách sử dụng cùng các khả năng lựa chọn, cập nhật và nối mà bạn có thể sử dụng với các bảng SQL Server điển hình.

Các bảng tạm thời có thể rất hữu ích trong một số trường hợp để giữ dữ liệu tạm thời. Điều quan trọng nhất cần biết đối với các bảng tạm thời là chúng sẽ bị xóa khi phiên khách hiện tại kết thúc.

Bảng tạm thời có sẵn trong MySQL phiên bản 3.23 trở đi. Nếu bạn sử dụng phiên bản MySQL cũ hơn 3.23, bạn không thể sử dụng các bảng tạm thời, nhưng bạn có thể sử dụngheap tables.

Như đã nêu trước đó, các bảng tạm thời sẽ chỉ tồn tại miễn là phiên còn tồn tại. Nếu bạn chạy mã trong tập lệnh PHP, bảng tạm thời sẽ tự động bị hủy khi tập lệnh kết thúc thực thi. Nếu bạn được kết nối với máy chủ cơ sở dữ liệu MySQL thông qua chương trình khách MySQL, thì bảng tạm thời sẽ tồn tại cho đến khi bạn đóng máy khách hoặc hủy bảng theo cách thủ công.

Thí dụ

Đây là một ví dụ cho bạn thấy cách sử dụng bảng tạm thời.

mysql> CREATE TEMPORARY TABLE SALESSUMMARY (
   -> product_name VARCHAR(50) NOT NULL
   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SALESSUMMARY
   -> (product_name, total_sales, avg_unit_price, total_units_sold)
   -> VALUES
   -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SALESSUMMARY;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     |      100.25 |          90.00 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)

Khi bạn ra lệnh SHOW TABLES, bảng tạm thời của bạn sẽ không được liệt kê trong danh sách. Bây giờ, nếu bạn đăng xuất khỏi phiên MySQL và sau đó đưa ra lệnh SELECT, bạn sẽ không tìm thấy dữ liệu nào có sẵn trong cơ sở dữ liệu. Ngay cả bảng tạm thời của bạn sẽ không tồn tại.

Bỏ bảng tạm thời

Theo mặc định, tất cả các bảng tạm thời sẽ bị MySQL xóa khi kết nối cơ sở dữ liệu của bạn bị chấm dứt. Tuy nhiên, nếu bạn muốn xóa chúng ở giữa, thì bạn có thể làm như vậy bằng cách phát hànhDROP TABLE chỉ huy.

Sau đây là một ví dụ về việc giảm một bảng tạm thời.

mysql> CREATE TEMPORARY TABLE SALESSUMMARY (
   -> product_name VARCHAR(50) NOT NULL
   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SALESSUMMARY
   -> (product_name, total_sales, avg_unit_price, total_units_sold)
   -> VALUES
   -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SALESSUMMARY;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     |      100.25 |          90.00 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
mysql> DROP TABLE SALESSUMMARY;
mysql>  SELECT * FROM SALESSUMMARY;
ERROR 1146: Table 'TUTORIALS.SALESSUMMARY' doesn't exist

SQL - Bảng sao chép

Có thể có một trường hợp khi bạn cần một bản sao chính xác của một bảng và TẠO BẢNG ... hoặc các lệnh SELECT ... không phù hợp với mục đích của bạn vì bản sao phải bao gồm các chỉ mục, giá trị mặc định giống nhau, v.v.

Nếu bạn đang sử dụng MySQL RDBMS, bạn có thể xử lý tình huống này bằng cách tuân thủ các bước được đưa ra bên dưới:

  • Sử dụng lệnh SHOW CREATE TABLE để nhận câu lệnh CREATE TABLE xác định cấu trúc, chỉ mục và tất cả của bảng nguồn.

  • Sửa đổi câu lệnh để thay đổi tên bảng thành tên của bảng sao chép và thực hiện câu lệnh. Bằng cách này, bạn sẽ có một bảng sao chép chính xác.

  • Theo tùy chọn, nếu bạn cũng cần sao chép nội dung bảng, hãy phát hành một lệnh INSERT INTO hoặc lệnh SELECT.

Thí dụ

Hãy thử ví dụ sau để tạo bảng sao chép cho TUTORIALS_TBL có cấu trúc như sau:

Step 1 - Nhận cấu trúc hoàn chỉnh về bảng.

SQL> SHOW CREATE TABLE TUTORIALS_TBL \G; 
*************************** 1. row *************************** 
      Table: TUTORIALS_TBL 
Create Table: CREATE TABLE 'TUTORIALS_TBL' ( 
  'tutorial_id' int(11) NOT NULL auto_increment, 
  'tutorial_title' varchar(100) NOT NULL default '', 
  'tutorial_author' varchar(40) NOT NULL default '', 
  'submission_date' date default NULL, 
  PRIMARY KEY  ('tutorial_id'), 
  UNIQUE KEY 'AUTHOR_INDEX' ('tutorial_author') 
) TYPE = MyISAM 
1 row in set (0.00 sec)

Step 2 - Đổi tên bảng này và tạo bảng khác.

SQL> CREATE TABLE `CLONE_TBL` ( 
  -> 'tutorial_id' int(11) NOT NULL auto_increment, 
  -> 'tutorial_title' varchar(100) NOT NULL default '', 
  -> 'tutorial_author' varchar(40) NOT NULL default '', 
  -> 'submission_date' date default NULL, 
  -> PRIMARY KEY  (`tutorial_id'), 
  -> UNIQUE KEY 'AUTHOR_INDEX' ('tutorial_author') 
-> ) TYPE = MyISAM; 
Query OK, 0 rows affected (1.80 sec)

Step 3- Sau khi thực hiện bước 2, bạn sẽ nhân bản một bảng trong cơ sở dữ liệu của mình. Nếu bạn muốn sao chép dữ liệu từ một bảng cũ, thì bạn có thể thực hiện bằng cách sử dụng câu lệnh INSERT INTO ... SELECT.

SQL> INSERT INTO CLONE_TBL (tutorial_id, 
   ->                        tutorial_title, 
   ->                        tutorial_author, 
   ->                        submission_date) 
   -> SELECT tutorial_id,tutorial_title, 
   ->        tutorial_author,submission_date, 
   -> FROM TUTORIALS_TBL; 
Query OK, 3 rows affected (0.07 sec) 
Records: 3  Duplicates: 0  Warnings: 0

Cuối cùng, bạn sẽ có một bảng sao chép chính xác như bạn muốn.

SQL - Truy vấn con

Truy vấn con hoặc Truy vấn bên trong hoặc Truy vấn lồng nhau là một truy vấn bên trong một truy vấn SQL khác và được nhúng trong mệnh đề WHERE.

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

Truy vấn con có thể được sử dụng với các câu lệnh SELECT, INSERT, UPDATE và DELETE cùng với các toán tử như =, <,>,> =, <=, IN, BETWEEN, v.v.

Có một số quy tắc mà các truy vấn con phải tuân theo:

  • Truy vấn con phải được đặt trong dấu ngoặc đơn.

  • Một truy vấn con chỉ có thể có một cột trong mệnh đề SELECT, trừ khi có nhiều cột trong truy vấn chính để truy vấn con so sánh các cột đã chọn của nó.

  • Không thể sử dụng lệnh ORDER BY trong truy vấn con, mặc dù truy vấn chính có thể sử dụng ORDER BY. Lệnh GROUP BY có thể được sử dụng để thực hiện chức năng tương tự như ORDER BY trong truy vấn con.

  • Các truy vấn con trả về nhiều hơn một hàng chỉ có thể được sử dụng với nhiều toán tử giá trị như toán tử IN.

  • Danh sách CHỌN không được bao gồm bất kỳ tham chiếu nào đến các giá trị đánh giá thành BLOB, ARRAY, CLOB hoặc NCLOB.

  • Một truy vấn con không thể được bao ngay trong một hàm tập hợp.

  • Toán tử GIỮA không thể được sử dụng với một truy vấn con. Tuy nhiên, toán tử BETWEEN có thể được sử dụng trong truy vấn con.

Truy vấn con với câu lệnh SELECT

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

SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
   (SELECT column_name [, column_name ]
   FROM table1 [, table2 ]
   [WHERE])

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Bây giờ, chúng ta hãy kiểm tra truy vấn con sau bằng câu lệnh SELECT.

SQL> SELECT * 
   FROM CUSTOMERS 
   WHERE ID IN (SELECT ID 
         FROM CUSTOMERS 
         WHERE SALARY > 4500) ;

Điều này sẽ tạo ra kết quả sau.

+----+----------+-----+---------+----------+
| ID | NAME     | AGE | ADDRESS | SALARY   |
+----+----------+-----+---------+----------+
|  4 | Chaitali |  25 | Mumbai  |  6500.00 |
|  5 | Hardik   |  27 | Bhopal  |  8500.00 |
|  7 | Muffy    |  24 | Indore  | 10000.00 |
+----+----------+-----+---------+----------+

Truy vấn con với câu lệnh INSERT

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

Cú pháp cơ bản như sau.

INSERT INTO table_name [ (column1 [, column2 ]) ]
   SELECT [ *|column1 [, column2 ]
   FROM table1 [, table2 ]
   [ WHERE VALUE OPERATOR ]

Thí dụ

Hãy xem xét một bảng CUSTOMERS_BKP có cấu trúc tương tự như bảng CUSTOMERS. Bây giờ để sao chép bảng CUSTOMERS hoàn chỉnh vào bảng CUSTOMERS_BKP, bạn có thể sử dụng cú pháp sau.

SQL> INSERT INTO CUSTOMERS_BKP
   SELECT * FROM CUSTOMERS 
   WHERE ID IN (SELECT ID 
   FROM CUSTOMERS) ;

Truy vấn con với Tuyên bố UPDATE

Truy vấn con có thể được sử dụng cùng với câu lệnh UPDATE. Có thể cập nhật một hoặc nhiều cột trong bảng khi sử dụng truy vấn con với câu lệnh UPDATE.

Cú pháp cơ bản như sau.

UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

Thí dụ

Giả sử, chúng ta có sẵn bảng CUSTOMERS_BKP, đây là bản sao lưu của bảng CUSTOMERS. Ví dụ sau đây cập nhật LƯƠNG gấp 0,25 lần trong bảng KHÁCH HÀNG cho tất cả các khách hàng có TUỔI lớn hơn hoặc bằng 27.

SQL> UPDATE CUSTOMERS
   SET SALARY = SALARY * 0.25
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
      WHERE AGE >= 27 );

Điều này sẽ ảnh hưởng đến hai hàng và cuối cùng bảng CUSTOMERS sẽ có các bản ghi sau.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |   125.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  2125.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Truy vấn con với Tuyên bố DELETE

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

Cú pháp cơ bản như sau.

DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

Thí dụ

Giả sử, chúng ta có sẵn bảng CUSTOMERS_BKP, đây là bản sao lưu của bảng CUSTOMERS. Ví dụ sau đây xóa các bản ghi khỏi bảng CUSTOMERS cho tất cả các khách hàng có TUỔI lớn hơn hoặc bằng 27.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
      WHERE AGE >= 27 );

Điều này sẽ ảnh hưởng đến hai hàng và cuối cùng bảng CUSTOMERS sẽ có các bản ghi sau.

+----+----------+-----+---------+----------+
| ID | NAME     | AGE | ADDRESS | SALARY   |
+----+----------+-----+---------+----------+
|  2 | Khilan   |  25 | Delhi   |  1500.00 |
|  3 | kaushik  |  23 | Kota    |  2000.00 |
|  4 | Chaitali |  25 | Mumbai  |  6500.00 |
|  6 | Komal    |  22 | MP      |  4500.00 |
|  7 | Muffy    |  24 | Indore  | 10000.00 |
+----+----------+-----+---------+----------+

SQL - Sử dụng chuỗi

Chuỗi là một tập hợp các số nguyên 1, 2, 3, ... được tạo theo thứ tự theo yêu cầu. Chuỗi thường được sử dụng trong cơ sở dữ liệu vì nhiều ứng dụng yêu cầu mỗi hàng trong bảng phải chứa một giá trị duy nhất và chuỗi cung cấp một cách dễ dàng để tạo chúng.

Chương này mô tả cách sử dụng chuỗi trong MySQL.

Sử dụng cột AUTO_INCREMENT

Cách đơn giản nhất trong MySQL để sử dụng chuỗi là xác định một cột là AUTO_INCREMENT và để phần còn lại cho MySQL xử lý.

Thí dụ

Hãy thử ví dụ sau. Thao tác này sẽ tạo một bảng và sau đó, nó sẽ chèn một vài hàng vào bảng này, nơi nó không bắt buộc phải cung cấp ID bản ghi vì nó tự động tăng lên bởi MySQL.

mysql> 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)
mysql> 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: 0
mysql> 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)

Nhận các giá trị AUTO_INCREMENT

LAST_INSERT_ID () là một hàm SQL, vì vậy bạn có thể sử dụng nó từ bên trong bất kỳ ứng dụng khách nào hiểu cách phát hành câu lệnh SQL. Mặt khác, các tập lệnh PERL và PHP cung cấp các chức năng độc quyền để truy xuất giá trị tự động tăng dần của bản ghi cuối cùng.

Ví dụ về PERL

Sử dụng mysql_insertidđể nhận giá trị AUTO_INCREMENT do truy vấn tạo ra. Thuộc tính này được truy cập thông qua một điều khiển cơ sở dữ liệu hoặc một điều khiển câu lệnh, tùy thuộc vào cách bạn đưa ra truy vấn. Ví dụ sau tham chiếu nó thông qua xử lý cơ sở dữ liệu.

$dbh->do ("INSERT INTO INSECT (name,date,origin) VALUES('moth','2001-09-14','windowsill')"); my $seq = $dbh->{mysql_insertid};

Ví dụ PHP

Sau khi đưa ra một truy vấn tạo ra giá trị AUTO_INCREMENT, hãy truy xuất giá trị bằng cách gọi mysql_insert_id( ) chức năng.

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 chuỗi hiện có

Có thể có trường hợp khi bạn đã xóa nhiều bản ghi khỏi một bảng và bạn muốn sắp xếp lại tất cả các bản ghi. Điều này có thể được thực hiện bằng cách sử dụng một thủ thuật đơn giản, nhưng bạn phải rất cẩn thận khi thực hiện việc này và kiểm tra xem bảng của bạn có tham gia với một bảng khác hay không.

Nếu bạn xác định rằng việc sắp xếp lại một cột AUTO_INCREMENT là không thể tránh khỏi, thì cách thực hiện là bỏ cột khỏi bảng, sau đó thêm lại.

Ví dụ sau đây cho thấy cách đánh số lại các giá trị id trong bảng côn trùng bằng kỹ thuật này.

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

Bắt đầu một trình tự ở một giá trị cụ thể

Theo mặc định, MySQL sẽ bắt đầu chuỗi từ 1, nhưng bạn cũng có thể chỉ định bất kỳ số nào khác tại thời điểm tạo bảng.

Khối mã sau đây có một ví dụ trong đó MySQL sẽ bắt đầu chuỗi từ 100.

mysql> 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
);

Ngoài ra, bạn có thể tạo bảng và sau đó đặt giá trị trình tự ban đầu bằng ALTER TABLE.

mysql> ALTER TABLE t AUTO_INCREMENT = 100;

SQL - Xử lý các bản sao

Có thể có một tình huống khi bạn có nhiều bản ghi trùng lặp trong một bảng. Trong khi tìm nạp các bản ghi như vậy, sẽ hợp lý hơn nếu chỉ tìm nạp các bản ghi duy nhất thay vì tìm nạp các bản ghi trùng lặp.

SQL DISTINCT từ khóa mà chúng ta đã thảo luận được sử dụng cùng với câu lệnh SELECT để loại bỏ tất cả các bản ghi trùng lặp và bằng cách chỉ tìm nạp các bản ghi duy nhất.

Cú pháp

Cú pháp cơ bản của từ khóa DISTINCT để loại bỏ các bản ghi trùng lặp như sau.

SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition]

Thí dụ

Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Trước tiên, hãy xem cách truy vấn SELECT sau đây trả về các bản ghi lương trùng lặp.

SQL> SELECT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

Điều này sẽ tạo ra kết quả sau đây trong đó mức lương năm 2000 tăng gấp đôi, đây là một bản ghi trùng lặp từ bảng gốc.

+----------+
| SALARY   |
+----------+
|  1500.00 |
|  2000.00 |
|  2000.00 |
|  4500.00 |
|  6500.00 |
|  8500.00 |
| 10000.00 |
+----------+

Bây giờ, chúng ta hãy sử dụng từ khóa DISTINCT với truy vấn SELECT ở trên và xem kết quả.

SQL> SELECT DISTINCT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

Điều này sẽ tạo ra kết quả sau đây mà chúng tôi không có bất kỳ mục nhập trùng lặp nào.

+----------+
| SALARY   |
+----------+
|  1500.00 |
|  2000.00 |
|  4500.00 |
|  6500.00 |
|  8500.00 |
| 10000.00 |
+----------+

SQL - Injection

Nếu bạn lấy thông tin đầu vào của người dùng thông qua một trang web và chèn nó vào cơ sở dữ liệu SQL, có khả năng là bạn đã bỏ ngỏ cho mình một vấn đề bảo mật được gọi là SQL Injection. Chương này sẽ hướng dẫn bạn cách giúp ngăn điều này xảy ra và giúp bạn bảo mật các tập lệnh và câu lệnh SQL của mình trong các tập lệnh phía máy chủ, chẳng hạn như Tập lệnh PERL.

Injection thường xảy ra khi bạn yêu cầu người dùng nhập vào, như tên của họ và thay vì tên, họ cung cấp cho bạn một câu lệnh SQL mà bạn sẽ vô tình chạy trên cơ sở dữ liệu của mình. Không bao giờ tin tưởng dữ liệu do người dùng cung cấp, chỉ xử lý dữ liệu này sau khi xác nhận; như một quy luật, điều này được thực hiện bởiPattern Matching.

Trong ví dụ dưới đây, name bị hạn chế đối với các ký tự chữ và số cộng với dấu gạch dưới và độ dài từ 8 đến 20 ký tự (sửa đổi các quy tắc này nếu cần).

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysql_query("SELECT * FROM CUSTOMERS 
      WHERE name = $matches[0]");
} else {
   echo "user name not accepted";
}

Để chứng minh vấn đề, hãy xem đoạn trích này -

// supposed input
$name = "Qadir'; DELETE FROM CUSTOMERS;";
mysql_query("SELECT * FROM CUSTOMSRS WHERE name='{$name}'");

Lời gọi hàm được cho là lấy một bản ghi từ bảng CUSTOMERS trong đó cột tên khớp với tên do người dùng chỉ định. Trong những trường hợp bình thường,$namesẽ chỉ chứa các ký tự chữ và số và có thể là khoảng trắng, chẳng hạn như chuỗi ilia. Nhưng ở đây, bằng cách thêm một truy vấn hoàn toàn mới vào $ name, lệnh gọi đến cơ sở dữ liệu biến thành thảm họa; truy vấn DELETE được đưa vào sẽ xóa tất cả các bản ghi khỏi bảng CUSTOMERS.

May mắn thay, nếu bạn sử dụng MySQL, mysql_query()hàm không cho phép xếp chồng truy vấn hoặc thực thi nhiều truy vấn SQL trong một lệnh gọi hàm duy nhất. Nếu bạn cố gắng xếp chồng các truy vấn, cuộc gọi không thành công.

Tuy nhiên, các phần mở rộng cơ sở dữ liệu PHP khác, chẳng hạn như SQLitePostgreSQL vui vẻ thực hiện các truy vấn xếp chồng lên nhau, thực hiện tất cả các truy vấn được cung cấp trong một chuỗi và tạo ra một vấn đề bảo mật nghiêm trọng.

Ngăn chặn SQL Injection

Bạn có thể xử lý tất cả các ký tự thoát một cách thông minh bằng các ngôn ngữ lập trình như PERL và PHP. Phần mở rộng MySQL cho PHP cung cấp chức năngmysql_real_escape_string() để thoát các ký tự đầu vào đặc biệt đối với MySQL.

if (get_magic_quotes_gpc()) {
   $name = stripslashes($name); } $name = mysql_real_escape_string($name); mysql_query("SELECT * FROM CUSTOMERS WHERE name='{$name}'");

Các Quandary THÍCH

Để giải quyết yêu cầu LIKE, cơ chế thoát tùy chỉnh phải chuyển đổi các ký tự '%' và '_' do người dùng cung cấp thành các ký tự. Sử dụngaddcslashes(), một hàm cho phép bạn chỉ định một phạm vi ký tự để thoát.

$sub = addcslashes(mysql_real_escape_string("%str"), "%_"); // $sub == \%str\_
mysql_query("SELECT * FROM messages 
   WHERE subject LIKE '{$sub}%'");

SQL - Kiểm tra cơ sở dữ liệu

Cần có thời gian để trở thành Chuyên gia cơ sở dữ liệu hoặc Quản trị viên cơ sở dữ liệu chuyên nghiệp. Tất cả đều có nhiều kinh nghiệm trong các thiết kế cơ sở dữ liệu khác nhau và các khóa đào tạo tốt.

Nhưng danh sách sau đây có thể hữu ích cho những người mới bắt đầu để có hiệu suất cơ sở dữ liệu tốt -

  • Sử dụng thiết kế cơ sở dữ liệu 3BNF được giải thích trong hướng dẫn này trong chương Các khái niệm RDBMS.

  • Tránh chuyển đổi số thành ký tự vì số và ký tự so sánh khác nhau và dẫn đến hạ cấp hiệu suất.

  • Trong khi sử dụng câu lệnh SELECT, chỉ tìm nạp bất kỳ thông tin nào được yêu cầu và tránh sử dụng * trong các truy vấn SELECT của bạn vì nó sẽ tải hệ thống một cách không cần thiết.

  • Tạo chỉ mục của bạn một cách cẩn thận trên tất cả các bảng mà bạn có các thao tác tìm kiếm thường xuyên. Tránh lập chỉ mục trên các bảng mà bạn có ít thao tác tìm kiếm hơn và nhiều thao tác chèn và cập nhật hơn.

  • Quá trình quét toàn bảng xảy ra khi các cột trong mệnh đề WHERE không có chỉ mục được liên kết với chúng. Bạn có thể tránh quét toàn bảng bằng cách tạo chỉ mục trên các cột được sử dụng làm điều kiện trong mệnh đề WHERE của câu lệnh SQL.

  • Hãy cẩn thận với các toán tử bình đẳng với số thực và giá trị ngày / giờ. Cả hai điều này có thể có những khác biệt nhỏ mà mắt thường không rõ ràng nhưng điều đó làm cho không thể đối sánh chính xác, do đó ngăn các truy vấn của bạn không bao giờ trả lại hàng.

  • Sử dụng đối sánh mẫu một cách thận trọng. LIKE COL% là điều kiện WHERE hợp lệ, giảm tập hợp được trả về chỉ những bản ghi có dữ liệu bắt đầu bằng chuỗi COL. Tuy nhiên, COL% Y không làm giảm thêm kết quả trả về đã đặt vì% Y không thể được đánh giá một cách hiệu quả. Nỗ lực để thực hiện đánh giá là quá lớn để được xem xét. Trong trường hợp này, COL% được sử dụng, nhưng% Y bị loại bỏ. Vì lý do tương tự, ký tự đại diện hàng đầu% COL ngăn không cho toàn bộ bộ lọc được sử dụng.

  • Tinh chỉnh các truy vấn SQL của bạn kiểm tra cấu trúc của các truy vấn (và truy vấn con), cú pháp SQL, để khám phá xem bạn đã thiết kế bảng của mình để hỗ trợ thao tác dữ liệu nhanh hay chưa và viết truy vấn theo cách tối ưu, cho phép DBMS của bạn thao tác dữ liệu hiệu quả .

  • Đối với các truy vấn được thực hiện thường xuyên, hãy thử sử dụng các thủ tục. Một thủ tục là một nhóm lớn các câu lệnh SQL. Các thủ tục được biên dịch bởi cơ sở dữ liệu và sau đó được thực thi. Không giống như câu lệnh SQL, công cụ cơ sở dữ liệu không cần tối ưu hóa quy trình trước khi nó được thực thi.

  • Tránh sử dụng toán tử logic HOẶC trong một truy vấn nếu có thể. HOẶC chắc chắn làm chậm gần như bất kỳ truy vấn nào đối với một bảng có kích thước đáng kể.

  • Bạn có thể tối ưu hóa tải dữ liệu hàng loạt bằng cách giảm các chỉ mục. Hãy tưởng tượng bảng lịch sử có hàng ngàn hàng. Bảng lịch sử đó cũng có thể có một hoặc nhiều chỉ mục. Khi bạn nghĩ về một chỉ mục, bạn thường nghĩ đến việc truy cập bảng nhanh hơn, nhưng trong trường hợp tải hàng loạt, bạn có thể hưởng lợi bằng cách giảm (các) chỉ mục.

  • Khi thực hiện các giao dịch hàng loạt, hãy thực hiện COMMIT sau một số lượng hợp lý tạo bản ghi thay vì tạo chúng sau mỗi lần tạo bản ghi.

  • Lên kế hoạch chống phân mảnh cơ sở dữ liệu một cách thường xuyên, ngay cả khi làm như vậy có nghĩa là phát triển một thói quen hàng tuần.

Công cụ điều chỉnh tích hợp

Oracle có nhiều công cụ để quản lý hiệu suất câu lệnh SQL nhưng trong số đó có hai công cụ rất phổ biến. Hai công cụ này là -

  • Explain plan - công cụ xác định đường dẫn truy cập sẽ được sử dụng khi câu lệnh SQL được thực thi.

  • tkprof - đo lường hiệu suất theo thời gian trôi qua trong mỗi giai đoạn xử lý câu lệnh SQL.

Nếu bạn chỉ muốn đo thời gian đã trôi qua của một truy vấn trong Oracle, bạn có thể sử dụng lệnh SQL * Plus SET TIMING ON.

Kiểm tra tài liệu RDBMS của bạn để biết thêm chi tiết về các công cụ được đề cập ở trên và chống phân mảnh cơ sở dữ liệu.