HSQLDB - Hızlı Kılavuz

HyperSQL Veritabanı (HSQLDB), SQL: 2011 standardı ve JDBC 4 spesifikasyonlarıyla yakından uyumlu modern bir ilişkisel veritabanı yöneticisidir. Tüm temel özellikleri ve RDBMS'yi destekler. HSQLDB, veritabanı uygulamalarının geliştirilmesi, test edilmesi ve konuşlandırılması için kullanılır.

HSQLDB'nin ana ve benzersiz özelliği Standart Uyumluluktur. Kullanıcının uygulama süreci içinde, bir uygulama sunucusu içinde veya ayrı bir sunucu işlemi olarak veritabanı erişimi sağlayabilir.

HSQLDB'nin Özellikleri

  • HSQLDB, DB sunucusuna karşı hızlı işlemler için bellek içi yapı kullanır. Güvenilir bir çökme kurtarma ile, kullanıcı esnekliğine göre disk kalıcılığını kullanır.

  • HSQLDB ayrıca iş zekası, ETL ve büyük veri kümelerini işleyen diğer uygulamalar için de uygundur.

  • HSQLDB, XA işlemleri, bağlantı havuzu veri kaynakları ve uzaktan kimlik doğrulama gibi çok çeşitli kurumsal dağıtım seçeneklerine sahiptir.

  • HSQLDB, Java programlama dilinde yazılmıştır ve bir Java Sanal Makinesi'nde (JVM) çalışır. Veritabanı erişimi için JDBC arayüzünü destekler.

HSQLDB Bileşenleri

HSQLDB jar paketinde üç farklı bileşen vardır.

  • HyperSQL RDBMS Motoru (HSQLDB)

  • HyperSQL JDBC Sürücüsü

  • Veritabanı Yöneticisi (Swing ve AWT sürümleriyle birlikte GUI veritabanı erişim aracı)

HyperSQL RDBMS ve JDBC Sürücüsü temel işlevselliği sağlar. Veritabanı Yöneticileri, JDBC sürücüsüne sahip herhangi bir veritabanı motoruyla kullanılabilen genel amaçlı veritabanı erişim araçlarıdır.

Sqltool.jar adlı ek bir jar, bir komut satırı veritabanı erişim aracı olan Sql Tool'u içerir. Bu genel amaçlı bir komuttur. Diğer veritabanı motorlarıyla da kullanılabilen hat veritabanı erişim aracı.

HSQLDB, saf Java'da uygulanan ilişkisel bir veritabanı yönetim sistemidir. Bu veritabanını JDBC kullanarak uygulamanıza kolayca gömebilirsiniz. Veya işlemleri ayrı ayrı kullanabilirsiniz.

Önkoşullar

HSQLDB için ön koşul olan yazılım kurulumlarını izleyin.

Java Kurulumunu Doğrulayın

HSQLDB, saf Java'da uygulanan ilişkisel bir veritabanı yönetim sistemi olduğundan, HSQLDB'yi kurmadan önce JDK (Java Geliştirme Kiti) yazılımını yüklemeniz gerekir. Sisteminizde zaten JDK kurulumunuz varsa, Java sürümünü doğrulamak için aşağıdaki komutu deneyin.

java –version

JDK, sisteminize başarıyla kurulursa, aşağıdaki çıktıyı alırsınız.

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)

Sisteminizde JDK kurulu değilse, JDK'yı yüklemek için aşağıdaki bağlantıyı ziyaret edin .

HSQLDB Kurulumu

HSQLDB'yi kurma adımları aşağıdadır.

Step 1 − Download HSQLDB bundle

HSQLDB veritabanının en son sürümünü aşağıdaki bağlantıdan indirin https://sourceforge.net/projects/hsqldb/files/. Bağlantıya tıkladığınızda aşağıdaki ekran görüntüsünü alacaksınız.

HSQLDB'ye tıklayın ve indirme hemen başlayacaktır. Son olarak, adlı zip dosyasını alacaksınızhsqldb-2.3.4.zip.

Step 2 − Extract the HSQLDB zip file

Zip dosyasını çıkarın ve C:\dizin. Çıkardıktan sonra, aşağıdaki ekran görüntüsünde gösterildiği gibi bir dosya yapısı alacaksınız.

Step 3 − Create a default database

HSQLDB için varsayılan bir veritabanı yoktur, bu nedenle HSQLDB için bir veritabanı oluşturmanız gerekir. Adlı bir özellikler dosyası oluşturalımserver.properties adlı yeni bir veritabanı tanımlayan demodb. Aşağıdaki veritabanı sunucusu özelliklerine bir göz atın.

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

Bu server.properties dosyasını HSQLDB ana dizinine yerleştirin. C:\hsqldb- 2.3.4\hsqldb\.

Şimdi komut isteminde aşağıdaki komutu yürütün.

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

Yukarıdaki komutun yürütülmesinden sonra, aşağıdaki ekran görüntüsünde gösterildiği gibi sunucu durumunu alacaksınız.

Daha sonra, HSQLDB ana dizininde hsqldb dizininin aşağıdaki klasör yapısını bulacaksınız. C:\hsqldb-2.3.4\hsqldb. Bu dosyalar, HSQLDB veritabanı sunucusu tarafından oluşturulan geçici dosya, lck dosyası, günlük dosyası, özellikler dosyası ve demodb veritabanının komut dosyasıdır.

Step 4 − Start the database server

Veritabanı oluşturmayı tamamladığınızda, aşağıdaki komutu kullanarak veritabanını başlatmanız gerekir.

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

Yukarıdaki komutu uyguladıktan sonra aşağıdaki durumu alırsınız.

Şimdi, veritabanı ana ekranını açabilirsiniz. runManagerSwing.bat itibaren C:\hsqldb-2.3.4\hsqldb\binyer. Bu bat dosyası HSQLDB veritabanı için GUI dosyasını açacaktır. Bundan önce size bir iletişim kutusu aracılığıyla veritabanı ayarlarını soracaktır. Aşağıdaki ekran görüntüsüne bir göz atın. Bu iletişim kutusunda, Ayar Adı, URL'yi yukarıda gösterildiği gibi girin ve Tamam'ı tıklayın.

Aşağıdaki ekran görüntüsünde gösterildiği gibi HSQLDB veritabanının GUI ekranını alacaksınız.

Kurulum bölümünde, veritabanının manuel olarak nasıl bağlanacağını tartıştık. Bu bölümde, veritabanının programlı olarak nasıl bağlanacağını (Java programlama kullanarak) tartışacağız.

Sunucuyu başlatacak ve Java uygulaması ile veritabanı arasında bir bağlantı oluşturacak aşağıdaki programa bir göz atın.

Misal

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

Bu kodu şuraya kaydedin: ConnectDatabase.javadosya. Aşağıdaki komutu kullanarak veritabanını başlatmanız gerekecektir.

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

Kodu derlemek ve yürütmek için aşağıdaki komutu kullanabilirsiniz.

\>javac ConnectDatabase.java
\>java ConnectDatabase

Yukarıdaki komutu uyguladıktan sonra aşağıdaki çıktıyı alacaksınız -

Connection created successfully

Bu bölüm, HSQLDB'nin farklı veri türlerini açıklamaktadır. HSQLDB sunucusu altı veri türü kategorisi sunar.

Tam Sayısal Veri Türleri

Veri tipi Nereden İçin
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
bit 0 1
ondalık -10 ^ 38 +1 10 ^ 38 -1
sayısal -10 ^ 38 +1 10 ^ 38 -1
para -922.337.203.685.477,5808 +922.337.203.685.477,5807
küçük para -214.748.3648 +214.748.3647

Yaklaşık Sayısal Veri Türleri

Veri tipi Nereden İçin
yüzer -1.79E + 308 1.79E + 308
gerçek -3.40E + 38 3.40E + 38

Tarih ve Saat Veri Türleri

Veri tipi Nereden İçin
tarih saat 1 Oca 1753 31 Aralık 9999
küçük tarihler 1 Ocak 1900 6 Haz 2079
tarih 30 Haziran 1991 gibi bir tarihi kaydeder
zaman 12:30 gibi günün bir saatini kaydeder

Note - Burada, datetime 3.33 milisaniye doğruluğuna sahipken, küçük datetime 1 dakikalık doğruluğa sahiptir.

Karakter Dizeleri Veri Türleri

Veri tipi Açıklama
kömür Maksimum uzunluk 8.000 karakter (Sabit uzunlukta Unicode olmayan karakterler)
Varchar Maksimum 8.000 karakter (Değişken uzunlukta Unicode olmayan veriler)
varchar (maks.) Maksimum 231 karakter uzunluk, değişken uzunlukta Unicode olmayan veriler (yalnızca SQL Server 2005)
Metin Maksimum uzunluğu 2.147.483.647 karakter olan değişken uzunluklu Unicode olmayan veriler

Unicode Karakter Dizeleri Veri Türleri

Veri tipi Açıklama
nchar 4.000 karakterlik maksimum uzunluk (Sabit uzunlukta Unicode)
nvarchar 4.000 karakterlik maksimum uzunluk (Değişken uzunluklu Unicode)
nvarchar (maks.) Maksimum 231 karakter uzunluk (yalnızca SQL Server 2005), (Değişken uzunluklu Unicode)
ntext Maksimum uzunluk 1.073.741.823 karakter (Değişken uzunluklu Unicode)

İkili Veri Türleri

Veri tipi Açıklama
ikili Maksimum 8.000 bayt uzunluk (Sabit uzunlukta ikili veri)
değişken ikili Maksimum 8.000 bayt uzunluk (Değişken uzunluklu ikili veri)
değişken ikili (maks.) Maksimum 231 bayt uzunluk (yalnızca SQL Server 2005), (Değişken uzunluklu İkili veri)
görüntü 2.147.483.647 baytlık maksimum uzunluk (Değişken uzunluklu Binary Data)

Çeşitli Veri Türleri

Veri tipi Açıklama
sql_variant Metin, ntext ve zaman damgası dışında SQL Server tarafından desteklenen çeşitli veri türlerinin değerlerini depolar
zaman damgası Bir satır her güncellendiğinde güncellenen, veritabanı genelinde benzersiz bir numara depolar
benzersiz tanımlayıcı Küresel olarak benzersiz bir tanımlayıcı (GUID) depolar
xml XML verilerini depolar. Xml örneklerini bir sütunda veya bir değişkende depolayabilirsiniz (yalnızca SQL Server 2005)
imleç İmleç nesnesine referans
masa Daha sonra işlenmek üzere bir sonuç kümesi saklar

Tablo oluşturmak için temel zorunlu gereksinimler, tablo adı, alan adları ve bu alanların veri türleridir. İsteğe bağlı olarak, tabloya temel kısıtlamaları da sağlayabilirsiniz.

Sözdizimi

Aşağıdaki söz dizimine bir göz atın.

CREATE TABLE table_name (column_name column_type);

Misal

İd, title, author ve submission_date gibi alan adlarıyla tutorials_tbl adlı bir tablo oluşturalım. Aşağıdaki sorguya bir göz atın.

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

Yukarıdaki sorguyu gerçekleştirdikten sonra, aşağıdaki çıktıyı alacaksınız -

(0) rows effected

HSQLDB - JDBC Programı

Aşağıda, HSQLDB veritabanına tutorials_tbl adlı bir tablo oluşturmak için kullanılan JDBC programı verilmiştir. Programı şuraya kaydedin:CreateTable.java dosya.

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

Aşağıdaki komutu kullanarak veritabanını başlatabilirsiniz.

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

Aşağıdaki komutu kullanarak yukarıdaki programı derleyin ve çalıştırın.

\>javac CreateTable.java
\>java CreateTable

Yukarıdaki komutu uyguladıktan sonra aşağıdaki çıktıyı alacaksınız -

Table created successfully

Mevcut bir HSQLDB tablosunu düşürmek çok kolaydır. Ancak, bir tablo silindikten sonra kaybolan herhangi bir veri kurtarılmayacağından, mevcut herhangi bir tabloyu silerken çok dikkatli olmanız gerekir.

Sözdizimi

Aşağıda, HSQLDB tablosunu bırakmak için genel bir SQL sözdizimi verilmiştir.

DROP TABLE table_name;

Misal

HSQLDB sunucusundan çalışan adlı bir tabloyu düşürmek için bir örnek düşünelim. Çalışan adlı bir tabloyu bırakma sorgusu aşağıdadır.

DROP TABLE employee;

Yukarıdaki sorguyu gerçekleştirdikten sonra, aşağıdaki çıktıyı alacaksınız -

(0) rows effected

HSQLDB - JDBC Programı

Tablo çalışanını HSQLDB sunucusundan çıkarmak için kullanılan JDBC programı aşağıdadır.

Aşağıdaki kodu içine kaydedin DropTable.java dosya.

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

Aşağıdaki komutu kullanarak veritabanını başlatabilirsiniz.

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

Aşağıdaki komutu kullanarak yukarıdaki programı derleyin ve çalıştırın.

\>javac DropTable.java
\>java DropTable

Yukarıdaki komutu uyguladıktan sonra aşağıdaki çıktıyı alacaksınız -

Table dropped successfully

INSERT INTO komutunu kullanarak HSQLDB'de Sorgu ifadesi ekle'ye ulaşabilirsiniz. Tablodan sütun alanı sırasına göre kullanıcı tanımlı verileri sağlamanız gerekir.

Sözdizimi

Aşağıdakiler için genel sözdizimi INSERT sorgu.

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

Bir tabloya dize türü veri eklemek için, sorgu deyimine dize değeri sağlamak için çift veya tek tırnak kullanmanız gerekecektir.

Misal

Adlı bir tabloya kayıt ekleyen bir örneği ele alalım. tutorials_tbl id = 100, title = PHP Öğrenin, Yazar = John Poul değerleriyle ve gönderim tarihi güncel tarih.

Aşağıda verilen örnek için sorgu verilmiştir.

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

Yukarıdaki sorguyu gerçekleştirdikten sonra, aşağıdaki çıktıyı alacaksınız -

1 row effected

HSQLDB - JDBC Programı

Kaydı tabloya verilen değerlerle eklemek için JDBC programı, id = 100, title = PHP Öğren, Yazar = John Poul ve gönderim tarihi geçerli tarih. Verilen programa bir göz atın. Kodu şuraya kaydedin:InserQuery.java dosya.

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

Aşağıdaki komutu kullanarak veritabanını başlatabilirsiniz.

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

Aşağıdaki komutu kullanarak yukarıdaki programı derleyin ve çalıştırın.

\>javac InsertQuery.java 
\>java InsertQuery

Yukarıdaki komutu uyguladıktan sonra aşağıdaki çıktıyı alacaksınız -

1 rows effected 
Rows inserted successfully

Aşağıdaki kayıtları tutorials_tbl tablo kullanarak INSERT INTO komut.

İD Başlık Yazar Teslim tarihi
101 C öğrenin Yaswanth Şimdi ()
102 MySQL öğrenin Abdul S Şimdi ()
103 Excell'i Öğrenin Bavya kanna Şimdi ()
104 JDB öğrenin Ajith kumar Şimdi ()
105 Junit öğrenin Sathya Murthi Şimdi ()

SELECT komutu, kayıt verilerini HSQLDB veritabanından almak için kullanılır. Burada, Select ifadesinde gerekli alanlar listesini belirtmeniz gerekir.

Sözdizimi

Seçim sorgusu için genel sözdizimi aşağıda verilmiştir.

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • Tek bir SELECT komutuyla bir veya daha fazla alanı getirebilirsiniz.

  • Alanların yerine yıldız (*) belirtebilirsiniz. Bu durumda, SEÇ, tüm alanları döndürür.

  • WHERE yan tümcesini kullanarak herhangi bir koşulu belirtebilirsiniz.

  • OFFSET kullanarak, SELECT'in kayıtları döndürmeye başlayacağı bir ofset belirleyebilirsiniz. Varsayılan olarak, uzaklık sıfırdır.

  • LIMIT özelliğini kullanarak iade sayısını sınırlayabilirsiniz.

Misal

İşte tüm kayıtların id, başlık ve yazar alanlarını alan bir örnek. tutorials_tbltablo. Bunu SELECT deyimini kullanarak başarabiliriz. Örnek için sorgu aşağıdadır.

SELECT id, title, author FROM tutorials_tbl

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

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

İşte tüm kayıtların id, başlık ve yazar alanlarını alacak JDBC programı. tutorials_tbltablo. Aşağıdaki koduSelectQuery.java dosya.

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

Aşağıdaki komutu kullanarak veritabanını başlatabilirsiniz.

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

Aşağıdaki komutu kullanarak yukarıdaki kodu derleyin ve yürütün.

\>javac SelectQuery.java
\>java SelectQuery

Yukarıdaki komutu uyguladıktan sonra aşağıdaki çıktıyı alacaksınız -

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

Genel olarak, HSQLDB tablosundan veri almak için SELECT komutunu kullanırız. Elde edilen verileri filtrelemek için WHERE koşullu cümleci kullanabiliriz. WHERE kullanarak, bir tablodan gerekli kayıtları seçmek için seçim kriterlerini belirleyebiliriz.

Sözdizimi

Aşağıda, HSQLDB tablosundan veri almak için SELECT komutu WHERE cümlesinin sözdizimi verilmiştir.

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • WHERE yan tümcesi kullanarak çeşitli koşulları dahil etmek için virgülle ayrılmış bir veya daha fazla tablo kullanabilirsiniz, ancak WHERE yan tümcesi SELECT komutunun isteğe bağlı bir parçasıdır.

  • WHERE yan tümcesini kullanarak herhangi bir koşulu belirtebilirsiniz.

  • AND veya OR operatörlerini kullanarak birden fazla koşul belirtebilirsiniz.

  • Bir koşul belirtmek için DELETE veya UPDATE SQL komutuyla birlikte bir WHERE yan tümcesi de kullanılabilir.

Kayıt verilerini koşulları kullanarak filtreleyebiliriz. Koşullu WHERE cümlesinde farklı operatörler kullanıyoruz. WHERE yan tümcesi ile kullanılabilecek işleçlerin listesi aşağıdadır.

Şebeke Açıklama Misal
= İki işlenenin değerlerinin eşit olup olmadığını kontrol eder, evet ise koşul doğru olur. (A = B) doğru değil
! = İki işlenenin değerlerinin eşit olup olmadığını kontrol eder, değerler eşit değilse koşul doğru olur. (A! = B) doğru
> Soldaki işlenenin değerinin sağ işlenenin değerinden büyük olup olmadığını kontrol eder, evet ise koşul doğru olur. (A> B) doğru değil
< Soldaki işlenenin değerinin sağ işlenenin değerinden küçük olup olmadığını kontrol eder, evet ise koşul doğru olur. (A <B) doğru
> = Soldaki işlenenin değerinin sağ işlenenin değerinden büyük veya ona eşit olup olmadığını kontrol eder, evet ise koşul doğru olur. (A> = B) doğru değil
<= Sol işlenenin değerinin sağ işlenenin değerinden küçük veya ona eşit olup olmadığını kontrol eder, evet ise koşul doğru olur. (A <= B) doğrudur

Misal

Burada id, başlık ve "Learn C" adlı kitabın yazarı gibi ayrıntıları alan bir örnek var. SELECT komutunda WHERE yan tümcesi kullanılarak mümkündür. Aynı sorgu aşağıdadır.

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

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

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

HSQLDB - JDBC Programı

Burada, tutorials_tbl tablosundan kayıt verilerini alan JDBC programı bulunmaktadır. Learn C. Aşağıdaki kodu içine kaydedinWhereClause.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);
      }
   }

}

Aşağıdaki komutu kullanarak veritabanını başlatabilirsiniz.

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

Aşağıdaki komutu kullanarak yukarıdaki kodu derleyin ve yürütün.

\>javac WhereClause.java
\>java WhereClause

Yukarıdaki komutu uyguladıktan sonra, aşağıdaki çıktıyı alacaksınız.

101 | Learn C | Yaswanth

Bir tablonun değerlerini değiştirmek istediğinizde, UPDATE komutunu kullanabilirsiniz. Bu, herhangi bir HSQLDB tablosundaki herhangi bir alan değerini değiştirecektir.

Sözdizimi

UPDATE komutunun genel sözdizimi aşağıda verilmiştir.

UPDATE table_name SET field1 = new-value1, field2 = new-value2 [WHERE Clause]
  • Bir veya daha fazla alanı tamamen güncelleyebilirsiniz.
  • WHERE yan tümcesini kullanarak herhangi bir koşulu belirtebilirsiniz.
  • Tek seferde tek bir tablodaki değerleri güncelleyebilirsiniz.

Misal

Öğreticinin başlığını "Learn C" den "C ve Data Structures" a "101" kimliğine sahip olarak güncelleyen bir örneği ele alalım. Güncelleme sorgusu aşağıdadır.

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

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

(1) Rows effected

HSQLDB - JDBC Programı

İşte bir öğretici başlığını güncelleyecek JDBC programı. Learn C -e C and Data Structures bir kimliğe sahip olmak 101. Aşağıdaki programıUpdateQuery.java dosya.

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

Aşağıdaki komutu kullanarak veritabanını başlatabilirsiniz.

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

Aşağıdaki komutu kullanarak yukarıdaki programı derleyin ve çalıştırın.

\>javac UpdateQuery.java
\>java UpdateQuery

Yukarıdaki komutu uyguladıktan sonra aşağıdaki çıktıyı alacaksınız -

1 Rows effected

Herhangi bir HSQLDB tablosundan bir kaydı silmek istediğinizde DELETE FROM komutunu kullanabilirsiniz.

Sözdizimi

Bir HSQLDB tablosundan verileri silmek için DELETE komutunun genel sözdizimi aşağıda verilmiştir.

DELETE FROM table_name [WHERE Clause]
  • WHERE yan tümcesi belirtilmezse, verilen MySQL tablosundaki tüm kayıtlar silinecektir.

  • WHERE yan tümcesini kullanarak herhangi bir koşulu belirtebilirsiniz.

  • Tek seferde tek tablodaki kayıtları silebilirsiniz.

Misal

Kayıt verilerini isimli tablodan silen bir örnek düşünelim. tutorials_tbl kimliğe sahip 105. Verilen örneği uygulayan sorgu aşağıdadır.

DELETE FROM tutorials_tbl WHERE id = 105;

Yukarıdaki sorguyu gerçekleştirdikten sonra, aşağıdaki çıktıyı alacaksınız -

(1) rows effected

HSQLDB - JDBC Programı

Verilen örneği uygulayan JDBC programı burada. Aşağıdaki programı şuraya kaydedin: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");
   }
}

Aşağıdaki komutu kullanarak veritabanını başlatabilirsiniz.

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

Aşağıdaki komutu kullanarak yukarıdaki programı derleyin ve çalıştırın.

\>javac DeleteQuery.java
\>java DeleteQuery

Yukarıdaki komutu uyguladıktan sonra aşağıdaki çıktıyı alacaksınız -

1 Rows effected

RDBMS yapısında bir WHERE yan tümcesi vardır. Tam bir eşleşme yapmak istediğimizde WHERE cümlesini eşittir işaretiyle (=) kullanabilirsiniz. Ancak yazar adının "john" içermesi gereken tüm sonuçları filtrelemek istediğimiz bir gereklilik olabilir. Bu, WHERE yan tümcesi ile birlikte SQL LIKE yan tümcesi kullanılarak işlenebilir.

SQL LIKE yan tümcesi% karakterleriyle birlikte kullanılırsa, komut isteminde tüm dosyaları veya dizinleri listelerken UNIX'te bir meta karakter (*) gibi çalışır.

Sözdizimi

Aşağıda LIKE cümlesinin genel SQL sözdizimi verilmiştir.

SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
  • WHERE yan tümcesini kullanarak herhangi bir koşulu belirtebilirsiniz.

  • LIKE yan tümcesini WHERE yan tümcesi ile birlikte kullanabilirsiniz.

  • Eşittir işareti yerine LIKE yan tümcesini kullanabilirsiniz.

  • LIKE yan tümcesi% işaretiyle birlikte kullanıldığında, bir meta karakter araması gibi çalışacaktır.

  • AND veya OR operatörlerini kullanarak birden fazla koşul belirtebilirsiniz.

  • WHERE ... LIKE yan tümcesi, bir koşul belirtmek için DELETE veya UPDATE SQL komutuyla birlikte kullanılabilir.

Misal

Yazar adının şu şekilde başladığı öğretici verilerinin listesini alan bir örnek düşünelim: John. Aşağıda verilen örnek için HSQLDB sorgusu verilmiştir.

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

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

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

HSQLDB - JDBC Programı

Aşağıda, yazar adının şu şekilde başladığı eğitici verilerinin listesini alan JDBC programı yer almaktadır. John. Kodu içine kaydedinLikeClause.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);
      }
   }
}

Aşağıdaki komutu kullanarak veritabanını başlatabilirsiniz.

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

Aşağıdaki komutu kullanarak yukarıdaki kodu derleyin ve yürütün.

\>javac LikeClause.java
\>java LikeClause

Aşağıdaki komutun çalıştırılmasından sonra, aşağıdaki çıktıyı alacaksınız.

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

SQL SELECT komutu, kayıtları alırken ve görüntülerken belirli bir sırayı izleyen bir gereksinim olduğunda HSQLDB tablosundan veri alır. Bu durumda,ORDER BY fıkra.

Sözdizimi

HSQLDB'den verileri sıralamak için SELECT komutunun ORDER BY yan tümcesi ile birlikte sözdizimi aşağıda verilmiştir.

SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
  • Döndürülen sonucu, bu alanın listelenmesi koşuluyla herhangi bir alanda sıralayabilirsiniz.

  • Sonucu birden fazla alanda sıralayabilirsiniz.

  • Sonucu artan veya azalan sırada almak için ASC veya DESC anahtar kelimesini kullanabilirsiniz. Varsayılan olarak, artan bir sıradadır.

  • Bir koşul koymak için WHERE ... LIKE yan tümcesini normal bir şekilde kullanabilirsiniz.

Misal

Kayıtlarını toplayan ve sıralayan bir örnek düşünelim. tutorials_tblYazar adını artan sırada sıralayarak tablo. Aynı sorgu aşağıdadır.

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

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

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

İşte kayıtlarını alan ve sıralayan JDBC programı tutorials_tblYazar adını artan sırada sıralayarak tablo. Aşağıdaki programı şuraya kaydedin: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);
      }
   }
}

Aşağıdaki komutu kullanarak veritabanını başlatabilirsiniz.

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

Aşağıdaki komutu kullanarak yukarıdaki programı derleyin ve çalıştırın.

\>javac OrderBy.java
\>java OrderBy

Yukarıdaki komutu uyguladıktan sonra, aşağıdaki çıktıyı alacaksınız.

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

Tek bir sorgu kullanarak birden çok tablodan veri alma gereksinimi olduğunda, RDBMS'den JOINS'i kullanabilirsiniz. Tek SQL sorgunuzda birden çok tablo kullanabilirsiniz. HSQLDB'ye katılma eylemi, iki veya daha fazla tabloyu tek bir tabloda parçalamayı ifade eder.

Aşağıdaki Müşteriler ve Siparişler tablolarını inceleyin.

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

Şimdi, müşterilerin verilerini ve ilgili müşterinin verdiği sipariş tutarını almaya çalışalım. Bu, kayıt verilerini hem müşterilerden hem de siparişler tablosundan aldığımız anlamına gelir. Bunu HSQLDB'deki JOINS konseptini kullanarak başarabiliriz. Aynı için JOIN sorgusu aşağıdadır.

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

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

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

JOIN Türleri

HSQLDB'de farklı birleştirme türleri vardır.

  • INNER JOIN - Her iki tabloda da eşleşme olduğunda satırları döndürür.

  • LEFT JOIN - Sağ tabloda hiç eşleşme olmasa bile soldaki tablodaki tüm satırları döndürür.

  • RIGHT JOIN - Soldaki tabloda eşleşme olmasa bile, sağ tablodaki tüm satırları döndürür.

  • FULL JOIN - Tablolardan birinde eşleşme olduğunda satırları döndürür.

  • SELF JOIN - Bir tabloyu, tablo iki tablodaymış gibi kendisine birleştirmek için kullanılır, SQL ifadesindeki en az bir tabloyu geçici olarak yeniden adlandırır.

İç birleşim

En sık kullanılan ve en önemlisi INNER JOIN'dir. Aynı zamanda EQUIJOIN olarak da anılır.

INNER JOIN, iki tablonun (tablo1 ve tablo2) sütun değerlerini birleştirme koşuluna göre birleştirerek yeni bir sonuç tablosu oluşturur. Sorgu, birleştirme koşulunu karşılayan tüm satır çiftlerini bulmak için tablo1'in her satırını her tablo2 satırıyla karşılaştırır. Birleştirme koşulu karşılandığında, eşleşen her A ve B satır çiftinin sütun değerleri bir sonuç satırında birleştirilir.

Sözdizimi

INNER JOIN'in temel sözdizimi aşağıdaki gibidir.

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

Misal

Aşağıdaki iki tabloyu, biri MÜŞTERİLER tablosu ve diğeri SİPARİŞLER tablosu başlıklı aşağıdaki gibi düşünün -

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

Şimdi, INNER JOIN sorgusunu kullanarak bu iki tabloyu aşağıdaki gibi birleştirelim -

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

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

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

Sol yönden katılım

HSQLDB LEFT JOIN, sağ tabloda eşleşme olmasa bile, soldaki tablodaki tüm satırları döndürür. Bu, ON deyimi sağ tablodaki 0 ​​(sıfır) kayıtla eşleşirse, birleşimin sonuçta yine de bir satır döndüreceği, ancak sağ tablodaki her sütunda NULL olduğu anlamına gelir.

Bu, bir sol birleştirmenin sol tablodaki tüm değerleri, artı sağ tablodaki eşleşen değerleri veya eşleşen birleştirme koşulu olmaması durumunda NULL döndürdüğü anlamına gelir.

Sözdizimi

LEFT JOIN'in temel sözdizimi aşağıdaki gibidir -

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

Burada verilen koşul, gereksiniminize göre verilen herhangi bir ifade olabilir.

Misal

Aşağıdaki iki tabloyu, biri MÜŞTERİLER tablosu ve diğeri SİPARİŞLER tablosu başlıklı aşağıdaki gibi düşünün -

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

Şimdi bu iki tabloyu LEFT JOIN sorgusunu kullanarak aşağıdaki gibi birleştirelim -

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

Yukarıdaki sorguyu gerçekleştirdikten sonra, aşağıdaki çıktıyı alacaksınız -

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

Sağ Katıl

HSQLDB RIGHT JOIN, soldaki tabloda eşleşme olmasa bile sağ tablodaki tüm satırları döndürür. Bu, ON yan tümcesi soldaki tablodaki 0 ​​(sıfır) kayıtla eşleşirse, birleşmenin sonuçta yine de bir satır döndüreceği, ancak soldaki tablodaki her sütunda NULL olduğu anlamına gelir.

Bu, bir sağ birleştirmenin sağ tablodaki tüm değerleri, artı soldaki tablodaki eşleşen değerleri veya eşleşen birleştirme koşulu olmaması durumunda NULL döndürdüğü anlamına gelir.

Sözdizimi

Temel sözdizimi RIGHT JOIN aşağıdaki gibidir -

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

Misal

Aşağıdaki iki tabloyu, biri MÜŞTERİLER tablosu ve diğeri SİPARİŞLER tablosu başlıklı aşağıdaki gibi düşünün -

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

Şimdi bu iki tabloyu RIGHT JOIN sorgusunu kullanarak aşağıdaki gibi birleştirelim -

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

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki sonucu alacaksınız.

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

Tam Katılma

HSQLDB FULL JOIN, hem sol hem de sağ dış birleştirmelerin sonuçlarını birleştirir.

Birleştirilen tablo, her iki tablodaki tüm kayıtları içerecek ve her iki taraftaki eksik eşleşmeler için NULL dolduracaktır.

Sözdizimi

FULL JOIN'in temel sözdizimi aşağıdaki gibidir -

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

Burada verilen koşul, gereksiniminize göre verilen herhangi bir ifade olabilir.

Misal

Aşağıdaki iki tabloyu, biri MÜŞTERİLER tablosu ve diğeri SİPARİŞLER tablosu başlıklı aşağıdaki gibi düşünün -

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

Şimdi bu iki tabloyu FULL JOIN sorgusunu kullanarak aşağıdaki gibi birleştirelim -

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

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki sonucu alacaksınız.

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

Kendinden Katılma

SQL SELF JOIN, bir tabloyu sanki tablo iki tablodaymış gibi kendine birleştirmek için kullanılır, SQL deyimindeki en az bir tabloyu geçici olarak yeniden adlandırır.

Sözdizimi

SELF JOIN'in temel sözdizimi aşağıdaki gibidir -

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

Burada, WHERE yan tümcesi, gereksiniminize göre verilen herhangi bir ifade olabilir.

Misal

Aşağıdaki iki tabloyu, biri MÜŞTERİLER tablosu ve diğeri SİPARİŞLER tablosu başlıklı aşağıdaki gibi düşünün -

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

Şimdi, SELF JOIN sorgusunu kullanarak bu tabloyu aşağıdaki gibi birleştirelim -

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

Yukarıdaki sorguyu gerçekleştirdikten sonra, aşağıdaki çıktıyı alacaksınız -

+----+----------+---------+
| 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, eksik bir değeri temsil etmek için kullanılan bir terimdir. Bir tablodaki NULL değeri, boş görünen bir alandaki değerdir. Ne zaman alan veya sütun değerini NULL ile karşılaştıran bir koşul vermeye çalışsak, düzgün çalışmıyor.

NULL değerlerini üç şeyi kullanarak halledebiliriz.

  • IS NULL - Sütun değeri NULL ise operatör true döndürür.

  • IS NOT NULL - Sütun değeri NULL DEĞİL ise operatör true döndürür.

  • <=> - Operatör, iki NULL değeri için bile (= operatörünün aksine) doğru olan değerleri karşılaştırır.

NULL veya NOT NULL olan sütunları aramak için sırasıyla IS NULL veya IS NOT NULL kullanın.

Misal

Masanın olduğu bir örneği ele alalım tcount_tbliki sütun, yazar ve öğretici_sayısı içeren. Tutorial_count'a NULL değerler sağlayabiliriz, yazarın bir öğretici bile yayınlamadığını gösterir. Bu nedenle, ilgili yazar için tutorial_count değeri NULL olur.

Aşağıdaki sorguları yürütün.

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

Tüm kayıtları görüntülemek için aşağıdaki komutu kullanın. tcount_tbl tablo.

select * from tcount_tbl;

Yukarıdaki komutu uyguladıktan sonra, aşağıdaki çıktıyı alacaksınız.

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

Tutorial_count sütununun BOŞ OLDUĞU kayıtları bulmak için, sorgu aşağıdadır.

SELECT * FROM tcount_tbl WHERE tutorial_count IS NULL;

Sorgunun yürütülmesinden sonra aşağıdaki çıktıyı alacaksınız.

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

Tutorial_count sütununun BOŞ DEĞİL OLMADIĞI kayıtları bulmak için, sorgu aşağıdadır.

SELECT * FROM tcount_tbl WHERE tutorial_count IS NOT NULL;

Sorgunun yürütülmesinden sonra aşağıdaki çıktıyı alacaksınız.

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

HSQLDB - JDBC Programı

Burada, tutorial_ count değerinin NULL olduğu ve tutorial_count değerinin BOŞ DEĞİL olduğu tcount_tbl tablosundan ayrı olarak kayıtları alan JDBC programı bulunmaktadır. Aşağıdaki programı şuraya kaydedin: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);
      }
   }
}

Aşağıdaki komutu kullanarak yukarıdaki programı derleyin ve çalıştırın.

\>javac NullValues.java
\>Java NullValues

Yukarıdaki komutu uyguladıktan sonra, aşağıdaki çıktıyı alacaksınız.

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, normal ifadelere ve REGEXP operatörüne dayalı desen eşleştirme işlemi için bazı özel sembolleri destekler.

Aşağıda, REGEXP işleci ile birlikte kullanılabilecek model tablosu verilmiştir.

Desen Kalıp Neyle Eşleşir?
^ Dizenin başlangıcı
$ Dizenin sonu
. Herhangi bir tek karakter
[...] Köşeli parantezler arasında listelenen herhangi bir karakter
[^ ...] Köşeli parantezler arasında listelenmeyen herhangi bir karakter
p1 | p2 | p3 Değişim; p1, p2 veya p3 modellerinden herhangi biriyle eşleşir
* Önceki öğenin sıfır veya daha fazla örneği
+ Önceki öğenin bir veya daha fazla örneği
{n} n önceki öğenin örnekleri
{m, n} önceki öğenin m ila n örnekleri

Misal

Gereksinimlerimizi karşılamak için farklı örnek sorgular deneyelim. Aşağıdaki verilen sorgulara bir göz atın.

Adı '^ A' ile başlayan tüm yazarları bulmak için bu Sorguyu deneyin.

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

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

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

Adı 'ul $' ile biten tüm yazarları bulmak için bu Sorguyu deneyin.

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

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

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

Adı 'th' içeren tüm yazarları bulmak için bu Sorguyu deneyin.

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

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

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

Adı sesli harfle (a, e, i, o, u) başlayan tüm yazarları bulmak için bu sorguyu deneyin.

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

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

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

Bir Transactiontek bir çalışma birimi olarak gerçekleştirilen ve kabul edilen sıralı bir veritabanı işleme işlemleri grubudur. Diğer bir deyişle, tüm işlemler başarıyla yürütüldüğünde, ancak o zaman işlemin tamamı tamamlanacaktır. İşlem içindeki herhangi bir işlem başarısız olursa, işlemin tamamı başarısız olur.

İşlemlerin Özellikleri

Temel olarak, işlem 4 standart özelliği destekler. ACID özellikleri olarak adlandırılabilirler.

Atomicity - İşlemlerdeki tüm işlemler başarılı bir şekilde yürütülür, aksi takdirde işlem başarısızlık noktasında iptal edilir ve önceki işlemler önceki konumuna geri döndürülür.

Consistency - Veritabanı, başarıyla tamamlanmış bir işlemden sonra durumları uygun şekilde değiştirir.

Isolation - İşlemin birbirinden bağımsız ve şeffaf bir şekilde işlemesini sağlar.

Durability - Bir sistem arızası durumunda, taahhüt edilen bir işlemin sonucu veya etkisi devam eder.

Kaydetme, Geri Alma ve Kaydetme Noktası

Bu anahtar sözcükler esas olarak HSQLDB işlemleri için kullanılır.

Commit- Her zaman başarılı işlem COMMIT komutu çalıştırılarak tamamlanmalıdır.

Rollback - İşlemde bir hata oluşursa, işlemde referans verilen her tabloyu önceki durumuna döndürmek için ROLLBACK komutu yürütülmelidir.

Savepoint - Geri alınacak işlemler grubu içinde bir nokta oluşturur.

Misal

Aşağıdaki örnek, commit, geri alma ve Savepoint ile birlikte işlemler kavramını açıklamaktadır. Müşteriler tablosunu id, isim, yaş, adres ve maaş sütunlarıyla ele alalım.

İD İsim Yaş Adres Maaş
1 Ramesh 32 Ahmedabad 2000,00
2 Karun 25 Delhi 1500.00
3 Kaushik 23 Kota 2000,00
4 Chaitanya 25 Bombay 6500.00
5 Harish 27 Bhopal 8500.00
6 Kamesh 22 MP 1500.00
7 Murali 24 Indore 10000.00

Yukarıdaki verilerin satırları boyunca müşteri tablosunu oluşturmak için aşağıdaki komutları kullanı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);

COMMIT için örnek

Aşağıdaki sorgu, yaş = 25 olan tablodan satırları siler ve bu değişiklikleri veritabanına uygulamak için COMMIT komutunu kullanır.

DELETE FROM CUSTOMERS WHERE AGE = 25;
COMMIT;

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

2 rows effected

Yukarıdaki komutu başarıyla uyguladıktan sonra, aşağıda verilen komutu uygulayarak müşteri tablosunun kayıtlarını kontrol edin.

Select * from Customer;

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

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

Geri Alma Örneği

Aynı Müşteri tablosunu girdi olarak ele alalım.

İD İsim Yaş Adres Maaş
1 Ramesh 32 Ahmedabad 2000,00
2 Karun 25 Delhi 1500.00
3 Kaushik 23 Kota 2000,00
4 Chaitanya 25 Bombay 6500.00
5 Harish 27 Bhopal 8500.00
6 Kamesh 22 MP 1500.00
7 Murali 24 Indore 10000.00

Aşağıda, yaş = 25 olan tablodaki kayıtları silerek ve ardından veritabanındaki değişiklikleri ROLLBACK yaparak Geri Alma işlevini açıklayan örnek sorgu verilmiştir.

DELETE FROM CUSTOMERS WHERE AGE = 25;
ROLLBACK;

Yukarıdaki iki sorgunun başarılı bir şekilde yürütülmesinden sonra, aşağıdaki komutu kullanarak Müşteri tablosundaki kayıt verilerini görüntüleyebilirsiniz.

Select * from Customer;

Yukarıdaki komutu uyguladıktan sonra, aşağıdaki çıktıyı alacaksınız.

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

Silme sorgusu, yaşı = 25 olan müşterilerin kayıt verilerini siler. Geri Al komutu, Müşteri tablosunda bu değişiklikleri geri alır.

Savepoint örneği

Savepoint, işlemin tamamını geri almadan işlemi belirli bir noktaya geri alabileceğiniz bir işlemdir.

Aynı Müşteri tablosunu girdi olarak ele alalım.

İD İsim Yaş Adres Maaş
1 Ramesh 32 Ahmedabad 2000,00
2 Karun 25 Delhi 1500.00
3 Kaushik 23 Kota 2000,00
4 Chaitanya 25 Bombay 6500.00
5 Harish 27 Bhopal 8500.00
6 Kamesh 22 MP 1500.00
7 Murali 24 Indore 10000.00

Bu örnekte ele alalım, Müşteriler tablosundan üç farklı kaydı silmeyi planlıyorsunuz. Her silme işleminden önce bir Kayıt Noktası oluşturmak istersiniz, böylece uygun verileri orijinal durumuna geri döndürmek için istediğiniz zaman herhangi bir Kayıt Noktasına geri dönebilirsiniz.

İşte işlemler dizisi.

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

Şimdi, üç Savepoint oluşturdunuz ve üç kayıt sildiniz. Bu durumda, 2 ve 3 numaralı kayıtları geri almak istiyorsanız, aşağıdaki Geri Al komutunu kullanın.

ROLLBACK TO SP2;

SP2'ye geri döndüğünüzden beri yalnızca ilk silme işleminin gerçekleştiğine dikkat edin. Müşterilerin tüm kayıtlarını görüntülemek için aşağıdaki sorguyu kullanın.

Select * from Customer;

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

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

Kayıt Noktasını Serbest Bırak

RELEASE komutunu kullanarak Savepoint'i serbest bırakabiliriz. Aşağıda genel sözdizimi verilmiştir.

RELEASE SAVEPOINT SAVEPOINT_NAME;

Bir tablonun veya alanın adını değiştirmek, alanların sırasını değiştirmek, alanların veri türünü veya herhangi bir tablo yapısını değiştirmek gerektiğinde, ALTER komutunu kullanarak aynısını elde edebilirsiniz.

Misal

ALTER komutunu farklı senaryolar kullanarak açıklayan bir örnek ele alalım.

Adlı bir tablo oluşturmak için aşağıdaki sorguyu kullanın testalter_tbl alanlarla id ve 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';

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

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

Sütun Düşürmek veya Eklemek

HSQLDB tablosundan var olan bir sütunu DROP yapmak istediğinizde, ALTER komutu ile birlikte DROP cümlesini kullanabilirsiniz.

Bir sütun bırakmak için aşağıdaki sorguyu kullanın (name) tablodan testalter_tbl.

ALTER TABLE testalter_tbl DROP name;

Yukarıdaki sorgunun başarılı bir şekilde yürütülmesinden sonra, aşağıdaki komutu kullanarak ad alanının testalter_tbl tablosundan bırakılıp bırakılmadığını öğrenebilirsiniz.

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

Yukarıdaki komutu uyguladıktan sonra, aşağıdaki çıktıyı alacaksınız.

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

HSQLDB tablosuna herhangi bir sütun eklemek istediğinizde, ALTER komutu ile birlikte ADD cümlesini kullanabilirsiniz.

Adlı bir sütun eklemek için aşağıdaki sorguyu kullanın NAME masaya testalter_tbl.

ALTER TABLE testalter_tbl ADD name VARCHAR(10);

Yukarıdaki sorgunun başarılı bir şekilde yürütülmesinden sonra, ad alanının tabloya eklenip eklenmediğini öğrenebilirsiniz. testalter_tbl aşağıdaki komutu kullanarak.

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

Yukarıdaki sorguyu yaptıktan sonra aşağıdaki çıktıyı alacaksınız.

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

Sütun Tanımını veya Adını Değiştirme

Sütun tanımını değiştirme gereksinimi olduğunda, MODIFY veya CHANGE ile birlikte fıkra ALTER komut.

CHANGE cümlesinin nasıl kullanılacağını açıklayacak bir örnek ele alalım. Tablotestalter_tblsırasıyla int ve varchar veri türlerine sahip iki alan içerir - id ve name. Şimdi id'nin veri türünü INT'den BIGINT'e değiştirmeyi deneyelim. Değişikliğin yapılacağı sorgu aşağıdadır.

ALTER TABLE testalter_tbl CHANGE id id BIGINT;

Yukarıdaki sorgunun başarılı bir şekilde yürütülmesinden sonra, tablo yapısı aşağıdaki komut kullanılarak doğrulanabilir.

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

Yukarıdaki komutu uyguladıktan sonra, aşağıdaki çıktıyı alacaksınız.

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

Şimdi bir NAME sütununun boyutunu 10'dan 20'ye çıkarmayı deneyelim. testalter_tbltablo. ALTER komutu ile birlikte MODIFY yan tümcesini kullanarak bunu başarmak için sorgu aşağıdadır.

ALTER TABLE testalter_tbl MODIFY name VARCHAR(20);

Yukarıdaki sorgunun başarılı bir şekilde yürütülmesinden sonra, tablo yapısı aşağıdaki komut kullanılarak doğrulanabilir.

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

Yukarıdaki komutu uyguladıktan sonra, aşağıdaki çıktıyı alacaksınız.

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

Bir database indexbir tablodaki işlemlerin hızını artıran bir veri yapısıdır. Dizinler, hem hızlı rasgele aramalar hem de kayıtlara erişimin verimli bir şekilde sıralanması için temel sağlayan bir veya daha fazla sütun kullanılarak oluşturulabilir.

İndeks oluştururken SQL sorguları yapmak için kullanılacak kolonların ne olduğu ve bu kolonlar üzerinde bir veya daha fazla indeks oluşturulacağı dikkate alınmalıdır.

Pratik olarak, dizinler aynı zamanda birincil anahtarı veya dizin alanını ve gerçek tabloya her kaydın göstericisini tutan tablo türleridir.

Kullanıcılar dizinleri göremez. Sadece sorguları hızlandırmak için kullanılırlar ve Veritabanı Arama Motoru tarafından kayıtları hızlı bir şekilde bulmak için kullanılırlar.

INSERT ve UPDATE deyimleri, dizin içeren tablolarda daha fazla zaman alırken, SELECT deyimleri bu tablolarda daha hızlı çalışır. Bunun nedeni, ekleme veya güncelleme sırasında, veritabanının dizin değerlerini de eklemesi veya güncellemesidir.

Basit ve Benzersiz Dizin

Bir tablo üzerinde benzersiz bir dizin oluşturabilirsiniz. Birunique indexiki satırın aynı indeks değerine sahip olamayacağı anlamına gelir. Aşağıda bir tabloda bir Dizin oluşturmak için sözdizimi verilmiştir.

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

Bir dizin oluşturmak için bir veya daha fazla sütun kullanabilirsiniz. Örneğin, tutorial_author kullanarak tutorials_tbl üzerinde bir dizin oluşturun.

CREATE UNIQUE INDEX AUTHOR_INDEX
ON tutorials_tbl (tutorial_author)

Bir tablo üzerinde basit bir dizin oluşturabilirsiniz. Basit bir dizin oluşturmak için sorgudan UNIQUE anahtar sözcüğünü çıkarmanız yeterlidir. Birsimple index bir tabloda yinelenen değerlere izin verir.

Bir sütundaki değerleri azalan sırada indekslemek istiyorsanız, sütun adından sonra ayrılmış DESC kelimesini ekleyebilirsiniz.

CREATE UNIQUE INDEX AUTHOR_INDEX
ON tutorials_tbl (tutorial_author DESC)

INDEX Eklemek ve Bırakmak için ALTER Komutu

Bir tabloya dizin eklemek için dört tür ifade vardır -

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) - Bu ifade, bir PRIMARY KEY ekler; bu, indekslenmiş değerlerin benzersiz olması gerektiği ve NULL olamayacağı anlamına gelir.

  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) - Bu ifade, değerlerin benzersiz olması gereken bir dizin oluşturur (birden çok kez görünebilen NULL değerler hariç).

  • ALTER TABLE tbl_name ADD INDEX index_name (column_list) - Bu, herhangi bir değerin birden fazla görünebileceği sıradan bir indeks ekler.

  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) - Bu, metin arama amacıyla kullanılan özel bir FULLTEXT dizini oluşturur.

Mevcut bir tabloya dizin ekleme sorgusu aşağıdadır.

ALTER TABLE testalter_tbl ADD INDEX (c);

ALTER komutuyla birlikte DROP yan tümcesini kullanarak herhangi bir INDEX'i bırakabilirsiniz. Yukarıda oluşturulan dizini bırakma sorgusu aşağıdadır.

ALTER TABLE testalter_tbl DROP INDEX (c);

INDEX Bilgilerinin Görüntülenmesi

Bir tabloyla ilişkili tüm dizinleri listelemek için SHOW INDEX komutunu kullanabilirsiniz. Dikey biçimli çıktı (\ G ile belirtilir), uzun satır kaydırmayı önlemek için genellikle bu deyimle kullanışlıdır.

Aşağıda, bir tabloyla ilgili dizin bilgilerini görüntülemek için genel sözdizimi verilmiştir.

SHOW INDEX FROM table_name\G