◆SQL
命令
INSERT INTO テーブル名(カラム名1, カラム名2)
VALUES(値1, 値2)
カラム名1と値1が対応。
レコード(行データ)を追加するので、必須カラムがないとエラーになる。
UPDATE テーブル名
SET カラム名 = 値, カラム名 = 値
WHERE ~
DELETE FROM テーブル名
WHERE (NOT) ~
CREATE TABLE テーブル名
(
カラム名 NUMBER(3) ※整数桁、少数桁
カラム名 VARCHAR2(50) ※2バイト文字、カッコ内はバイト数
)
DROP TABLE テーブル名
テーブル削除
DESC テーブル名
テーブル構造を取得
関数
行インデックスを取得
カラム名 BETWEEN 数字1 AND 数字2
カラムが数字1から数字2の間の場合…WHERE句内で使う
CASE カラム名
WHEN 比較する値 THEN 値
END
カラム名 LIKE '%値%'
年月の差(月単位)
12で割れば年
日付取得
WHERE カラム名 IN (値, 値)
INNER JOIN
最初のテーブル(左) 【TBL_CHARACTOR】
ID |
NAME |
SEX |
1 |
左 翔太郎 |
男 |
2 |
園咲 来人 |
男 |
3 |
園崎 若菜 |
女 |
4 |
須藤 霧彦 |
男 |
5 |
園咲 冴子 |
女 |
結合するテーブル(右) 【TBL_BAG】
ID |
NAME |
COLOR |
CHARA_ID |
1 |
お買い物バッグ |
黄色 |
3 |
2 |
リュック |
黒 |
1 |
3 |
ティファニーのバッグ |
ゴールド |
5 |
4 |
コーチのバッグ |
ピンク |
3 |
5 |
スーツケース |
シルバ |
4 |
◆行が減る条件
※紐づくIDが結合したテーブルに存在しない
SELECT
T_CHR.ID AS C_ID
, T_CHR.NAME AS C_NAME
, T_BAG.ID AS B_ID
, T_BAG.NAME AS B_NAME
FROM
TBL_CHARACTOR T_CHR
INNER JOIN TBL_BAG T_BAG
ON T_BAG.CHARA_ID = T_CHR.ID
WHERE
T_CHR.SEX = '男'
◆結果
C_ID |
C_NAME |
B_ID |
B_NAME |
1 |
左 祥太郎 |
2 |
リュック |
4 |
須藤 霧彦 |
5 |
スーツケース |
◆解説
WHERE句で今度は男だけで絞ってるので、
そのままだと祥太郎と来人と霧彦さんの3人の筈です。
でも、結果は2行しかありません。
右にくっついてるテーブル(TBL_BAG)に
来人のIDの2がありません。
来人はバッグは持ってないようです。
なので、来人の行がなくなってしまっています。
◆行が増える条件
※紐づくIDを複数持つテーブルを結合する
SELECT
T_CHR.ID AS C_ID
, T_CHR.NAME AS C_NAME
, T_BAG.ID AS B_ID
, T_BAG.NAME AS B_NAME
FROM
TBL_CHARACTOR T_CHR
INNER JOIN TBL_BAG T_BAG
ON T_BAG.CHARA_ID = T_CHR.ID
WHERE
T_CHR.SEX = '女'
※さっきのSQL文を条件女のみにしただけです。
◆結果
C_ID |
C_NAME |
B_ID |
B_NAME |
3 |
園崎 若菜 |
1 |
お買い物バッグ |
3 |
園崎 若菜 |
4 |
コーチのバッグ |
5 |
園崎 冴子 |
3 |
ティファニーのバッグ |
◆解説
WHERE句で女だけに絞ってるので、
そのままだと若菜と冴子の二人だけです。
でも、結果は3行あります。
これは右にくっついてるテーブル(TBL_BAG)の
紐づくID(INNER JOINのONで指定したID)に
同じのが複数あるからです。
若菜は「お買い物バッグ」と「コーチのバッグ」の
二つを持っています。
すると、2行必要なので左のテーブルの値は
コピーされて全て同じデータが入ります。
◆結合して増えて減ってるテーブルサンプル
SELECT
T_CHR.ID AS C_ID
, T_CHR.NAME AS C_NAME
, T_BAG.ID AS B_ID
, T_BAG.NAME AS B_NAME
FROM
TBL_CHARACTOR T_CHR
INNER JOIN TBL_BAG T_BAG
ON T_BAG.CHARA_ID = T_CHR.ID
※条件を消したので、↑のふたつの結果が一緒になっただけです。
◆結果
C_ID |
C_NAME |
B_ID |
B_NAME |
1 |
左 祥太郎 |
2 |
リュック |
3 |
園崎 若菜 |
1 |
お買い物バッグ |
3 |
園崎 若菜 |
4 |
コーチのバッグ |
4 |
須藤 霧彦 |
5 |
スーツケース |
5 |
園崎 冴子 |
3 |
ティファニーのバッグ |
◆解説
さっきと一緒ですが、
来人はTBL_BAGにIDがないので、データ(行)がありません。
若菜はTBL_BAGに2箇所にIDがあるので、
データ(行)が2件あります。
結果、データが1減って1増えてるので行数は同じでした。
分かりやすい参考ページ
SQLを早くする
最終更新:2013年02月15日 10:42