基礎知識
・RDB(リレーショナル(連携・結合)データベース)
・RDBS:RDSを管理する
⇒結合条件:何を軸として、何を結合させるか
複数組み合わせてDBとなる。番号を指定する。
[用語]
| 主キー | 内容が重複することはない。外←主 |
| 外部キー | 他のDB(テーブル)と連携 |
| エイリアス | 列に対し、別途名前を付けられる(DEPT NO→部署番号) |
| Unicode | UTF8 国際規定(3バイトで表現) |
| Sjis | 日本用(2バイトで表現)。Sjisで作成した文章はUTF8で表示できない |
| サプレス | 抑圧、抑制 |
| リレーション | テーブルを結びつける |
SQL について
・SQL:問い合わせ言語
アプリ上からの指示、Actionが多い。(例:Google 検索指示)
(定期的)自動更新される。
1:テーブルを作成
2:コマンドで指定
~
結果(テーブル)挿入される
[SQL コンソール画面]
| -> | 入力が続いている状態 |
| ; | 最後、必ずつけて締める |
[JSON 構文]
⇒複数のテーブルを連結させるために、Fromで複数のテーブルを指定
⇒(,)でテーブルを区切る
JOINでも可能だが、JOINとUsingで結合条件を指定する。
[コマンド]
| \c | エラーを出さずにコマンドの終了 |
| * | テーブル全体を表示する。(列名に使用する) |
| != | ノットイコール |
| and , or , not | |
| ワイルドカード | 「_」、「%」 |
| use “テーブル名” | テーブルをひらく |
| -u ユーザ名 -p | -p 入力後、パスワード |
| ~ order by 列1 列2 | 列1を優先に列1,列2共に並び変えられる |
| %A%:検索 | Aから始まる |
| between | 範囲指定 |
Select 文
※LIKE演算子:検索系
単一関数
※select文は2つの表を対象にできる
| select CEIL(-14.8) | -14 |
| select floor(-14.8) | -15 |
| select mod(8,3) | 2 |
| select power(4,3) | 4の3乗 |
| select ROUND ( m , n ) | 戻り値 |
| select TRUNCATE | 切り捨て値 |
| select SQRT(16); | 4 平方根 |
文字関数
| select LENGTH(‘文字列’); | char の長さ(文字列)をバイト数に戻す(空白を含めて何バイトか) ※win = shift JIS:1文字に対するデータ量 |
| select INSTR(‘char1′,’char2’); | char1に対してchar2を調べる。 霊:INSTR(‘田中 一’,’中’)→2 |
| select SUBSTR(‘文字列’,n,m); | n番目からm文字の長さを抜き出す。 例:SUBSTR(‘char’,2,3);→har |
| select UPPER | 小文字→大文字 |
| select LOWER | 大文字→小文字 |
| select CONCAT(‘char1′,’char2’); | 文を合体。 例:CONCAT(‘TOM’,’CAT’);→TOMCAT |
| select RPAD(‘char1′,n,’char2’); | char1にn桁になるようにchar2を右に追加 RPAD(‘12345′,’8′,’$’)→12345$$$ |
| select LPAD(‘char1′,n,’char2’); | char1にn桁になるようにchar2を左に追加 LPAD(‘12345′,’8′,’$’)→$$$12345 |
| select TRIM(both from ‘ KEN ‘) | ブランクが消える。 LEADING:左、TRAIRING:右、BOTH:両方 |
| select REPLACE(‘char1′,’n’,’char2′); | char1内のnをchar2に変換する |
| > ANY(select 列 from 表 where 条件); | ※ANY いづれかよりも大きい(最も小さなものより大きい) 後者の答えを前者に返す |
LIKE演算子
where:グループ関数と併用不可
※Having:グループしたものに条件付け
| select ~where 列 between A and B | A以上B以下 |
| select ~where 列 not between A and B | [A以上B以下]以外 |
| select ~ where 列 in (‘A’,’B’,’C’,’D’) | A,B,C,Dを取り出す |
| select ~ where 列 LIKE ‘J%’; | 列内のJから始まるもの |
| select ~ where 列 LIKE ‘____s’; | 列から最後「s」で終わるもの |
| select ~ where 列 LIKE ‘%K%’; | Kを含むもの検索 |
| select ~ where 列 not LIKE ‘%K%’; | |
| select ~ where 列 LIKE ‘%K%’; |
日付関数
| select date_format (列,’%d日%m月%y年’)from テーブル; | 年月日の表示(~日、~月、~年) |
| select now | 現在の日時 |
| select CURDATE | 日程のみ |
| select DATE_ADD(CURDATE(),Interval 2 MONTH) | DATE_ADD:2カ月後を表示 DATE_SUB:2か月前を表示 |
| Interval ‘3 2’ YEAR_MONTH | 3年2か月 |
| select 列, IFNULL (列,0) from テーブル; | 指定した列内のNULLを0にする |
| select NULL IF (列,0) from テーブル; | 指定した列内の0はNULLになる |
グループ関数
平均や合計などの集計時に使用。
| select AVG(列) from テーブル; | 平均 |
| select COUNT(列) from テーブル; | 列内の行数を数える。 |
| select COUNT (distinct 列)~ | 重複するものを除く |
| select MAX (列)~ | 列内で一番高い(低い)値。MAX or MIN |
| select sum (列)~ | 合計 |
| select 列,列, MAX(列) from emp group by 列,列 | group by:列内の~ごとに 1つのグループとして反映させられる。 |
集合演算子
UNION ALL:重複を含む
UNION:重複を除く
例:select deptno from dept union all select deptno from emp;
表の結合:等価結合
・自然結合:重複する列を除く
・列内の細分化(?):group by
| select 列名 from 表1,表2 where 表1.列名 = 表2.列名 | ※表1,2=別名 |
| select 列名 from 表1 JOIN 表2 USING(列); | 列:共通 |
| select 列 from 表 1 Natural JOIN 表2; | 自然結合 |
| select 列 from 表 1 cross JOIN 表2; | 直積結合 |
| select 列 from 表 1 JOIN 表2 ON 結合条件 | ON句 |
| select 列 from 表 1 Left outer JOIN 表2 on 結合条件; | 外部結合。(※Left or Right) |
(,)Where とJOIN ON について
select e.ename , d, dname ,d.deptno …(★1)
★1:以下、同じ結果
・from dept D join emp E where e.deptno = d.deptno;
・from dept D ,empE
select e.ename , e.sal, d.dname , g.grade …(★2)
★2
・from emp E, dept D ,salagradeG where 条件1 and 条件2
・from emp E, join dept D on 条件1 join salagradeG on 条件2
⇒「テーブル名」指定、「結合条件1」「結合条件2」
⇒「テーブル名」「結合条件1」、「テーブル名」「結合条件2」
※読み、追加しやすい
※
(,)区切り⇒古い書き方
JOIN:標準⇒結合条件:ON句
OK句の後にwhere可能
テーブル上操作
[テーブル作成例]
Create table SALESMAN (empno integer(4),name char(10)~);
※integer:数字数
Desc テーブル名:テーブルの状況確認
[データの変更(行の削除)]
DELETE from 表名 where 削除対象の行の抽出する条件
⇒sal = 600 ;など
・まとめて項目削除
→~where 項目名 in (項目1,項目2,項目3);
※表の削除
DROP TABLE:やり直し可
TRUNCATE TABLE:やり直し不可
[副問い合わせ]
後文の応えを前文に出力
・select DNAME from dept where Deptno = (select Deptno from emp where ENAME = “ADAMS”)
・select ename , sal from emp where sal > (select AVG(sal) from emp);
※where が sal を指定
select ename , job from emp where job = (select job from emp where ename = ‘ALLEN’);
⇒JOBを絞ってenameを導く
DEPT表からEMP表のADAMSが所属するDNAMEを表示
⇒ADAMのDNAMEが知りたい
select dname from dept
where deptno =
(select deptno from emp where ename = ‘ADAMS’); ※条件
※deptno:何と関連付けるか
[データ操作(指定して変更)言語]
・INSERT:行の追加
・VALUES:値の指定
例:
INSERT INTO 表名(列名1,列名2…)values(値1,値2,…);
⇒どの列に何を追加するか
→Insert into 表名 values (追加内容);
⇒行の追加。指定されていない列はNULLが入る
[UPDATE文 + where 句]
例:UPDATE EMP SET JOB = ‘SAKESMAN’ where ENAM = ‘GRANT’;
⇒’ENAME’がGRANTはJOBをSALESMANに変える
UPDATE 表名 SET 列名1=値1 , 列名2=値2
where 対象とする行の条件
例:update EMP set sal = sal *1,5 where ENAME = ‘KENNEDAY’;
[トランザクション関係]
・自動コミット:トランザクション処理を自動的に行う
START TRANSACTION:トランザクション開始(実行しないと反映されない)
Set Autocommit=0:自動コミット無効
Set Autocommit=1:自動コミット有効
※トランザクション確定:COMMIT
※トランザクション取り消し:ROLL BACK
⇒COMMIT後にROLLBACKはできない
「セーブポイント」を作成してt戻れるように
savepoint 命名⇒Roll back 命名

