プログラム関係の備忘録。技術系記事1000記事以上を目指すブログ

【SQL】 データベース超入門 – Microsoft Access編

  • 2017年6月9日
  • 2017年7月29日
  • SQL
  • 125view
  • 2件
SQL

これからデータベースやSQLを覚えていく為の復習&備忘録

はじめに

ふんわりでも簡単に理解する

データベースとは?

ウェブシステム等で会員情報などの様々なデータをために使用する。
特徴としては長期間のデータ保存が可能で、かつCRUDを簡単にできる機能がある。

SQLとは?

データベースを操作するために扱う言語。データベースの種類によって記述方法が共通していない部分もあるが、本記事ではMicrosoftAccessでのSQLの記述方法。

Accessを使用するときの準備

テーブルを作成する方法

新規作成>>空のデータベース

テーブルの項目のことをフィールド
テーブルの内容のことをデータと呼ぶ

作成したテーブルからデータを検索する方法

作成>>クエリデザイン>>【クエリ1】>>SQL

SQLを記述し【実行】することで作成したテーブルからデータを検索することができる。

セミコロン「;」はSQLの終了を表す。
カンマ「,」記述忘れに注意。
どういうときに必要かは考えて覚えるほうが身につきやすい。

SQLの書き方

ex1.) SELECT ~ FROM


SELECT
Name, Birthday FROM Users;
…UsersのテーブルからNameとBirthdayのフィールドを取得する。
【構文】SELECT ~ FROM
SELECT [フィールド名] FROM [テーブル名] 【句】SELECT
データが含まれているフィールドを取得
【句】FROM
SELECT区で列挙したフィールドが含まれているテーブルを取得

ex2.)

SELECT * FROM Users WHERE Users.BloodType=’A’;
…Usersのテーブルから全フィールドを取得し、BloodTypeがAのデータのみを表示する。

アスタリスク(*)=全フィールドを対照とする
シングルクォーテーション(‘)=対象が文字列などの場合に使用

【句】WHERE
WHERE以降に条件を指定することにより、条件式を満たすデータのみを抽出することができる。

ex3.)

SELECT * FROM Users ORDER BY Users.Birthday;
…Usersのテーブルから全フィールドを取得し、Birthdayのフィールドの昇順に並び替えて表示。

【句】ORDER BY

取得する結果の並び順を指定できる。
ORDER BY [フィールド名] ASC
未指定時と同様に昇順で表示
ORDER BY [フィールド名] DESC
降順に並び替える場合に指定

ex4.)

SELECT Users.ID, Users.UserName, Users.Birthday FROM Users WHERE Users.Birthday BETWEEEN #01/01/1940# AND #01/01/1980# ORDER BY Users.Birthday;
…UsersのテーブルからID,UserName,Birthdayのフィールドを取得し、Birthdayが1940/01/01から1980/01/01の間のデータをBirthdayの昇順で表示。
【演算子】BETWEEN
BETWEEN [下限値] AND [上限値]
範囲内のデータを取得する場合に使用する。

ex5.)

SELECT Bloodtype, Count(*) AS PersonNum FROM Users GROUP BY BloodType ORDER BY BloodType;
…UsersのテーブルからBloodTypeとデータ数をカウントし、PersonNumというフィールドに代入。BloodTypeフィールドはグループ化し、BloodTypeの昇順で表示。
【句】GROUP BY
フィールドを集計する場合、GROUP BYで集計関数をしないフィールドをグループ化する。
集計したい場合のフィールドを指定するわけではないので注意。

【関数】Count
指定したフィールドに含まれる値の個数を返す。
Count(*)
カウントするためのフィールドを作る。

【句】AS
フィールド名を別名で指定する

ex6.)

SELECT BloodType, Count(*)FROM Users GROUP BY BloodType HAVING Count(*) > 5 ORDER BY BloodType;
…UsersのテーブルからBloodType、データ数をカウントし、データ数が5より大きい場合に表示。BloodTypeの昇順で表示。
【句】HAVING
WHEREと同じ条件抽出をおこなう句であるが、フィールドをグループ化して集計関数にたいしてはHAVING句を使用する。

ex7.)

SELECT 1 FROM Users;
SELECT Users.ID, 1 FROM Users;

定数としてのSELECT
SELECT句はデータが含まれるフィールドのみでなく、定数として指定することもできる。

ex8.)

SELECT UserName, Now() AS Now FROM Users;
…UsersのテーブルからUserNameと、現在のシステムの日時を取得したものをNowというフィールドに代入して表示。
【関数】Now
システムの日付、時刻を取得する
【関数】Date
システムの時刻を取得する

ex9.)

SELECT UserName, DateDiff(‘yyyy’, Birthday, Now()) AS Age FROM Users;
…UsersのテーブルからUserNameと、Birthdayと現在のシステム日時の間隔をAgeというフィールドに代入して表示。この例では年齢を表している。
【関数】DateDiff
【構文】DateDiff(‘間隔’, [日付1], [日付2])

日付1と2の間隔の値を出す。
間隔には時間単位を表す文字列式を指定する。

Q10.)

SELECT
Max(DateDiff(‘yyyy’, Birthday, Now())) AS MaxAge,
Min(DateDiff(‘yyyy’, Birthday, Now())) AS MinAge,
Sum(DateDiff(‘yyyy’, Birthday, Now())) AS TotalAge
Avg(DateDiff(‘yyyy’, Birthday, Now())) AS AvgAge FROM Users;
…最大の年齢をMaxAge、最小の年齢をMinAge、合計の年齢をTotalAge、平均の年齢をAvgAgeに代入して表示。
【関数】Max
指定したフィールドの最大値を取得
【関数】Mix
指定したフィールドの最小値を取得
【関数】Avg
指定したフィールドの平均値を取得
【関数】Sum
指定したフィールドの合計値を取得

Q11.)

SELECT
Int(DateDiff(‘yyyy’), Birthday, Now() / 10) AS AgeClass, Count(*) AS PersonNum FROM Users
GROUP BY Int(DateDiff(‘yyyy’), BirthDay, Now() /10)
ORDER BY Int(DateDiff(‘yyyy’), BirthDay, Now() /10);
…年齢を10で割ることで年代を取得しAgeClassに代入、その数をカウントしPersonNumに代入。
AgeClassはグループ化し、昇順で表示。
【関数】Int
数値以下の最大の整数を返す