DB
DB=データベース
データ→情報
ベース→基地
図では円柱型で表し、様々な情報が格納されている
RDB
RDB = リレーショナルデータベース
RDBMS = リレーショナルデータベース管理システム
RDBの内部構造
テーブル(表)と呼ばれる単位で大量に管理する
横の行(レコード)と縦の列(カラム)によって構成されている
SQLの記述ルール
・製品ごとに記述方法が一部異なるが、8割は同じ記述方法(標準SQL)
・予約語(キーワード)は慣習として大文字で記述(小文字でも動くが見づらい)
・文の末尾は「;」(セミコロン)(1文の場合は書かないことが多い)
・文中に改行、空白を含んでもOK
・文字列、日付の型の値は「'」(シングルクオーテーション)で囲む
・テーブル名、カラム名に日本語を使用しても動作する
Java | SQL | |
---|---|---|
1行コメント | // | -- |
複数行コメント | /* | /* |
*/ | */ | |
※「--」の後に「 」が入る |
データ型
Oracle | MySQL | |
---|---|---|
固定長文字列 | CHAR | CHAR |
可変長文字列 | VARCHAR2 | VARCHAR |
数値 | NUMBER | INT |
日付のみ | - | DATE |
日付と時刻 | DATE | - |
固定長文字列=不足分を半角スペースで埋める
可変長文字列=データをそのまま格納させる(メモリの節約になる)
BLOB:バイナリデータをレコード中に直接可能できるデータ型
=音声や画像などのデータであってもバイナリデータとして格納できる
DML、DCL、DDL
種類 | 記述 |
---|---|
DML | SELECT文 |
INSERT | |
UPDATE文 | |
DELETE文 | |
DCL | COMMIT文 |
ROLLBACK文 | |
DDL | CREATE文 |
ALTER文 | |
DROP文 |
DML=データ操作言語
DCL=データ制御言語
DDL=テーブル操作言語
SELECT文
既存データを検索する文
SELECT
選択列リスト(複数項目はカンマで区切る、*は全てのカラムの意)
FROM
テーブル名
[WHERE 絞り込み条件]
[GROUP BY グループ化列リスト]
[HAVING 集計後の結果に対する絞り込み条件]
[ORDER BY 並び替え列リスト]
ポイント
・SELECT句とFROM句は必須
・[]で囲んだ句は任意
・句の順序は守る必要がある
ORDER BY句
並び替え
ASC:昇順
DESC:降順
・ASCは省略可能(デフォルトがASC)
・SELECT句で使用していない列でも使用可能
・ORDER BY句がない場合、順序は保証されない
WHERE句
WHERE
条件式
比較演算子
記述 | 意味 |
---|---|
= | 等しい |
!= | (Oracle)等しくない |
<> | (MySQL)等しくない |
>= | 以上 |
<= | 以下 |
> | より大きい |
< | より小さい |
論理演算子
記述 | 意味 |
---|---|
AND | かつ |
OR | または |
BETWEEN演算子
[NOT] BETWEEN a AND b :a以上b以下の範囲内/範囲外
IS NULL演算子
IS [NOT] NULL :NULL値である/でない
IN演算子
[NOT] IN (値リスト):値リスト内のいずれかと等しい/いずれとも等しくない
※NULLを含んだ値も出力する
LIKE演算子
[NOT] LIKE :文字パターンと一致する/一致しない
特殊文字
意味 | |
---|---|
% | 任意の1文字以上の文字列 |
_ | 任意の1文字 |
LIKE パターン文字列 ESCAPE エスケープ文字($など)で
エスケープ文字を指定して検索できる
NOT NULL制約
テーブル設計でカラムに指定できる制約
NOT NULL制約指定されているカラムにはNULL値を設定できない
主キー、外部キー
主キー=PK(プライマリキー)とも
テーブルごとに設定されている、テーブル内である1つの行を一意に特定できる値を持つカラム、または複数行の組み合わせ
・NULL値を設定できない(必ずなにかしらの値が入る)
・一意でなければならない(重複してはならない)
・一般的に主キーの値は変更してはならない
外部キー=FK(フォーリンキー)とも
自分のテーブルを他のテーブルと関連付けるためにあらかじめ設定する列
・外部キーは参照先のテーブルの主キー列または一意キー列と同じ項目となる
・外部キーはNULL値も設定できる
ER図
論理名称:設計=利用者向けの名称
物理名称:実装=コンピュータ向けの名称
結合
関連する複数のテーブルから1つの結果票を得る仕組み
SELECT
テーブル名.カラム名
FROM
テーブル名1
~ JOIN テーブル名2
ON テーブル名1.カラム名 = テーブル名2.カラム名
※3つ以上の場合は「~ JOIN」~「ON」を繰り返す
種類 | 説明 |
---|---|
INNER JOIN | 内部結合 |
JOINしたテーブルのうち左と右の両方にデータがある場合のみ取得 | |
LEFT OUTER JOIN | 左外部結合 |
左にあれば取得する、右がない場合は足りない項目をNULLで埋めて取得 | |
RIGHT OUTER JOIN | 右内部結合 |
LEFT OUTER JOINの逆、使用頻度は低い |
別名(エイリアス)
キーワード | 使い方 | 意味 |
---|---|---|
AS | a AS b | aをbとみなす |
※空白スペースを入れることでASを省略可能
※列も表も別名をつけられるが、表別名を設定するともとの名前をSQL内で使えなくなる
グループ関数
行のまとまりごとに情報を算出する関数
記述 | 意味 |
---|---|
SUM | 各行の値の合計を求める |
AVG | 各行の値の平均を求める |
MAX | 各行の値の最大値を求める |
MIN | 各行の値の最小値を求める |
COUNT | 行数をカウントする |
グループ関数名(列名)
注意点
・SELECT句とHAVING句でのみ使用可能
・SUMとAVGは列にNULLが含まれる場合DBMSごとに挙動が異なる場合がある
・グループ関数のネストは。Oracleのみ二重までネスト可能だが、MySQLではエラーとなる
DISTINCT、ALL
記述 | 意味 |
---|---|
DISTINCT | 重複行を除外する |
ALL | 重複行を含める、省略可能 |
※SELECT句の後ろに書く
GROUP BY句
指定した列をグループ化する
一般的にはグループ関数と併用
注意点
・GROUP BY句で指定していない列名をSELECT句で使用するのはNG(グループ関数はOK)
⇒Oracleだとエラー、MySQLだとエラーにならないが出力結果が不確定
HAVING句
集計した行に対して絞り込みを行う
GROUP BY句と併せて使用することが多い
(単独でも使用可能)
注意点
・実務での使用頻度は低い
・使用禁止のプロジェクトもある