LoginSignup
1
2

More than 3 years have passed since last update.

SQL入門1

Posted at

エンジニアになったのでSQL基礎から勉強してます:thumbsup_tone1:

リレーショナル・データベース

:star:リレーショナル・データベース

・リレーショナル・データベース : 2 次元の表 と、表を関連付けているリレーション の集合
物理的ポインタを使用せずに、データにアクセスすることができる。
演算子のセットが使用される。

・DBMS : データベース管理システム

・データベースの型 : 階層型/ ネットワーク型/ リレーショナル型/ オブジェクト・リレーショナル型

・SQL文 : データベース内の情報の操作

SQL文の種類

:star:データ操作文 ( DML/Data Manipulate Language )

データベース に格納されている表 内の行 を検索、新規の行の挿入/既存の行の更新/不要な行の削除
・SELECT
・INSERT
・UPDATE
・DELETE
・MERGE

:star:データ定義文 ( DDL/Data Definition Language )

表のデータ構造の作成/変更/削除
即時にデータベースに影響を与え、データ・ディクショナリ に情報を記録
・CREATE
・ALTER
・DROP
・RENAME
・TRUNCATE

:star:データ制御文 ( DCL/Data Control Language )

データベースに対するアクセス権限の付与/取消
・GRANTE
・REVOKE

:star:トランザクション制御

DML 文で処理された変更
・COMMIT
・ROLLBACK
・SAVEPOINT

SQL*Plus

SQL*Plus は、SQL 文を認識し、実行するために Oracle Server に送信する

データの検索

:sunny:SELECT文 : 表内の列を選択して表示

:sunny:DISTINCT : 重複行を排除

結合演算子

:sunny:|| を使用
列を別の列と結合する

:exclamation:日付、および文字のリテラルは、' ' で囲む必要がある

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

行の制限

:sunny: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

:sunny:BETWEEN
・AND の前に下限、後に上限

:sunny: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

:sunny:ESCAPE
% や _ をリテラルとして検索対象にする

:sunny: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

論理条件

:sunny: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

:sunny: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

行のソート

:sunny:ORDER BY
・デフォルトでは小さい順に、NUllは最後
・降順にしたい時はDESCを最後につける

SELECT 列名
FROM 表名
ORDER BY 列名 ;

 

集合演算子

:sunny:UNION
2つのSELECT文の結果を連結し、重複を省いた結果を返す

:sunny:UNION ALL
2つのSELECT文の結果を連結し、重複も含めて結果を返す

:sunny:INTERSECT
2つのSELECT文から共通に選択されたものを取り出し、重複を除き結果を返す

:sunny:MINUS
1つ目のSELECT文から、2つ目のSELECT文の結果と一致したものを除き返します。

SELECT sno FROM student
UNION
SELECT cno FROM class;

データの操作

:sunny:INSERT
行の挿入

INSERT INTO 表名( 列リスト )
VALUES( 値リスト );

:sunny: DEFAULT
あらかじめ列にデフォルト値として定義された値を VALUES 句で指定

INSERT INTO student ( sno, sname, area, city, score, class )
VALUES ( 11, 'H_TAKAHASHI', DEFAULT, 'SETAGAYA', 91, 99 );

:sunny: UPDATE
行の更新
UPDATE 文で更新する行を特定するには、WHERE 句の条件式を使用

UPDATE 表名
SET 列名 = 値
WHERE 条件式;

:sunny: DELETE
行の削除

DELETE FROM 表名
WHERE 条件式

:sunny: MERGE
条件付きの挿入や更新を同時に行う

MERGE INTO 表名
USING 表名
ON ( 結合条件 )
WHEN MATCHED THEN
UPDATE SET 列名 = 値
WHEN NOT MATCHED THEN
INSERT ( 列リスト )
VALUES( 値リスト );

データベーストランザクション

サーバーへの接続、コミット、ロールバックをしてから次にコミット、ロールバックをするまでの一連の処理を表す。
一貫性が保証される

:sunny: COMMIT
変更を確定

:sunny: ROLLBACK
保留中のすべての変更を破棄

:sunny: SAVEPOINT
現行トランザクションのなかにセーブポイントを作成

読み取り一貫性

最後のコミット時点でのデータを表示する

ロック

同時に同じとこに書き込みしないようにする為に

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2