OSS-DB Silver
OSS-DBは色々なものがありますが、商用データベースとの連携に優れ、エンタープライズシステムでも多くの導入実績があるのが「PostgreSQL」です。
OSS-DB Silverは「PostgreSQL 11」に関する能力を問う資格です。
試験で問われる範囲は以下の通りです。
分類 | 説明 |
---|---|
一般知識(16%) | OSS-DBの一般的特徴、リレーショナルデータベースに関する一般知識 |
運用管理(52%) | インストール、ツールの使い方、設定ファイル、バックアップ方法、運用管理作業 |
開発/SQL (32%) | SQLコマンド、組み込み関数、トランザクションの概念 |
これらから50題出題され、65%程度の正答率で合格となります。
今回は開発/SQLの中から組み込み関数と演算子について説明します。
Sec 9. 組み込み関数と演算子
集約関数
集約関数を使用した結果は単純には検索条件に使うことはできない。
→副問合せを使うか、HAVINGを利用するcount()
: 条件に合致する結果のレコード数を求める場合に使用するSELECT count(列名) FROM テーブル名 WHERE 検索条件;
NULLレコードは無視される
例)
SELECT 部署, count(*) AS 人数 FROM member GROUP BY 部署; 部署 | 人数 ------+------ 総務 | 1 開発 | 3 営業 | 2 (3 rows) # 集約関数を条件にする場合はHAVINGを使用する SELECT 部署, count(*) AS 人数 FROM member GROUP BY 部署 HAVING (count(*) >= 3); 部署 | 人数 ------+------ 開発 | 3 (1 row)
sum()
,avg()
: 合計、平均SELECT sum(列名) FROM テーブル名 WHERE 検索条件; SELECT avg(列名) FROM テーブル名 WHERE 検索条件;
min()
,max()
: 最小、saidaiSELECT min(列名) FROM テーブル名 WHERE 検索条件; SELECT max(列名) FROM テーブル名 WHERE 検索条件;
比較演算子
- 等号、不等号は通常通り使用可能
- 等しくない場合は、
<>
または!=
を使用する。 - NULLの判定には、
X IS NULL
またはX IS NOT NULL
を使用する
算術関数と演算子
abs(X)
: 絶対値div(y, x)
: y/xの整数商mod(y, x)
: y/x の剰余sqrt(x)
: xの平方根power(x, y)
: xのy乗ceil(x)
: xより小さくない最小の整数floor(x)
: xより大きくない最大の整数round(x)
: xの小数点を四捨五入- 第二引数に、小数点を四捨五入する桁を設定可能
trunc(x)
: xの小数点を切り捨て- 第二引数に、小数点を切り捨てる桁を設定可能
log(x)
: xの常用対数pi()
: 円周率random()
: 0.0<= x < 1.0 の乱数値例えば1から100までのランダムな整数値を使いたい場合は、
SELECT (random() * 100)::int % 100;
とする。
|/
: 平方根||/
: 立方根@
: 絶対値計算の優先度
- 累乗(
^
) - 乗算(
*
)、除算(/
)、剰余(%
) - 加算(
+
)、減算(-
) - その他の演算子
- 不等号系
- 累乗(
文字列演算子と述語
||
演算子 : 文字列の結合文字列 || 文字列;
LIKE
: 文字列に対する前方/後方/中間一致検索を行うSELECT 列名 FROM テーブル名 WHERE 列名 LIKE '条件';
- 条件では、
%
(任意の文字列)、_
(任意の1文字)が使用可能。
- 条件では、
SIMILAR TO
: 正規表現を使ったパターンマッチング文字列 SIMILAR TO ’条件';
- 条件に正規表現のメタ文字が使用可能
~
演算子 : 文字列のパターンマッチングを行う(文字列の一部であっても真となる)# 正規表現に一致する場合に真となる(大文字小文字は区別される) 文字列 ~ 正規表現 # 正規表現に一致する場合に真となる(大文字小文字は区別されない) 文字列 ~* 正規表現 # 正規表現に一致しない場合に真となる(大文字小文字は区別される) 文字列 !~ 正規表現 # 正規表現に一致しない場合に真となる(大文字小文字は区別されない) 文字列 !~* 正規表現
文字列関数
leength()
/char_length()
: 文字数の取得octet_length()
: 文字列のバイト数substring()
: 文字列の抽出substring(文字列 [from 開始位置] [for 文字数])
upper()
: 大文字に変換lower()
: 小文字に変換repeat()
: 文字列の繰り返しreplace()
: 文字列の置換replace(文字列, 置換前文字列, 置換後文字列)
lpad()
: 指定文字で文字列の先頭を埋めるlpad(文字列, 文字数, [文字])
- 指定の文字数になるまで、文字列の先頭に文字を埋め込む
- 文字を省略した場合は、半角の空白が埋め込まれる
rpad()
: 指定文字で文字列の末尾を埋めるtrim()
: 文字列の先頭/末尾/前後の指定文字を削除trim([leading | trailing | both] [文字] from 文字列)
- 削除する文字を省略した場合は空白が削除される
ltrim()
: 文字列の先頭の指定文字を削除rtrim()
: 文字列の末尾の指定文字を削除
日付/時刻の関数と演算子
現在の日付/時刻を取得する
now()
: タイムスタンプの取得current_timestamp
: タイムスタンプの取得localtimestamp
: タイムスタンプの取得localtime
: 時刻の取得current_time
: 時刻の取得current_date
: 日付の取得
↑まではトランザクション開始時の日付/時刻を取得する関数
statement_timestamp()
: SQLの開始時の日付/時刻を取得する
→1つのSQL内で複数回実行しても、そのSQL内では常に同じ値が返るclock_timestamp()
: 関数が実行された時点の日付/時刻を取得する
age()
: 2つのtimestamp型の引数をとり、第一引数から第二引数の減算を行うage(timestamp値, timestamp値)
extract()
,date_part()
: 部分フィールドの取得extract(field from [timestamp値 | interval値]) date_part('field', [timestamp値 | interval値])
- fieldにはhour, monthなどが指定可能
date_trunc()
: 指定した精度で日付/時刻情報を取得するdate_trunc(field, timestamp値)
数値に加筆を行う場合は、日や時間の間隔を表す
INTERVAL
型を使用する。INTERVAL
は「'数値 単位'::interval」で表現する。指定可能な単位はyear, month, dayなど。
データ型書式設定関数
to_char()
to_char(データ, パターン)
- パターンは文字列として記述するため、シングルクォートで囲む
例)
SELECT to_char('20211219 113000'::timestamp, 'YYYY-MM-DD HH24:MI:SS'); # to_char #--------------------- # 2021-12-19 11:30:00 SELECT to_char('2021-10-31'::timestamp, 'Mon DD YYYY'); # to_char #------------- # Oct 31 2021
to_date()
/to_timestamp()
: 文字列型を日付型やタイムスタンプ型に変更するto_date(文字列, パターン) to_timestamp(文字列, パターン) to_timestamp(数値) -- 数値はUNIXタイム
to_number()
: 文字列を数値型に変換することが可能to_number(文字列, パターン);ß
コメント