LoginSignup
0
0

More than 3 years have passed since last update.

PostgreSQLのSQLテンプレ

Last updated at Posted at 2019-06-24

間違い等ががあれば、指摘お願いします。

データベースの操作

作成

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版 ゼロからはじめるデータベース操作

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0