2021-02-03に更新

Access SQL書き方

SQL

用語

  • テーブル:シートのこと
  • カラム:列
  • レコード:テーブルとカラムが、データが保管される場所のこと
  • フィールド:レコードを構成する1つ1つの要素のこと(Excelでいうセルに該当)

画面で定義するデータ型とSQL文のデータ型の対比表

設定するデータ型 SQL文で使用するデータ型 意味
短いテキスト TEXT(n), VARCHAR(n) 文字列や計算対象としない数字。フィールドサイズにて255文字まで格納可能な文字数を設定できる
長いテキスト LONGTEXT, LONGCHAR 256文字以上になる長い文字列
数値型(長整数型) INTEGER,INT,LONG -2,147,483,648〜2,147,483,647の整数データ
数値型(整数型) SMALLINT,SHORT -32,768〜32,767の整数データ
数値型(単精度浮動小数点) SINGLE,REAL -3.40E+38〜3.40E+38の浮動小数点データ
数値型(倍精度浮動小数点) DOUBLE,FLOAT -1.79E+308〜1.79E+308の浮動小数点データ
日付、時刻 DATETIME 日付や時刻のデータ
オートナンバー型 AUTOINCREMENT レコードを新規追加する度に固有の番号が自動入力されるデータ

数値型とは…数量や重量など計算対象となる数字。数値型は、フィールドサイズと組み合わせることで実質、それぞれ別のデータ型になります。

テーブルを作成するSQL文

CREATE TABLE テーブル名 (フィールド名 データ型,…);

テーブルの削除

DROP TABLE テーブル名;

主キー設定

CREATE TABLE テーブル名 (フィールド名 データ型 PRIMARY KEY,…);

※主キーにしたいフィールドの、データ型を指定した後ろに、半角スペースを入れて、「PRIMARY KEY」と入れる

複数の主キーを設定

CONSTRAINT 主キー名 PRIMARY KEY (フィールド名1,フィールド名2,…)

データを追加

INSERT INTO テーブル名 (フィールド名1,フィールド名2,…)
VALUES(追加する値1,追加する値2,…);

文字列を値として入力する際は、「’(シングルクォーテーション)」で囲みます

追加したレコードを参照(検索)する

「WHERE」句の後も「抽出条件」とだけ書きましたが、ここも基本的には
フィールド名を使って「フィールド名=○○」というような指定をします
複数の条件を入れる際は「AND」や「OR」を使用。

データを更新する

UPDATE テーブル名 SET フィールド名=更新する値
WHERE 抽出条件;

VBAの変数と似ている部分は、例えばAとBの文字列を
結合した値でCフィールドを更新する場合、「SET C=A & B」とする

並べ替え

SELECT フィールド名 FROM テーブル名
WHERE 抽出条件
ORDER BY フィールド名 [ASC|DESC];

フィールド名の後ろに何も書かないか「ASC」と入れると「昇順」に、「DESC」と入れると「降順」になります

集計

1.フィールド名を指定せず「*」

SELECT COUNT(*)
FROM テーブル名;

2.COUNT関数の引数で、フィールド名を指定する

SELECT COUNT(フィールド名)
FROM テーブル名;

SELECT文などで、抽出結果が式の結果であったり、複数のテーブルを結合する際のテーブル名などには、別名(エイリアス名)を付けることが出来る

[別名をつけたい式やフィールド名、またはテーブル名] AS 別名

「AS」と書いて、「別名」を入れる

集計する(GROUP)

SELECT グループ化するフィールド名,集計式
FROM テーブル名 
WHERE 抽出条件 
GROUP BY グループ化するフィールド名;
  • 「GROUP BY」の後ろにグループ化するフィールド名を指定するのですが、同じものを、必ずSELECTの後ろにも書かないといけません。

  • 「GROUP BY」で集計した結果を抽出条件としたい場合は「HAVING
    ※この場合は「WHERE」句で指定するわけではない

今あるテーブルから新しいテーブルを作る

SELECT フィールド名 INTO 新しいテーブル名
FROM テーブル名
WHERE 抽出条件;

「FROM」の前に「INTO 新しいテーブル名」と入れるだけ

※他のデータベースでは似たような機能を使う場合、「CREATE VIEW」を使ってビューと呼ばれるものを作成する必要がある

抽出した結果を既存のテーブルに追加

「INSERT INTO」ステートメントの「VALUES」句の代わりに「SELECT」ステートメントを繋げて指定する

INSERT INTO 追加先テーブル名
SELECT フィールド名(式、リテラル値)
FROM 追加元テーブル名
WHERE 抽出条件;

※SELECTの抽出結果の値が、必ず追加先テーブルのフィールドの数とそのデータ型に、合致しないといけない

条件式を使って抽出(IIF関数/あんま使わん)

この関数はSQLの標準ではなく、使えるのは、Microsoft社製のデータベースのみ(Accessの他にSQLSeverがある)となります。

IIF(評価する式,[真の場合の値または式],[偽の場合の値または式])

年齢を計算(あんま使わん)

最初の引数には「’yyyy’」「生年月日」フィールドを使って、「2020年4月1日」を基準に何歳かを出しますので、次の引数には「生年月日」を、最後の引数には「#2020/4/1#」を
入れています。

DATEDIFF(計算に使用する時間単位,日付1,日付2)

内部結合

SELECT 取得フィールド名
FROM 結合元テーブル名
INNER JOIN 結合先テーブル名
ON 結合元テーブルの結合キー = 結合先テーブルの結合キー;

それぞれのテーブルで、結合するキーが一致するレコードのみ抽出する結合方法

左外部結合

SELECT 取得フィールド名
FROM 結合元テーブル名
LEFT JOIN 結合先テーブル名
ON 結合元テーブルの結合キー = 結合先テーブルの結合キー;

結合元のテーブルのレコード全件取得に対し、結合先のテーブルは結合キーが合致するレコードのみ結合する方法です。結合キーが合致しないレコードには「NULL」が入る

右外部結合

SELECT 取得フィールド名
FROM 結合先テーブル名
RIGHT JOIN 結合元テーブル名 
 ON 結合元テーブルの結合キー = 結合先テーブルの結合キー;

左外部結合が反転した結合方法

ツイッターでシェア
みんなに共有、忘れないようにメモ

ponsuke

未経験からエンジニア。 キリンが好き。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント