DBII/10.SQL
の編集
Top
/
DBII
/
10.SQL
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
#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文を使う. **単純質問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)
タイムスタンプを変更しない
#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文を使う. **単純質問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)
テキスト整形のルールを表示する