先日、こちらの書籍でSQL文を勉強してみた。
SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)
- 作者:ミック
- 発売日: 2016/06/17
- メディア: 単行本(ソフトカバー)
その際にPostgreSQL・SQLite・Excel ADODB(ADODB経由でExcelをデータベースとして扱う)でのSQL構文の使用可・不可を記録したので備忘録として公開。
!!は構文を表す
構文 | PostgreSQL | SQLite | Excel ADODB |
---|---|---|---|
Create Database | !! FILENAME | .Open FILENAME.db | テーブル作成時に同時作成 |
Create Table | !! TABLENAME (列名 データ型 列制約,…,テーブル制約…) | !! TABLENAME (列名 データ型 列制約,…,テーブル制約…) | !! TABLENAME (列名 データ型,…) |
Drop Table:テーブル削除 | !! TABLENAME | !! TABLENAME | !! TABLENAME(シートは消えずデータ削除のみ |
Alter Table:列追加 | !! TABLENAME Add 列名 データ型 | !! TABLENAME Add 列名 データ型 | !! TABLENAME Add 列名 データ型 |
Alter Table:列削除 | !! TABLENAME drop 列名 データ型 | -(列削除不可) | !! TABALENAME Add 列名 データ型 |
Insert Into:列名指定 | !! TABLENAME(列名…) values(列1…) | !!!! TABLENAME(列名…) values(列1…) | !! TABLENAME(列名…) values(列1…) |
Insert Into:列名省略 | !! TABLENAME values(列1…列の順番通りに) | !!!! TABLENAME values(列1…列の順番通りに列数分必要) | !! TABLENAME values(列1…列の順番通りに) |
select:全列抽出 | !! * from TABLENAME | !! * from TABLENAME | !! * from TABLENAME |
select:列指定 | !! 列名1,… from TABLENAME | !! 列名1,… from TABLENAME | !! 列名1,… from TABLENAME |
AS:列別名 | select 列名 as 別名,… from TABLANAME | select 列名 as 別名,… from TABLANAME | select 列名 as 別名,… from TABLANAME |
定数 | select '文字',数字,'日付' from TABLENAME | select '文字',数字,'日付' from TABLENAME | select '文字',数字,'日付' from TABLENAME |
重複行を省く | select distinct 列名,… from TABLENAME | select distinct 列名,… from TABLENAME | select distinct 列名,… from TABLENAME |
コメントアウト:1行 | --コメント | --コメント | 'コメント |
コメントアウト:複数行 | /コメント/ | /コメント/ | 'コメント |
日付比較 | 比較演算子 yyyy-mm-dd | 比較演算子 yyyy-mm-dd | 比較演算子 #yyyy-mm-dd# |
NULL抽出 | where 列名 is NULL | where 列名 is NULL | where 列名 is NULL |
NULL以外抽出 | where 列名 is not NULL | where 列名 is not NULL | where 列名 is not NULL |
集約関数 | COUNT SUM AVG MAX MIN | COUNT SUM AVG MAX MIN | COUNT SUM AVG MAX MIN |
重複なしの件数 | select count(distinct 列名) from TABLENAME | select count(distinct 列名) from TABLENAME | - |
GROUP BY | where 条件 !! 列名 | where 条件 !! 列名 | where 条件 !! 列名 |
デフォルト制約 | Creat Table TABLENAME(列名 データ型 Default デフォルト値) | Creat Table TABLENAME(列名 データ型 Default デフォルト値) | - |
デフォルト値 | insert into TABLENAME(列名…) values(DEFAULT) | insert into TABLENAME(列名…) values('') | - |
Delete:テーブル内のデータ削除 | !! from TABLENAME | !! from TABLENAME | -(削除ができない) |
Truncate:テーブル内の全データ削除 | !! TABLENAME | - | - |
Begin Transaction | !! | !! | - |
Commit Transaction | !! | !! | - |
Creat View | !! VIEWNAME(列名,…) select文 | !! VIEWNAME(列名,…) select文 | - |
サブクエリ | select * from (select文) as 別名 | select * from (select文) as 別名 | select * from (select文) as 別名 |
スカラ・サブクエリ | 単一の戻り値となるサブクエリ | 単一の戻り値となるサブクエリ | 単一の戻り値となるサブクエリ |
相関サブクエリ | |||
ABS(数値):絶対値 | !! | !! | !! |
MOD(被除数,除数):剰余 | !! | !! | 被除数 mod 除数 |
ROUND(対象数,丸め桁数) | !! | !! | !! |
文字列1||文字列2:文字列結合 | !! | !! | 文字列1+文字列2 or 文字列1 & 文字列2 |
LENGTH(文字列) | !! | !! | LEN(文字列) |
LOWER(文字列) | !! | !! | LCASE(文字列) |
UPPER(文字列) | !! | !! | UCASE(文字列) |
REPLACE(対象文字列,置換前文字列,置換後文字列) | !! | !! | !! |
SUBSTRING(対象文字列 FROM 切り出し開始位置 FOR 切り出し文字数) | !! | SUBSTR(対象文字列,切り出し開始位置,切り出し文字数) | mid(対象文字列,切り出し開始位置,切り出し文字数) |
CURRENT_DATE | !! | !! | DATE() |
CURRENT_TIME | !! | TIME(CURRENT_TIME,'localtim') | TIME() |
CURRENT_TIMESTAMP | !! | DATETIME(CURRENT_TIMESTAMP,'localtime') | NOW() |
EXTRACT 日付要素 FROM 日付:日付要素の切り出し | !! | STRFTIME(日付要素,日付,'localtime') | format(日付要素,日付) |
CAST(変換前の値) as 変換するデータ型 | !! | !! | - |
日付型への変換 | Cast(変換前の値 as date) | date(変換前の値) | cdate(変換前の値) |
COALESCE(データ1,…):NULLを値へ変換 | !! | !! | IIF(ISNULL(列),Nullの場合,Null以外 |
WHERE 列 LIKE %検索文字列%:中間一致検索 | !! | !! | !! |
WHERE 列 LIKE _検索文字列_:中間一致検索 | !! | !! | !! |
BETWEEN 列 下限 and 上限 | !! | !! | !! |
WHERE 列 IS NULL | !! | !! | !! |
WHERE 列 IS NOT NULL | !! | !! | !! |
WHERE 列 IN (条件1,…) | !! | !! | !! |
WHERE 列 NOT IN (条件1,…) | !! | !! | !! |
WHERE 列 IN サブクエリ | !! | !! | !! |
WHERE 列 NOT IN サブクエリ | !! | !! | !! |
EXISTS 相関サブクエリ | !! | !! | !! |
NOT EXISTS 相関サブクエリ | !! | !! | !! |
CASE WHEN 評価式 THEN 式,…,ELSE 式 END | !! | !! | - |
select文 UNION select文 | !! | !! | !! |
select文 UNION ALL select文 | !! | !! | !! |
select文 INTERSECT select文:テーブル共通部分選択 | !! | !! | - |
select文 EXCEPT select文:テーブル差分 | !! | !! | - |
FROM テーブル1 AS 別名1 INNER JOIN テーブル2 as 別名2 ON 別名1.列 = 別名2.列 | !! | !! | !! |
FROM テーブル1 AS 別名1 LEFT OUTER JOIN テーブル2 as 別名2 ON 別名1.列 = 別名2.列 | !! | !! | !! |
FROM テーブル1 AS 別名1 RIGHT OUTER JOIN テーブル2 as 別名2 ON 別名1.列 = 別名2.列 | !! | - | !! |
FROM テーブル1 AS 別名1 CROSS JOIN テーブル2 as 別名2 | !! | !! | - |
RANK() OVER PARTITION BY 列 ORDER BY 列:1位、1位、3位 | !! | !! | - |
DENSE_RANK() OVER PARTITION BY 列 ORDER BY 列:1位、1位、2位 | !! | !! | - |
ROW_NUMBER() OVER PARTITION BY 列 ORDER BY 列:一意の連番 | !! | !! | - |
合計を求めるSelect文 UNION ALL 小計を求めるSelect文 | !! | !! | !! |
GROUP BY ROLLUP(列名) | !! | - | - |
SELECT GROUPING(列),… FROM テーブル名 GROUP BY ROLLUP(列名) | !! | - | - |
GROUP BY CUBE(列名) | !! | - | - |
GROUP BY GROUPING SETS(列名) | !! | - | - |