#navi(DBII)
SQL言語を使って,テーブルを定義・削除・管理したり,データを検索・追加・変更・削除したり出来る.
ここではデータの検索についてSQLを見てみる.
*AccessとSQL [#jf916391]
#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql04.png)

-Accessではクエリを使ってデータベースから情報を検索します.
-しかし実際にはこのクエリは一度SQLという言語に翻訳してからデータベースに送られます.
-また直接SQL言語を使ってデータベースから検索することも出来ます.
-直接SQL言語を使えば,クエリで出来ないような検索もできるようになります.
-今回はこのデータベースを検索するSQL言語を見てみます.
**翻訳されたSQL言語 [#t9f721b5]
-実際にクエリがどのようなSQL言語に翻訳されているのか眺めてみましょう.
-次のテーブルを作成してみましょう.

#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql01.png)
-次のクエリを作成してみましょう.

#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql02.png)
-SQLビューに切り替えます.

#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql03.png)
-これが翻訳されたSQL言語です.

#code(sql){{
SELECT 商品.商品名, 商品.定価
FROM 商品
WHERE (((商品.定価)>=100000));
}}
-簡単に書き直すと次の様になります.

#code(sql){{
SELECT 商品名, 定価
FROM 商品
WHERE 定価>=100000;
}}

-これを日本語に訳すと次の様になります.

 「商品」テーブルから(FROM)
 「定価」が10万円以上(>=100000)という条件に当てはまる(WHERE)
 「商品名」と(,)「定価」を選択(SELECT)しなさい.(;)
-SQLの最後は''セミコロン''('';'')で終わらないといけません.
-また途中の好きな区切り部分で改行してもかまいません.
-キーワード&color(blue){''SELECT''};,&color(blue){''FROM''};,&color(blue){''WHERE''};とフィールド名,テーブル名の間は半角空白を入れなければいけません.
-フィールド名が「商品.商品名」となっているのは「商品」テーブルの「商品名」フィールドという意味です.
-複数のテーブルに同じフィールド名があると混乱するのでこのように書きますが,混乱しない場合はテーブル名を省略して「商品名」と書いても大丈夫です.
-SQLを次の様に修正して保存しましょう.

#code(sql){{
SELECT 商品名, 定価
FROM 商品
WHERE 定価>=100000;
}}
-ビューを切り替えても全く問題ありません.

**SQL問い合わせの基本形 [#t1e25a2c]
#code(sql){{
SELECT 式, 式, ・・・
FROM 表名, 表名, ・・・
WHERE 抽出条件;
}}

**SQLの文法基礎 [#sbc66539]
-テーブル名,フィールド名以外はすべて半角を使用する.
-SQLは大文字,小文字の区別はしない.
--「SELECT」でも「select」でもどちらでも良い.
-語と語の間などは半角の空白で区切る.
-数字定数に「,」(コンマ)を入れてはいけない.
--「10,000」などと書くのは駄目.「10000」と書きましょう.
-文の終わりは「;」(半角のセミコロン)を付ける.
*【演習】SQLによる単純質問 [#jd96fa9f]
-SQLによる質問を大きく三つに分類する.
--単純質問(次の二つ以外)
--結合質問(複数の表を同時に扱う)
--入れ子型質問(抽出条件にSELECT文が入る)
-ここでは最初の単純質問を見ていく
**使う表 [#f2862211]
-Accessでデータベース「単純質問.mdb」を作成し,以下の表を作りなさい.
-SQLでクエリ「単純質問1,2,3,・・・」を作成しなさい.
-黄色のフィールドが主キーになります.

#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql05.png)
**SQL文入力方法 [#qaa2a1d7]
#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql06.png)
**単純質問1.全商品の全データを求めよ [#qf4fd2e6]
#code(sql){{
SELECT *
FROM   商品;
}}
#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql11.png)
-テーブルのデータを統べてみるにはこのSELECT文を使う.
-テーブルのデータをすべてみるにはこのSELECT文を使う.
**単純質問2.納品した商品の商品番号を求めよ [#vb432494]
#code(sql){{
SELECT 商品番号
FROM   納品;
}}
#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql12.png)
-関係代数の射影演算に相当する.
**単純質問3.「単純質問2」から重複を除去せよ [#gadfa4b7]
#code(sql){{
SELECT DISTINCT 商品番号
FROM   納品;
}}
#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql13.png)
-SQLを使わずクエリだけではこんなことはできない.
**単純質問4.商品番号とその定価と2割引の値段を求めよ [#f75aa96d]
#code(sql){{
SELECT 商品番号, 定価, 定価*0.8
FROM   商品;
}}
#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql14.png)
-フィールド名だけでなく,SELECTの後ろには式も指定できる.
**単純質問5.定価が10万円以上の商品の全データを求めよ [#a4933e14]
#code(sql){{
SELECT *
FROM   商品
WHERE  定価 >= 100000;
}}
#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql15.png)
-関係代数の選択演算に相当する.
**単純質問6.定価が5万円以上で10万円以下の商品の全データを求めよ [#ud2a9160]
#code(sql){{
SELECT *
FROM   商品
WHERE  定価 Between 50000 And 100000;
}}
#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql16.png)
-単純な大小比較だけでなく,BETWEEN述語とかLIKE述語などが使える.
**単純質問7.定価が5万円以上で10万円以下の商品で商品名が「テレビ」の全データを求めよ [#i93d4d90]
#code(sql){{
SELECT *
FROM   商品
WHERE  定価 Between 50000 And 100000
  AND  商品名 = 'テレビ';
}}
#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql17.png)
-AND,OR,NOTなどの演算子を使って複数の条件を指定できる.
**単純質問8.商品を定価の高いものから安いものに順に並べよ [#rf61a9ca]
#code(sql){{
SELECT   *
FROM     商品
ORDER BY 定価 DESC;
}}
#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql18.png)
-安い順に並べるときは「DESC」を取り除くか「ASC」を指定する.
**単純質問9.納品した商品の総数を商品番号毎に求めよ [#m520c33b]
#code(sql){{
SELECT   商品番号, SUM(納品数量)
FROM     納品
GROUP BY 商品番号;
}}
#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql19.png)
-グループ化できる.
**単純質問10.納品した商品の総数を総数が10以上のものについて商品番号毎に求めよ [#tec659cf]
#code(sql){{
SELECT   商品番号, SUM(納品数量)
FROM     納品
GROUP BY 商品番号
HAVING   SUM(納品数量) >= 10;
}}
#ref(http://kaede.osu.ac.jp/~ogawa-k/wiki/resource/db/sql1a.png)
-グループ化したものについて条件を付けることが出来る.
----
#comment
#navi(DBII)

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS