先日、こちらの書籍で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(列名) | !! | - | - |