間違い等ががあれば、指摘お願いします。
データベースの操作
作成
CREATE DATABASE データベース名;
消去
DROP DATABASE データベース名;
テーブルの操作
作成
CREATE TABLE テーブル名(
列名1 列の型 列の制約,
列名2 列の型 列の制約,
...
テーブルの制約1, テーブルの制約2, ... );
消去
DROP TABLE テーブル名;
名前の変更
ALTER TABLE テーブル名 RENAME TO 変更後のテーブル名;
列の操作
追加
ALTER TABLE テーブル名 ADD COLUMN 列の名前 列の型 列の制約;
消去
ALTER TABLE テーブル名 DROP COLUMN 列の名前;
行の操作
追加
INSERT INTO テーブル名 (列1, 列2, ...) VALUES (値1, 値2, ...);
消去
DELETE FROM テーブル名
WHERE 条件;
すべてを消去
DELETE FROM テーブル名;
または、
TRUNCATE テーブル名;
TRUNCATE
コマンドは、必ずすべての行を消去する。また、DELETE
コマンドと違い、細かい制御はできない。が、その分、DELETE
コマンドより早い。
DELETE
文というのは、DML文の中でもかなり実行に時間がかかる処理であるため、すべての行を消去していい場合はTRUNCATE
コマンドを使いましょう。
更新
UPDATE テーブル名
SET 列名 = 式;
WHERE 条件;
取り出す
取り出す
SELECT 列名1, 列名2, ...
FROM テーブル名;
すべてを取り出す
SELECT *
FROM テーブル名;
別名をつけて、取り出す
SELECT 列名1 AS 別名,
列名2 AS 別名,
...
FROM テーブル名;
重複行を除いて、取り出す(DISTINCT)
SELECT DISTINCT 列名1, 列名2, ...
FROM テーブル名;
条件を指定して、取り出す(WHERE)
SELECT 列名1, 列名2, ...
FROM テーブル名
WHERE 条件式;
集約関数を使って、取り出す
テーブルの行数を数える(COUNT)
SELECT COUNT(*)
FROM テーブル名:
NULLを除外して、テーブルの行数を数える(COUNT)
SELECT COUNT(列名)
FROM テーブル名:
値の重複業を除外して、テーブルの行数を数える(COUNT)
SELECT COUNT(DISTINCT 列名)
FROM テーブル名:
合計を求める(SUM)
SELECT SUM(列名)
FROM テーブル名:
平均を求める(AVG)
SELECT AVG(列名)
FROM テーブル名:
最大値を求める(MAX)
SELECT MAX(列名)
FROM テーブル名:
最小値を求める(MIN)
SELECT MIN(列名)
FROM テーブル名:
グループに分けて、取り出す
SELECT COUNT(列名)
FROM テーブル名
GROUP BY 列名1, 列名2, ...;
グループに対して条件を指定して、取り出す
SELECT 列名1, 列名2, ...
FROM テーブル名
GROUP BY 列名1, 列名2, ...
HAVING グループの値に対する条件
検索結果を並び替えて、取り出す
SELECT 列名1, 列名2, ...
FROM テーブル名
ORDER BY 並び替えの基準となる列1, 並び替えの基準となる列2, ... [ASC/DESC]
名前 | 機能 |
---|---|
ASK | 昇順 |
DESC | 降順 |
コメント
1行コメント
-- コメント文
複数コメント
/* コメント文
コメント文 */
蛇足
SQLの命令の種類
DDL(Data Definition Language)
DDL(データ定義言語)は、データを格納する入れ物であるデータベースやテーブルなどを作成したり消去したりします。DDLに分類される命令は次のとおりです。
CREATE:データベースやテーブルなどを作成する。
DELETE:データベースやテーブルなどを消去する。
ALATER:データベースやテーブルなどの構成を変更する。
DML(Data Manipulation Language)
DML(データ操作言語)は、テーブルの行を検索したり変更したりします。DMLに分類される命令は次のとおりです。
SELECT:テーブルから行を検索する
INSERT:テーブルに新規行を登録する
UPDATE:テーブルの行を更新する
DELETE:テーブルの行を消去する
DCL(Data Control Language)
DCL(データ制御言語)は、データベースに対して行った変更を確定したり取り消したりします。そのほか、RDBMSのユーザーがデータベースにあるもの(テーブルなど)を操作する権限の設定も行います。DCLに分類される命令は次のとおりです。
COMMIT:テーブルに対して行った変更を確定する
ROLLBACK:テーブルに対して行った変更を取り消す
GRANT:ユーザーに操作の権限を与える
REVOKE:テーブルに対して行った変更を確定する
命名規則
SQLでは、大文字・小文字は区別されません。SELECT
お書いてもselect
と書いても同じように解釈されます。テーブル名や列名などについても同様です。
ただし、テーブルに登録されているデータについては、大文字・小文字が区別されます。例えば、「Computer」と登録したデータを「COMPUTER」や「computer」と同じように扱かったりはしません。
NULLの扱い
演算におけるNULLの扱い
「NULLを含む演算」には注意してください。次の演算の結果はどうなると思いますか?
① 5 + NULL
② 210 * NULL
③ NULL / 3
④ NULL / 0
正解は「全部NULL」です。NULLを含んだ計算は、問答無用でNULLになるのです。このルールは④のNULLを0で割る演算にも適用されます。通常、「5 / 0」のように0で割ろうとするとエラーになりますが、NULLを0で割る場合だけはエラーにならずNULLになります。
とはいえ、NULLを0と同じとみなして、 5 + NULL = 5という結果がほしいケースはあります。そういうときはCOALESCE関数を使いましょう。COALESCE関数の使い方はこちら。
比較演算子におけるNULL
name | age
------+-----
alis | NULL
bob | 32
zeke | 40
mark | 22
上のテーブルに、次のような条件で行を取り出します。
① age >= 30
↓結果
name | age
------+-----
bob | 32
zeke | 40
② age <> 22
name | age
------+-----
bob | 32
zeke | 40
いずれの結果には、ageがNULLである「alis」の行は含まれていませんでした。この行は年齢(age)が不明(NULL)なので、「age >= 20
」や「age <> 22」などの判定ができないのです。また、苦しまぎれにage = NULL
という条件式を書いても、「alis」の行は取り出せません。
SQLにはNULLかどうか判別するための専用の演算子IS NULL
が用意されてます。NULLの行を選択したいときは、age IS NULL
という条件式を書きましょう。NULLでない行を取り出したいときはIS NOT NULL
という演算子を使います。
論理演算子におけるNULL
NULLの論理値は「UNKNOWN」になります。なぜそうなるのか気になる方は、こちらを読んでください。
参考文献
・SQL 第2版 ゼロからはじめるデータベース操作