データベース操作言語とは
基本的に英語の文法と同じ気がする。
やりたいこと宣言 + 欲しい値 + データベースの指定 + オプション(+ オプション);
■基本の操作言語 CRUD(クラッドと呼ぶらしい)
Create C:INSERT 新規作成
Read R:SELECT 検索
Update U:UPDATE 更新
Delete D:DELETE 削除
SELECT文
SELECT フィールド名 FROM DB名.テーブル名
上記のDB名は省略可
USE DB名; と宣言すればOK
SELECT フィールド名 FROM テーブル名
なので、単にフィールド表示させるだけの場合、
やり方が3つある。
①データベース名を指定して操作
②USE データベース名でデータベース宣言
③最初ログインするときにデータベース名も宣言
ちな、「間違ったァァァ」ってときは、
Ctrl+C でキャンセルできる(¥cエンターでも可)
改行もメモ帳感覚でOK
->こんな記号でるけどSQL文が完結していないよ、という意味
※さすがに単語の途中で改行するとエラー
/*コメントアウトもできるよ。*/
ちなみに操作言語を知らないユーザに操作させるためのインターフェイスをUIと呼ぶらしい。
ボタンをつくるのがデザイナー、ボタンが押された後の処理をつくるのがプログラマー。
わかってたつもりだけど、わかってなかったよね。
UIっていう言葉とふわっとした概念だけ先に知ってたよね。
正式にはグラフィックユーザインタフェース、略してGUI(グイ)って呼んだりするらしい。
<WHERE句>
データベースの中の、このテーブルの中でって指定をする
<ORDER BY句>
降順昇順の指定
複数指定もできる。勝手にかつ検索になっている気がする。
例
SELECT company_id,post_id,person_id,person_lname,person_fname
FROM m_person
WHERE company_id=3
ORDER BY post_id ASC;
<演算子/算術演算子>
idとかの数字を算術で計算して出すことができる。
抽選とかで使えそう。
例
SELECT company_id * 10,company_name
FROM m_company
WHERE company_id = 2;
<論理演算子>
かつ もしくは は除く の3つの検索方法
例
SELECT company_id,post_id,person_id,person_lname,person_fname
FROM m_person
WHERE company_id = 3 AND post_id = 3;
<IN演算子>
どれかが一致してる値を出す
WHERE company_id IN(2,5);
ORでも書ける
WHERE company_id = 2 OR company_id = 5;
<BETWEEN演算子>
範囲指定して値を出す
WHERE company_id BETWEEN 4 AND 8;
ANDだけでも書ける
WHERE company_id >= 4 AND <= 8;
<LIKE演算子>
検索したい単語が入っているものすべて出す
WHERE company_name LIKE '%AAA%'
A% Aで始まる
%A Aで終わる
%A% Aが含まれる
B%A% Bで始まりAが含まれる
<集約関数>
表計算のSUMやらCOUNTの関数も使える。
文字列連結もできるので、関数探せばいろいろやれる。
<GROUP BY句>
SUMやらCOUNTで出したい値を2つグループ化できる。
SELECTとGROUP BYは必ず一致させる
SELECT area_id,area_name,COUNT(*)
FROM m_company
GROUP BY area_id, area_name;
<HAVING句>
SELECT文の実行順序
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
順序をミスするとエラー。
テーブル結合
これやらないとデータベースは始まらない。
<内部結合>
SELECT t1.フィールド //出したい値
FROM テーブルA t1 //基本のテーブル
JOIN テーブルB t2 //くっつけるテーブル
ON t1.共通フィールド = t2.共通フィールド //条件 これは被りを出したい場合
正式にはINNER JOIN だが、省略可。
<外部結合>
LEFT OUTER JOIN //基本のテーブルの左側(1つめ)を選択
RIGHT OUTER JOIN //基本のテーブルの右側(2つめ)を選択
副問い合わせ
FROM句やWHERE句に()でSELECT文を入れ子できる機能のこと。
FROMでレコードを絞り込んだりグループ化したものを検索対象として指定したり、
WHEREで複数レコードを対象に比較演算したりできる。
INSERT文
テーブルにレコードを追加。
例
INSERT INTO m_post(post_id,post_name)
VALUES(1, '部長');
DELETE文
指定したレコードを削除。
例
DELETE FROM m_podt //テーブル指定
WHERE post id = 1; //条件
テーブルは1つしか指定できない。
WHERE句を書き忘れると、
レコード全部吹っ飛ぶ。悪夢。
LIKE句と組み合わせれば、検索して消すことも可能。
☆彡nullがないか調べるとき
SELECT レコード名
FROM テーブル名
WHERE レコード名 IS NULL;
UPDATE文
指定したレコードを更新。
WHERE句を書き忘れると
レコード全部上書きされる。悪夢再び。
例
UPDATE m_post //テーブル指定
SET post_name = '課長' //値を設定
WHERE post_id = 2; //条件
複数フィールドを指定する場合は
SET句でカンマ区切り。
SET post_name = “課長”,post_id = 1
みたいな感じ。
いろいろ試してみるにはテスト環境必須。
データ制御言語
DataControlLanguage
Oracleなど一部のDBMSではデータ制御言語という定義は存在せず、SQLは「トランザクション制御文」などと呼ばれている。
トランザクションは初期値1で、アクティブ状態。
まずは無効化。
/*トランザクション状態確認*/
SELECT @@autocommit;
/* autocommitの無効化 */
SET autocommit=0;
<制約>
CREATE TABLE DB名.テーブル名(
フィールド名 データ型 PRIMARY KEY, //UNIQUE + NOT NULL
フィールド名 データ型 NOT NULL //空っぽは許されない
フィールド名 データ型 UNIQUE //ダブりが許されない
フィールド名 データ型 DEFAULT 0 //値を指定しない場合に代入
PRIMARY KEY(フィールド名, フィールド名) //テーブル内で唯一の主キーを設定
FOREIGN KEY(フィールド名) REFFERENCES テーブル名(フィールド名) //親データを参照する
);
<ビュー>
通常のSELECT文は使い切りだが
ビューとして登録すればすぐ同じ条件で出せる。
SELECT * FROM ビューの名前;
削除
DROP VIEW ビューの名前;