【まとめ】ADO、SQLの書きかたすべて【基本・JOIN結合・使える、使えない構文】
「ADO、SQLの書きかたすべてをここに記す...」

ADOは他のSQLとちがって特殊。ここで覚えておくことを推奨する。

基本の書きかた

SELECT name, AVG(age), birthplace
FROM [data]
WHERE age > 3
GROUP BY name, birthplace
  • SELECT句...ほしい列を設定
  • FROM句...どこから情報をもってくるのか
  • WHERE句...~以上などの条件を設定
  • GROUP BY句...グループ化したい項目を設定

ここからは、それぞれの書きかたについて見ていこう。

SELECT句の書きかた

ほしいデータ列を, + 半角スペースで区切って設定する。

SELECT name, age, birthplace

*はムダなデータまで取得してしまうのでなるべく使わない。

SELECT *

SELECT句にDISTINCTを使うと重複が削除される。

SELECT DISTINCT birthplace

FROM句の書きかた

CSVを設定する場合、[]内にCSVファイル名を拡張子つきで書く。

FROM [file.csv] 

Excelシートを設定する場合、[]内にシート名を書き$を追加する。

FROM [Sheet1$]

Excelシート内の名前付きテーブルを設定する場合、[]内にシート名を書き$を追加Rangeの範囲を設定する。

FROM [Sheet1$A1:C6]

となるのだが、いちいち範囲を設定してはムダが多い。そこでつぎのVBAコードで名前付きテーブルの範囲を取得していく。

Function getTableRangeAddress(ByVal sheet_object As Worksheet, _
    ByVal table_name As String) As String
    
    With sheet_object
        Dim table_address As String
        Dim replaced_address As String
        
        table_address = .Range(table_name & "[#All]").address
        replaced_address = Replace(table_address, "$", "")
        
        getTableRangeAddress = .Name & "$" & replaced_address
    End With
    
End Function

上記をコピペして、下記を実行すればテーブルの範囲が自動的に出力される。

Const TABLE_NAME As String = "テーブル1"

Dim table_address As String
table_address = getTableRangeAddress(DataSheet, TABLE_NAME)

Accessの場合、[]内にテーブル名、またはクエリ名を書く。

FROM [people_table]

WHERE句の書きかた

文字列で条件設定する場合、シングルクォーテーション内に文字列を設定する。

WHERE name = '佐藤'

日付で条件設定する場合、シャープ内に日付を設定する。

WHERE date = #2021-01-01#

日付で条件範囲を設定する場合、BETWEEN 日付から AND 日付まで

WHERE date BETWEEN #2021-01-01# AND #2021-05-01#

数字を条件にする場合、数字のみで設定する。

WHERE age > 3

GROUP BY句の書きかた

GROUP BYの左側から優先的にグループ化される。

SELECT birthplace, age
FROM [people]
GROUP BY age, birthplace

COUNT、MAX、MIN、AVG、SUMは、設定していない列をGROUP BYに書く

SELECT birthplace, AVG(age)
FROM [people]
GROUP BY birthplace

関連記事SQLでSELECT句のCOUNTをきわめる【複数の条件指定も可能】

JOINの書きかた

~ JOINで2つのデータを選択し、ONで条件を設定する。

INNER JOINは、2つのON以降のデータ条件と一致したデータのみ抽出

SELECT name, age, [prefecture].town
FROM [people] INNER JOIN [prefecture]
ON [people].birthplace = [prefecture].town

LEFT JOINとRIGHT JOIN

  • LEFT JOIN...左側全データと右側データに一致したデータを抽出
  • RIGHT JOIN...右側全データと左側データに一致したデータを抽出

複数JOIN

複数JOINする場合は、つぎのように。2つ目以降はONの条件に()をつけるだけでOK。

SELECT name, age, [prefecture].town, [school].class_name
FROM ([people] INNER JOIN [prefecture]
ON ([people].birthplace = [prefecture].town))
INNER JOIN [school]
ON ([people].class_id = [school].class_id)

上記のように、INNER JOINだけじゃなくLEFT JOIN、RIGHT JOINも組み合わせてつかうことが可能。

ADO SQLで使える構文

  • TRANSFORM
  • PIVOT

関連記事SQLのTRANSFORMとPIVOTで簡単にクロス集計しようぜ

ADO SQLで使えない構文

  • WITH
  • COUNT(DISTINCT ~)
  • CASE
  • FULL JOIN
  • CONVERT
事務作業を自動化してもっと"ラク"しませんか?

あなたの会社の事務作業...効率化してラクに。もっと重要な業務に集中できるようになります。

日々増えるルーティンの事務作業...
「この作業めんどくさい...」
「事務作業に時間をとられて他に集中できない...」

あなたの代わりにVBAを使ってパソコン業務を自動化。あなたはもっと価値のあることに時間を使うことができるため売上UP、ムダなコストの削減が期待できます。

また、作って終わりではなくつぎの3つのことを約束します。

  • しっかりドキュメント作成
  • きれいな見やすいコードでムダな工数カット
  • できるだけボタン1つポチッと押すだけで業務が完了

どんなにささいなめんどくさい事務作業でも相談してください。相談は無料です。
3年の業務効率化実績があるため、力になれるかもしれません。

※件名には「業務効率化の相談」と記載ください。できるだけ24時間以内に返信します。