「SQL」の編集履歴(バックアップ)一覧はこちら
「SQL」(2013/02/15 (金) 10:42:22) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*◆&this_page()
#contents()
----
**命令
-INSERT
INSERT INTO テーブル名(カラム名1, カラム名2)
VALUES(値1, 値2)
カラム名1と値1が対応。
レコード(行データ)を追加するので、必須カラムがないとエラーになる。
-UPDATE
UPDATE テーブル名
SET カラム名 = 値, カラム名 = 値
WHERE ~
-DELETE
DELETE FROM テーブル名
WHERE (NOT) ~
-CREATE
CREATE TABLE テーブル名
(
カラム名 NUMBER(3) ※整数桁、少数桁
カラム名 VARCHAR2(50) ※2バイト文字、カッコ内はバイト数
)
-DROP
DROP TABLE テーブル名
テーブル削除
-DESC
DESC テーブル名
テーブル構造を取得
-UNION
-INSERTSECT
-MINUS
**関数
-ROW_COUNT() と ROWNUM
行インデックスを取得
-BETWEEN
カラム名 BETWEEN 数字1 AND 数字2
カラムが数字1から数字2の間の場合…WHERE句内で使う
-CASE
CASE カラム名
WHEN 比較する値 THEN 値
END
-LIKE
カラム名 LIKE '%値%'
-MONTHS_BETWEEN
年月の差(月単位)
12で割れば年
-SYSDATE
日付取得
- IN
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を早くする
[[参考>>http://www.geocities.jp/mickindex/database/db_optimize.html]]
*◆&this_page()
#contents()
----
**命令
-INSERT
INSERT INTO テーブル名(カラム名1, カラム名2)
VALUES(値1, 値2)
カラム名1と値1が対応。
レコード(行データ)を追加するので、必須カラムがないとエラーになる。
-UPDATE
UPDATE テーブル名
SET カラム名 = 値, カラム名 = 値
WHERE ~
-DELETE
DELETE FROM テーブル名
WHERE (NOT) ~
-CREATE
CREATE TABLE テーブル名
(
カラム名 NUMBER(3) ※整数桁、少数桁
カラム名 VARCHAR2(50) ※2バイト文字、カッコ内はバイト数
)
-DROP
DROP TABLE テーブル名
テーブル削除
-DESC
DESC テーブル名
テーブル構造を取得
-UNION
-INSERTSECT
-MINUS
**関数
-ROW_COUNT() と ROWNUM
行インデックスを取得
-BETWEEN
カラム名 BETWEEN 数字1 AND 数字2
カラムが数字1から数字2の間の場合…WHERE句内で使う
-CASE
CASE カラム名
WHEN 比較する値 THEN 値
END
-LIKE
カラム名 LIKE '%値%'
-MONTHS_BETWEEN
年月の差(月単位)
12で割れば年
-SYSDATE
日付取得
- IN
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増えてるので行数は同じでした。
[[分かりやすい参考ページ>>http://homepage1.nifty.com/rucio/main/VBdotNet/Database/Database10.htm]]
**SQLを早くする
[[参考>>http://www.geocities.jp/mickindex/database/db_optimize.html]]