Open10

postgres

aGlnYWtpbg==aGlnYWtpbg==
SELECT 
   first_name || ' ' || last_name,
   email
FROM 
   customer;

||(結合演算子)を使ったカラム同士を連結できるらしい、、、
初めて知った。。。。

aGlnYWtpbg==aGlnYWtpbg==

カラムのエイリアス名にスペースを入れたい場合は、"でエイリアス名をくくってデータを取得する

SELECT
    first_name || ' ' || last_name "full name"
FROM
    customer;
aGlnYWtpbg==aGlnYWtpbg==

length式を使用することで、文字列の長さを取得できる

SELECT 
	first_name,
	LENGTH(first_name) len
FROM
	customer
ORDER BY 
	len DESC;
aGlnYWtpbg==aGlnYWtpbg==

order by区ではnull first or null lastが選択できる

  • nulls firstはソートしたときにnullが最初に来る
  • nulls lastはソートしたときにnullが最後に来る

nulls first

SELECT num
FROM sort_demo
ORDER BY num NULLS FIRST;

nulls last

SELECT num
FROM sort_demo
ORDER BY num NULLS LAST;
aGlnYWtpbg==aGlnYWtpbg==

distinct_demoデータ作成

create table distinct_demo (
id serial NOT NULL primay key,
bcolor varchar,
fcolor varchar
);

insert into distinct_demo (bcolor, fcolor) values ('red', 'red'),('red', 'red'),('red', NULL),(NULL, 'red'),('red', 'green'),('red', 'blue'),('green', 'red'),('green', 'blue'),('green', 'green'),('blue', 'red'),('blue', 'green'),('blue', 'blue');

distinct句は指定したカラムが重複ないようにできる
複数カラムが指定された場合は、複数カラムで重複がないようにする

SELECT
	DISTINCT bcolor,
	fcolor
FROM
	distinct_demo
ORDER BY
	bcolor,
	fcolor;
aGlnYWtpbg==aGlnYWtpbg==

distnct on (column_a) column_b

重複グループの一番上のデータを取得する。

SELECT
	DISTINCT ON (bcolor) bcolor,
	fcolor
FROM
	distinct_demo 
ORDER BY
	bcolor,
	fcolor;
aGlnYWtpbg==aGlnYWtpbg==

ロールについて


ロールの概念には、"ユーザ"という概念と"グループ"という概念が含まれます。
ロールは、その設定方法に応じて、データベースユーザ、またはデータベースユーザのグループとみなすことができます。
ロールはデータベースオブジェクト(例えばテーブル)を所有することができます。
ロールは、どのオブジェクトに誰がアクセスできるかを制御するために、それらのオブジェクトに対しての権限を他のロールに割り当てることができます。
更に、ロールのメンバ資格を他のロールに与えることもできます。
そのため、メンバとなったロールは別のロールに割り当てられた権限を使用することができます。


昔は 「ユーザ」と「グループ」で分離されていたが、現在は 統一して「ロール」に集約された。
→ ロールはユーザとしても、グループ(メンバ)としても使うことができる。

http://dbnote.web.fc2.com/note_u_00_role_and_user_and_group.html