データベース

【データベース】SQL

SQLとは?

関係データベース言語であるSQLは、関係データモデルに基づく標準のデータベース言語であり、データ定義言語(DDL)データ操作言語(DML)データ制御言語(DCL)の3つがある。

SQLの特徴

関係データモデルへの準拠

関係データベースモデルに基づいて定義された言語です

公的機関による標準化

公的機関によって標準化されているために、どのRDBMS製品にも使用されています。

管理機能の実装

テーブルの危機管理機能も標準化されています。

セット処理への対応

データに1件ずつアクセスするだけでなく、条件を満たす複数のデータに対して一括して操作を行えます。

関係データモデルとSQLの用語の対応

関係データモデルSQL
関係(リレーション)表(テーブル)
タプル
属性(アトリビュート)
定義域(ドメイン)定義域(ドメイン)

データ定義言語(DDL)

データベースにデータを格納するには、まずデータの入れ物をどのような構造にするかを定義する必要があります。以下の命令により構造決定します。

命令意味
CREATE TABLEテーブルの作成
CREATE VIEWビューの作成
DROP TABLEテーブルの削除
DROP VIEWビューの削除
ALTER TABLE列の追加・削除

CREATE TABLE

CREATE TABLE テーブル名(
  列名1 データ型 列制約,
  列名1 データ型 列制約,
  ・・・
  表制約
)

データ型

分類 データ型 説明
文字列型 CHAR(n) n文字の固定長文字列
NCHAR(n) n文字の国際化対応文字列
VARCHAR(n) 最大n文字の可変長文字列
整数型 NUMBER(p.q) q桁の小数部を持つp桁の10進数
INT 符号付き整数
REAL 符号つき浮動小数
日付/時間型 DATE 日付(年月日)
TIME 時間(時分秒)
TIMESTANP タイムスタンプ

テーブルの制約

制約説明
UNIQUEテーブルの中で値が一意であることを保証される。NULL値は複数の行に存在しても良い。
NOT NULLNULL値は許可しない。この制約を定義した列には、必ず値を設定する必要がある。
PRIMARY KEY主キー制約を定義する。UNIQUEとNOT NULLの制約を持っている
CHECK設定可能な値の範囲などを指定できる
DEFAULT値を明示せずに行を追加する場合m自動的に設定される値を指定できる
FOREIGN KEY外部キー制約を定義する。指定したテーブルの列に存在しない値を設定できないと言う制約をかけることができる。

CREATE TABLE 商品(   
    商品コード  CHAR(4) PRIMARY KEY,   
    商品名    NCHAR(10) NOT NULL, 
    単価     INT,   
    仕入れ先コード CHAR(4),   
    FOREIGN KEY (仕入れ先コード) REFERENCES (仕入れ先), CHECK (単価<=500) 
)

CREATE VIEW

 
CREATE VIEW ビュー名(列名1,列名2,..)
  AS SELECT ・・・
CREATE VIEW 合格者一覧(受験番号,点数) 
  AS SELECT 受験者番号, 点数
       FROM 試験成績
           WHERE 合否 = '合格'
テーブルとビューの違い

ビューとは、CREATE TABLE で定義された実テーブルから作成される仮想的なテーブルのことです。ビューはあくまでも仮想テーブルなので、その中にデータは存在しません。ビューは実テーブルをどのように見るのかを定義したものと言えます。 参照:https://www.techscore.com/tech/sql/SQL9/09_01.html/

データ操作言語(DML)

表内のデータの参照・更新・追加・削除などを行えます。

命令意味
SELECTデータの参照
INSERTデータの追加
UPDATEデータの変更
DELETEデータの削除

SELECT文

SELECT  列名 → どの列から抽出するかを指定
FROM  表名 →  どの表から抽出するかを指定
WHERE  条件式 → どのような条件で抽出するかを指定

良く使われるので、以下のように覚えておきましょう!
Select – From – Where – Group by – Having – Order by

・SELECT * で全ての列を抽出します。

・SELECT 列名 FROM テーブル名 WHERE LIKE 列名 ‘文字列’ で対象の列に対して、文字列検索が行えます。このLIKEの文字列には、ワイルドカードが使用できます。

ワイルドカード文字 意味
% 0文字以上の任意の文字列
_ (アンダーバー) 任意の1文字

・SELECT 氏名,担任 FROM 学生,担任 WHERE 学生.クラス=担任.クラスで2つのテーブル(学生と担任)を連結し表を作成する。学生テーブルのクラス列と担任テーブルのクラス列が等しい行が表の要素となる。

INSERT文

UPDATE文

DELETE文

データ制御言語(DCL)

データベースのアクセス権などと定義します。

GRANT権限の付与
REVOKE権限の取り消し

GRANT文

REVOKE文

SQLの構文

SELECT * | [ALL, DISTINCT, TOP 数字, LIMIT 数字]  列名1[, 列名2, ...]
  FROM  テーブル名1[, テーブル名2, ...] 
  [JOIN  テーブル名2]
  [ON  結合条件]
  [WHERE 検索条件1 (AND 検索条件2 ...)]
  [GROUP BY グループ化する列の名前(または列の位置)]
  [HAVING グループ化した後の行を抽出する条件]
  [ORDER BY 整列の元になる列 [ASC | DESC]]

SQLの評価順序

普通のプログラミング言語は上から下の順番で実行されていきますが、SQLはそうではありません。どのような優先順位で実行していくかは下の表のようになっています。

〜句内容
FROM参照するテーブルを指定
ON結合させるテーブルの条件を指定
JOIN参照しているテーブルに結合させるテーブルを指定
WHERE結合を終えたテーブルの列の条件を指定
GROUP BY結合を終えたテーブルの行をグループ化する列の条件を指定
HAVINGグループ化したテーブルの行を抽出する列の条件を指定
SELECT表示するテーブルの列を指定
DISTINCT重複を取り除く→重複がなくなる
ORDER BY行をどの列の情報で並べかえをするかを指定
TOP (LIMIT)取得件数を指定