https://dotinstall.com/lessons/basic_postgresql
- cmd上で
psql -d postgres -U postgres
create database <database-name>;
drop database <database-name>;
alter database <before> rename to <after>;
- 予約語のある名前は使えない
select * from pg_database;
\l
でも可
\c <database-name>
select now();
create table <database-name> (<column-name> <column-type> [constraint-type], ...);
drop table <database-name>;
alter table <before> rename to <after>;
- 型(type)の例:
- 数値: integer(int), real, serial
- 文字: char(5), varchar(255), text
- 真偽: boolean
TRUE
FALSE
t
f
- 日付: date, time, timestamp
- その他: https://www.postgresql.jp/document/9.4/html/datatype.html
- 制約(constraint)の例:
- not null
- 空の値はエラー
- unique
- 重複した値を許さない
- check()
check(length(body)) > 5
: 5文字以上でないとエラー
- default
- デフォルト値を決定
- primary key
- not null + unique
- not null
- 補足
(created timestamp default current_timestamp)
とすると現在時刻が入る
\dt
\t <table-name>
\i <filename>.sql
- ログイン時のパスが参照される
-- comment
/*
comments
*/
insert into <table-name> (<column-name>, ...) values (<insert-value>, ...), ...;
-- select * from hoge;
\x
- カラムが多くてターミナルをはみ出すようなときに使う
select (<column-name>, ...) from <table-name>;
... where <condition>;
... where <condition> AND <condition> OR <condition>;
-- select * from <table-name> where <column-name> > 5.0;
- 演算子の例
>
<
<=
>=
=
!=
,!=
===<>
AND
OR
[NOT] BETWEEN
IS [NOT] [...]
DISTINCT FROM
UNKNOWN
TRUE
FALSE
DISTINCT FROM
NULL
- 文字列で使える:
like
%
_
@
like '%i'
: 最後にi
があるlike 'a_c'
:_
の部分以外一致
... order by <column-name> [asc/desc], ...;
-- select * from <table-name> order by <column-name_1>, <column-name_2> desc;
... limit <top-length>;
-- select * from <table-name> order by <column-name> limit 10;
... offset <index>;
-- select * from <table-name> order by <column-name> limit 5 offset 20;
select count(*) from <table-name>;
select distinct <column-name> from <table-name>;
select sum(<column-name>) from <table-name>;
select max(<column-name>) from <table-name>;
select min(<column-name>) from <table-name>;
select avg(<column-name>) from <table-name>;
select <column-name_1>, sum(<column-name_2>) from <table-name> group by <column-name_1>;
select <cn1>, sum(<cn2>) from <table-name> group by <cn1> having sum(<cn2>) > 20.5;
select <before> as <after> from <table-name>;
- selectにかかわらず様々な場所で使える
-- 文字数
select length(<column-name>) from <table-name>;
-- 文字列の連結表示
select concat(<column-name>, ...) from <table-name>;
-- select concat(<column-name_1>, '_', <column-name_2>, '!') from <table-name>;
-- 文字列抽出
select substring(<column-name>, <from>, <to>) from <table-name>;
-- ランダムな数
select random();
update <table-name> set <column-name> = <value> where <condition>;
-- update <table-name> set <column-name_1> = 100 where <column-name_2> = "blue";
-- update <table-name> set A = A + 100 where B = "blue" or C = FALSE;
delete from <table-name> where <condition>;
-- delete <table-name> where <column-name> = "blue";
alter table <table-name> add <column-name> <column-type>;
alter table <table-name> drop <column-name>;
alter table <table-name> rename <before> to <after>;
alter table <table-name> alter <column-name> type <column-type>;
create index <index-name> on <table-name>(<column-name>);
drop index <index-name>;
- 検索は早くなるが、更新時などには遅くなる。
- ドットをつければいい
select <table-name_1>.<column-name_1>, <table-name_2>.<column-name_2> from <table-name_1>, <table-name_2> where ...;
-- whereでselectを短くできる
select <T1>.<column-name_1>, <T2>.<column-name_2> from <table-name_1> <T1>, <table-name_2> <T2> where ...;
-- select f.one, s.two from first f, second s where ...;
- 一覧表示:
\dv
create view <view-name> as <...>;
-- create view rnd as select random();
select * from <view-name>;
drop view <view-name>;
alter view <before> rename to <after>;
begin;
/*
ここにいろいろな処理を書く
*/
commit;
- 実行中に取り消す場合は
rollback;
する。