データ分析、トランザクション処理、オブジェクト指向...それぞれの得意分野
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-SQL | Microsoft SQL Serverデータベースの管理・操作 | トランザクション処理、ローカル変数、一時テーブル、ユーザー定義関数、ストアドプロシージャ | Microsoft SQL Server開発者 |
PL/SQL | Oracle 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;
その他の比較方法
データ型
言語 | 主なデータ型 |
---|---|
SQL | CHAR, VARCHAR, INT, FLOAT, DATE, TIME, TIMESTAMP |
T-SQL | CHAR, VARCHAR, NCHAR, NVARCHAR, INT, BIGINT, FLOAT, MONEY, DATETIME, SMALLDATETIME |
PL/SQL | VARCHAR2, NUMBER, DATE, TIMESTAMP, BOOLEAN, RAW, BLOB |
インデックス
言語 | インデックスの種類 |
---|---|
SQL | B-tree, Hash |
T-SQL | B-tree, Clustered, Non-clustered, Columnstore |
PL/SQL | B-tree, Bitmap |
ビュー
言語 | ビューの種類 |
---|---|
SQL | Simple, Materialized |
T-SQL | Simple, Indexed, Updatable |
PL/SQL | Simple, WITH CHECK OPTION |
カーソル
言語 | カーソルの種類 |
---|---|
SQL | STATIC, DYNAMIC |
T-SQL | FAST_FORWARD, SCROLL, DYNAMIC |
PL/SQL | FORWARD_ONLY, SCROLLABLE |
sql t-sql plsql