様々な問い合わせ方法(1)
サンプルのAccessファイルを使用します。
このページの一番下からDBNew_Sample_Step5.zipをダウンロードして任意の場所で解凍してください。
1. DISTINCT
重複するデータを1件にまとめて表示する場合に使う。
(1) 生徒がが所属しているクラブを抽出する。
SELECT
C.ClubName
FROM
Students AS S,
Clubs AS C
WHERE
S.ClubID = C.ClubID
| ClubName |
|---|
| サッカー部 |
| サッカー部 |
| サッカー部 |
| 野球部 |
| バスケットボール部 |
| バレー部 |
| 書道同好会 |
| 書道同好会 |
| パソコン同好会 |
(2) 生徒が所属しているクラブを重複なしで抽出する
SELECT DISTINCT
C.ClubName
FROM
Students AS S,
Clubs AS C
WHERE
S.ClubID = C.ClubID
SELECT の次に DISTINCT を付けます
| ClubName |
|---|
| サッカー部 |
| バスケットボール部 |
| パソコン同好会 |
| バレー部 |
| 書道同好会 |
| 野球部 |
2. LIKE
文字列データから指定した文字列を含むデータを抽出する。
(1) 生徒名の先頭が「中」である生徒の生徒名を抽出する
SELECT Name FROM Students WHERE Name Like '中*';
| Name |
|---|
| 中村 春菜 |
(2) 生徒名に「中」が踏まれる生徒の生徒名を抽出する
SELECT Name FROM Students WHERE Name Like '*中*';
| Name |
|---|
| 田中 太郎 |
| 中村 春菜 |
ワイルドカードとは、検索対象の文字列に対して「一部があいまい」な条件を指定するために使う記号です。
主に LIKE と組み合わせて使用され、部分一致検索やパターンマッチングを行う際に用いられます。
ただし、Accessと一般的なSQLでは違いがあります。
| Access | 一般的SQL | 意味 | 例 | 検索対象の例 | |
|---|---|---|---|---|---|
| *(アスタリスク) | %(パーセント) | 0文字以上の任意の文字列 | LIKE '田中*' | LIKE '田中%' | 田中一郎, 田中花子 |
| ? | _(アンダーバー) | 任意の1文字 | LIKE '?田中' | LIKE '_田中' | 佐田中, 小田中 |
Accessの設定により、% や _ を使う SQL 構文を有効にすることができます。
3. ORDER BY
特定の列に基づいて並べ替える。
表示順は 昇順(ASC)または降順(DESC)で制御する。
省略すると 昇順(ASC)が適応される。
SELECT 列名1, 列名2, ...
FROM テーブル名
Order By 並べ替え対象の列 [ASC|DESC];
(1) StudentsのデータをGrade(学年)の昇順で抽出する
SELECT * FROM Students Order By Grade ASC;
| StudentID | Name | Furigana | Grade | Class | Height | ClubID | JHighID |
|---|---|---|---|---|---|---|---|
| 10 | 加藤 恵 | カトウ メグミ | 1 | B | 168 | 5 | 6 |
| 4 | 高橋 愛 | タカハシ アイ | 1 | B | 165 | 1 | 1 |
| 1 | 田中 太郎 | タナカ タロウ | 1 | A | 162 | 4 | 1 |
| 8 | 中村 春菜 | ナカムラ ハルナ | 2 | B | 160 | 6 | 2 |
| 5 | 伊藤 次郎 | イトウ ジロウ | 2 | A | 176 | 1 | 4 |
| 3 | 佐藤 健 | サトウ ケン | 2 | C | 158 | 1 | 1 |
| 9 | 小林 大輔 | コバヤシ ダイスケ | 3 | C | 172 | 5 | 2 |
| 6 | 渡辺 美咲 | ワタナベ ミサキ | 3 | C | 154 | 2 | 6 |
| 2 | 鈴木 花子 | スズキ ハナコ | 3 | B | 170 | 3 | 7 |
(2) Name(生徒名)とHeight(身長)をHeightの降順で抽出する
SELECT Name,Height FROM Students Order By Height DESC;
| Name | Height |
|---|---|
| 伊藤 次郎 | 176 |
| 小林 大輔 | 172 |
| 鈴木 花子 | 170 |
| 加藤 恵 | 168 |
| 高橋 愛 | 165 |
| 田中 太郎 | 162 |
| 中村 春菜 | 160 |
| 佐藤 健 | 158 |
| 渡辺 美咲 | 154 |
4. BETWEEN
指定した2つの値の範囲に含まれるレコードを抽出する
数値、日付、文字列などに使用可能
「以上かつ以下」の検索を簡潔に記述できる
SELECT 列名1, 列名2, ...
FROM テーブル名
WHERE 列名 BETWEEN 最小値 AND 最大値;
(1) Heigh(身長)が160cm以上かつ170cm 以下を昇順で抽出する
SELECT * FROM Students WHERE Height BETWEEN 160 AND 170 ORDER BY Height;
| StudentID | Name | Furigana | Grade | Class | Height | ClubID | JHighID |
|---|---|---|---|---|---|---|---|
| 8 | 中村 春菜 | ナカムラ ハルナ | 2 | B | 160 | 6 | 2 |
| 1 | 田中 太郎 | タナカ タロウ | 1 | A | 162 | 4 | 1 |
| 4 | 高橋 愛 | タカハシ アイ | 1 | B | 165 | 1 | 1 |
| 10 | 加藤 恵 | カトウ メグミ | 1 | B | 168 | 5 | 6 |
| 2 | 鈴木 花子 | スズキ ハナコ | 3 | B | 170 | 3 | 7 |
A >= 値 AND 値 <= Bと同じ意味。
WHERE Height >= 160 AND Height <= 170;
BETWEEN を使うことでSQL文を簡潔に表現できます。
5. IN(NOT IN)
IN は、指定した複数の値と一致するデータを抽出する。
NOT IN は、指定した値「以外」のデータを抽出する。
SELECT 列名1, 列名2, ...
FROM テーブル名
WHERE 列名 IN ( 値1, 値2, ... );
SELECT 列名1, 列名2, ...
FROM テーブル名
WHERE 列名 NOT IN ( 値1, 値2, ... );
(1) Grade(学年)が 1 または 3 のデータを Grade の降順で抽出する
SELECT * FROM Students WHERE Grade IN(1,3) ORDER BY Grade DESC;
| StudentID | Name | Furigana | Grade | Class | Height | ClubID | JHighID |
|---|---|---|---|---|---|---|---|
| 9 | 小林 大輔 | コバヤシ ダイスケ | 3 | C | 172 | 5 | 2 |
| 6 | 渡辺 美咲 | ワタナベ ミサキ | 3 | C | 154 | 2 | 6 |
| 2 | 鈴木 花子 | スズキ ハナコ | 3 | B | 170 | 3 | 7 |
| 10 | 加藤 恵 | カトウ メグミ | 1 | B | 168 | 5 | 6 |
| 4 | 高橋 愛 | タカハシ アイ | 1 | B | 165 | 1 | 1 |
| 1 | 田中 太郎 | タナカ タロウ | 1 | A | 162 | 4 | 1 |
(2) Grade(学年)が 1 または 3 ではないデータを Grade の降順で抽出する
SELECT * FROM Students WHERE Grade NOT IN(1,3) ORDER BY Grade DESC;
| StudentID | Name | Furigana | Grade | Class | Height | ClubID | JHighID |
|---|---|---|---|---|---|---|---|
| 8 | 中村 春菜 | ナカムラ ハルナ | 2 | B | 160 | 6 | 2 |
| 5 | 伊藤 次郎 | イトウ ジロウ | 2 | A | 176 | 1 | 4 |
| 3 | 佐藤 健 | サトウ ケン | 2 | C | 158 | 1 | 1 |
| ファイル名 | サイズ (KB) | ダウンロード |
|---|---|---|
| DBNew_Sample_Step5.zip | 22 |