LoginSignup
9
5

More than 5 years have passed since last update.

【SQL】PostgreSQLで新規のスキーマ、テーブルを作成しCSVデータを読み込む方法だよい。

Last updated at Posted at 2019-02-26

概要

某データ分析会社による一流のデータサイエンティストを養成するのためのPostgreSQL研修 

よぉ、@74kenshiroだよい。
久々にSQLの話だよい。
今回は基本中の基本、今更聞けないスキーマとテーブルの作成方法だよい。
データベースはPostgreSQLだよい。
まだ慣れてない初心者はストックして何度も練習すると良いよい。

目次
0.スキーマ、テーブルとは
1.スキーマを作る
2.空のテーブルを作る
3.空のテーブルにCSVデータを移す
4.データの確認をする
補足.データ型一覧

この記事で分かること

スキーマの作成方法
テーブルの作成方法
CSVデータをテーブルに移す方法
PostgreSQL10.5のデータ型一覧

データ概要

CSVの元データ「staff_list」
(Excelで表示)

image.png

0.スキーマ、テーブルとは(ざっくり過ぎて逆にわかる説)

OSで例えると
スキーマ ➡ フォルダ
テーブル ➡ ファイル
スキーマの中にスキーマは作れない!!
同じテーブル名でもスキーマが違えば保存出来る!!やったね!!
こういう構造なのでテーブルを呼び出すときは
FROM スキーマ名. テーブル名 これマメな!!!
公式DOC10.5スキーマについて
公式DOC10.5テーブルについて
image.png

1.スキーマを作る

スキーマを作る(例としてスキーマ名はdata)
CREATE SCHEMA data; 

2.カラムだけの空のテーブルを作る

予めExcel上でカラムとデータ型とカンマの表を作成するとコードの作成がラク。
データ型は主に文字型、日付け型、数値型があって、今回はVARCHAR,DATE,INT
各データ型の詳細については記事の最後にまとめておくよい。

image.png
基本構文CREATE TABLE スキーマ名.テーブル名(カラム名 データ型,カラム名 データ型);
かっこ内にコピペするよい。

空のテーブルを作る
CREATE TABLE data.staff_list( 
  "社員番号" VARCHAR --文字型
  , "部署" VARCHAR --文字型
  , "入社日" DATE --日付け型
  , "生年月日" DATE --日付け型
  , "属性" VARCHAR --文字型
  , "攻撃力" INT --整数型
  , "防御力" INT --整数型
); 

THE 小ネタ:マウスで選択した状態で、Shift + 2を入力するとダブルクォーテーションで囲めるよい(シングルクォーテーションも可能)。 
image.png

空のテーブルが作成出来ているか確認するよい。

SELECT
    * 
FROM
  data.staff_list; 

空のテーブルの完成だよい。
(NULL)ってのはデータが存在しないって意味だよい。

image.png

3.空のテーブルにデータを移す

1.元データのファイルの種類をCSV UTF-8(コンマ区切り)(*.csv)に変換して保存しておくよい。

image.png

2.コピー構文を入力して、データを移すよい。

コピー構文(CSV)
COPY スキーマ名.テーブル名
FROM
  'ファイルパス¥ファイル名.csv' ENCODING 'utf8' CSV HEADER DELIMITER ','; 
コピー構文(TSV)
COPY スキーマ名.テーブル名
FROM
  'ファイルパス¥ファイル名.tsv' ENCODING 'utf8' CSV HEADER DELIMITER E'\t'; 

ENCODING:ファイルがencoding_nameで符号化されていることを指定するよい。
'utf8':文字コードの指定(ファイルと同じにする)
CSV:ファイルの種類。と見せかけてTSV形式でもCSVと入力するよい!!!
HEADER:ファイルの1行名(ヘッダー)を無視する命令
DELIMITER:区切り文字の指定 CSVはカンマ区切りなので、’,’と入力。 TSVの場合はE'\t'と入力
image.png

テーブルを出力して、コピー出来ているか確認よい。

テーブルを出力する
SELECT
    * 
FROM
  data.staff_list; 

出力結果 でけたよい。
image.png

4.データの確認をする

データのレコードが何千何万とある場合は、メモリをめっちゃ喰うからCOUNTで行数を確認するよい。

全レコード数を出力
SELECT
    COUNT (*) 
FROM
  data.staff_list; 

出力結果
image.png

データがダブってないかも確認するよい。

DISTINCTでレコードをユニークにし、COUNTで行数を出力
SELECT
    COUNT (*) 
FROM
  (SELECT DISTINCT * FROM data.staff_list) AS t1; 

出力結果 さっきの全レコード数と同じならダブりデータは無いってことよい。
image.png

5.最後に

この記事がイイと思ったら素直にイイねするよい。
エンジニアとして最もやっちゃならねぇガン無視ストック、鉄の掟は破っちゃいけねぇよい。

補足:PostgreSQL10.5 データ型一覧

数値型

型名 格納サイズ 説明 範囲
smallint 2バイト 狭範囲の整数 -32768から+32767
integer、int 4バイト 典型的に使用する整数 -2147483648から+2147483647
bigint 8バイト 広範囲整数 -9223372036854775808から+9223372036854775807
decimal 可変長 ユーザ指定精度、正確 小数点前までは131072桁、小数点以降は16383桁
numeric 可変長 ユーザ指定精度、正確 小数点前までは131072桁、小数点以降は16383桁
real 4バイト 可変精度、不正確 6桁精度
double precision 8バイト 可変精度、不正確 15桁精度
smallserial 2バイト 狭範囲自動整数 1から32767
serial 4バイト 自動増分整数 1から214748364
bigserial 8バイト 広範囲自動増分整数 1から9223372036854775807
money 8バイト 貨幣金額 -92233720368547758.08 から +92233720368547758.07

日付/時刻データ型

型名 格納サイズ 説明 最遠の過去 最遠の未来 精度
timestamp [ (p) ] [ without time zone ] 8 バイト 日付と時刻両方(時間帯なし) 4713 BC 294276 AD 1マイクロ秒
timestamp [ (p) ] with time zone 8バイト 日付と時刻両方、時間帯付き 4713 BC 294276 AD 1マイクロ秒
date 4バイト 日付(時刻なし) 4713 BC 5874897 AD 1日
time [ (p) ] [ without time zone ] 8バイト 時刻(日付なし) 00:00:00 24:00:00 1マイクロ秒
time [ (p) ] with time zone 12バイト 時刻(日付なし)、時間帯付き 00:00:00+1459 24:00:00-1459 1 マイクロ秒
interval [ fields ] [ (p) ] 16バイト 時間間隔 -178000000年 178000000年 1マイクロ秒

文字型

型名 説明
character varying(n), varchar(n) 上限付き可変長
character(n), char(n) 空白で埋められた固定長
text 制限なし可変長
9
5
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
9
5