0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PostgreSQLの基本部分についてまとめた

Posted at

はじめに

こちらの記事の続きで書いてます。

DBは自分で触って覚えてくのが一番だと聞いたので、
おうちクラウドのVMにDBコンテナを立てて、触りながら学習した記録です。

DB操作

DB接続

DBサーバーから接続する場合は、-hオプションは省略可能

# psql -U {DBユーザー名} -d {DB名} -h {DBサーバーのホスト名}

DB作成

# CREATE DATABASE {DB名};

TABLE操作

# CREATE TABLE Shohin(shohin_id CHAR(4) NOT NULL,
  shohin_mei VARCHAR(100) NOT NULL,
  shohin_bunrui VARCHAR(32) NOT NULL,
  hanbai_tanka INTEGER,
  shiire_tanka INTEGER,
  torokubi DATE,
  PRIMARY KEY (shohin_id));
CREATE TABLE

データ型の種類

型種別 備考
INTEGER 数値型 整数のみ
CAHR 文字列型 固定長の文字列型。CHAR(10)のように、カッコ内に文字列の最大長を入れる。CHAR(10)に'abc'という文字を入れた場合、残りの7枠は半角スペースで埋められる。
VARCHAR 文字列型 可変長文字列型。VARCHAR(10)に'abc'という文字を入れた場合でも、半角スペースで埋められない。
DATE 日付型 年月日を入れる

制約

制約 備考
NOT NULL 空データはNG
PRIMARY KEY 主キーに設定。PRIMARY KEY({カラム名})で、指定するカラム名を主キーに設定する。

テーブル削除

# DROP TABLE {テーブル名};

列を追加する

# ALTER TABLE {テーブル名} ADD COLUMN {列の定義};

列を削除する

# ALTER TABLE {テーブル名} DROP COLUMN {列名};

テーブルへのデータ入力

トランザクションを開始する。
COMMITもしくはROLLBACKが行われるまで、入力を制限する。

# BEGIN TRANSACTION;
BEGIN

データ(レコード)を登録する。

# INSERT INTO Shohin VALUES ('0001', 'Tシャツ', '衣服', 1000, 500, '2009-09-20');
INSERT 0 1

登録を確定してトランザクションを解除する。

# COMMIT;
COMMIT

登録を確定しない場合で、トランザクションを解除する場合。

# ROLLBACK
ROLLBACK

テーブル検索

SELECT文

テーブル内のデータを検索するときは、SELECT文を使います。
SELECT句やFROM句は、大文字で記載してますが、小文字でも動きます。
SELECT * FROM {テーブル名};で検索します。

# SELECT * FROM shohin;
 shohin_id |   shohin_mei   | shohin_bunrui | hanbai_tanka | shiire_tanka |  torokubi  
-----------+----------------+---------------+--------------+--------------+------------
 0001      | Tシャツ        | 衣服          |         1000 |          500 | 2009-09-20
 0002      | 穴あけパンチ   | 事務用品      |          500 |          320 | 2009-09-11
 0003      | カッターシャツ | 衣服          |         4000 |         2800 | 

*の箇所にカラム名を入れることで、必要なカラムだけを取り出すことができます。
カラム名は、カンマ区切りで複数指定できます。
カラムの順番は自由に変えられます。

# SELECT shohin_mei, shohin_bunrui FROM shohin;
   shohin_mei   | shohin_bunrui 
----------------+---------------
 Tシャツ        | 衣服
 穴あけパンチ   | 事務用品
 カッターシャツ | 衣服

# SELECT shohin_bunrui, shohin_mei FROM shohin;
 shohin_bunrui |   shohin_mei   
---------------+----------------
 衣服          | Tシャツ
 事務用品      | 穴あけパンチ

カラムに別名をつけることもできる。
日本語を使う場合は、ダブルクォーテーションで囲う。

# SELECT shohin_mei AS name, shohin_bunrui AS "分類" FROM shohin;
      name      |     分類     
----------------+--------------
 Tシャツ        | 衣服
 穴あけパンチ   | 事務用品
 カッターシャツ | 衣服

DISTINCT句

重複削除した検索をすることができます。
複数カラムを選択することもできます。

# SELECT DISTINCT shohin_bunrui FROM shohin;
 shohin_bunrui 
---------------
 キッチン用品
 衣服
 事務用品
(3 rows)

WHERE句

条件式を書くことができます。
SELECT ~ FROM ~ WHERE {条件式};
以下の例は、商品分類カラムが「衣服」のデータのみに絞って検索しています。

# SELECT * FROM shohin WHERE shohin_bunrui='衣服';
 shohin_id |   shohin_mei   | shohin_bunrui | hanbai_tanka | shiire_tanka |  torokubi  
-----------+----------------+---------------+--------------+--------------+------------
 0001      | Tシャツ        | 衣服          |         1000 |          500 | 2009-09-20
 0003      | カッターシャツ | 衣服          |         4000 |         2800 | 
(2 rows)

比較演算子

比較演算子 内容 
= 等しい
<> 等しくない
>= 以上
<= 以下
> より大きい
< より小さい

論理演算子

WHERE句の条件を否定したり複数合致させたい場合などで使います。

# SELECT * FROM shohin WHERE shohin_bunrui='衣服' AND hanbai_tanka > 1000;
 shohin_id |   shohin_mei   | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi 
-----------+----------------+---------------+--------------+--------------+----------
 0003      | カッターシャツ | 衣服          |         4000 |         2800 | 
(1 row)
論理演算子 内容
AND 複数条件に合致する場合
OR いずれかの条件が合致する場合
NOT 条件に合致しない場合

参考書籍

こちらの書籍で勉強させていただきました。
PostgreSQLメインで書かれてる&初学者向けの私にちょうどいい書籍でした。

データの集約

COUNT関数でレコード数を数える。
カッコの中でカラムを指定すると、指定したカラムのデータがNULLのものは除外される。

# SELECT COUNT(*) FROM shohin;
 count 
-------
     8
(1 row)

# SELECT COUNT(shiire_tanka) FROM shohin;
 count 
-------
     6
(1 row)

SUM関数で合計値を出す。

# SELECT SUM(shiire_tanka) FROM shohin;
  sum  
-------
 12210
(1 row)

その他にも数値計算する関数があります。

関数 内容
COUNT レコード数
SUM 合計
AVG 平均
MAX 最大
MIN 最小

分類ごとにカウントする

GROUP BY句を使うことで分類ごとに集約できます。

# SELECT shohin_bunrui, COUNT(*) FROM shohin GROUP BY shohin_bunrui;
 shohin_bunrui | count 
---------------+-------
 キッチン用品  |     4
 衣服          |     2
 事務用品      |     2
(3 rows)

ソート(並べ替え)する

ORDER BY句で並び替えをすることができます。

# SELECT * FROM shohin ORDER BY hanbai_tanka DESC;
 shohin_id |   shohin_mei   | shohin_bunrui | hanbai_tanka | shiire_tanka |  torokubi  
-----------+----------------+---------------+--------------+--------------+------------
 0006      | 圧力鍋         | キッチン用品  |         6800 |         5000 | 2009-09-20
 0003      | カッターシャツ | 衣服          |         4000 |         2800 | 
 0004      | 包丁           | キッチン用品  |         3000 |         2800 | 2009-01-15
ソートキー 内容
ASC 昇順で並べる。ソートキーを省略した場合は昇順となる。
DESC 降順で並べる。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?