Excelが大好きだ!

Excel大好き経理マンがExcelの事を書き綴っていきます。


スポンサードリンク

PostgreSQL・SQLite・Excel ADODBで使えるSQL文をまとめてみた

先日、こちらの書籍でSQL文を勉強してみた。

SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

  • 作者:ミック
  • 発売日: 2016/06/17
  • メディア: 単行本(ソフトカバー)

その際にPostgreSQLSQLiteExcel 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を値へ変換 !! !! -
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(列名) !! - -

SQLiteはもとよりExcel ADODBでも結構な量の構文をそのまま使えるのを知れたのは収穫でした。