HSQLDB - คู่มือฉบับย่อ

HyperSQL Database (HSQLDB) เป็นตัวจัดการฐานข้อมูลเชิงสัมพันธ์ที่ทันสมัยซึ่งสอดคล้องอย่างใกล้ชิดกับมาตรฐาน SQL: 2011 และข้อกำหนด JDBC 4 รองรับคุณสมบัติหลักและ RDBMS ทั้งหมด HSQLDB ใช้สำหรับการพัฒนาทดสอบและปรับใช้แอปพลิเคชันฐานข้อมูล

คุณสมบัติหลักและเป็นเอกลักษณ์ของ HSQLDB คือการปฏิบัติตามมาตรฐาน สามารถให้การเข้าถึงฐานข้อมูลภายในกระบวนการแอปพลิเคชันของผู้ใช้ภายในแอ็พพลิเคชันเซิร์ฟเวอร์หรือเป็นกระบวนการเซิร์ฟเวอร์แยกต่างหาก

คุณสมบัติของ HSQLDB

  • HSQLDB ใช้โครงสร้างในหน่วยความจำสำหรับการดำเนินการที่รวดเร็วกับเซิร์ฟเวอร์ DB ใช้ความคงอยู่ของดิสก์ตามความยืดหยุ่นของผู้ใช้พร้อมการกู้คืนข้อขัดข้องที่เชื่อถือได้

  • HSQLDB ยังเหมาะสำหรับระบบธุรกิจอัจฉริยะ ETL และแอปพลิเคชันอื่น ๆ ที่ประมวลผลชุดข้อมูลขนาดใหญ่

  • HSQLDB มีตัวเลือกการปรับใช้ระดับองค์กรมากมายเช่นธุรกรรม XA แหล่งข้อมูลการรวมการเชื่อมต่อและการพิสูจน์ตัวตนระยะไกล

  • HSQLDB เขียนด้วยภาษาโปรแกรม Java และทำงานใน Java Virtual Machine (JVM) สนับสนุนอินเทอร์เฟซ JDBC สำหรับการเข้าถึงฐานข้อมูล

ส่วนประกอบของ HSQLDB

มีส่วนประกอบสามอย่างที่แตกต่างกันในแพ็คเกจ HSQLDB jar

  • HyperSQL RDBMS Engine (HSQLDB)

  • ไดร์เวอร์ HyperSQL JDBC

  • ตัวจัดการฐานข้อมูล (เครื่องมือเข้าถึงฐานข้อมูล GUI พร้อมเวอร์ชัน Swing และ AWT)

HyperSQL RDBMS และ JDBC Driver มีฟังก์ชันการทำงานหลัก ผู้จัดการฐานข้อมูลเป็นเครื่องมือการเข้าถึงฐานข้อมูลที่มีวัตถุประสงค์ทั่วไปซึ่งสามารถใช้ได้กับเอ็นจินฐานข้อมูลใด ๆ ที่มีไดรเวอร์ JDBC

jar เพิ่มเติมที่เรียกว่า sqltool.jar มี Sql Tool ซึ่งเป็นเครื่องมือเข้าถึงฐานข้อมูลบรรทัดคำสั่ง นี่คือคำสั่งวัตถุประสงค์ทั่วไป เครื่องมือการเข้าถึงฐานข้อมูล Line ที่สามารถใช้กับเอ็นจิ้นฐานข้อมูลอื่นได้เช่นกัน

HSQLDB เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์ที่ใช้ใน Java บริสุทธิ์ คุณสามารถฝังฐานข้อมูลนี้ลงในแอปพลิเคชันของคุณได้อย่างง่ายดายโดยใช้ JDBC หรือคุณสามารถใช้การดำเนินการแยกกัน

ข้อกำหนดเบื้องต้น

ทำตามการติดตั้งซอฟต์แวร์ที่จำเป็นต้องมีสำหรับ HSQLDB

ตรวจสอบการติดตั้ง Java

เนื่องจาก HSQLDB เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์ที่ใช้ใน Java บริสุทธิ์คุณต้องติดตั้งซอฟต์แวร์ JDK (Java Development Kit) ก่อนติดตั้ง HSQLDB หากคุณมีการติดตั้ง JDK ในระบบของคุณอยู่แล้วให้ลองใช้คำสั่งต่อไปนี้เพื่อตรวจสอบเวอร์ชัน Java

java –version

หากติดตั้ง JDK ในระบบของคุณสำเร็จคุณจะได้รับผลลัพธ์ต่อไปนี้

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)

หากคุณไม่ได้ติดตั้ง JDK ในระบบของคุณให้ไปที่ลิงค์ต่อไปนี้เพื่อติดตั้ง JDK

การติดตั้ง HSQLDB

ต่อไปนี้เป็นขั้นตอนในการติดตั้ง HSQLDB

Step 1 − Download HSQLDB bundle

ดาวน์โหลดฐานข้อมูล HSQLDB เวอร์ชันล่าสุดจากลิงค์ต่อไปนี้ https://sourceforge.net/projects/hsqldb/files/. เมื่อคุณคลิกลิงก์คุณจะได้ภาพหน้าจอต่อไปนี้

คลิก HSQLDB และการดาวน์โหลดจะเริ่มขึ้นทันที สุดท้ายคุณจะได้รับไฟล์ zip ชื่อhsqldb-2.3.4.zip.

Step 2 − Extract the HSQLDB zip file

แตกไฟล์ zip และวางลงในไฟล์ C:\ไดเรกทอรี หลังจากแตกไฟล์คุณจะได้โครงสร้างไฟล์ดังที่แสดงในภาพหน้าจอต่อไปนี้

Step 3 − Create a default database

ไม่มีฐานข้อมูลเริ่มต้นสำหรับ HSQLDB ดังนั้นคุณต้องสร้างฐานข้อมูลสำหรับ HSQLDB ให้เราสร้างไฟล์คุณสมบัติชื่อserver.properties ซึ่งกำหนดฐานข้อมูลใหม่ชื่อ demodb. ดูคุณสมบัติเซิร์ฟเวอร์ฐานข้อมูลต่อไปนี้

server.database.0 = file:hsqldb/demodb
server.dbname.0 = testdb

วางไฟล์ server.properties นี้ลงในโฮมไดเร็กทอรี HSQLDB ที่เป็น C:\hsqldb- 2.3.4\hsqldb\.

ตอนนี้ดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง

\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับสถานะเซิร์ฟเวอร์ดังที่แสดงในภาพหน้าจอต่อไปนี้

จากนั้นคุณจะพบโครงสร้างโฟลเดอร์ต่อไปนี้ของไดเร็กทอรี hsqldb ในโฮมไดเร็กทอรี HSQLDB นั่นคือ C:\hsqldb-2.3.4\hsqldb. ไฟล์เหล่านี้คือไฟล์ชั่วคราวไฟล์ lck ไฟล์บันทึกไฟล์คุณสมบัติและไฟล์สคริปต์ของฐานข้อมูล demodb ที่สร้างโดยเซิร์ฟเวอร์ฐานข้อมูล HSQLDB

Step 4 − Start the database server

เมื่อคุณสร้างฐานข้อมูลเสร็จแล้วคุณต้องเริ่มฐานข้อมูลโดยใช้คำสั่งต่อไปนี้

\>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

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับสถานะต่อไปนี้

ตอนนี้คุณสามารถเปิดหน้าจอหลักของฐานข้อมูลที่เป็น runManagerSwing.bat จาก C:\hsqldb-2.3.4\hsqldb\binสถานที่. ไฟล์ bat นี้จะเปิดไฟล์ GUI สำหรับฐานข้อมูล HSQLDB ก่อนหน้านั้นจะขอให้คุณตั้งค่าฐานข้อมูลผ่านกล่องโต้ตอบ ดูภาพหน้าจอต่อไปนี้ ในกล่องโต้ตอบนี้ให้ป้อนชื่อการตั้งค่า URL ดังที่แสดงด้านบนแล้วคลิกตกลง

คุณจะได้รับหน้าจอ GUI ของฐานข้อมูล HSQLDB ดังที่แสดงในภาพหน้าจอต่อไปนี้

ในบทการติดตั้งเราได้กล่าวถึงวิธีการเชื่อมต่อฐานข้อมูลด้วยตนเอง ในบทนี้เราจะพูดถึงวิธีการเชื่อมต่อฐานข้อมูลโดยใช้โปรแกรม (โดยใช้โปรแกรม Java)

ดูโปรแกรมต่อไปนี้ซึ่งจะเริ่มต้นเซิร์ฟเวอร์และสร้างการเชื่อมต่อระหว่างแอปพลิเคชัน Java และฐานข้อมูล

ตัวอย่าง

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);
      }
   }
}

บันทึกรหัสนี้ลงใน ConnectDatabase.javaไฟล์. คุณจะต้องเริ่มฐานข้อมูลโดยใช้คำสั่งต่อไปนี้

\>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

คุณสามารถใช้คำสั่งต่อไปนี้เพื่อคอมไพล์และรันโค้ด

\>javac ConnectDatabase.java
\>java ConnectDatabase

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ -

Connection created successfully

บทนี้อธิบายประเภทข้อมูลต่างๆของ HSQLDB เซิร์ฟเวอร์ HSQLDB มีประเภทข้อมูลหกประเภท

ประเภทข้อมูลตัวเลขที่แน่นอน

ประเภทข้อมูล จาก ถึง
bigint -9,223,372,036,854,775,808 9,223,372,036,854,775,807
int -2,147,483,648 2,147,483,647
Smallint -32,768 32,767
Tinyint 0 255
นิดหน่อย 0 1
ทศนิยม -10 ^ 38 +1 10 ^ 38 -1
ตัวเลข -10 ^ 38 +1 10 ^ 38 -1
เงิน -922,337,203,685,477.5808 +922,337,203,685,477.5807
smallmoney -214,748.3648 +214,748.3647

ประเภทข้อมูลตัวเลขโดยประมาณ

ประเภทข้อมูล จาก ถึง
ลอย -1.79E + 308 1.79E + 308
จริง -3.40E + 38 3.40E + 38

ประเภทข้อมูลวันที่และเวลา

ประเภทข้อมูล จาก ถึง
วันเวลา 1 ม.ค. 1753 31 ธ.ค. 9999
smalldatetime 1 ม.ค. 1900 6 มิ.ย. 2522
วันที่ จัดเก็บวันที่เช่น 30 มิถุนายน 2534
เวลา เก็บช่วงเวลาเช่น 12.30 น

Note - ที่นี่ datetime มีความแม่นยำ 3.33 มิลลิวินาทีในขณะที่ datetime ขนาดเล็กมีความแม่นยำ 1 นาที

ชนิดข้อมูลสตริงอักขระ

ประเภทข้อมูล คำอธิบาย
ถ่าน ความยาวสูงสุด 8,000 อักขระ (ความยาวคงที่อักขระที่ไม่ใช่ Unicode)
varchar สูงสุด 8,000 อักขระ (ข้อมูลที่ไม่ใช่ Unicode ที่มีความยาวตัวแปร)
varchar (สูงสุด) ความยาวสูงสุด 231 อักขระข้อมูลที่ไม่ใช่ Unicode ความยาวตัวแปร (เฉพาะ SQL Server 2005 เท่านั้น)
ข้อความ ข้อมูลที่ไม่ใช่ Unicode ที่มีความยาวตัวแปรโดยมีความยาวสูงสุด 2,147,483,647 อักขระ

ชนิดข้อมูลสตริงอักขระ Unicode

ประเภทข้อมูล คำอธิบาย
nchar ความยาวสูงสุด 4,000 อักขระ (Unicode ความยาวคงที่)
nvarchar ความยาวสูงสุด 4,000 อักขระ (Unicode ความยาวตัวแปร)
nvarchar (สูงสุด) ความยาวสูงสุด 231 อักขระ (SQL Server 2005 เท่านั้น) (Unicode ความยาวตัวแปร)
ntext ความยาวสูงสุด 1,073,741,823 อักขระ (Unicode ความยาวตัวแปร)

ประเภทข้อมูลไบนารี

ประเภทข้อมูล คำอธิบาย
ไบนารี่ ความยาวสูงสุด 8,000 ไบต์ (ข้อมูลไบนารีความยาวคงที่)
varbinary ความยาวสูงสุด 8,000 ไบต์ (ข้อมูลไบนารีความยาวตัวแปร)
varbinary (สูงสุด) ความยาวสูงสุด 231 ไบต์ (SQL Server 2005 เท่านั้น) (ความยาวตัวแปรข้อมูลไบนารี)
ภาพ ความยาวสูงสุด 2,147,483,647 ไบต์ (ความยาวตัวแปรข้อมูลไบนารี)

ประเภทข้อมูลอื่น ๆ

ประเภทข้อมูล คำอธิบาย
sql_variant เก็บค่าของชนิดข้อมูลต่างๆที่รองรับ SQL Server ยกเว้นข้อความ ntext และการประทับเวลา
การประทับเวลา จัดเก็บหมายเลขเฉพาะของฐานข้อมูลที่ได้รับการอัปเดตทุกครั้งที่มีการอัปเดตแถว
ตัวบ่งชี้เฉพาะ จัดเก็บตัวระบุที่ไม่ซ้ำกันทั่วโลก (GUID)
xml เก็บข้อมูล XML คุณสามารถจัดเก็บอินสแตนซ์ xml ในคอลัมน์หรือตัวแปร (SQL Server 2005 เท่านั้น)
เคอร์เซอร์ อ้างอิงถึงวัตถุเคอร์เซอร์
ตาราง เก็บชุดผลลัพธ์สำหรับการประมวลผลในภายหลัง

ข้อกำหนดพื้นฐานที่จำเป็นในการสร้างตาราง ได้แก่ ชื่อตารางชื่อเขตข้อมูลและชนิดข้อมูลในเขตข้อมูลเหล่านั้น คุณยังสามารถระบุข้อ จำกัด ที่สำคัญให้กับตารางได้อีกด้วย

ไวยากรณ์

ดูไวยากรณ์ต่อไปนี้

CREATE TABLE table_name (column_name column_type);

ตัวอย่าง

ให้เราสร้างตารางชื่อ tutorials_tbl โดยใช้ชื่อเขตข้อมูลเช่น id, title, author, และ submit_date ดูแบบสอบถามต่อไปนี้

CREATE TABLE tutorials_tbl (
   id INT NOT NULL,
   title VARCHAR(50) NOT NULL,
   author VARCHAR(20) NOT NULL,
   submission_date DATE,
   PRIMARY KEY (id) 
);

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ -

(0) rows effected

HSQLDB - โปรแกรม JDBC

ต่อไปนี้เป็นโปรแกรม JDBC ที่ใช้สร้างตารางชื่อ tutorials_tbl ลงในฐานข้อมูล HSQLDB บันทึกโปรแกรมลงในCreateTable.java ไฟล์.

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");
   }
}

คุณสามารถเริ่มฐานข้อมูลโดยใช้คำสั่งต่อไปนี้

\>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

คอมไพล์และรันโปรแกรมข้างต้นโดยใช้คำสั่งต่อไปนี้

\>javac CreateTable.java
\>java CreateTable

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ -

Table created successfully

มันง่ายมากที่จะวางตาราง HSQLDB ที่มีอยู่ อย่างไรก็ตามคุณต้องระมัดระวังให้มากในขณะที่ลบตารางที่มีอยู่เนื่องจากข้อมูลที่สูญหายจะไม่สามารถกู้คืนได้หลังจากลบตาราง

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ SQL ทั่วไปสำหรับวางตาราง HSQLDB

DROP TABLE table_name;

ตัวอย่าง

ให้เราพิจารณาตัวอย่างการวางตารางชื่อพนักงานจากเซิร์ฟเวอร์ HSQLDB ต่อไปนี้เป็นแบบสอบถามเพื่อวางตารางชื่อพนักงาน

DROP TABLE employee;

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ -

(0) rows effected

HSQLDB - โปรแกรม JDBC

ต่อไปนี้เป็นโปรแกรม JDBC ที่ใช้เพื่อดร็อปพนักงานโต๊ะจากเซิร์ฟเวอร์ HSQLDB

บันทึกรหัสต่อไปนี้ลงใน DropTable.java ไฟล์.

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");
   }
}

คุณสามารถเริ่มฐานข้อมูลโดยใช้คำสั่งต่อไปนี้

\>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

คอมไพล์และรันโปรแกรมข้างต้นโดยใช้คำสั่งต่อไปนี้

\>javac DropTable.java
\>java DropTable

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ -

Table dropped successfully

คุณสามารถบรรลุคำสั่งแทรกแบบสอบถามใน HSQLDB โดยใช้คำสั่ง INSERT INTO คุณต้องให้ข้อมูลที่ผู้ใช้กำหนดตามลำดับฟิลด์คอลัมน์จากตาราง

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ทั่วไปสำหรับ INSERT แบบสอบถาม

INSERT INTO table_name (field1, field2,...fieldN)
VALUES (value1, value2,...valueN );

ในการแทรกข้อมูลประเภทสตริงลงในตารางคุณจะต้องใช้อัญประกาศคู่หรือเดี่ยวเพื่อระบุค่าสตริงในคำสั่งแทรกคิวรี

ตัวอย่าง

ให้เราพิจารณาตัวอย่างที่แทรกระเบียนลงในตารางชื่อ tutorials_tbl ด้วยค่า id = 100 ชื่อเรื่อง = เรียนรู้ PHP ผู้แต่ง = John Poul และวันที่ส่งคือวันที่ปัจจุบัน

ต่อไปนี้เป็นแบบสอบถามสำหรับตัวอย่างที่กำหนด

INSERT INTO tutorials_tbl VALUES (100,'Learn PHP', 'John Poul', NOW());

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ -

1 row effected

HSQLDB - โปรแกรม JDBC

นี่คือโปรแกรม JDBC เพื่อแทรกบันทึกลงในตารางด้วยค่าที่กำหนด id = 100, title = เรียนรู้ PHP, Author = John Poul และวันที่ส่งคือวันที่ปัจจุบัน ดูโปรแกรมที่กำหนด บันทึกรหัสลงในไฟล์InserQuery.java ไฟล์.

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"); 
   } 
}

คุณสามารถเริ่มฐานข้อมูลโดยใช้คำสั่งต่อไปนี้

\>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

คอมไพล์และรันโปรแกรมข้างต้นโดยใช้คำสั่งต่อไปนี้

\>javac InsertQuery.java 
\>java InsertQuery

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ -

1 rows effected 
Rows inserted successfully

พยายามแทรกระเบียนต่อไปนี้ลงในไฟล์ tutorials_tbl ตารางโดยใช้ INSERT INTO คำสั่ง

Id หัวข้อ ผู้เขียน วันที่ยื่น
101 เรียนรู้ค ยโสวันต์ ตอนนี้ ()
102 เรียนรู้ MySQL อับดุลส ตอนนี้ ()
103 เรียนรู้ Excell Bavya kanna ตอนนี้ ()
104 เรียนรู้ JDB Ajith kumar ตอนนี้ ()
105 เรียนรู้ Junit สัตยาเมอร์ธี ตอนนี้ ()

คำสั่ง SELECT ใช้เพื่อดึงข้อมูลบันทึกจากฐานข้อมูล HSQLDB ที่นี่คุณต้องพูดถึงรายการฟิลด์ที่จำเป็นในคำสั่ง Select

ไวยากรณ์

นี่คือไวยากรณ์ทั่วไปสำหรับ Select query

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • คุณสามารถดึงฟิลด์ตั้งแต่หนึ่งฟิลด์ขึ้นไปในคำสั่ง SELECT เดียว

  • คุณสามารถระบุดาว (*) แทนช่องได้ ในกรณีนี้ SELECT จะส่งคืนฟิลด์ทั้งหมด

  • คุณสามารถระบุเงื่อนไขใด ๆ โดยใช้คำสั่ง WHERE

  • คุณสามารถระบุออฟเซ็ตโดยใช้ OFFSET จากที่ที่ SELECT จะเริ่มส่งคืนระเบียน โดยค่าเริ่มต้นออฟเซ็ตคือศูนย์

  • คุณสามารถ จำกัด จำนวนผลตอบแทนโดยใช้ LIMIT แอตทริบิวต์

ตัวอย่าง

นี่คือตัวอย่างที่ดึงฟิลด์ id ชื่อเรื่องและผู้แต่งของเร็กคอร์ดทั้งหมดจาก tutorials_tblตาราง. เราสามารถบรรลุสิ่งนี้ได้โดยใช้คำสั่ง SELECT ต่อไปนี้เป็นแบบสอบถามสำหรับตัวอย่าง

SELECT id, title, author FROM tutorials_tbl

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+------+----------------+-----------------+
|  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 - โปรแกรม JDBC

นี่คือโปรแกรม JDBC ที่จะดึงข้อมูล id ชื่อเรื่องและผู้เขียนของระเบียนทั้งหมดจาก tutorials_tblตาราง. บันทึกรหัสต่อไปนี้ลงในไฟล์SelectQuery.java ไฟล์.

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);
      }
   }
}

คุณสามารถเริ่มฐานข้อมูลโดยใช้คำสั่งต่อไปนี้

\>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

คอมไพล์และรันโค้ดด้านบนโดยใช้คำสั่งต่อไปนี้

\>javac SelectQuery.java
\>java SelectQuery

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ -

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

โดยทั่วไปเราใช้คำสั่ง SELECT เพื่อดึงข้อมูลจากตาราง HSQLDB เราสามารถใช้ WHERE conditional clause เพื่อกรองข้อมูลผลลัพธ์ การใช้ WHERE เราสามารถระบุเกณฑ์การเลือกเพื่อเลือกระเบียนที่ต้องการจากตาราง

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของคำสั่ง SELECT WHERE clause เพื่อดึงข้อมูลจากตาราง HSQLDB

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • คุณสามารถใช้ตารางอย่างน้อยหนึ่งตารางที่คั่นด้วยลูกน้ำเพื่อรวมเงื่อนไขต่างๆโดยใช้คำสั่ง WHERE แต่คำสั่ง WHERE เป็นส่วนเสริมของคำสั่ง SELECT

  • คุณสามารถระบุเงื่อนไขใด ๆ โดยใช้คำสั่ง WHERE

  • คุณสามารถระบุเงื่อนไขได้มากกว่าหนึ่งเงื่อนไขโดยใช้ตัวดำเนินการ AND หรือ OR

  • นอกจากนี้ยังสามารถใช้คำสั่ง WHERE ร่วมกับคำสั่ง DELETE หรือ UPDATE SQL เพื่อระบุเงื่อนไข

เราสามารถกรองข้อมูลบันทึกได้โดยใช้เงื่อนไข เรากำลังใช้ตัวดำเนินการที่แตกต่างกันในเงื่อนไข WHERE clause นี่คือรายชื่อตัวดำเนินการซึ่งสามารถใช้กับ WHERE clause

ตัวดำเนินการ คำอธิบาย ตัวอย่าง
= ตรวจสอบว่าค่าของตัวถูกดำเนินการสองค่าเท่ากันหรือไม่ถ้าใช่เงื่อนไขจะกลายเป็นจริง (A = B) ไม่เป็นความจริง
! = ตรวจสอบว่าค่าของตัวถูกดำเนินการสองค่าเท่ากันหรือไม่หากค่าไม่เท่ากันเงื่อนไขจะกลายเป็นจริง (A! = B) เป็นจริง
> ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายมากกว่าค่าของตัวถูกดำเนินการด้านขวาหรือไม่ถ้าใช่เงื่อนไขจะกลายเป็นจริง (A> B) ไม่เป็นความจริง
< ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายน้อยกว่าค่าของตัวถูกดำเนินการด้านขวาหรือไม่ถ้าใช่เงื่อนไขจะกลายเป็นจริง (A <B) เป็นจริง
> = ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายมากกว่าหรือเท่ากับค่าของตัวถูกดำเนินการด้านขวาหรือไม่ถ้าใช่เงื่อนไขจะกลายเป็นจริง (A> = B) ไม่เป็นความจริง
<= ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายน้อยกว่าหรือเท่ากับค่าของตัวถูกดำเนินการด้านขวาหรือไม่ถ้าใช่เงื่อนไขจะกลายเป็นจริง (A <= B) เป็นจริง

ตัวอย่าง

นี่คือตัวอย่างที่ดึงข้อมูลรายละเอียดเช่น id ชื่อเรื่องและผู้แต่งหนังสือชื่อ "Learn C" เป็นไปได้โดยใช้ WHERE clause ในคำสั่ง SELECT ต่อไปนี้เป็นแบบสอบถามเดียวกัน

SELECT id, title, author FROM tutorials_tbl WHERE title = 'Learn C';

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+------+----------------+-----------------+
| id   |      title     |    author       |
+------+----------------+-----------------+
| 101  |      Learn C   |   Yaswanth      |
+------+----------------+-----------------+

HSQLDB - โปรแกรม JDBC

นี่คือโปรแกรม JDBC ที่ดึงข้อมูลเร็กคอร์ดจากตาราง tutorials_tblhaving the title Learn C. บันทึกรหัสต่อไปนี้ลงในWhereClause.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);
      }
   }

}

คุณสามารถเริ่มฐานข้อมูลโดยใช้คำสั่งต่อไปนี้

\>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

คอมไพล์และรันโค้ดด้านบนโดยใช้คำสั่งต่อไปนี้

\>javac WhereClause.java
\>java WhereClause

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

101 | Learn C | Yaswanth

เมื่อใดก็ตามที่คุณต้องการแก้ไขค่าของตารางคุณสามารถใช้คำสั่ง UPDATE สิ่งนี้จะแก้ไขค่าฟิลด์จากตาราง HSQLDB ใด ๆ

ไวยากรณ์

นี่คือไวยากรณ์ทั่วไปสำหรับคำสั่ง UPDATE

UPDATE table_name SET field1 = new-value1, field2 = new-value2 [WHERE Clause]
  • คุณสามารถอัปเดตฟิลด์หนึ่งหรือหลายฟิลด์พร้อมกัน
  • คุณสามารถระบุเงื่อนไขใด ๆ โดยใช้คำสั่ง WHERE
  • คุณสามารถอัปเดตค่าในตารางเดียวได้ในแต่ละครั้ง

ตัวอย่าง

ให้เราพิจารณาตัวอย่างที่อัปเดตชื่อของบทแนะนำจาก "เรียนรู้ C" เป็น "C และโครงสร้างข้อมูล" โดยมีรหัส "101" ต่อไปนี้เป็นคำถามสำหรับการอัปเดต

UPDATE tutorials_tbl SET title = 'C and Data Structures' WHERE id = 101;

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

(1) Rows effected

HSQLDB - โปรแกรม JDBC

นี่คือโปรแกรม JDBC ที่จะอัปเดตชื่อบทช่วยสอนจาก Learn C ถึง C and Data Structures มีรหัส 101. บันทึกโปรแกรมต่อไปนี้ลงในไฟล์UpdateQuery.java ไฟล์.

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");
   }
}

คุณสามารถเริ่มฐานข้อมูลโดยใช้คำสั่งต่อไปนี้

\>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

คอมไพล์และรันโปรแกรมข้างต้นโดยใช้คำสั่งต่อไปนี้

\>javac UpdateQuery.java
\>java UpdateQuery

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ -

1 Rows effected

เมื่อใดก็ตามที่คุณต้องการลบเร็กคอร์ดจากตาราง HSQLDB คุณสามารถใช้คำสั่ง DELETE FROM

ไวยากรณ์

นี่คือไวยากรณ์ทั่วไปสำหรับคำสั่ง DELETE เพื่อลบข้อมูลจากตาราง HSQLDB

DELETE FROM table_name [WHERE Clause]
  • หากไม่ได้ระบุ WHERE clause บันทึกทั้งหมดจะถูกลบออกจากตาราง MySQL ที่กำหนด

  • คุณสามารถระบุเงื่อนไขใด ๆ โดยใช้คำสั่ง WHERE

  • คุณสามารถลบระเบียนในตารางเดียวได้ในแต่ละครั้ง

ตัวอย่าง

ให้เราพิจารณาตัวอย่างที่ลบข้อมูลบันทึกจากตารางที่ชื่อ tutorials_tbl มี id 105. ต่อไปนี้คือแบบสอบถามที่ใช้ตัวอย่างที่กำหนด

DELETE FROM tutorials_tbl WHERE id = 105;

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ -

(1) rows effected

HSQLDB - โปรแกรม JDBC

นี่คือโปรแกรม JDBC ที่ใช้ตัวอย่างที่กำหนด บันทึกโปรแกรมต่อไปนี้ลงในDeleteQuery.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");
   }
}

คุณสามารถเริ่มฐานข้อมูลโดยใช้คำสั่งต่อไปนี้

\>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

คอมไพล์และรันโปรแกรมข้างต้นโดยใช้คำสั่งต่อไปนี้

\>javac DeleteQuery.java
\>java DeleteQuery

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ -

1 Rows effected

มีคำสั่ง WHERE ในโครงสร้าง RDBMS คุณสามารถใช้คำสั่ง WHERE ที่มีเครื่องหมายเท่ากับ (=) ที่เราต้องการจับคู่แบบตรงทั้งหมด แต่อาจมีข้อกำหนดที่เราต้องการกรองผลลัพธ์ทั้งหมดที่ชื่อผู้แต่งควรมี "john" สิ่งนี้สามารถจัดการได้โดยใช้คำสั่ง SQL LIKE พร้อมกับคำสั่ง WHERE

หากใช้คำสั่ง SQL LIKE ร่วมกับอักขระ% มันจะทำงานเหมือน metacharacter (*) ใน UNIX ในขณะที่แสดงรายการไฟล์หรือไดเร็กทอรีทั้งหมดที่ command prompt

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ SQL ทั่วไปของประโยค LIKE

SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
  • คุณสามารถระบุเงื่อนไขใด ๆ โดยใช้คำสั่ง WHERE

  • คุณสามารถใช้ประโยค LIKE ร่วมกับคำสั่ง WHERE ได้

  • คุณสามารถใช้ประโยค LIKE แทนเครื่องหมายเท่ากับ

  • เมื่อใช้ประโยค LIKE พร้อมกับเครื่องหมาย% มันจะทำงานเหมือนการค้นหาอักขระเมตา

  • คุณสามารถระบุเงื่อนไขได้มากกว่าหนึ่งเงื่อนไขโดยใช้ตัวดำเนินการ AND หรือ OR

  • คำสั่ง WHERE ... LIKE สามารถใช้ร่วมกับคำสั่ง DELETE หรือ UPDATE SQL เพื่อระบุเงื่อนไข

ตัวอย่าง

ให้เราพิจารณาตัวอย่างที่ดึงรายการข้อมูลแบบฝึกหัดที่ชื่อผู้แต่งขึ้นต้นด้วย John. ต่อไปนี้เป็นแบบสอบถาม HSQLDB สำหรับตัวอย่างที่กำหนด

SELECT * from tutorials_tbl WHERE author LIKE 'John%';

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+-----+----------------+-----------+-----------------+
|  id |      title     |   author  | submission_date |
+-----+----------------+-----------+-----------------+
| 100 |    Learn PHP   | John Poul | 2016-06-20      |
+-----+----------------+-----------+-----------------+

HSQLDB - โปรแกรม JDBC

ต่อไปนี้เป็นโปรแกรม JDBC ที่ดึงรายการข้อมูลแบบฝึกหัดที่ชื่อผู้เขียนขึ้นต้นด้วย John. บันทึกรหัสลงในLikeClause.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);
      }
   }
}

คุณสามารถเริ่มฐานข้อมูลโดยใช้คำสั่งต่อไปนี้

\>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

คอมไพล์และรันโค้ดด้านบนโดยใช้คำสั่งต่อไปนี้

\>javac LikeClause.java
\>java LikeClause

หลังจากดำเนินการคำสั่งต่อไปนี้คุณจะได้รับผลลัพธ์ต่อไปนี้

100 | Learn PHP | John Poul | 2016-06-20

คำสั่ง SQL SELECT ดึงข้อมูลจากตาราง HSQLDB เมื่อใดก็ตามที่มีข้อกำหนดที่เป็นไปตามคำสั่งเฉพาะในขณะที่ดึงข้อมูลและแสดงเรกคอร์ด ในกรณีนั้นเราสามารถใช้ไฟล์ORDER BY อนุประโยค

ไวยากรณ์

นี่คือไวยากรณ์ของคำสั่ง SELECT พร้อมกับคำสั่ง ORDER BY เพื่อจัดเรียงข้อมูลจาก HSQLDB

SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
  • คุณสามารถจัดเรียงผลลัพธ์ที่ส่งคืนในฟิลด์ใดก็ได้หากฟิลด์นั้นถูกแสดงรายการออก

  • คุณสามารถจัดเรียงผลลัพธ์ได้มากกว่าหนึ่งฟิลด์

  • คุณสามารถใช้คีย์เวิร์ด ASC หรือ DESC เพื่อให้ได้ผลลัพธ์โดยเรียงลำดับจากน้อยไปมากหรือมากไปหาน้อย โดยค่าเริ่มต้นจะเรียงลำดับจากน้อยไปมาก

  • คุณสามารถใช้คำสั่ง WHERE ... LIKE ได้ตามปกติเพื่อวางเงื่อนไข

ตัวอย่าง

ให้เราพิจารณาตัวอย่างที่ดึงและจัดเรียงบันทึกของ tutorials_tblตารางโดยเรียงลำดับชื่อผู้แต่งจากน้อยไปมาก ต่อไปนี้เป็นแบบสอบถามเดียวกัน

SELECT id, title, author from tutorials_tbl ORDER BY author ASC;

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+------+----------------+-----------------+
| 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 - โปรแกรม JDBC

นี่คือโปรแกรม JDBC ที่ดึงและจัดเรียงระเบียนของ tutorials_tblตารางโดยเรียงลำดับชื่อผู้แต่งจากน้อยไปมาก บันทึกโปรแกรมต่อไปนี้ลงในOrderBy.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);
      }
   }
}

คุณสามารถเริ่มฐานข้อมูลโดยใช้คำสั่งต่อไปนี้

\>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

คอมไพล์และรันโปรแกรมข้างต้นโดยใช้คำสั่งต่อไปนี้

\>javac OrderBy.java
\>java OrderBy

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

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

เมื่อใดก็ตามที่มีข้อกำหนดในการดึงข้อมูลจากหลายตารางโดยใช้แบบสอบถามเดียวคุณสามารถใช้ JOINS จาก RDBMS คุณสามารถใช้หลายตารางในแบบสอบถาม SQL เดียวของคุณ การเข้าร่วมใน HSQLDB หมายถึงการรวมตารางสองตารางขึ้นไปเป็นตารางเดียว

พิจารณาตารางลูกค้าและใบสั่งซื้อต่อไปนี้

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  |
+-----+---------------------+-------------+--------+

ตอนนี้ให้เราพยายามดึงข้อมูลของลูกค้าและจำนวนคำสั่งซื้อที่ลูกค้ารายนั้นวางไว้ ซึ่งหมายความว่าเรากำลังดึงข้อมูลบันทึกจากทั้งลูกค้าและตารางคำสั่งซื้อ เราสามารถบรรลุสิ่งนี้ได้โดยใช้แนวคิด JOINS ใน HSQLDB ต่อไปนี้เป็นแบบสอบถาม JOIN สำหรับสิ่งเดียวกัน

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

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

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

เข้าร่วมประเภท

HSQLDB มีการรวมประเภทต่างๆ

  • INNER JOIN - ส่งคืนแถวเมื่อมีการจับคู่ในทั้งสองตาราง

  • LEFT JOIN - แสดงแถวทั้งหมดจากตารางด้านซ้ายแม้ว่าจะไม่มีรายการที่ตรงกันในตารางด้านขวา

  • RIGHT JOIN - ส่งคืนแถวทั้งหมดจากตารางด้านขวาแม้ว่าจะไม่มีรายการที่ตรงกันในตารางด้านซ้าย

  • FULL JOIN - ส่งคืนแถวเมื่อมีการแข่งขันในตารางใดตารางหนึ่ง

  • SELF JOIN - ใช้เพื่อรวมตารางเข้ากับตัวเองราวกับว่าตารางเป็นสองตารางโดยเปลี่ยนชื่อตารางอย่างน้อยหนึ่งตารางในคำสั่ง SQL เป็นการชั่วคราว

การเข้าร่วมภายใน

การเชื่อมต่อที่ใช้บ่อยและสำคัญที่สุดคือ INNER JOIN เรียกอีกอย่างว่า EQUIJOIN

INNER JOIN สร้างตารางผลลัพธ์ใหม่โดยการรวมค่าคอลัมน์ของสองตาราง (table1 และ table2) โดยยึดตามเพรดิเคตเข้าร่วม แบบสอบถามเปรียบเทียบแต่ละแถวของ table1 กับแต่ละแถวของ table2 เพื่อค้นหาคู่ของแถวทั้งหมดซึ่งตรงตามเงื่อนไขการรวม เมื่อเข้าร่วมเพรดิเคตเป็นที่พอใจแล้วค่าของคอลัมน์สำหรับแถว A และ B ที่ตรงกันแต่ละคู่จะรวมกันเป็นแถวผลลัพธ์

ไวยากรณ์

ไวยากรณ์พื้นฐานของ INNER JOIN มีดังนี้

SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;

ตัวอย่าง

พิจารณาตารางสองตารางต่อไปนี้หนึ่งชื่อเป็นตารางลูกค้าและอีกตารางหนึ่งชื่อว่าตารางคำสั่งซื้อดังต่อไปนี้ -

+----+----------+-----+-----------+----------+
| 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   |
+-----+---------------------+-------------+--------+

ตอนนี้ให้เราเข้าร่วมสองตารางนี้โดยใช้แบบสอบถาม INNER JOIN ดังนี้ -

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
INNER JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+----+----------+--------+---------------------+
| 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 |
+----+----------+--------+---------------------+

เข้าร่วมทางซ้าย

HSQLDB LEFT JOIN ส่งคืนแถวทั้งหมดจากตารางด้านซ้ายแม้ว่าจะไม่มีรายการที่ตรงกันในตารางด้านขวา ซึ่งหมายความว่าหากคำสั่ง ON ตรงกับระเบียน 0 (ศูนย์) ในตารางด้านขวาการรวมจะยังคงส่งคืนแถวในผลลัพธ์ แต่จะมีค่า NULL ในแต่ละคอลัมน์จากตารางด้านขวา

ซึ่งหมายความว่าการรวมด้านซ้ายจะส่งคืนค่าทั้งหมดจากตารางด้านซ้ายบวกกับค่าที่ตรงกันจากตารางด้านขวาหรือ NULL ในกรณีที่ไม่มีเพรดิเคตการรวมที่ตรงกัน

ไวยากรณ์

ไวยากรณ์พื้นฐานของ LEFT JOIN มีดังนี้ -

SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;

เงื่อนไขที่กำหนดอาจเป็นนิพจน์ใดก็ได้ตามความต้องการของคุณ

ตัวอย่าง

พิจารณาตารางสองตารางต่อไปนี้หนึ่งชื่อเป็นตารางลูกค้าและอีกตารางหนึ่งชื่อว่าตารางคำสั่งซื้อดังต่อไปนี้ -

+----+----------+-----+-----------+----------+
| 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   |
+-----+---------------------+-------------+--------+

ตอนนี้ให้เราเข้าร่วมสองตารางนี้โดยใช้แบบสอบถาม LEFT JOIN ดังนี้ -

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

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ -

+----+----------+--------+---------------------+
| 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         |
+----+----------+--------+---------------------+

เข้าร่วมขวา

HSQLDB RIGHT JOIN ส่งคืนแถวทั้งหมดจากตารางด้านขวาแม้ว่าจะไม่มีรายการที่ตรงกันในตารางด้านซ้าย ซึ่งหมายความว่าหากคำสั่ง ON ตรงกับระเบียน 0 (ศูนย์) ในตารางด้านซ้ายการรวมจะยังคงส่งคืนแถวในผลลัพธ์ แต่จะมีค่า NULL ในแต่ละคอลัมน์จากตารางด้านซ้าย

ซึ่งหมายความว่าการรวมทางขวาจะส่งคืนค่าทั้งหมดจากตารางทางขวาบวกกับค่าที่ตรงกันจากตารางด้านซ้ายหรือค่า NULL ในกรณีที่ไม่มีเพรดิเคตการรวมที่ตรงกัน

ไวยากรณ์

ไวยากรณ์พื้นฐานของ RIGHT JOIN มีดังนี้ -

SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;

ตัวอย่าง

พิจารณาตารางสองตารางต่อไปนี้หนึ่งชื่อเป็นตารางลูกค้าและอีกตารางหนึ่งชื่อว่าตารางคำสั่งซื้อดังต่อไปนี้ -

+----+----------+-----+-----------+----------+
| 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  |
+-----+---------------------+-------------+--------+

ตอนนี้ให้เราเข้าร่วมสองตารางนี้โดยใช้แบบสอบถาม RIGHT JOIN ดังนี้ -

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

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ดังต่อไปนี้

+------+----------+--------+---------------------+
|  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 |
+------+----------+--------+---------------------+

เข้าร่วมแบบเต็ม

HSQLDB FULL JOIN รวมผลลัพธ์ของการรวมภายนอกทั้งซ้ายและขวา

ตารางที่เข้าร่วมจะมีระเบียนทั้งหมดจากทั้งสองตารางและกรอกค่า NULL สำหรับการแข่งขันที่ขาดหายไปในด้านใดด้านหนึ่ง

ไวยากรณ์

ไวยากรณ์พื้นฐานของ FULL JOIN มีดังนี้ -

SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;

เงื่อนไขที่กำหนดอาจเป็นนิพจน์ใดก็ได้ตามความต้องการของคุณ

ตัวอย่าง

พิจารณาตารางสองตารางต่อไปนี้หนึ่งชื่อเป็นตารางลูกค้าและอีกตารางหนึ่งชื่อว่าตารางคำสั่งซื้อดังต่อไปนี้ -

+----+----------+-----+-----------+----------+
| 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   |
+-----+---------------------+-------------+--------+

ตอนนี้ให้เราเข้าร่วมสองตารางนี้โดยใช้แบบสอบถาม FULL JOIN ดังนี้ -

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
FULL JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ดังต่อไปนี้

+------+----------+--------+---------------------+
|  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 |
+------+----------+--------+---------------------+

เข้าร่วมด้วยตนเอง

SQL SELF JOIN ใช้เพื่อรวมตารางเข้ากับตัวเองราวกับว่าตารางเป็นสองตารางโดยเปลี่ยนชื่อตารางอย่างน้อยหนึ่งตารางในคำสั่ง SQL เป็นการชั่วคราว

ไวยากรณ์

ไวยากรณ์พื้นฐานของ SELF JOIN มีดังนี้ -

SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE a.common_field = b.common_field;

ที่นี่ส่วนคำสั่ง WHERE อาจเป็นนิพจน์ใดก็ได้ตามความต้องการของคุณ

ตัวอย่าง

พิจารณาตารางสองตารางต่อไปนี้หนึ่งชื่อเป็นตารางลูกค้าและอีกตารางหนึ่งชื่อว่าตารางคำสั่งซื้อดังต่อไปนี้ -

+----+----------+-----+-----------+----------+
| 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 |
+----+----------+-----+-----------+----------+

ตอนนี้ให้เราเข้าร่วมตารางนี้โดยใช้แบบสอบถาม SELF JOIN ดังนี้ -

SELECT a.ID, b.NAME, a.SALARY FROM CUSTOMERS a, CUSTOMERS b
WHERE a.SALARY > b.SALARY;

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ -

+----+----------+---------+
| 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 เป็นคำที่ใช้แทนค่าที่ขาดหายไป ค่า NULL ในตารางคือค่าในเขตข้อมูลที่ดูเหมือนจะว่างเปล่า เมื่อใดก็ตามที่เราพยายามกำหนดเงื่อนไขซึ่งเปรียบเทียบค่าฟิลด์หรือคอลัมน์กับค่า NULL มันจะทำงานไม่ถูกต้อง

เราสามารถจัดการกับค่า NULL ได้โดยใช้สามสิ่งนี้

  • IS NULL - ตัวดำเนินการจะคืนค่าจริงหากค่าคอลัมน์เป็น NULL

  • IS NOT NULL - ตัวดำเนินการจะคืนค่าจริงหากค่าของคอลัมน์ไม่ใช่ค่าว่าง

  • <=> - ตัวดำเนินการเปรียบเทียบค่าซึ่ง (ไม่เหมือนตัวดำเนินการ =) เป็นจริงแม้จะเป็นค่า NULL สองค่า

ในการค้นหาคอลัมน์ที่เป็น NULL หรือ NOT NULL ให้ใช้ IS NULL หรือ IS NOT NULL ตามลำดับ

ตัวอย่าง

ให้เราพิจารณาตัวอย่างที่มีตาราง tcount_tblที่ประกอบด้วยสองคอลัมน์ผู้เขียนและ tutorial_count เราสามารถระบุค่า NULL ให้กับ tutorial_count ได้บ่งชี้ว่าผู้เขียนไม่ได้เผยแพร่บทช่วยสอนแม้แต่รายการเดียว ดังนั้นค่า tutorial_count สำหรับผู้เขียนนั้นจึงเป็น NULL

ดำเนินการค้นหาต่อไปนี้

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);

ใช้คำสั่งต่อไปนี้เพื่อแสดงระเบียนทั้งหมดจากไฟล์ tcount_tbl ตาราง.

select * from tcount_tbl;

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+-----------------+----------------+
|     author      | tutorial_count |
+-----------------+----------------+
|      Abdul S    |      20        |
|    Ajith kumar  |      5         |
|        Jen      |     NULL       |
|    Bavya kanna  |      8         |
|       mahran    |     NULL       |
|     John Poul   |      10        |
|   Sathya Murthi |      6         |
+-----------------+----------------+

หากต้องการค้นหาระเบียนที่คอลัมน์ tutorial_count เป็น NULL ต่อไปนี้คือแบบสอบถาม

SELECT * FROM tcount_tbl WHERE tutorial_count IS NULL;

หลังจากดำเนินการค้นหาคุณจะได้รับผลลัพธ์ต่อไปนี้

+-----------------+----------------+
|     author      | tutorial_count |
+-----------------+----------------+
|       Jen       |     NULL       |
|      mahran     |     NULL       |
+-----------------+----------------+

หากต้องการค้นหาระเบียนที่คอลัมน์ tutorial_count ไม่ใช่ NULL ต่อไปนี้คือแบบสอบถาม

SELECT * FROM tcount_tbl WHERE tutorial_count IS NOT NULL;

หลังจากดำเนินการค้นหาคุณจะได้รับผลลัพธ์ต่อไปนี้

+-----------------+----------------+
|      author     | tutorial_count |
+-----------------+----------------+
|      Abdul S    |      20        |
|     Ajith kumar |       5        |
|     Bavya kanna |       8        |
|     John Poul   |      10        |
|   Sathya Murthi |       6        |
+-----------------+----------------+

HSQLDB - โปรแกรม JDBC

นี่คือโปรแกรม JDBC ที่ดึงข้อมูลบันทึกแยกจากตาราง tcount_tbl โดยที่ tutorial_ count เป็น NULL และ tutorial_count ไม่ใช่ NULL บันทึกโปรแกรมต่อไปนี้ลงในNullValues.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);
      }
   }
}

คอมไพล์และรันโปรแกรมข้างต้นโดยใช้คำสั่งต่อไปนี้

\>javac NullValues.java
\>Java NullValues

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

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 สนับสนุนสัญลักษณ์พิเศษบางอย่างสำหรับการดำเนินการจับคู่รูปแบบตามนิพจน์ทั่วไปและตัวดำเนินการ REGEXP

ต่อไปนี้เป็นตารางรูปแบบซึ่งสามารถใช้ร่วมกับตัวดำเนินการ REGEXP ได้

รูปแบบ สิ่งที่รูปแบบตรงกัน
^ จุดเริ่มต้นของสตริง
$ สิ้นสุดสตริง
. อักขระเดี่ยวใด ๆ
[... ] อักขระใด ๆ ที่อยู่ระหว่างวงเล็บเหลี่ยม
[^ ... ] อักขระใด ๆ ที่ไม่อยู่ระหว่างวงเล็บเหลี่ยม
p1 | p2 | p3 การสลับ; จับคู่รูปแบบ p1, p2 หรือ p3 ใด ๆ
* ไม่มีอินสแตนซ์ขององค์ประกอบก่อนหน้าหรือมากกว่านั้น
+ อย่างน้อยหนึ่งอินสแตนซ์ขององค์ประกอบก่อนหน้า
{n} n อินสแตนซ์ขององค์ประกอบก่อนหน้า
{ม., n} m ถึง n อินสแตนซ์ขององค์ประกอบก่อนหน้า

ตัวอย่าง

ให้เราลองใช้ตัวอย่างแบบสอบถามต่างๆเพื่อให้เป็นไปตามข้อกำหนดของเรา ดูคำค้นหาต่อไปนี้

ลองใช้แบบสอบถามนี้เพื่อค้นหาผู้แต่งทั้งหมดที่มีชื่อขึ้นต้นด้วย '^ A'

SELECT author FROM tcount_tbl WHERE REGEXP_MATCHES(author,'^A.*');

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+-----------------+
|     author      |
+-----------------+
|     Abdul S     |
|    Ajith kumar  |
+-----------------+

ลองใช้แบบสอบถามนี้เพื่อค้นหาผู้เขียนทั้งหมดที่มีชื่อลงท้ายด้วย 'ul $'

SELECT author FROM tcount_tbl WHERE REGEXP_MATCHES(author,'.*ul$');

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+-----------------+
|     author      |
+-----------------+
|    John Poul    |
+-----------------+

ลองใช้คำค้นหานี้เพื่อค้นหาผู้เขียนทั้งหมดที่มีชื่อ "th"

SELECT author FROM tcount_tbl WHERE REGEXP_MATCHES(author,'.*th.*');

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+-----------------+
|     author      |
+-----------------+
|    Ajith kumar  | 
|     Abdul S     |
+-----------------+

ลองใช้คำค้นหานี้เพื่อค้นหาผู้แต่งทั้งหมดที่มีชื่อขึ้นต้นด้วยเสียงสระ (a, e, i, o, u)

SELECT author FROM tcount_tbl WHERE REGEXP_MATCHES(author,'^[AEIOU].*');

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+-----------------+
|     author      |
+-----------------+
|     Abdul S     |
|    Ajith kumar  |
+-----------------+

Transactionเป็นกลุ่มตามลำดับของการดำเนินการจัดการฐานข้อมูลซึ่งดำเนินการและถือว่าเป็นหน่วยงานเดียว กล่าวอีกนัยหนึ่งคือเมื่อดำเนินการทั้งหมดสำเร็จแล้วธุรกรรมทั้งหมดจะเสร็จสมบูรณ์เท่านั้น หากการดำเนินการใด ๆ ภายในธุรกรรมล้มเหลวธุรกรรมทั้งหมดจะล้มเหลว

คุณสมบัติของธุรกรรม

โดยทั่วไปธุรกรรมรองรับคุณสมบัติมาตรฐาน 4 ประการ สามารถเรียกได้ว่าเป็นคุณสมบัติของกรด

Atomicity - การดำเนินการทั้งหมดในธุรกรรมจะดำเนินการสำเร็จมิฉะนั้นธุรกรรมจะถูกยกเลิกเมื่อถึงจุดที่ล้มเหลวและการดำเนินการก่อนหน้านี้จะถูกย้อนกลับไปที่ตำแหน่งก่อนหน้า

Consistency - ฐานข้อมูลมีการเปลี่ยนแปลงสถานะอย่างถูกต้องเมื่อทำธุรกรรมสำเร็จ

Isolation - ช่วยให้ธุรกรรมสามารถดำเนินการได้อย่างอิสระและโปร่งใสซึ่งกันและกัน

Durability - ผลลัพธ์หรือผลของธุรกรรมที่ตกลงกันยังคงมีอยู่ในกรณีที่ระบบล้มเหลว

Commit, Rollback และ Savepoint

คำหลักเหล่านี้ส่วนใหญ่ใช้สำหรับธุรกรรม HSQLDB

Commit- ควรทำธุรกรรมที่สำเร็จทุกครั้งโดยดำเนินการคำสั่ง COMMIT

Rollback - หากเกิดความล้มเหลวในธุรกรรมคำสั่ง ROLLBACK ควรถูกเรียกใช้เพื่อส่งคืนทุกตารางที่อ้างถึงในธุรกรรมกลับสู่สถานะก่อนหน้า

Savepoint - สร้างจุดภายในกลุ่มธุรกรรมที่จะย้อนกลับ

ตัวอย่าง

ตัวอย่างต่อไปนี้อธิบายถึงแนวคิดการทำธุรกรรมพร้อมกับการกระทำการย้อนกลับและ Savepoint ให้เราพิจารณาตารางลูกค้าด้วยรหัสคอลัมน์ชื่ออายุที่อยู่และเงินเดือน

Id ชื่อ อายุ ที่อยู่ เงินเดือน
1 ราเมช 32 อาเมดาบัด 2,000.00 น
2 การุ ณ 25 เดลี 1,500.00 น
3 Kaushik 23 โคตะ 2,000.00 น
4 ไชยธัญญา 25 มุมไบ 6500.00
5 Harish 27 โภปาล 8500.00
6 คาเมช 22 ส.ส. 1,500.00 น
7 มูราลี 24 อินดอร์ 10,000.00

ใช้คำสั่งต่อไปนี้เพื่อสร้างตารางลูกค้าตามบรรทัดข้อมูลข้างต้น

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);

ตัวอย่างสำหรับ COMMIT

แบบสอบถามต่อไปนี้จะลบแถวออกจากตารางที่มี age = 25 และใช้คำสั่ง COMMIT เพื่อใช้การเปลี่ยนแปลงเหล่านั้นในฐานข้อมูล

DELETE FROM CUSTOMERS WHERE AGE = 25;
COMMIT;

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

2 rows effected

หลังจากดำเนินการคำสั่งข้างต้นสำเร็จแล้วให้ตรวจสอบบันทึกของตารางลูกค้าโดยดำเนินการตามคำสั่งที่กำหนดด้านล่าง

Select * from Customer;

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+----+----------+-----+-----------+----------+
| 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  |
+----+----------+-----+-----------+----------+

ตัวอย่างสำหรับการย้อนกลับ

ให้เราพิจารณาตารางลูกค้าเดียวกันกับข้อมูลเข้า

Id ชื่อ อายุ ที่อยู่ เงินเดือน
1 ราเมช 32 อาเมดาบัด 2,000.00 น
2 การุ ณ 25 เดลี 1,500.00 น
3 Kaushik 23 โคตะ 2,000.00 น
4 ไชยธัญญา 25 มุมไบ 6500.00
5 Harish 27 โภปาล 8500.00
6 คาเมช 22 ส.ส. 1,500.00 น
7 มูราลี 24 อินดอร์ 10,000.00

นี่คือตัวอย่างแบบสอบถามที่อธิบายเกี่ยวกับฟังก์ชันการย้อนกลับโดยการลบระเบียนออกจากตารางที่มี age = 25 จากนั้น ROLLBACK การเปลี่ยนแปลงในฐานข้อมูล

DELETE FROM CUSTOMERS WHERE AGE = 25;
ROLLBACK;

หลังจากดำเนินการตามคำสั่งสองข้อข้างต้นสำเร็จแล้วคุณสามารถดูข้อมูลบันทึกในตารางลูกค้าโดยใช้คำสั่งต่อไปนี้

Select * from Customer;

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+----+----------+-----+-----------+----------+
| 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  |
+----+----------+-----+-----------+----------+

คำสั่ง Delete จะลบข้อมูลเรกคอร์ดของลูกค้าที่อายุ = 25 คำสั่ง Rollback จะย้อนกลับการเปลี่ยนแปลงเหล่านั้นในตารางลูกค้า

ตัวอย่างสำหรับ Savepoint

Savepoint เป็นจุดหนึ่งในการทำธุรกรรมเมื่อคุณสามารถหมุนธุรกรรมกลับไปที่จุดหนึ่งโดยไม่ต้องย้อนกลับธุรกรรมทั้งหมด

ให้เราพิจารณาตารางลูกค้าเดียวกันกับข้อมูลเข้า

Id ชื่อ อายุ ที่อยู่ เงินเดือน
1 ราเมช 32 อาเมดาบัด 2,000.00 น
2 การุ ณ 25 เดลี 1,500.00 น
3 Kaushik 23 โคตะ 2,000.00 น
4 ไชยธัญญา 25 มุมไบ 6500.00
5 Harish 27 โภปาล 8500.00
6 คาเมช 22 ส.ส. 1,500.00 น
7 มูราลี 24 อินดอร์ 10,000.00

ให้เราพิจารณาในตัวอย่างนี้คุณวางแผนที่จะลบระเบียนที่แตกต่างกันสามรายการออกจากตารางลูกค้า คุณต้องการสร้าง Savepoint ก่อนการลบแต่ละครั้งเพื่อให้คุณสามารถย้อนกลับไปที่ Savepoint ใด ๆ ได้ตลอดเวลาเพื่อคืนข้อมูลที่เหมาะสมให้กลับสู่สถานะเดิม

นี่คือชุดปฏิบัติการ

SAVEPOINT SP1;
DELETE FROM CUSTOMERS WHERE ID = 1;
SAVEPOINT SP2;
DELETE FROM CUSTOMERS WHERE ID = 2;
SAVEPOINT SP3;
DELETE FROM CUSTOMERS WHERE ID = 3;

ตอนนี้คุณได้สร้าง Savepoint สามรายการและลบบันทึกสามรายการ ในสถานการณ์นี้หากคุณต้องการย้อนกลับระเบียนที่มี Id 2 และ 3 ให้ใช้คำสั่ง Rollback ต่อไปนี้

ROLLBACK TO SP2;

สังเกตว่ามีเพียงการลบครั้งแรกเท่านั้นที่เกิดขึ้นนับตั้งแต่คุณย้อนกลับไปที่ SP2 ใช้แบบสอบถามต่อไปนี้เพื่อแสดงบันทึกทั้งหมดของลูกค้า

Select * from Customer;

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+----+----------+-----+-----------+----------+
| 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   |
+----+----------+-----+-----------+----------+

ปล่อย Savepoint

เราสามารถปล่อย Savepoint โดยใช้คำสั่ง RELEASE ต่อไปนี้เป็นไวยากรณ์ทั่วไป

RELEASE SAVEPOINT SAVEPOINT_NAME;

เมื่อใดก็ตามที่จำเป็นต้องเปลี่ยนชื่อของตารางหรือเขตข้อมูลเปลี่ยนลำดับของเขตข้อมูลเปลี่ยนประเภทข้อมูลของเขตข้อมูลหรือโครงสร้างตารางใด ๆ คุณสามารถทำได้เช่นเดียวกันโดยใช้คำสั่ง ALTER

ตัวอย่าง

ให้เราพิจารณาตัวอย่างที่อธิบายคำสั่ง ALTER โดยใช้สถานการณ์ต่างๆ

ใช้แบบสอบถามต่อไปนี้เพื่อสร้างตารางชื่อ testalter_tbl กับทุ่ง ' id และ 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';

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+------------+-------------+------------+-----------+-----------+------------+
|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     |
+------------+-------------+------------+-----------+-----------+------------+

การวางหรือการเพิ่มคอลัมน์

เมื่อใดก็ตามที่คุณต้องการ DROP คอลัมน์ที่มีอยู่จากตาราง HSQLDB คุณสามารถใช้คำสั่ง DROP ร่วมกับคำสั่ง ALTER

ใช้แบบสอบถามต่อไปนี้เพื่อวางคอลัมน์ (name) จากตาราง testalter_tbl

ALTER TABLE testalter_tbl DROP name;

หลังจากดำเนินการตามคำค้นหาข้างต้นสำเร็จแล้วคุณสามารถทราบได้ว่าฟิลด์ชื่อหลุดจากตาราง testalter_tbl หรือไม่โดยใช้คำสั่งต่อไปนี้

Select * From INFORMATION_SCHEMA.SYSTEM_COLUMNS as C Where C.TABLE_SCHEM =
   'PUBLIC' AND C.TABLE_NAME = 'TESTALTER_TBL';

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+------------+-------------+------------+-----------+-----------+------------+
|TABLE_SCHEM |  TABLE_NAME | COLUMN_NAME| DATA_TYPE | TYPE_NAME | COLUMN_SIZE|
+------------+-------------+------------+-----------+-----------+------------+
|  PUBLIC    |TESTALTER_TBL|      ID    |      4    |   INTEGER |     4      |
+------------+-------------+------------+-----------+-----------+------------+

เมื่อใดก็ตามที่คุณต้องการเพิ่มคอลัมน์ใด ๆ ลงในตาราง HSQLDB คุณสามารถใช้คำสั่ง ADD ร่วมกับคำสั่ง ALTER

ใช้แบบสอบถามต่อไปนี้เพื่อเพิ่มคอลัมน์ชื่อ NAME ไปที่โต๊ะ testalter_tbl.

ALTER TABLE testalter_tbl ADD name VARCHAR(10);

หลังจากดำเนินการตามคำค้นหาข้างต้นสำเร็จคุณจะทราบได้ว่ามีการเพิ่มช่องชื่อลงในตารางหรือไม่ testalter_tbl โดยใช้คำสั่งต่อไปนี้

Select * From INFORMATION_SCHEMA.SYSTEM_COLUMNS as C Where C.TABLE_SCHEM =
   'PUBLIC' AND C.TABLE_NAME = 'TESTALTER_TBL';

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+------------+-------------+------------+-----------+-----------+------------+
|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     |
+------------+-------------+------------+-----------+-----------+------------+

การเปลี่ยนนิยามคอลัมน์หรือชื่อ

เมื่อใดก็ตามที่มีข้อกำหนดในการเปลี่ยนนิยามคอลัมน์ให้ใช้ MODIFY หรือ CHANGE อนุประโยคพร้อมกับ ALTER คำสั่ง

ให้เราพิจารณาตัวอย่างที่จะอธิบายวิธีการใช้คำสั่ง CHANGE โต๊ะtestalter_tblมีสองฟิลด์ - id และ name - มี datatypes int และ varchar ตามลำดับ ตอนนี้ให้เราลองเปลี่ยนประเภทข้อมูลของ id จาก INT เป็น BIGINT ต่อไปนี้เป็นแบบสอบถามเพื่อทำการเปลี่ยนแปลง

ALTER TABLE testalter_tbl CHANGE id id BIGINT;

หลังจากดำเนินการค้นหาข้างต้นสำเร็จแล้วสามารถตรวจสอบโครงสร้างตารางได้โดยใช้คำสั่งต่อไปนี้

Select * From INFORMATION_SCHEMA.SYSTEM_COLUMNS as C Where C.TABLE_SCHEM =
   'PUBLIC' AND C.TABLE_NAME = 'TESTALTER_TBL';

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+------------+-------------+------------+-----------+-----------+------------+
|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     |
+------------+-------------+------------+-----------+-----------+------------+

ตอนนี้ให้เราลองเพิ่มขนาดของคอลัมน์ NAME จาก 10 เป็น 20 ในไฟล์ testalter_tblตาราง. ต่อไปนี้เป็นแบบสอบถามเพื่อให้บรรลุสิ่งนี้โดยใช้ส่วนคำสั่ง MODIFY พร้อมกับคำสั่ง ALTER

ALTER TABLE testalter_tbl MODIFY name VARCHAR(20);

หลังจากดำเนินการค้นหาข้างต้นสำเร็จแล้วสามารถตรวจสอบโครงสร้างตารางได้โดยใช้คำสั่งต่อไปนี้

Select * From INFORMATION_SCHEMA.SYSTEM_COLUMNS as C Where C.TABLE_SCHEM =
   'PUBLIC' AND C.TABLE_NAME = 'TESTALTER_TBL';

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+------------+-------------+------------+-----------+-----------+------------+
|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      |
+------------+-------------+------------+-----------+-----------+------------+

database indexเป็นโครงสร้างข้อมูลที่ช่วยเพิ่มความเร็วของการดำเนินการในตาราง ดัชนีสามารถสร้างได้โดยใช้คอลัมน์อย่างน้อยหนึ่งคอลัมน์ซึ่งเป็นพื้นฐานสำหรับทั้งการค้นหาแบบสุ่มอย่างรวดเร็วและการจัดลำดับการเข้าถึงระเบียนอย่างมีประสิทธิภาพ

ในขณะที่สร้างดัชนีควรพิจารณาว่าอะไรคือคอลัมน์ที่จะใช้ในการสร้างแบบสอบถาม SQL และสร้างดัชนีอย่างน้อยหนึ่งรายการในคอลัมน์เหล่านั้น

ในทางปฏิบัติดัชนียังเป็นประเภทของตารางซึ่งเก็บคีย์หลักหรือฟิลด์ดัชนีและตัวชี้ไปยังแต่ละระเบียนลงในตารางจริง

ผู้ใช้ไม่สามารถเห็นดัชนี ใช้เพื่อเพิ่มความเร็วในการสืบค้นและจะใช้โดย Database Search Engine เพื่อค้นหาระเบียนอย่างรวดเร็ว

คำสั่ง INSERT และ UPDATE ใช้เวลาในตารางที่มีดัชนีมากกว่าในขณะที่คำสั่ง SELECT ทำงานได้เร็วกว่าบนตารางเหล่านั้น เหตุผลในขณะที่แทรกหรืออัปเดตฐานข้อมูลจำเป็นต้องแทรกหรืออัปเดตค่าดัชนีด้วย

ดัชนีที่เรียบง่ายและไม่เหมือนใคร

คุณสามารถสร้างดัชนีเฉพาะบนตาราง กunique indexหมายความว่าสองแถวไม่สามารถมีค่าดัชนีเดียวกันได้ ต่อไปนี้เป็นไวยากรณ์ในการสร้างดัชนีบนตาราง

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

คุณสามารถใช้คอลัมน์อย่างน้อยหนึ่งคอลัมน์เพื่อสร้างดัชนี ตัวอย่างเช่นสร้างดัชนีบน tutorials_tbl โดยใช้ tutorial_author

CREATE UNIQUE INDEX AUTHOR_INDEX
ON tutorials_tbl (tutorial_author)

คุณสามารถสร้างดัชนีอย่างง่ายบนตาราง เพียงแค่ละเว้นคำหลัก UNIQUE จากแบบสอบถามเพื่อสร้างดัชนีอย่างง่าย กsimple index อนุญาตให้มีค่าที่ซ้ำกันในตาราง

หากคุณต้องการจัดทำดัชนีค่าในคอลัมน์โดยเรียงลำดับจากมากไปหาน้อยคุณสามารถเพิ่มคำสงวน DESC หลังชื่อคอลัมน์ได้

CREATE UNIQUE INDEX AUTHOR_INDEX
ON tutorials_tbl (tutorial_author DESC)

แก้ไขคำสั่งเพื่อเพิ่มและวาง INDEX

มีคำสั่งสี่ประเภทสำหรับการเพิ่มดัชนีลงในตาราง -

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) - คำสั่งนี้เพิ่ม PRIMARY KEY ซึ่งหมายความว่าค่าที่จัดทำดัชนีจะต้องไม่ซ้ำกันและไม่สามารถเป็น NULL ได้

  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) - คำสั่งนี้สร้างดัชนีที่ค่าต้องไม่ซ้ำกัน (ยกเว้นค่า NULL ซึ่งอาจปรากฏหลายครั้ง)

  • ALTER TABLE tbl_name ADD INDEX index_name (column_list) - สิ่งนี้จะเพิ่มดัชนีธรรมดาซึ่งค่าใด ๆ อาจปรากฏมากกว่าหนึ่งครั้ง

  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) - สิ่งนี้สร้างดัชนี FULLTEXT พิเศษที่ใช้สำหรับวัตถุประสงค์ในการค้นหาข้อความ

ต่อไปนี้คือแบบสอบถามเพื่อเพิ่มดัชนีในตารางที่มีอยู่

ALTER TABLE testalter_tbl ADD INDEX (c);

คุณสามารถทิ้ง INDEX ใดก็ได้โดยใช้คำสั่ง DROP พร้อมกับคำสั่ง ALTER ต่อไปนี้เป็นแบบสอบถามเพื่อวางดัชนีที่สร้างไว้ด้านบน

ALTER TABLE testalter_tbl DROP INDEX (c);

การแสดงข้อมูล INDEX

คุณสามารถใช้คำสั่ง SHOW INDEX เพื่อแสดงรายการดัชนีทั้งหมดที่เกี่ยวข้องกับตาราง เอาต์พุตรูปแบบแนวตั้ง (ระบุโดย \ G) มักจะมีประโยชน์กับคำสั่งนี้เพื่อหลีกเลี่ยงการตัดกันแบบเส้นยาว

ต่อไปนี้เป็นไวยากรณ์ทั่วไปเพื่อแสดงข้อมูลดัชนีเกี่ยวกับตาราง

SHOW INDEX FROM table_name\G