これからデータベースや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区で列挙したフィールドが含まれているテーブルを取得
SELECT [フィールド名] FROM [テーブル名] 【句】SELECT
データが含まれているフィールドを取得
【句】FROM
SELECT区で列挙したフィールドが含まれているテーブルを取得
ex2.)
SELECT * FROM Users WHERE Users.BloodType=’A’;
…Usersのテーブルから全フィールドを取得し、BloodTypeがAのデータのみを表示する。
…Usersのテーブルから全フィールドを取得し、BloodTypeがAのデータのみを表示する。
アスタリスク(*)=全フィールドを対照とする
シングルクォーテーション(‘)=対象が文字列などの場合に使用
【句】WHERE
WHERE以降に条件を指定することにより、条件式を満たすデータのみを抽出することができる。
WHERE以降に条件を指定することにより、条件式を満たすデータのみを抽出することができる。
ex3.)
SELECT * FROM Users ORDER BY Users.Birthday;
…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の昇順で表示。
…UsersのテーブルからID,UserName,Birthdayのフィールドを取得し、Birthdayが1940/01/01から1980/01/01の間のデータをBirthdayの昇順で表示。
【演算子】BETWEEN
BETWEEN [下限値] AND [上限値]
範囲内のデータを取得する場合に使用する。
BETWEEN [下限値] AND [上限値]
範囲内のデータを取得する場合に使用する。
ex5.)
SELECT Bloodtype, Count(*) AS PersonNum FROM Users GROUP BY BloodType ORDER BY BloodType;
…UsersのテーブルからBloodTypeとデータ数をカウントし、PersonNumというフィールドに代入。BloodTypeフィールドはグループ化し、BloodTypeの昇順で表示。
…UsersのテーブルからBloodTypeとデータ数をカウントし、PersonNumというフィールドに代入。BloodTypeフィールドはグループ化し、BloodTypeの昇順で表示。
【句】GROUP BY
フィールドを集計する場合、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の昇順で表示。
…UsersのテーブルからBloodType、データ数をカウントし、データ数が5より大きい場合に表示。BloodTypeの昇順で表示。
【句】HAVING
WHEREと同じ条件抽出をおこなう句であるが、フィールドをグループ化して集計関数にたいしてはHAVING句を使用する。
WHEREと同じ条件抽出をおこなう句であるが、フィールドをグループ化して集計関数にたいしてはHAVING句を使用する。
ex7.)
SELECT 1 FROM Users;
SELECT Users.ID, 1 FROM Users;
SELECT Users.ID, 1 FROM Users;
定数としてのSELECT
SELECT句はデータが含まれるフィールドのみでなく、定数として指定することもできる。
ex8.)
SELECT UserName, Now() AS Now FROM Users;
…UsersのテーブルからUserNameと、現在のシステムの日時を取得したものをNowというフィールドに代入して表示。
…UsersのテーブルからUserNameと、現在のシステムの日時を取得したものをNowというフィールドに代入して表示。
【関数】Now
システムの日付、時刻を取得する
【関数】Date
システムの時刻を取得する
システムの日付、時刻を取得する
【関数】Date
システムの時刻を取得する
ex9.)
SELECT UserName, DateDiff(‘yyyy’, Birthday, Now()) AS Age FROM Users;
…UsersのテーブルからUserNameと、Birthdayと現在のシステム日時の間隔をAgeというフィールドに代入して表示。この例では年齢を表している。
…UsersのテーブルからUserNameと、Birthdayと現在のシステム日時の間隔をAgeというフィールドに代入して表示。この例では年齢を表している。
【関数】DateDiff
【構文】DateDiff(‘間隔’, [日付1], [日付2])
【構文】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(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
指定したフィールドの合計値を取得
指定したフィールドの最大値を取得
【関数】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(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
数値以下の最大の整数を返す
数値以下の最大の整数を返す