エンジニアになったのでSQL基礎から勉強してます
リレーショナル・データベース
リレーショナル・データベース
・リレーショナル・データベース : 2 次元の表 と、表を関連付けているリレーション の集合
物理的ポインタを使用せずに、データにアクセスすることができる。
演算子のセットが使用される。
・DBMS : データベース管理システム
・データベースの型 : 階層型/ ネットワーク型/ リレーショナル型/ オブジェクト・リレーショナル型
・SQL文 : データベース内の情報の操作
SQL文の種類
データ操作文 ( DML/Data Manipulate Language )
データベース に格納されている表 内の行 を検索、新規の行の挿入/既存の行の更新/不要な行の削除
・SELECT
・INSERT
・UPDATE
・DELETE
・MERGE
データ定義文 ( DDL/Data Definition Language )
表のデータ構造の作成/変更/削除
即時にデータベースに影響を与え、データ・ディクショナリ に情報を記録
・CREATE
・ALTER
・DROP
・RENAME
・TRUNCATE
データ制御文 ( DCL/Data Control Language )
データベースに対するアクセス権限の付与/取消
・GRANTE
・REVOKE
トランザクション制御
DML 文で処理された変更
・COMMIT
・ROLLBACK
・SAVEPOINT
SQL*Plus
SQL*Plus は、SQL 文を認識し、実行するために Oracle Server に送信する
データの検索
SELECT文 : 表内の列を選択して表示
DISTINCT : 重複行を排除
結合演算子
|| を使用
列を別の列と結合する
日付、および文字のリテラルは、' ' で囲む必要がある
eg)
SELECT sno, sname || ' is from ' || area AS "Born From"
FROM student;
SNO Born From
---------- ------------------------------
1 Y_YAMADA is from TOKYO
2 N_TANAKA is from SAITAMA
3 I_SUZUKI is from KANAGAWA
4 H_SATO is from TOKYO
5 N_TAKADA is from TOKYO
6 N_SANO is from HOKKAIDO
7 D_MATSUDA is from KANAGAWA
8 A_SHIMADA is from TOKYO
行の制限
WHERE
・文字列、および日付値は ' ' で囲む
・比較演算子も使える
eg)
SELECT sno, sname, area
FROM student
WHERE area = 'TOKYO';
SNO SNAME AREA
---------- -------------------- -------------------
1 Y_YAMADA TOKYO
4 H_SATO TOKYO
5 N_TAKADA TOKYO
8 A_SHIMADA TOKYO
BETWEEN
・AND の前に下限、後に上限
IN
・値リストのいずれかと一致する行を検索
eg)
SELECT sno, sname, area
FROM student
WHERE area IN( 'TOKYO', 'HOKKAIDO' );
SNO SNAME AREA
---------- -------------------- --------------------
1 Y_YAMADA TOKYO
4 H_SATO TOKYO
5 N_TAKADA TOKYO
6 N_SANO HOKKAIDO
8 A_SHIMADA TOKYO
LIKE 条件(ワイルドカード検索)
記号 | 意味 |
---|---|
% | 0 文字以上の任意の文字を表す。 |
_ | 1 文字の任意の文字を表す。 |
eg)
SELECT sno, sname
FROM student
WHERE sname LIKE 'N%';
SNO SNAME
---------- --------------------
2 N_TANAKA
5 N_TAKADA
6 N_SANO
ESCAPE
% や _ をリテラルとして検索対象にする
IS NULL
SELECT sno, sname, tel
FROM student
WHERE tel IS NULL;
SNO SNAME TEL
---------- -------------------- --------------------
2 N_TANAKA
3 I_SUZUKI
6 N_SANO
7 D_MATSUDA
論理条件
AND, OR
SELECT sno, sname, area, score
FROM student
WHERE area = 'TOKYO'
OR score >= 50;
SNO SNAME AREA SCORE
---------- -------------------- -------------------- ----------
1 Y_YAMADA TOKYO 75
2 N_TANAKA SAITAMA 60
4 H_SATO TOKYO 49
5 N_TAKADA TOKYO 95
6 N_SANO HOKKAIDO 78
7 D_MATSUDA KANAGAWA 63
8 A_SHIMADA TOKYO 56
NOT
BETWEEN条件、IN条件、LIKE条件、IS NULL条件などの比較条件 といっしょに使用
SELECT sno, sname, area
FROM student
WHERE area NOT IN( 'TOKYO', 'HOKKAIDO' );
SNO SNAME AREA
---------- -------------------- --------------------
2 N_TANAKA SAITAMA
3 I_SUZUKI KANAGAWA
7 D_MATSUDA KANAGAWA
行のソート
ORDER BY
・デフォルトでは小さい順に、NUllは最後
・降順にしたい時はDESCを最後につける
SELECT 列名
FROM 表名
ORDER BY 列名 ;
集合演算子
UNION
2つのSELECT文の結果を連結し、重複を省いた結果を返す
UNION ALL
2つのSELECT文の結果を連結し、重複も含めて結果を返す
INTERSECT
2つのSELECT文から共通に選択されたものを取り出し、重複を除き結果を返す
MINUS
1つ目のSELECT文から、2つ目のSELECT文の結果と一致したものを除き返します。
SELECT sno FROM student
UNION
SELECT cno FROM class;
データの操作
INSERT
行の挿入
INSERT INTO 表名( 列リスト )
VALUES( 値リスト );
DEFAULT
あらかじめ列にデフォルト値として定義された値を VALUES 句で指定
INSERT INTO student ( sno, sname, area, city, score, class )
VALUES ( 11, 'H_TAKAHASHI', DEFAULT, 'SETAGAYA', 91, 99 );
UPDATE
行の更新
UPDATE 文で更新する行を特定するには、WHERE 句の条件式を使用
UPDATE 表名
SET 列名 = 値
WHERE 条件式;
DELETE
行の削除
DELETE FROM 表名
WHERE 条件式
MERGE
条件付きの挿入や更新を同時に行う
MERGE INTO 表名
USING 表名
ON ( 結合条件 )
WHEN MATCHED THEN
UPDATE SET 列名 = 値
WHEN NOT MATCHED THEN
INSERT ( 列リスト )
VALUES( 値リスト );
データベーストランザクション
サーバーへの接続、コミット、ロールバックをしてから次にコミット、ロールバックをするまでの一連の処理を表す。
一貫性が保証される
COMMIT
変更を確定
ROLLBACK
保留中のすべての変更を破棄
SAVEPOINT
現行トランザクションのなかにセーブポイントを作成
読み取り一貫性
最後のコミット時点でのデータを表示する
ロック
同時に同じとこに書き込みしないようにする為に