HSQLDB - Hướng dẫn nhanh
Cơ sở dữ liệu HyperSQL (HSQLDB) là trình quản lý cơ sở dữ liệu quan hệ hiện đại phù hợp chặt chẽ với tiêu chuẩn SQL: 2011 và thông số kỹ thuật JDBC 4. Nó hỗ trợ tất cả các tính năng cốt lõi và RDBMS. HSQLDB được sử dụng để phát triển, thử nghiệm và triển khai các ứng dụng cơ sở dữ liệu.
Tính năng chính và duy nhất của HSQLDB là Tuân thủ Tiêu chuẩn. Nó có thể cung cấp quyền truy cập cơ sở dữ liệu trong quy trình ứng dụng của người dùng, trong máy chủ ứng dụng hoặc dưới dạng quy trình máy chủ riêng biệt.
Đặc điểm của HSQLDB
HSQLDB sử dụng cấu trúc trong bộ nhớ cho các hoạt động nhanh chống lại máy chủ DB. Nó sử dụng tính bền bỉ của ổ đĩa theo tính linh hoạt của người dùng, với khả năng khôi phục sự cố đáng tin cậy.
HSQLDB cũng thích hợp cho kinh doanh thông minh, ETL và các ứng dụng khác xử lý tập dữ liệu lớn.
HSQLDB có nhiều tùy chọn triển khai dành cho doanh nghiệp, chẳng hạn như giao dịch XA, nguồn dữ liệu tổng hợp kết nối và xác thực từ xa.
HSQLDB được viết bằng ngôn ngữ lập trình Java và chạy trong Máy ảo Java (JVM). Nó hỗ trợ giao diện JDBC để truy cập cơ sở dữ liệu.
Các thành phần của HSQLDB
Có ba thành phần khác nhau trong gói HSQLDB jar.
HyperSQL RDBMS Engine (HSQLDB)
Trình điều khiển HyperSQL JDBC
Trình quản lý cơ sở dữ liệu (công cụ truy cập cơ sở dữ liệu GUI, với các phiên bản Swing và AWT)
HyperSQL RDBMS và JDBC Driver cung cấp chức năng cốt lõi. Trình quản lý cơ sở dữ liệu là công cụ truy cập cơ sở dữ liệu có mục đích chung có thể được sử dụng với bất kỳ công cụ cơ sở dữ liệu nào có trình điều khiển JDBC.
Một jar bổ sung được gọi là sqltool.jar, chứa Sql Tool, là một công cụ truy cập cơ sở dữ liệu dòng lệnh. Đây là một lệnh mục đích chung. Công cụ truy cập cơ sở dữ liệu dòng có thể được sử dụng với các công cụ cơ sở dữ liệu khác.
HSQLDB là một hệ quản trị cơ sở dữ liệu quan hệ được thực hiện bằng Java thuần túy. Bạn có thể dễ dàng nhúng cơ sở dữ liệu này vào ứng dụng của mình bằng JDBC. Hoặc bạn có thể sử dụng các hoạt động riêng biệt.
Điều kiện tiên quyết
Thực hiện theo các cài đặt phần mềm tiên quyết cho HSQLDB.
Xác minh cài đặt Java
Vì HSQLDB là một hệ quản trị cơ sở dữ liệu quan hệ được triển khai bằng Java thuần túy, bạn phải cài đặt phần mềm JDK (Java Development Kit) trước khi cài đặt HSQLDB. Nếu bạn đã cài đặt JDK trong hệ thống của mình, hãy thử lệnh sau để xác minh phiên bản Java.
java –version
Nếu JDK được cài đặt thành công trong hệ thống của bạn, bạn sẽ nhận được kết quả sau.
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
Nếu bạn chưa cài đặt JDK trong hệ thống của mình, hãy truy cập liên kết sau để Cài đặt JDK.
Cài đặt HSQLDB
Sau đây là các bước để cài đặt HSQLDB.
Step 1 − Download HSQLDB bundle
Tải xuống phiên bản mới nhất của cơ sở dữ liệu HSQLDB từ liên kết sau https://sourceforge.net/projects/hsqldb/files/. Khi bạn nhấp vào liên kết, bạn sẽ nhận được ảnh chụp màn hình sau.
Nhấp vào HSQLDB và quá trình tải xuống sẽ bắt đầu ngay lập tức. Cuối cùng, bạn sẽ nhận được tệp zip có tênhsqldb-2.3.4.zip.
Step 2 − Extract the HSQLDB zip file
Giải nén tệp zip và đặt nó vào C:\danh mục. Sau khi giải nén, bạn sẽ nhận được cấu trúc tệp như trong ảnh chụp màn hình sau.
Step 3 − Create a default database
Không có cơ sở dữ liệu mặc định cho HSQLDB, do đó, bạn cần tạo cơ sở dữ liệu cho HSQLDB. Hãy để chúng tôi tạo một tệp thuộc tính có tênserver.properties xác định một cơ sở dữ liệu mới có tên demodb. Hãy xem các thuộc tính máy chủ cơ sở dữ liệu sau đây.
server.database.0 = file:hsqldb/demodb
server.dbname.0 = testdb
Đặt tệp server.properties này vào thư mục chính HSQLDB C:\hsqldb- 2.3.4\hsqldb\.
Bây giờ thực hiện lệnh sau trên dấu nhắc lệnh.
\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server
Sau khi thực hiện lệnh trên, bạn sẽ nhận được trạng thái máy chủ như thể hiện trong ảnh chụp màn hình sau.
Sau đó, bạn sẽ tìm thấy cấu trúc thư mục sau của thư mục hsqldb trong thư mục chính HSQLDB đó là C:\hsqldb-2.3.4\hsqldb. Các tệp đó là tệp tạm thời, tệp lck, tệp nhật ký, tệp thuộc tính và tệp tập lệnh của cơ sở dữ liệu demodb được tạo bởi máy chủ cơ sở dữ liệu HSQLDB.
Step 4 − Start the database server
Khi bạn hoàn tất việc tạo cơ sở dữ liệu, bạn phải khởi động cơ sở dữ liệu bằng cách sử dụng lệnh sau.
\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb
Sau khi thực hiện lệnh trên, bạn sẽ có trạng thái sau.
Bây giờ, bạn có thể mở màn hình chính của cơ sở dữ liệu runManagerSwing.bat từ C:\hsqldb-2.3.4\hsqldb\binvị trí. Tệp dơi này sẽ mở tệp GUI cho cơ sở dữ liệu HSQLDB. Trước đó, nó sẽ yêu cầu bạn cài đặt cơ sở dữ liệu thông qua một hộp thoại. Hãy xem ảnh chụp màn hình sau. Trong hộp thoại này, nhập Tên cài đặt, URL như hình trên và nhấn Ok.
Bạn sẽ nhận được màn hình GUI của cơ sở dữ liệu HSQLDB như trong ảnh chụp màn hình sau.
Trong chương cài đặt, chúng ta đã thảo luận về cách kết nối cơ sở dữ liệu theo cách thủ công. Trong chương này, chúng ta sẽ thảo luận về cách kết nối cơ sở dữ liệu theo chương trình (sử dụng lập trình Java).
Hãy xem chương trình sau, chương trình này sẽ khởi động máy chủ và tạo kết nối giữa ứng dụng Java và cơ sở dữ liệu.
Thí dụ
import java.sql.Connection;
import java.sql.DriverManager;
public class ConnectDatabase {
public static void main(String[] args) {
Connection con = null;
try {
//Registering the HSQLDB JDBC driver
Class.forName("org.hsqldb.jdbc.JDBCDriver");
//Creating the connection with HSQLDB
con = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
if (con!= null){
System.out.println("Connection created successfully");
}else{
System.out.println("Problem with creating connection");
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
}
}
Lưu mã này vào ConnectDatabase.javatập tin. Bạn sẽ phải khởi động cơ sở dữ liệu bằng lệnh sau.
\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb
Bạn có thể sử dụng lệnh sau để biên dịch và thực thi mã.
\>javac ConnectDatabase.java
\>java ConnectDatabase
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau:
Connection created successfully
Chương này giải thích các kiểu dữ liệu khác nhau của HSQLDB. Máy chủ HSQLDB cung cấp sáu loại kiểu dữ liệu.
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 |
Các 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 datetime nhỏ có độ chính xác 1 phút.
Kiểu dữ liệu chuỗi ký tự
Loại dữ liệu | Sự miêu tả |
---|---|
char | Độ dài tối đa 8.000 ký tự (Độ dài cố định không phải ký tự Unicode) |
varchar | Tối đa 8.000 ký tự (Dữ liệu không phải Unicode có độ dài thay đổi) |
varchar (tối đa) | Độ dài tối đa 231 ký tự, dữ liệu không phải Unicode có độ dài thay đổi (chỉ dành cho SQL Server 2005) |
bản văn | 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
Loại dữ liệu | Sự miêu tả |
---|---|
nchar | Độ dài tối đa 4.000 ký tự (Unicode độ dài cố định) |
nvarchar | Độ dài tối đa 4.000 ký tự (Unicode có độ dài thay đổi) |
nvarchar (tối đa) | Độ dài tối đa 231 ký tự (chỉ dành cho SQL Server 2005), (Unicode có độ dài thay đổi) |
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
Loại dữ liệu | Sự miêu tả |
---|---|
nhị phân | Độ dài tối đa 8.000 byte (Dữ liệu nhị phân có độ dài cố định) |
varbinary | Độ dài tối đa 8.000 byte (Dữ liệu nhị phân có độ dài thay đổi) |
varbinary (tối đa) | Độ dài tối đa 231 byte (chỉ dành cho SQL Server 2005), (Độ dài thay đổi Dữ liệu nhị phân) |
hình ảnh | Độ 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
Loại dữ liệu | Sự miêu tả |
---|---|
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, ntext và dấu thời gian |
dấu thời gian | 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 |
định danh duy nhất | Lưu trữ số nhận dạng duy nhất trên toàn cầu (GUID) |
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) |
con trỏ | Tham chiếu đến một đối tượng con trỏ |
bàn | Lưu trữ tập hợp kết quả để xử lý sau |
Các yêu cầu bắt buộc cơ bản để tạo bảng là tên bảng, tên trường và kiểu dữ liệu của các trường đó. Theo tùy chọn, bạn cũng có thể cung cấp các ràng buộc chính cho bảng.
Cú pháp
Hãy xem cú pháp sau.
CREATE TABLE table_name (column_name column_type);
Thí dụ
Hãy để chúng tôi tạo một bảng có tên tutorial_tbl với các tên trường như id, title, author và submit_date. Hãy xem truy vấn sau.
CREATE TABLE tutorials_tbl (
id INT NOT NULL,
title VARCHAR(50) NOT NULL,
author VARCHAR(20) NOT NULL,
submission_date DATE,
PRIMARY KEY (id)
);
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau:
(0) rows effected
HSQLDB - Chương trình JDBC
Sau đây là chương trình JDBC được sử dụng để tạo một bảng có tên tutorial_tbl vào cơ sở dữ liệu HSQLDB. Lưu chương trình vàoCreateTable.java tập tin.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class CreateTable {
public static void main(String[] args) {
Connection con = null;
Statement stmt = null;
int result = 0;
try {
Class.forName("org.hsqldb.jdbc.JDBCDriver");
con = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
stmt = con.createStatement();
result = stmt.executeUpdate("CREATE TABLE tutorials_tbl (
id INT NOT NULL, title VARCHAR(50) NOT NULL,
author VARCHAR(20) NOT NULL, submission_date DATE,
PRIMARY KEY (id));
");
} catch (Exception e) {
e.printStackTrace(System.out);
}
System.out.println("Table created successfully");
}
}
Bạn có thể khởi động cơ sở dữ liệu bằng lệnh sau.
\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb
Biên dịch và thực hiện chương trình trên bằng lệnh sau.
\>javac CreateTable.java
\>java CreateTable
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau:
Table created successfully
Rất dễ dàng để bỏ một bảng HSQLDB hiện có. Tuy nhiên, bạn cần phải rất cẩn thận khi xóa bất kỳ bảng nào hiện có vì mọi dữ liệu bị mất sẽ không được phục hồi sau khi xóa bảng.
Cú pháp
Sau đây là một cú pháp SQL chung để thả một bảng HSQLDB.
DROP TABLE table_name;
Thí dụ
Chúng ta hãy xem xét một ví dụ để loại bỏ một bảng có tên là nhân viên từ máy chủ HSQLDB. Sau đây là truy vấn để thả một bảng có tên nhân viên.
DROP TABLE employee;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau:
(0) rows effected
HSQLDB - Chương trình JDBC
Sau đây là chương trình JDBC được sử dụng để loại bỏ nhân viên bảng khỏi máy chủ HSQLDB.
Lưu mã sau vào DropTable.java tập tin.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class DropTable {
public static void main(String[] args) {
Connection con = null;
Statement stmt = null;
int result = 0;
try {
Class.forName("org.hsqldb.jdbc.JDBCDriver");
con = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
stmt = con.createStatement();
result = stmt.executeUpdate("DROP TABLE employee");
}catch (Exception e) {
e.printStackTrace(System.out);
}
System.out.println("Table dropped successfully");
}
}
Bạn có thể khởi động cơ sở dữ liệu bằng lệnh sau.
\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb
Biên dịch và thực hiện chương trình trên bằng lệnh sau.
\>javac DropTable.java
\>java DropTable
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau:
Table dropped successfully
Bạn có thể đạt được câu lệnh truy vấn Chèn trong HSQLDB bằng cách sử dụng lệnh INSERT INTO. Bạn phải cung cấp dữ liệu do người dùng xác định theo thứ tự trường cột từ bảng.
Cú pháp
Sau đây là cú pháp chung để INSERT một truy vấn.
INSERT INTO table_name (field1, field2,...fieldN)
VALUES (value1, value2,...valueN );
Để chèn dữ liệu kiểu chuỗi vào bảng, bạn sẽ phải sử dụng dấu ngoặc kép hoặc dấu nháy đơn để cung cấp giá trị chuỗi vào câu lệnh truy vấn chèn.
Thí dụ
Chúng ta hãy xem xét một ví dụ chèn một bản ghi vào một bảng có tên tutorials_tbl với các giá trị id = 100, title = Learn PHP, Author = John Poul và ngày gửi là ngày hiện tại.
Sau đây là truy vấn cho ví dụ đã cho.
INSERT INTO tutorials_tbl VALUES (100,'Learn PHP', 'John Poul', NOW());
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau:
1 row effected
HSQLDB - Chương trình JDBC
Đây là chương trình JDBC để chèn bản ghi vào bảng với các giá trị đã cho, id = 100, title = Learn PHP, Author = John Poul, và ngày gửi là ngày hiện tại. Hãy xem chương trình đã cho. Lưu mã vàoInserQuery.java tập tin.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class InsertQuery {
public static void main(String[] args) {
Connection con = null;
Statement stmt = null;
int result = 0;
try {
Class.forName("org.hsqldb.jdbc.JDBCDriver");
con = DriverManager.getConnection(
"jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
stmt = con.createStatement();
result = stmt.executeUpdate("INSERT INTO tutorials_tbl
VALUES (100,'Learn PHP', 'John Poul', NOW())");
con.commit();
}catch (Exception e) {
e.printStackTrace(System.out);
}
System.out.println(result+" rows effected");
System.out.println("Rows inserted successfully");
}
}
Bạn có thể khởi động cơ sở dữ liệu bằng lệnh sau.
\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb
Biên dịch và thực hiện chương trình trên bằng lệnh sau.
\>javac InsertQuery.java
\>java InsertQuery
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau:
1 rows effected
Rows inserted successfully
Cố gắng chèn các bản ghi sau vào tutorials_tbl bảng bằng cách sử dụng INSERT INTO chỉ huy.
Tôi | Tiêu đề | Tác giả | Ngày nộp hồ sơ |
---|---|---|---|
101 | Học C | Yaswanth | Hiện nay() |
102 | Tìm hiểu MySQL | Abdul S | Hiện nay() |
103 | Học Excell | Bavya kanna | Hiện nay() |
104 | Tìm hiểu JDB | Ajith kumar | Hiện nay() |
105 | Học Junit | Sathya Murthi | Hiện nay() |
Lệnh SELECT được sử dụng để tìm nạp dữ liệu bản ghi từ cơ sở dữ liệu HSQLDB. Ở đây, bạn cần phải đề cập đến danh sách các trường bắt buộc trong câu lệnh Chọn.
Cú pháp
Đây là cú pháp chung cho truy vấn Chọn.
SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
Bạn có thể tìm nạp một hoặc nhiều trường trong một lệnh SELECT.
Bạn có thể chỉ định dấu sao (*) thay cho các trường. Trong trường hợp này, SELECT sẽ trả về tất cả các trường.
Bạn có thể chỉ định bất kỳ điều kiện nào bằng mệnh đề WHERE.
Bạn có thể chỉ định một độ lệch bằng cách sử dụng OFFSET từ nơi SELECT sẽ bắt đầu trả về các bản ghi. Theo mặc định, độ lệch là 0.
Bạn có thể giới hạn số lần trả hàng bằng cách sử dụng thuộc tính LIMIT.
Thí dụ
Đây là một ví dụ tìm nạp các trường id, tiêu đề và tác giả của tất cả các bản ghi từ tutorials_tblbàn. Chúng ta có thể đạt được điều này bằng cách sử dụng câu lệnh SELECT. Sau đây là truy vấn cho ví dụ.
SELECT id, title, author FROM tutorials_tbl
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+------+----------------+-----------------+
| id | title | author |
+------+----------------+-----------------+
| 100 | Learn PHP | John Poul |
| 101 | Learn C | Yaswanth |
| 102 | Learn MySQL | Abdul S |
| 103 | Learn Excell | Bavya kanna |
| 104 | Learn JDB | Ajith kumar |
| 105 | Learn Junit | Sathya Murthi |
+------+----------------+-----------------+
HSQLDB - Chương trình JDBC
Đây là chương trình JDBC sẽ tìm nạp các trường id, tiêu đề và tác giả của tất cả các bản ghi từ tutorials_tblbàn. Lưu mã sau vàoSelectQuery.java tập tin.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class SelectQuery {
public static void main(String[] args) {
Connection con = null;
Statement stmt = null;
ResultSet result = null;
try {
Class.forName("org.hsqldb.jdbc.JDBCDriver");
con = DriverManager.getConnection(
"jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
stmt = con.createStatement();
result = stmt.executeQuery(
"SELECT id, title, author FROM tutorials_tbl");
while(result.next()){
System.out.println(result.getInt("id")+" | "+
result.getString("title")+" | "+
result.getString("author"));
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
}
}
Bạn có thể khởi động cơ sở dữ liệu bằng lệnh sau.
\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb
Biên dịch và thực thi đoạn mã trên bằng lệnh sau.
\>javac SelectQuery.java
\>java SelectQuery
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau:
100 | Learn PHP | John Poul
101 | Learn C | Yaswanth
102 | Learn MySQL | Abdul S
103 | Learn Excell | Bavya Kanna
104 | Learn JDB | Ajith kumar
105 | Learn Junit | Sathya Murthi
Nói chung, chúng tôi sử dụng lệnh SELECT để tìm nạp dữ liệu từ bảng HSQLDB. Chúng ta có thể sử dụng mệnh đề điều kiện WHERE để lọc dữ liệu kết quả. Sử dụng WHERE, chúng ta có thể chỉ định các tiêu chí lựa chọn để chọn các bản ghi cần thiết từ một bảng.
Cú pháp
Sau đây là cú pháp của mệnh đề WHERE lệnh SELECT để tìm nạp dữ liệu từ bảng HSQLDB.
SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
Bạn có thể sử dụng một hoặc nhiều bảng được phân tách bằng dấu phẩy để bao gồm các điều kiện khác nhau bằng mệnh đề WHERE, nhưng mệnh đề WHERE là một phần tùy chọn của lệnh SELECT.
Bạn có thể chỉ định bất kỳ điều kiện nào bằng mệnh đề WHERE.
Bạn có thể chỉ định nhiều hơn một điều kiện bằng cách sử dụng toán tử VÀ hoặc HOẶC.
Mệnh đề WHERE cũng có thể được sử dụng cùng với lệnh DELETE hoặc UPDATE SQL để chỉ định một điều kiện.
Chúng tôi có thể lọc dữ liệu bản ghi bằng cách sử dụng các điều kiện. Chúng tôi đang sử dụng các toán tử khác nhau trong mệnh đề WHERE có điều kiện. Đây là danh sách các toán tử, có thể được sử dụng với mệnh đề WHERE.
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 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 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 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 |
Thí dụ
Đây là một ví dụ truy xuất các chi tiết như id, tiêu đề và tác giả của cuốn sách có tiêu đề "Học C". Có thể sử dụng mệnh đề WHERE trong lệnh SELECT. Sau đây là truy vấn cho cùng một.
SELECT id, title, author FROM tutorials_tbl WHERE title = 'Learn C';
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+------+----------------+-----------------+
| id | title | author |
+------+----------------+-----------------+
| 101 | Learn C | Yaswanth |
+------+----------------+-----------------+
HSQLDB - Chương trình JDBC
Đây là chương trình JDBC lấy dữ liệu bản ghi từ bảng hướng dẫn_tblhaving tiêu đề Learn C. Lưu mã sau vàoWhereClause.java.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class WhereClause {
public static void main(String[] args) {
Connection con = null;
Statement stmt = null;
ResultSet result = null;
try {
Class.forName("org.hsqldb.jdbc.JDBCDriver");
con = DriverManager.getConnection(
"jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
stmt = con.createStatement();
result = stmt.executeQuery(
"SELECT id, title, author FROM tutorials_tbl
WHERE title = 'Learn C'");
while(result.next()){
System.out.println(result.getInt("id")+" |
"+result.getString("title")+" |
"+result.getString("author"));
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
}
}
Bạn có thể khởi động cơ sở dữ liệu bằng lệnh sau.
\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb
Biên dịch và thực thi đoạn mã trên bằng lệnh sau.
\>javac WhereClause.java
\>java WhereClause
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau.
101 | Learn C | Yaswanth
Bất cứ khi nào bạn muốn sửa đổi các giá trị của bảng, bạn có thể sử dụng lệnh UPDATE. Điều này sẽ sửa đổi bất kỳ giá trị trường nào từ bất kỳ bảng HSQLDB nào.
Cú pháp
Đây là cú pháp chung cho lệnh UPDATE.
UPDATE table_name SET field1 = new-value1, field2 = new-value2 [WHERE Clause]
- Bạn có thể cập nhật một hoặc nhiều trường hoàn toàn.
- Bạn có thể chỉ định bất kỳ điều kiện nào bằng mệnh đề WHERE.
- Bạn có thể cập nhật các giá trị trong một bảng tại một thời điểm.
Thí dụ
Chúng ta hãy xem xét một ví dụ cập nhật tiêu đề của hướng dẫn từ "Học C" thành "C và Cấu trúc dữ liệu" có id là "101". Sau đây là truy vấn cho bản cập nhật.
UPDATE tutorials_tbl SET title = 'C and Data Structures' WHERE id = 101;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
(1) Rows effected
HSQLDB - Chương trình JDBC
Đây là chương trình JDBC sẽ cập nhật tiêu đề hướng dẫn từ Learn C đến C and Data Structures có một id 101. Lưu chương trình sau vàoUpdateQuery.java tập tin.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class UpdateQuery {
public static void main(String[] args) {
Connection con = null;
Statement stmt = null;
int result = 0;
try {
Class.forName("org.hsqldb.jdbc.JDBCDriver");
con = DriverManager.getConnection(
"jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
stmt = con.createStatement();
result = stmt.executeUpdate(
"UPDATE tutorials_tbl SET title = 'C and Data Structures' WHERE id = 101");
} catch (Exception e) {
e.printStackTrace(System.out);
}
System.out.println(result+" Rows effected");
}
}
Bạn có thể khởi động cơ sở dữ liệu bằng lệnh sau.
\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb
Biên dịch và thực hiện chương trình trên bằng lệnh sau.
\>javac UpdateQuery.java
\>java UpdateQuery
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau:
1 Rows effected
Bất cứ khi nào bạn muốn xóa bản ghi khỏi bất kỳ bảng HSQLDB nào, bạn có thể sử dụng lệnh DELETE FROM.
Cú pháp
Đây là cú pháp chung cho lệnh DELETE để xóa dữ liệu khỏi bảng HSQLDB.
DELETE FROM table_name [WHERE Clause]
Nếu mệnh đề WHERE không được chỉ định, thì tất cả các bản ghi sẽ bị xóa khỏi bảng MySQL đã cho.
Bạn có thể chỉ định bất kỳ điều kiện nào bằng mệnh đề WHERE.
Bạn có thể xóa các bản ghi trong một bảng tại một thời điểm.
Thí dụ
Chúng ta hãy xem xét một ví dụ xóa dữ liệu bản ghi khỏi bảng có tên tutorials_tbl có id 105. Sau đây là truy vấn triển khai ví dụ đã cho.
DELETE FROM tutorials_tbl WHERE id = 105;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau:
(1) rows effected
HSQLDB - Chương trình JDBC
Đây là chương trình JDBC thực hiện ví dụ đã cho. Lưu chương trình sau vàoDeleteQuery.java.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class DeleteQuery {
public static void main(String[] args) {
Connection con = null;
Statement stmt = null;
int result = 0;
try {
Class.forName("org.hsqldb.jdbc.JDBCDriver");
con = DriverManager.getConnection(
"jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
stmt = con.createStatement();
result = stmt.executeUpdate(
"DELETE FROM tutorials_tbl WHERE id=105");
} catch (Exception e) {
e.printStackTrace(System.out);
}
System.out.println(result+" Rows effected");
}
}
Bạn có thể khởi động cơ sở dữ liệu bằng lệnh sau.
\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb
Biên dịch và thực hiện chương trình trên bằng lệnh sau.
\>javac DeleteQuery.java
\>java DeleteQuery
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau:
1 Rows effected
Có một mệnh đề WHERE trong cấu trúc RDBMS. Bạn có thể sử dụng mệnh đề WHERE với dấu bằng (=) khi chúng ta muốn so khớp chính xác. Nhưng có thể có một yêu cầu mà chúng tôi muốn lọc ra tất cả các kết quả trong đó tên tác giả phải chứa "john". Điều này có thể được xử lý bằng cách sử dụng mệnh đề SQL LIKE cùng với mệnh đề WHERE.
Nếu mệnh đề SQL LIKE được sử dụng cùng với% ký tự, thì nó sẽ hoạt động giống như một ký tự siêu (*) trong UNIX trong khi liệt kê tất cả các tệp hoặc thư mục tại dấu nhắc lệnh.
Cú pháp
Sau đây là cú pháp SQL chung của mệnh đề LIKE.
SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
Bạn có thể chỉ định bất kỳ điều kiện nào bằng mệnh đề WHERE.
Bạn có thể sử dụng mệnh đề LIKE cùng với mệnh đề WHERE.
Bạn có thể sử dụng mệnh đề LIKE thay cho dấu bằng.
Khi mệnh đề LIKE được sử dụng cùng với dấu%, thì nó sẽ hoạt động giống như tìm kiếm siêu ký tự.
Bạn có thể chỉ định nhiều hơn một điều kiện bằng cách sử dụng toán tử VÀ hoặc HOẶC.
Mệnh đề WHERE ... LIKE có thể được sử dụng cùng với lệnh DELETE hoặc UPDATE SQL để chỉ định một điều kiện.
Thí dụ
Chúng ta hãy xem xét một ví dụ truy xuất danh sách dữ liệu hướng dẫn mà tên tác giả bắt đầu bằng John. Sau đây là truy vấn HSQLDB cho ví dụ đã cho.
SELECT * from tutorials_tbl WHERE author LIKE 'John%';
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+-----+----------------+-----------+-----------------+
| id | title | author | submission_date |
+-----+----------------+-----------+-----------------+
| 100 | Learn PHP | John Poul | 2016-06-20 |
+-----+----------------+-----------+-----------------+
HSQLDB - Chương trình JDBC
Sau đây là chương trình JDBC truy xuất danh sách dữ liệu hướng dẫn mà tên tác giả bắt đầu bằng John. Lưu mã vàoLikeClause.java.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class LikeClause {
public static void main(String[] args) {
Connection con = null;
Statement stmt = null;
ResultSet result = null;
try {
Class.forName("org.hsqldb.jdbc.JDBCDriver");
con = DriverManager.getConnection(
"jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
stmt = con.createStatement();
result = stmt.executeQuery(
"SELECT * from tutorials_tbl WHERE author LIKE 'John%';");
while(result.next()){
System.out.println(result.getInt("id")+" |
"+result.getString("title")+" |
"+result.getString("author")+" |
"+result.getDate("submission_date"));
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
}
}
Bạn có thể khởi động cơ sở dữ liệu bằng lệnh sau.
\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb
Biên dịch và thực thi đoạn mã trên bằng lệnh sau.
\>javac LikeClause.java
\>java LikeClause
Sau khi thực hiện lệnh sau, bạn sẽ nhận được kết quả sau.
100 | Learn PHP | John Poul | 2016-06-20
Lệnh SQL SELECT tìm nạp dữ liệu từ bảng HSQLDB bất cứ khi nào có yêu cầu theo một thứ tự cụ thể trong khi truy xuất và hiển thị các bản ghi. Trong trường hợp đó, chúng ta có thể sử dụngORDER BY mệnh đề.
Cú pháp
Đây là cú pháp của lệnh SELECT cùng với mệnh đề ORDER BY để sắp xếp dữ liệu từ HSQLDB.
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
Bạn có thể sắp xếp kết quả trả về trên bất kỳ trường nào miễn là trường đó đang được liệt kê.
Bạn có thể sắp xếp kết quả trên nhiều trường.
Bạn có thể sử dụng từ khóa ASC hoặc DESC để nhận kết quả theo thứ tự tăng dần hoặc giảm dần. Theo mặc định, nó theo thứ tự tăng dần.
Bạn có thể sử dụng mệnh đề WHERE ... LIKE theo cách thông thường để đặt điều kiện.
Thí dụ
Chúng ta hãy xem xét một ví dụ tìm nạp và sắp xếp các bản ghi của tutorials_tblbảng theo thứ tự tên tác giả theo thứ tự tăng dần. Sau đây là truy vấn cho cùng một.
SELECT id, title, author from tutorials_tbl ORDER BY author ASC;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+------+----------------+-----------------+
| id | title | author |
+------+----------------+-----------------+
| 102 | Learn MySQL | Abdul S |
| 104 | Learn JDB | Ajith kumar |
| 103 | Learn Excell | Bavya kanna |
| 100 | Learn PHP | John Poul |
| 105 | Learn Junit | Sathya Murthi |
| 101 | Learn C | Yaswanth |
+------+----------------+-----------------+
HSQLDB - Chương trình JDBC
Đây là chương trình JDBC tìm nạp và sắp xếp các bản ghi của tutorials_tblbảng theo thứ tự tên tác giả theo thứ tự tăng dần. Lưu chương trình sau vàoOrderBy.java.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class OrderBy {
public static void main(String[] args) {
Connection con = null;
Statement stmt = null;
ResultSet result = null;
try {
Class.forName("org.hsqldb.jdbc.JDBCDriver");
con = DriverManager.getConnection(
"jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
stmt = con.createStatement();
result = stmt.executeQuery(
"SELECT id, title, author from tutorials_tbl
ORDER BY author ASC");
while(result.next()){
System.out.println(result.getInt("id")+" |
"+result.getString("title")+" |
"+result.getString("author"));
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
}
}
Bạn có thể khởi động cơ sở dữ liệu bằng lệnh sau.
\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb
Biên dịch và thực hiện chương trình trên bằng lệnh sau.
\>javac OrderBy.java
\>java OrderBy
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau.
102 | Learn MySQL | Abdul S
104 | Learn JDB | Ajith kumar
103 | Learn Excell | Bavya Kanna
100 | Learn PHP | John Poul
105 | Learn Junit | Sathya Murthi
101 | C and Data Structures | Yaswanth
Bất cứ khi nào có yêu cầu truy xuất dữ liệu từ nhiều bảng bằng một truy vấn duy nhất, bạn có thể sử dụng JOINS từ RDBMS. Bạn có thể sử dụng nhiều bảng trong một truy vấn SQL của mình. Hành động tham gia HSQLDB đề cập đến việc trộn hai hoặc nhiều bảng thành một bảng duy nhất.
Hãy xem xét các bảng Khách hàng và Đơn hàng sau đây.
Customer:
+----+----------+-----+-----------+----------+
| 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 |
+----+----------+-----+-----------+----------+
Orders:
+-----+---------------------+-------------+--------+
|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 thử truy xuất dữ liệu của khách hàng và số lượng đơn hàng mà khách hàng tương ứng đã đặt. Điều này có nghĩa là chúng tôi đang truy xuất dữ liệu hồ sơ từ cả khách hàng và bảng đơn đặt hàng. Chúng ta có thể đạt được điều này bằng cách sử dụng khái niệm JOINS trong HSQLDB. Sau đây là truy vấn JOIN cho tương tự.
SELECT ID, NAME, AGE, AMOUNT FROM CUSTOMERS, ORDERS WHERE CUSTOMERS.ID =
ORDERS.CUSTOMER_ID;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+----+----------+-----+--------+
| ID | NAME | AGE | AMOUNT |
+----+----------+-----+--------+
| 3 | kaushik | 23 | 3000 |
| 3 | kaushik | 23 | 1500 |
| 2 | Khilan | 25 | 1560 |
| 4 | Chaitali | 25 | 2060 |
+----+----------+-----+--------+
THAM GIA các loại
Có nhiều loại nối khác nhau có sẵn trong HSQLDB.
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.
Tham gia bên trong
Các phép nối thường được sử dụng và quan trọng nhất là INNER JOIN. Nó còn được gọi là EQUIJOIN.
INNER JOIN tạo một bảng kết quả mới bằng cách kết hợp các giá trị cột của hai bảng (table1 và table2) dựa trên vị từ nối. Truy vấn so sánh từng hàng của bảng1 với từng hàng của bảng2 để tìm tất cả các cặp hàng thỏa mãn vị từ nối. Khi vị từ nối được thỏa mãn, các giá trị cột cho mỗi cặp hàng A và B đã so khớp được kết hợp thành một hàng kết quả.
Cú pháp
Cú pháp cơ bản của INNER JOIN như sau.
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
Thí dụ
Hãy xem xét hai bảng sau, một bảng có tiêu đề là bảng KHÁCH HÀNG và bảng khác có tiêu đề là bảng ĐƠN 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 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| 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 bằng cách sử dụng truy vấn INNER JOIN như sau:
SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
INNER JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+----+----------+--------+---------------------+
| ID | NAME | AMOUNT | DATE |
+----+----------+--------+---------------------+
| 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 |
+----+----------+--------+---------------------+
Chỗ nối bên trái
HSQLDB 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. Điều này có nghĩa là nếu mệnh đề ON khớp với bản ghi 0 (không) trong bảng bên phải, phép nối sẽ vẫn trả về một hàng trong kết quả, nhưng với NULL trong mỗi cột từ bảng bên phải.
Điều này có nghĩa là một phép nối bên trái trả về tất cả các giá trị từ bảng bên trái, cộng với các giá trị đã khớp từ bảng bên phải hoặc NULL trong trường hợp không có vị từ nối nào phù hợp.
Cú pháp
Cú pháp cơ bản của LEFT JOIN như sau:
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
Ở đâ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, một bảng có tiêu đề là bảng KHÁCH HÀNG và bảng khác có tiêu đề là bảng ĐƠN 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 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| 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 bằng cách sử dụng truy vấn LEFT JOIN như sau:
SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
LEFT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được 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 |
+----+----------+--------+---------------------+
Tham gia đúng
HSQLDB 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. Điều này có nghĩa là nếu mệnh đề ON khớp với các bản ghi 0 (không) trong bảng bên trái, phép nối sẽ vẫn trả về một hàng trong kết quả, nhưng với NULL trong mỗi cột từ bảng bên trái.
Điều này có nghĩa là một phép nối bên phải trả về tất cả các giá trị từ bảng bên phải, cộng với các giá trị đã khớp từ bảng bên trái hoặc NULL trong trường hợp không có vị từ nối nào phù hợp.
Cú pháp
Cú pháp cơ bản của RIGHT JOIN như sau -
SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
Thí dụ
Hãy xem xét hai bảng sau, một bảng có tiêu đề là bảng KHÁCH HÀNG và bảng khác có tiêu đề là bảng ĐƠN 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 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| 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 bằng cách sử dụng truy vấn RIGHT JOIN như sau:
SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
RIGHT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+------+----------+--------+---------------------+
| ID | NAME | AMOUNT | DATE |
+------+----------+--------+---------------------+
| 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 |
+------+----------+--------+---------------------+
Tham gia đầy đủ
HSQLDB FULL JOIN kết hợp kết quả của cả phép nối bên ngoài bên trái và bên phải.
Bảng đã kết hợp sẽ chứa tất cả các bản ghi từ cả hai bảng và điền vào NULL cho các kết quả phù hợp bị thiếu ở hai bên.
Cú pháp
Cú pháp cơ bản của FULL JOIN như sau:
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;
Ở đâ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, một bảng có tiêu đề là bảng KHÁCH HÀNG và bảng khác có tiêu đề là bảng ĐƠN 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 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| 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 bằng cách sử dụng truy vấn FULL JOIN như sau:
SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
FULL JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được 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 |
+------+----------+--------+---------------------+
Tự tham gia
SQL 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.
Cú pháp
Cú pháp cơ bản của SELF JOIN như sau:
SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE a.common_field = b.common_field;
Ở đây, mệnh đề WHERE có thể là bất kỳ biểu thức nào cho trước dựa trên yêu cầu của bạn.
Thí dụ
Hãy xem xét hai bảng sau, một bảng có tiêu đề là bảng KHÁCH HÀNG và bảng khác có tiêu đề là bảng ĐƠN 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 |
+----+----------+-----+-----------+----------+
Bây giờ, chúng ta hãy tham gia bảng này bằng cách sử dụng truy vấn SELF JOIN như sau:
SELECT a.ID, b.NAME, a.SALARY FROM CUSTOMERS a, CUSTOMERS b
WHERE a.SALARY > b.SALARY;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau:
+----+----------+---------+
| ID | NAME | SALARY |
+----+----------+---------+
| 2 | Ramesh | 1500.00 |
| 2 | kaushik | 1500.00 |
| 1 | Chaitali | 2000.00 |
| 2 | Chaitali | 1500.00 |
| 3 | Chaitali | 2000.00 |
| 6 | Chaitali | 4500.00 |
| 1 | Hardik | 2000.00 |
| 2 | Hardik | 1500.00 |
| 3 | Hardik | 2000.00 |
| 4 | Hardik | 6500.00 |
| 6 | Hardik | 4500.00 |
| 1 | Komal | 2000.00 |
| 2 | Komal | 1500.00 |
| 3 | Komal | 2000.00 |
| 1 | Muffy | 2000.00 |
| 2 | Muffy | 1500.00 |
| 3 | Muffy | 2000.00 |
| 4 | Muffy | 6500.00 |
| 5 | Muffy | 8500.00 |
| 6 | Muffy | 4500.00 |
+----+----------+---------+
SQL NULL là một 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. Bất cứ khi nào chúng tôi cố gắng đưa ra một điều kiện, so sánh giá trị trường hoặc cột với NULL, nó không hoạt động đúng.
Chúng ta có thể xử lý các giá trị NULL bằng cách sử dụng ba điều.
IS NULL - Toán tử trả về true nếu giá trị cột là NULL.
IS NOT NULL - Toán tử trả về true nếu giá trị cột KHÔNG ĐỦ.
<=> - Toán tử so sánh các giá trị, (không giống như toán tử =) đúng ngay cả với hai giá trị NULL.
Để tìm kiếm các cột NULL hoặc NOT NULL, hãy sử dụng IS NULL hoặc IS NOT NULL tương ứng.
Thí dụ
Chúng ta hãy xem xét một ví dụ nơi có một bảng tcount_tblchứa hai cột, tác giả và tài khoản hướng dẫn. Chúng tôi có thể cung cấp giá trị NULL cho số lượng tutorial_count chỉ ra rằng tác giả đã không xuất bản dù chỉ một hướng dẫn. Do đó, giá trị tutorial_count cho tác giả tương ứng đó là NULL.
Thực hiện các truy vấn sau.
create table tcount_tbl(author varchar(40) NOT NULL, tutorial_count INT);
INSERT INTO tcount_tbl values ('Abdul S', 20);
INSERT INTO tcount_tbl values ('Ajith kumar', 5);
INSERT INTO tcount_tbl values ('Jen', NULL);
INSERT INTO tcount_tbl values ('Bavya kanna', 8);
INSERT INTO tcount_tbl values ('mahran', NULL);
INSERT INTO tcount_tbl values ('John Poul', 10);
INSERT INTO tcount_tbl values ('Sathya Murthi', 6);
Sử dụng lệnh sau để hiển thị tất cả các bản ghi từ tcount_tbl bàn.
select * from tcount_tbl;
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau.
+-----------------+----------------+
| author | tutorial_count |
+-----------------+----------------+
| Abdul S | 20 |
| Ajith kumar | 5 |
| Jen | NULL |
| Bavya kanna | 8 |
| mahran | NULL |
| John Poul | 10 |
| Sathya Murthi | 6 |
+-----------------+----------------+
Để tìm các bản ghi trong đó cột tutorial_count LÀ KHÔNG ĐỦ, sau đây là truy vấn.
SELECT * FROM tcount_tbl WHERE tutorial_count IS NULL;
Sau khi thực hiện truy vấn, bạn sẽ nhận được kết quả sau.
+-----------------+----------------+
| author | tutorial_count |
+-----------------+----------------+
| Jen | NULL |
| mahran | NULL |
+-----------------+----------------+
Để tìm các bản ghi mà cột tutorial_count KHÔNG ĐẦY ĐỦ, sau đây là truy vấn.
SELECT * FROM tcount_tbl WHERE tutorial_count IS NOT NULL;
Sau khi thực hiện truy vấn, bạn sẽ nhận được kết quả sau.
+-----------------+----------------+
| author | tutorial_count |
+-----------------+----------------+
| Abdul S | 20 |
| Ajith kumar | 5 |
| Bavya kanna | 8 |
| John Poul | 10 |
| Sathya Murthi | 6 |
+-----------------+----------------+
HSQLDB - Chương trình JDBC
Đây là chương trình JDBC lấy các bản ghi tách biệt khỏi bảng tcount_tbl trong đó số lượng hướng dẫn là NULL và số lượng hướng dẫn là KHÔNG ĐỦ. Lưu chương trình sau vàoNullValues.java.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class NullValues {
public static void main(String[] args) {
Connection con = null;
Statement stmt_is_null = null;
Statement stmt_is_not_null = null;
ResultSet result = null;
try {
Class.forName("org.hsqldb.jdbc.JDBCDriver");
con = DriverManager.getConnection(
"jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
stmt_is_null = con.createStatement();
stmt_is_not_null = con.createStatement();
result = stmt_is_null.executeQuery(
"SELECT * FROM tcount_tbl WHERE tutorial_count IS NULL;");
System.out.println("Records where the tutorial_count is NULL");
while(result.next()){
System.out.println(result.getString("author")+" |
"+result.getInt("tutorial_count"));
}
result = stmt_is_not_null.executeQuery(
"SELECT * FROM tcount_tbl WHERE tutorial_count IS NOT NULL;");
System.out.println("Records where the tutorial_count is NOT NULL");
while(result.next()){
System.out.println(result.getString("author")+" |
"+result.getInt("tutorial_count"));
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
}
}
Biên dịch và thực hiện chương trình trên bằng lệnh sau.
\>javac NullValues.java
\>Java NullValues
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau.
Records where the tutorial_count is NULL
Jen | 0
mahran | 0
Records where the tutorial_count is NOT NULL
Abdul S | 20
Ajith kumar | 5
Bavya kanna | 8
John Poul | 10
Sathya Murthi | 6
HSQLDB hỗ trợ một số ký hiệu đặc biệt cho hoạt động khớp mẫu dựa trên biểu thức chính quy và toán tử REGEXP.
Sau đây là bảng mẫu, có thể được sử dụng cùng với toán tử REGEXP.
Mẫu | Mẫu nào phù hợp |
---|---|
^ | Bắt đầu của chuỗi |
$ | Kết thúc chuỗi |
. | Bất kỳ ký tự đơn nào |
[...] | Bất kỳ ký tự nào được liệt kê giữa dấu ngoặc vuông |
[^ ...] | Bất kỳ ký tự nào không được liệt kê giữa dấu ngoặc vuông |
p1 | p2 | p3 | Sự luân phiên; khớp với bất kỳ mẫu p1, p2 hoặc p3 nào |
* | Không hoặc nhiều bản sao của phần tử trước |
+ | Một hoặc nhiều bản sao của phần tử trước |
{n} | n phiên bản của phần tử trước |
{m, n} | m đến n trường hợp của phần tử trước |
Thí dụ
Hãy để chúng tôi thử các truy vấn mẫu khác nhau để đáp ứng yêu cầu của chúng tôi. Hãy xem các truy vấn nhất định sau đây.
Hãy thử Truy vấn này để tìm tất cả các tác giả có tên bắt đầu bằng '^ A'.
SELECT author FROM tcount_tbl WHERE REGEXP_MATCHES(author,'^A.*');
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+-----------------+
| author |
+-----------------+
| Abdul S |
| Ajith kumar |
+-----------------+
Hãy thử Truy vấn này để tìm tất cả các tác giả có tên kết thúc bằng 'ul $'.
SELECT author FROM tcount_tbl WHERE REGEXP_MATCHES(author,'.*ul$');
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+-----------------+
| author |
+-----------------+
| John Poul |
+-----------------+
Hãy thử Truy vấn này để tìm tất cả các tác giả có tên chứa 'th'.
SELECT author FROM tcount_tbl WHERE REGEXP_MATCHES(author,'.*th.*');
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+-----------------+
| author |
+-----------------+
| Ajith kumar |
| Abdul S |
+-----------------+
Hãy thử truy vấn này để tìm tất cả các tác giả có tên bắt đầu bằng nguyên âm (a, e, i, o, u).
SELECT author FROM tcount_tbl WHERE REGEXP_MATCHES(author,'^[AEIOU].*');
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+-----------------+
| author |
+-----------------+
| Abdul S |
| Ajith kumar |
+-----------------+
A Transactionlà một nhóm tuần tự các thao tác thao tác cơ sở dữ liệu, được thực hiện và được coi như một đơn vị công việc duy nhất. Nói cách khác, khi tất cả các hoạt động được thực hiện thành công, chỉ khi đó toàn bộ giao dịch mới hoàn tất. Nếu bất kỳ thao tác nào trong giao dịch không thành công, thì toàn bộ giao dịch sẽ thất bại.
Thuộc tính của giao dịch
Về cơ bản, giao dịch hỗ trợ 4 thuộc tính tiêu chuẩn. Chúng có thể được gọi là thuộc tính ACID.
Atomicity - Tất cả các hoạt động trong giao dịch được thực hiện thành công, nếu không giao dịch bị hủy bỏ tại điểm không thành công và các hoạt động trước đó sẽ được quay trở lại vị trí cũ của chúng.
Consistency - 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 - Nó cho phép giao dịch hoạt động độc lập và minh bạch với nhau.
Durability - 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.
Cam kết, Khôi phục và Lưu điểm
Các từ khóa này chủ yếu được sử dụng cho các giao dịch HSQLDB.
Commit- Luôn luôn hoàn tất giao dịch thành công bằng cách thực hiện lệnh COMMIT.
Rollback - Nếu lỗi xảy ra trong giao dịch, thì lệnh ROLLBACK sẽ được thực hiện để đưa mọi bảng được tham chiếu trong giao dịch về trạng thái trước đó của nó.
Savepoint - Tạo một điểm trong nhóm các giao dịch để khôi phục.
Thí dụ
Ví dụ sau giải thích khái niệm giao dịch cùng với cam kết, khôi phục và Savepoint. Chúng ta hãy xem xét bảng Khách hàng với các cột id, tên, tuổi, địa chỉ và mức lương.
Tôi | Tên | Tuổi tác | Địa chỉ | Tiền lương |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000,00 |
2 | Karun | 25 | Delhi | 1500,00 |
3 | Kaushik | 23 | Kota | 2000,00 |
4 | Chaitanya | 25 | Mumbai | 6500,00 |
5 | Harish | 27 | Bhopal | 8500,00 |
6 | Kamesh | 22 | MP | 1500,00 |
7 | Murali | 24 | Indore | 10000,00 |
Sử dụng các lệnh sau để tạo bảng khách hàng dọc theo các dòng của dữ liệu trên.
CREATE TABLE Customer (id INT NOT NULL, name VARCHAR(100) NOT NULL, age INT NOT
NULL, address VARCHAR(20), Salary INT, PRIMARY KEY (id));
Insert into Customer values (1, "Ramesh", 32, "Ahmedabad", 2000);
Insert into Customer values (2, "Karun", 25, "Delhi", 1500);
Insert into Customer values (3, "Kaushik", 23, "Kota", 2000);
Insert into Customer values (4, "Chaitanya", 25, "Mumbai", 6500);
Insert into Customer values (5, "Harish", 27, "Bhopal", 8500);
Insert into Customer values (6, "Kamesh", 22, "MP", 1500);
Insert into Customer values (7, "Murali", 24, "Indore", 10000);
Ví dụ cho COMMIT
Truy vấn sau đây xóa các hàng khỏi bảng có age = 25 và sử dụng lệnh COMMIT để áp dụng những thay đổi đó trong cơ sở dữ liệu.
DELETE FROM CUSTOMERS WHERE AGE = 25;
COMMIT;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
2 rows effected
Sau khi thực hiện thành công lệnh trên, hãy kiểm tra các bản ghi của bảng khách hàng bằng cách thực hiện lệnh dưới đây.
Select * from Customer;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000 |
| 3 | kaushik | 23 | Kota | 2000 |
| 5 | Harish | 27 | Bhopal | 8500 |
| 6 | Kamesh | 22 | MP | 4500 |
| 7 | Murali | 24 | Indore | 10000 |
+----+----------+-----+-----------+----------+
Ví dụ cho Rollback
Chúng ta hãy coi cùng một bảng Khách hàng là đầu vào.
Tôi | Tên | Tuổi tác | Địa chỉ | Tiền lương |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000,00 |
2 | Karun | 25 | Delhi | 1500,00 |
3 | Kaushik | 23 | Kota | 2000,00 |
4 | Chaitanya | 25 | Mumbai | 6500,00 |
5 | Harish | 27 | Bhopal | 8500,00 |
6 | Kamesh | 22 | MP | 1500,00 |
7 | Murali | 24 | Indore | 10000,00 |
Đây là câu truy vấn ví dụ giải thích về chức năng Rollback bằng cách 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.
DELETE FROM CUSTOMERS WHERE AGE = 25;
ROLLBACK;
Sau khi thực hiện thành công hai truy vấn trên, bạn có thể xem dữ liệu bản ghi trong bảng Khách hàng bằng lệnh sau.
Select * from Customer;
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau.
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000 |
| 2 | Karun | 25 | Delhi | 1500 |
| 3 | Kaushik | 23 | Kota | 2000 |
| 4 | Chaitanya| 25 | Mumbai | 6500 |
| 5 | Harish | 27 | Bhopal | 8500 |
| 6 | Kamesh | 22 | MP | 4500 |
| 7 | Murali | 24 | Indore | 10000 |
+----+----------+-----+-----------+----------+
Truy vấn xóa xóa dữ liệu bản ghi của khách hàng có tuổi = 25. Lệnh Rollback, khôi phục những thay đổi đó trên bảng Khách hàng.
Ví dụ cho 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 lùi toàn bộ giao dịch.
Chúng ta hãy coi cùng một bảng Khách hàng là đầu vào.
Tôi | Tên | Tuổi tác | Địa chỉ | Tiền lương |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000,00 |
2 | Karun | 25 | Delhi | 1500,00 |
3 | Kaushik | 23 | Kota | 2000,00 |
4 | Chaitanya | 25 | Mumbai | 6500,00 |
5 | Harish | 27 | Bhopal | 8500,00 |
6 | Kamesh | 22 | MP | 1500,00 |
7 | Murali | 24 | Indore | 10000,00 |
Chúng ta hãy xem xét trong ví dụ này, bạn dự định xóa ba bản ghi khác nhau khỏi bảng Khách hàng. Bạn muốn tạo một Điểm lưu trước mỗi lần xóa, để bạn có thể quay lại bất kỳ Điểm lưu nào bất kỳ lúc nào để trả dữ liệu thích hợp về trạng thái ban đầu.
Đây là một loạt các hoạt động.
SAVEPOINT SP1;
DELETE FROM CUSTOMERS WHERE ID = 1;
SAVEPOINT SP2;
DELETE FROM CUSTOMERS WHERE ID = 2;
SAVEPOINT SP3;
DELETE FROM CUSTOMERS WHERE ID = 3;
Bây giờ, bạn đã tạo ba Savepoint và xóa ba bản ghi. Trong trường hợp này, nếu bạn muốn khôi phục các bản ghi có Id 2 và 3 thì hãy sử dụng lệnh Rollback sau.
ROLLBACK TO SP2;
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. Sử dụng truy vấn sau để hiển thị tất cả các bản ghi của khách hàng.
Select * from Customer;
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 2 | Karun | 25 | Delhi | 1500 |
| 3 | Kaushik | 23 | Kota | 2000 |
| 4 | Chaitanya| 25 | Mumbai | 6500 |
| 5 | Harish | 27 | Bhopal | 8500 |
| 6 | Kamesh | 22 | MP | 4500 |
| 7 | Murali | 24 | Indore | 10000 |
+----+----------+-----+-----------+----------+
Giải phóng điểm lưu
Chúng ta có thể giải phóng Savepoint bằng lệnh RELEASE. Sau đây là cú pháp chung.
RELEASE SAVEPOINT SAVEPOINT_NAME;
Bất cứ khi nào cần thay đổi tên của bảng hoặc một trường, thay đổi thứ tự các trường, thay đổi kiểu dữ liệu của các trường hoặc bất kỳ cấu trúc bảng nào, bạn có thể đạt được điều tương tự bằng cách sử dụng lệnh ALTER.
Thí dụ
Chúng ta hãy xem xét một ví dụ giải thích lệnh ALTER sử dụng các tình huống khác nhau.
Sử dụng truy vấn sau để tạo một bảng có tên testalter_tbl với các lĩnh vực ' id và name.
//below given query is to create a table testalter_tbl table.
create table testalter_tbl(id INT, name VARCHAR(10));
//below given query is to verify the table structure testalter_tbl.
Select * From INFORMATION_SCHEMA.SYSTEM_COLUMNS as C Where C.TABLE_SCHEM =
'PUBLIC' AND C.TABLE_NAME = 'TESTALTER_TBL';
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+------------+-------------+------------+-----------+-----------+------------+
|TABLE_SCHEM | TABLE_NAME | COLUMN_NAME| DATA_TYPE | TYPE_NAME | COLUMN_SIZE|
+------------+-------------+------------+-----------+-----------+------------+
| PUBLIC |TESTALTER_TBL| ID | 4 | INTEGER | 4 |
| PUBLIC |TESTALTER_TBL| NAME | 12 | VARCHAR | 10 |
+------------+-------------+------------+-----------+-----------+------------+
Bỏ hoặc thêm cột
Bất cứ khi nào bạn muốn DROP một cột hiện có khỏi bảng HSQLDB, thì bạn có thể sử dụng mệnh đề DROP cùng với lệnh ALTER.
Sử dụng truy vấn sau để thả một cột (name) từ bảng testalter_tbl.
ALTER TABLE testalter_tbl DROP name;
Sau khi thực hiện thành công truy vấn trên, bạn có thể biết liệu trường tên có bị xóa khỏi bảng testalter_tbl hay không bằng cách sử dụng lệnh sau.
Select * From INFORMATION_SCHEMA.SYSTEM_COLUMNS as C Where C.TABLE_SCHEM =
'PUBLIC' AND C.TABLE_NAME = 'TESTALTER_TBL';
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau.
+------------+-------------+------------+-----------+-----------+------------+
|TABLE_SCHEM | TABLE_NAME | COLUMN_NAME| DATA_TYPE | TYPE_NAME | COLUMN_SIZE|
+------------+-------------+------------+-----------+-----------+------------+
| PUBLIC |TESTALTER_TBL| ID | 4 | INTEGER | 4 |
+------------+-------------+------------+-----------+-----------+------------+
Bất cứ khi nào bạn muốn thêm bất kỳ cột nào vào bảng HSQLDB, bạn có thể sử dụng mệnh đề ADD cùng với lệnh ALTER.
Sử dụng truy vấn sau để thêm một cột có tên NAME đến bàn testalter_tbl.
ALTER TABLE testalter_tbl ADD name VARCHAR(10);
Sau khi thực hiện thành công truy vấn trên, bạn có thể biết liệu trường tên có được thêm vào bảng hay không testalter_tbl bằng cách sử dụng lệnh sau.
Select * From INFORMATION_SCHEMA.SYSTEM_COLUMNS as C Where C.TABLE_SCHEM =
'PUBLIC' AND C.TABLE_NAME = 'TESTALTER_TBL';
Sau khi thực hiện truy vấn trên, bạn sẽ nhận được kết quả sau.
+------------+-------------+------------+-----------+-----------+------------+
|TABLE_SCHEM | TABLE_NAME | COLUMN_NAME| DATA_TYPE | TYPE_NAME | COLUMN_SIZE|
+------------+-------------+------------+-----------+-----------+------------+
| PUBLIC |TESTALTER_TBL| ID | 4 | INTEGER | 4 |
| PUBLIC |TESTALTER_TBL| NAME | 12 | VARCHAR | 10 |
+------------+-------------+------------+-----------+-----------+------------+
Thay đổi định nghĩa hoặc tên cột
Bất cứ khi nào có yêu cầu thay đổi định nghĩa cột, hãy sử dụng MODIFY hoặc là CHANGE mệnh đề cùng với ALTER chỉ huy.
Chúng ta hãy xem xét một ví dụ sẽ giải thích cách sử dụng mệnh đề CHANGE. Cái bàntestalter_tblchứa hai trường - id và tên - có kiểu dữ liệu int và varchar tương ứng. Bây giờ chúng ta hãy thử thay đổi kiểu dữ liệu của id từ INT thành BIGINT. Sau đây là truy vấn để thực hiện thay đổi.
ALTER TABLE testalter_tbl CHANGE id id BIGINT;
Sau khi thực hiện thành công truy vấn trên, cấu trúc bảng có thể được xác minh bằng lệnh sau.
Select * From INFORMATION_SCHEMA.SYSTEM_COLUMNS as C Where C.TABLE_SCHEM =
'PUBLIC' AND C.TABLE_NAME = 'TESTALTER_TBL';
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau.
+------------+-------------+------------+-----------+-----------+------------+
|TABLE_SCHEM | TABLE_NAME | COLUMN_NAME| DATA_TYPE | TYPE_NAME | COLUMN_SIZE|
+------------+-------------+------------+-----------+-----------+------------+
| PUBLIC |TESTALTER_TBL| ID | 4 | BIGINT | 4 |
| PUBLIC |TESTALTER_TBL| NAME | 12 | VARCHAR | 10 |
+------------+-------------+------------+-----------+-----------+------------+
Bây giờ, chúng ta hãy thử tăng kích thước của cột NAME từ 10 lên 20 trong testalter_tblbàn. Sau đây là truy vấn để đạt được điều này bằng cách sử dụng mệnh đề MODIFY cùng với lệnh ALTER.
ALTER TABLE testalter_tbl MODIFY name VARCHAR(20);
Sau khi thực hiện thành công truy vấn trên, cấu trúc bảng có thể được xác minh bằng lệnh sau.
Select * From INFORMATION_SCHEMA.SYSTEM_COLUMNS as C Where C.TABLE_SCHEM =
'PUBLIC' AND C.TABLE_NAME = 'TESTALTER_TBL';
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau.
+------------+-------------+------------+-----------+-----------+------------+
|TABLE_SCHEM | TABLE_NAME | COLUMN_NAME| DATA_TYPE | TYPE_NAME | COLUMN_SIZE|
+------------+-------------+------------+-----------+-----------+------------+
| PUBLIC |TESTALTER_TBL| ID | 4 | BIGINT | 4 |
| PUBLIC |TESTALTER_TBL| NAME | 12 | VARCHAR | 20 |
+------------+-------------+------------+-----------+-----------+------------+
A database indexlà một cấu trúc dữ liệu giúp cải thiện tốc độ của các hoạt động trong một bảng. Chỉ mục có thể được tạo bằng cách sử dụng một hoặc nhiều cột, cung cấp cơ sở cho cả việc tra cứu ngẫu nhiên nhanh chóng và sắp xếp thứ tự truy cập các bản ghi hiệu quả.
Trong khi tạo chỉ mục, cần xem xét đâu là cột sẽ được sử dụng để thực hiện truy vấn SQL và tạo một hoặc nhiều chỉ mục trên các cột đó.
Thực tế, các chỉ mục cũng là một loại bảng, giữ khóa chính hoặc trường chỉ mục và một con trỏ đến mỗi bản ghi vào bảng thực tế.
Người dùng không thể nhìn thấy các chỉ mục. Chúng chỉ được sử dụng để tăng tốc các truy vấn và sẽ được Công cụ Tìm kiếm Cơ sở dữ liệu sử dụng để định vị nhanh các bản ghi.
Các câu lệnh INSERT và UPDATE mất nhiều thời gian hơn trên các bảng có chỉ mục, trong khi các câu lệnh SELECT chạy nhanh hơn trên các bảng đó. Lý do là trong khi chèn hoặc cập nhật, cơ sở dữ liệu cũng cần phải chèn hoặc cập nhật các giá trị chỉ mục.
Chỉ mục đơn giản & duy nhất
Bạn có thể tạo một chỉ mục duy nhất trên một bảng. Aunique indexnghĩa là hai hàng không thể có cùng giá trị chỉ mục. Sau đây là cú pháp để tạo Chỉ mục trên bảng.
CREATE UNIQUE INDEX index_name
ON table_name (column1, column2,...);
Bạn có thể sử dụng một hoặc nhiều cột để tạo chỉ mục. Ví dụ: tạo chỉ mục trên tutorial_tbl bằng cách sử dụng tutorial_author.
CREATE UNIQUE INDEX AUTHOR_INDEX
ON tutorials_tbl (tutorial_author)
Bạn có thể tạo một chỉ mục đơn giản trên một bảng. Chỉ cần bỏ từ khóa UNIQUE khỏi truy vấn để tạo một chỉ mục đơn giản. Asimple index cho phép các giá trị trùng lặp trong một bảng.
Nếu bạn muốn lập chỉ mục các giá trị trong một cột theo thứ tự giảm dần, bạn có thể thêm từ dành riêng DESC sau tên cột.
CREATE UNIQUE INDEX AUTHOR_INDEX
ON tutorials_tbl (tutorial_author DESC)
Lệnh ALTER để Thêm & Thả INDEX
Có bốn loại câu lệnh để thêm chỉ mục vào bảng:
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) - Câu lệnh này thêm một PRIMARY KEY, có nghĩa là các giá trị được lập chỉ mục phải là duy nhất và không được NULL.
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) - Câu lệnh này tạo một chỉ mục mà các giá trị phải là duy nhất (ngoại trừ các giá trị NULL, có thể xuất hiện nhiều lần).
ALTER TABLE tbl_name ADD INDEX index_name (column_list) - Điều này thêm một chỉ mục thông thường trong đó bất kỳ giá trị nào có thể xuất hiện nhiều hơn một lần.
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) - Điều này tạo ra một chỉ mục FULLTEXT đặc biệt được sử dụng cho mục đích tìm kiếm văn bản.
Sau đây là truy vấn để thêm chỉ mục trong một bảng hiện có.
ALTER TABLE testalter_tbl ADD INDEX (c);
Bạn có thể bỏ bất kỳ INDEX nào bằng cách sử dụng mệnh đề DROP cùng với lệnh ALTER. Sau đây là truy vấn để thả chỉ mục được tạo ở trên.
ALTER TABLE testalter_tbl DROP INDEX (c);
Hiển thị thông tin INDEX
Bạn có thể sử dụng lệnh SHOW INDEX để liệt kê tất cả các chỉ mục được liên kết với một bảng. Đầu ra định dạng dọc (được chỉ định bởi \ G) thường hữu ích với câu lệnh này, để tránh dòng dài dòng.
Sau đây là cú pháp chung để hiển thị thông tin chỉ mục về một bảng.
SHOW INDEX FROM table_name\G