データ分析、トランザクション処理、オブジェクト指向...それぞれの得意分野

2024-04-02

SQL、T-SQL、PL/SQLの違い

SQL

SQLは、Structured Query Languageの略で、データベースとの対話に特化した汎用的な言語です。主な機能は以下の通りです。

  • データの検索、更新、挿入、削除
  • テーブルの作成、変更、削除
  • データベースの構造の定義
  • インデックスの作成、削除
  • ユーザー権限の設定

SQLは、データベース管理者、データアナリスト、ソフトウェア開発者など、さまざまなユーザーによって使用されています。

T-SQL

T-SQLは、Transact-SQLの略で、Microsoft SQL Serverデータベース専用に拡張されたSQLです。SQLの機能に加えて、以下の機能が追加されています。

  • トランザクション処理
  • ローカル変数と一時テーブル
  • ユーザー定義関数とストアドプロシージャ
  • エラー処理
  • カーソル

T-SQLは、主にMicrosoft SQL Serverデータベースを管理・操作する開発者によって使用されています。

PL/SQL

PL/SQLは、Procedural Language/SQLの略で、Oracle Database専用に拡張されたSQLです。SQLの機能に加えて、以下の機能が追加されています。

  • プログラミング言語としての機能
  • 変数、条件分岐、ループ
  • モジュール、パッケージ、ファンクション
  • オブジェクト指向プログラミング
  • 例外処理
言語主な用途拡張機能主なユーザー
SQLデータベースとの対話なしデータベース管理者、データアナリスト、ソフトウェア開発者
T-SQLMicrosoft SQL Serverデータベースの管理・操作トランザクション処理、ローカル変数、一時テーブル、ユーザー定義関数、ストアドプロシージャMicrosoft SQL Server開発者
PL/SQLOracle Databaseデータベースの管理・操作プログラミング言語としての機能、モジュール、パッケージ、ファンクション、オブジェクト指向プログラミング、例外処理Oracle Database開発者



SQL

-- データの検索

SELECT * FROM employees;

-- データの更新

UPDATE employees SET salary = salary * 1.1 WHERE department = 'Sales';

-- データの挿入

INSERT INTO employees (name, department, salary) VALUES ('John Doe', 'Sales', 100000);

-- データの削除

DELETE FROM employees WHERE department = 'Marketing';

T-SQL

-- トランザクション処理

BEGIN TRANSACTION;

UPDATE employees SET salary = salary * 1.1 WHERE department = 'Sales';

IF @@ERROR <> 0
BEGIN
  ROLLBACK TRANSACTION;
  GOTO ErrorHandler;
END
ELSE
BEGIN
  COMMIT TRANSACTION;
END

ErrorHandler:

-- ローカル変数

DECLARE @salary INT;

SET @salary = 100000;

-- 一時テーブル

CREATE TABLE #temp (
  employee_id INT,
  name VARCHAR(50),
  department VARCHAR(50)
);

-- ユーザー定義関数

CREATE FUNCTION dbo.GetEmployeeName(@employee_id INT)
RETURNS VARCHAR(50)
AS
BEGIN
  DECLARE @name VARCHAR(50);

  SELECT @name = name
  FROM employees
  WHERE employee_id = @employee_id;

  RETURN @name;
END

-- ストアドプロシージャ

CREATE PROCEDURE dbo.UpdateEmployeeSalary
  @employee_id INT,
  @new_salary INT
AS
BEGIN
  UPDATE employees
  SET salary = @new_salary
  WHERE employee_id = @employee_id;
END

PL/SQL

-- プログラミング言語としての機能

DECLARE
  v_salary INT;
BEGIN
  v_salary := 100000;

  IF v_salary > 50000 THEN
    DBMS_OUTPUT.Put_Line('The salary is high.');
  ELSE
    DBMS_OUTPUT.Put_Line('The salary is low.');
  END IF;
END;

-- モジュール、パッケージ、ファンクション

PACKAGE employee_pkg IS
  PROCEDURE get_employee_name(
    p_employee_id IN NUMBER,
    p_name OUT VARCHAR2);
END employee_pkg;

PACKAGE BODY employee_pkg IS
  PROCEDURE get_employee_name(
    p_employee_id IN NUMBER,
    p_name OUT VARCHAR2)
  AS
  BEGIN
    SELECT name
    INTO p_name
    FROM employees
    WHERE employee_id = p_employee_id;
  END;
END employee_pkg;

-- オブジェクト指向プログラミング

TYPE employee IS
  RECORD
    employee_id NUMBER;
    name VARCHAR2(50);
    department VARCHAR2(50);
  END RECORD;

-- 例外処理

BEGIN
  -- 例外が発生する可能性のあるコード

EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.Put_Line('An error occurred.');
END;




その他の比較方法

データ型

言語主なデータ型
SQLCHAR, VARCHAR, INT, FLOAT, DATE, TIME, TIMESTAMP
T-SQLCHAR, VARCHAR, NCHAR, NVARCHAR, INT, BIGINT, FLOAT, MONEY, DATETIME, SMALLDATETIME
PL/SQLVARCHAR2, NUMBER, DATE, TIMESTAMP, BOOLEAN, RAW, BLOB

インデックス

言語インデックスの種類
SQLB-tree, Hash
T-SQLB-tree, Clustered, Non-clustered, Columnstore
PL/SQLB-tree, Bitmap

ビュー

言語ビューの種類
SQLSimple, Materialized
T-SQLSimple, Indexed, Updatable
PL/SQLSimple, WITH CHECK OPTION

カーソル

言語カーソルの種類
SQLSTATIC, DYNAMIC
T-SQLFAST_FORWARD, SCROLL, DYNAMIC
PL/SQLFORWARD_ONLY, SCROLLABLE

sql t-sql plsql


URLフィールドの設計とパフォーマンスのチューニング

データベースでURLを格納する際、最適なフィールド型を選択することは重要です。適切な型を選択することで、データの整合性、検索効率、ストレージ容量などを最適化できます。主な選択肢VARCHAR(n):最大n文字までの可変長文字列型。最も汎用性の高い選択肢ですが、ストレージ容量が大きくなる可能性があります。...


MySQL: INSERT INTO ... SELECT ... ステートメントの使い方

方法MySQLでレコードをコピーして一部のフィールドを変更するには、以下の2つの方法があります。INSERT INTO . .. SELECT . .. ステートメントこの方法は、既存のレコードからデータを新しいレコードにコピーし、同時に特定のフィールドの値を変更するために使用できます。...


SQL Server - INSERT後に値を取得する - ストアドプロシージャ

SQL ServerでINSERTを実行した後、挿入されたレコードの値を取得したい場合があります。この場合、いくつかの方法があります。方法@@IDENTITYIDENTITYプロパティを持つ列に値を挿入する場合、@@IDENTITY変数を使用して、挿入されたレコードのIDを取得できます。...


【SQL Server初心者向け】「文字列またはバイナリ データが切り捨てられます」のエラーを理解して解決する

エラー概要このエラーは、SQL Serverでデータを挿入または更新しようとするときに発生します。挿入または更新しようとしているデータが、カラムに定義されているサイズよりも大きい場合に発生します。具体的には、以下の2つのケースが考えられます。...


PostgreSQLで重複行を削除する方法|3つの基本的な方法と応用例

DISTINCT句を使用する最も簡単な方法は、DISTINCT 句を使用することです。このクエリは、table_name テーブルからすべての列の値を返し、重複する行は除外します。利点:シンプルで分かりやすい少ないコードで記述できるすべての列で重複を判断する必要がある...