Summer/2008-02
の編集
https://vilab.org/lecture/?Summer/2008-02
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
* 第1日 データベースとSQL実習 [#fb92a6a9] ** 目次 [#k7667d79] #contents ** データベースの準備 [#fb676334] *** 「SQLの窓」のインストール [#d26eab9f] + 「SQLの窓」をダウンロードする。 -- http://vilab.org/summer/winofsql15.lzh + 東京の郵便番号データをダウンロードし、Excelで内容を確認する。 -- http://vilab.org/summer/ziptokyo.xls + 「SQLの窓」展開したフォルダの中の db.html をダブルクリックして起動する。 -- winofsql15 の下の db.html + 「参照...」ボタンを押して、データベースとして ziptokyo.xls を読み込む。 + 「select *」ボタンを押して、データベースの内容を確認する。 *** Accessでの方法 [#j2df84a3] - AccessでSQLを使う方法 -- http://www.pursue.ne.jp/jouhousyo/SQLDoc/try.htm -- Excelのファイルを読み込むには、「インポート」する。 *** テーブルの設計 [#q1084134] 関係データベースは、「テーブル」(表)から構成されている。テーブルには「カラム」または「フィールド」と呼ばれる縦の欄(項目)があり、ひとつひとつのデータは横一列の「レコード」(行)として並ぶ。 今回は以下のようなテーブルを作る。「旧番号」「新番号」「都道府県名」などの欄がカラムであり、「060, 0600041, 北海道, 札幌市中央区, 大通東」のようなひとまとまりのデータがレコードである。 |旧番号|新番号 |都道府県名|市区郡町村名 |町村字名|h |060 |0600041|北海道 |札幌市中央区 |大通東 | |154 |1540002|東京都 |世田谷区 |下馬 | |468 |4680039|愛知県 |名古屋市天白区 |西入町 | |90718 |9071801|沖縄県 |八重山郡与那国町|与那国 | テーブルの設計ではカラム(各欄)の型を定義する。「型」というのは、そのカラムに入るデータの形式のことである。テーブルの設計はデータベース構築の肝なので、興味があれば「正規化」と呼ばれるデータベースの論理設計手法を勉強してみてください。 |zipcode|>|>||h |名称 |内容 |型 |属性|h |oldzip|旧番号 |text|| |newzip|新番号 |text|空欄不可| |pref |都道府県名 |text|| |city |市区郡町村名|text|| |addr |町字名 |text|空欄不可| ** SQLによるテーブル操作 [#w2572425] 「SQLの窓」では、Excelのワークシート名をworksheetとすると、テーブル名は ''[worksheet$]'' で参照する。この郵便番号データベースの例だと、''zipcodeのかわりに [zipcode$]''と書く必要がある。 *** テーブルの作成(省略) [#mf8a134a] >''【基本構文】 create table テーブル名 (カラム名1 カラム型1, カラム名2 カラム型2, ...);'' < *** テーブルの削除(省略) [#if319704] >''【基本構文】 drop table テーブル名; '' < *** データを表示する(射影演算) - SELECT文 [#d7374145] >''【基本構文】 select フィールド名 from テーブル名 ; '' < + 前項で登録したデータを表示してみる。テーブルからレコードを取り出すには、「セレクト(SELECT)文」を使う。 + 郵便番号と都道府県のみ選択して表示する。 select newzip,pref from zipcode; -- 「SQLの窓」では select newzip,pref from [zipcode$]; とすること。 + すべてのフィールドを表示する場合は、*記号で代用できる。 select * from zipcode; ** データの検索 [#n67ab6f2] テーブル操作のSQL文を使ってみる。データベースの肝の部分。 *** データを検索する(選択演算) - WHERE句 [#ha95a36d] テーブルからデータ(レコード)を検索するには 「セレクト(SELECT)文」を使う。WHERE句で条件文をしているすることにより、条件にマッチするデータのみを表示できる。 >''【基本構文】 select フィールド名 from テーブル名 where 条件式 ; '' < 複数の行に分けて書くこともできる。 select フィールド名 from テーブル名 where 条件式 ; + 古い郵便番号が「113」の、すべてのフィールドを表示する。(「SQLの窓」の場合、数字の '' はつけないほうがいいかも) select * from zipcode where oldzip='113' ; + 市区名が「世田谷区」の、新番号と町村名を表示する。 select newzip,addr from zipcode where city='世田谷区' ; + 以下のようにすると、条件にマッチするレコードの件数が分かる。 select count(*) from zipcode where city='国分寺市' ; + 以下のように「リミット(LIMIT)句」を使うと、表示する件数を限定できる。 県名が「新宿区」の、すべてのフィールドを、50件表示する。(「SQLの窓」の場合、limitは使えないかも) select * from zipcode where city='新宿区' limit 50; *** ちょっと高度な検索 [#nc9a293c] 以下のSQLを理解し、結果を記録してください。 + 市区郡町村名が「渋谷区」 または 「文京区」 select * from zipcode where city='渋谷区' or city='新宿区' ; + 市区郡町村名に「島」が含まれる(likeは文字列比較、%はワイルドカード) select * from zipcode where city like '%島%'; + 市区郡町村名が「中央区」 かつ 市区郡町村名が「日本橋」で始まる。(「SQLの窓」の場合、'%日本橋%'でないと結果が出ないかも) select * from zipcode where city='中央区' and addr like '日本橋%' ; *** 課題1 [#ebc256e8] 以下の検索をするSQL文と、検索結果(長い場合は抜粋)を求めなさい。 + 「東京都町田市」の郵便番号の一覧を検索しなさい。 + 「東京都町田市玉川学園」の郵便番号を検索しなさい。 + 旧郵便番号が「132」だった地区の住所を検索しなさい。 + 町字名(addr)に、自分の好きな文字列が入っている地名の一覧を検索しなさい。 + 住所のどこかに「城」の入っている地名の一覧を検索しなさい。 **データの挿入・削除・更新 [#z8906ac9] *** データの挿入 - INSERT文 [#f3fa6961] テーブルにデータ(レコード)を作成するには 「インサート(INSERT)文」を使う。 >''【基本構文】 insert into テーブル名 (カラム名1, カラム名2, ...) values (カラム値1, カラム値2, ...); '' < insert into zipcode (oldzip,newzip,pref,city,addr) values('060','0600041','北海道','札幌市中央区','大通東'); *** データの削除 - DELETE文 [#q3239d37] テーブルにデータ(レコード)を削除するには 「デリート(DELETE)文」を使う。 >''【基本構文】 delete from テーブル名 where 条件式; '' < *** データの更新 - UPDATE文 [#e6ec8966] データ(レコード)を一括更新するには 「アップデート(UPDATE)文」を使う。 >''【基本構文】 update テーブル名 set フィールド名=値 where 条件式; '' < *** 課題2 [#fe4e92fa] - 教科書問7の表をダウンロードし、Excelで内容を確認する。 -- http://vilab.org/summer/bookq7.xls + INSERT文でデータを挿入して「商品」表を完成させる。下記は既に入っているシャンプーの例である。全部挿入したら select * でテーブル全体を表示させる。 insert into [商品$] (商品コード,商品名,単価) values('A5023','シャンプー',500); + INSERT文でデータを挿入して「販売」表を完成させる。全部挿入したら select * でテーブル全体を表示させる。 ** テーブルの結合(結合演算) [#yd6a2a91] データベースを結合するJOIN演算は、where句で複数のテーブルの結合するフィールドを = で並べることでできる。 >''【基本構文】 select フィールド名 from テーブル名1,テーブル名2,... where テーブル名1.フィールド名=テーブル名2.フィールド名,... ; '' < select 商品名,販売数量 from [商品$],[販売$] where [商品$].商品コード=[販売$].商品コード selectのフィールド名の指定が、どのテーブルのものか紛らわしくなるときは(特に「SQLの窓」はバカなので)、「テーブル名.フィールド名」と指定しなければならない。 select [商品$].商品名コード,単価 from [商品$],[販売$] where [商品$].商品コード=[販売$].商品コード *** 課題3 [#eb38dc17] + 下記のSQL文を実行して、結合演算について理解しなさい。 select [商品$].商品コード,商品名,販売数量 from [商品$],[販売$] where [商品$].商品コード=[販売$].商品コード + 教科書問7のSQLを「SQLの窓」のために書き直すと以下のようになる。実行してなぜこのようになるのか動作を理解しなさい。 select [商品$].商品コード,SUM(単価*販売数量) from [商品$],[販売$] where [商品$].商品コード=[販売$].商品コード group by [商品$].商品コード order by SUM(単価*販売数量) + 上記を応用して、売上を得意先別にまとめるSQLを作成して検索しなさい。 ** 課題の提出について [#ncb396f7] - 課題1〜課題3を解いたら、解答のSQLと出力結果を、私にメールしてください。 - 長い出力結果は、最初の1行、最後の1行、行数でいいです。 hi-shiozawa(at)engs.tamagawa.ac.jp -- ↑ (at)を半角文字(@)にしないと送れません。
タイムスタンプを変更しない
* 第1日 データベースとSQL実習 [#fb92a6a9] ** 目次 [#k7667d79] #contents ** データベースの準備 [#fb676334] *** 「SQLの窓」のインストール [#d26eab9f] + 「SQLの窓」をダウンロードする。 -- http://vilab.org/summer/winofsql15.lzh + 東京の郵便番号データをダウンロードし、Excelで内容を確認する。 -- http://vilab.org/summer/ziptokyo.xls + 「SQLの窓」展開したフォルダの中の db.html をダブルクリックして起動する。 -- winofsql15 の下の db.html + 「参照...」ボタンを押して、データベースとして ziptokyo.xls を読み込む。 + 「select *」ボタンを押して、データベースの内容を確認する。 *** Accessでの方法 [#j2df84a3] - AccessでSQLを使う方法 -- http://www.pursue.ne.jp/jouhousyo/SQLDoc/try.htm -- Excelのファイルを読み込むには、「インポート」する。 *** テーブルの設計 [#q1084134] 関係データベースは、「テーブル」(表)から構成されている。テーブルには「カラム」または「フィールド」と呼ばれる縦の欄(項目)があり、ひとつひとつのデータは横一列の「レコード」(行)として並ぶ。 今回は以下のようなテーブルを作る。「旧番号」「新番号」「都道府県名」などの欄がカラムであり、「060, 0600041, 北海道, 札幌市中央区, 大通東」のようなひとまとまりのデータがレコードである。 |旧番号|新番号 |都道府県名|市区郡町村名 |町村字名|h |060 |0600041|北海道 |札幌市中央区 |大通東 | |154 |1540002|東京都 |世田谷区 |下馬 | |468 |4680039|愛知県 |名古屋市天白区 |西入町 | |90718 |9071801|沖縄県 |八重山郡与那国町|与那国 | テーブルの設計ではカラム(各欄)の型を定義する。「型」というのは、そのカラムに入るデータの形式のことである。テーブルの設計はデータベース構築の肝なので、興味があれば「正規化」と呼ばれるデータベースの論理設計手法を勉強してみてください。 |zipcode|>|>||h |名称 |内容 |型 |属性|h |oldzip|旧番号 |text|| |newzip|新番号 |text|空欄不可| |pref |都道府県名 |text|| |city |市区郡町村名|text|| |addr |町字名 |text|空欄不可| ** SQLによるテーブル操作 [#w2572425] 「SQLの窓」では、Excelのワークシート名をworksheetとすると、テーブル名は ''[worksheet$]'' で参照する。この郵便番号データベースの例だと、''zipcodeのかわりに [zipcode$]''と書く必要がある。 *** テーブルの作成(省略) [#mf8a134a] >''【基本構文】 create table テーブル名 (カラム名1 カラム型1, カラム名2 カラム型2, ...);'' < *** テーブルの削除(省略) [#if319704] >''【基本構文】 drop table テーブル名; '' < *** データを表示する(射影演算) - SELECT文 [#d7374145] >''【基本構文】 select フィールド名 from テーブル名 ; '' < + 前項で登録したデータを表示してみる。テーブルからレコードを取り出すには、「セレクト(SELECT)文」を使う。 + 郵便番号と都道府県のみ選択して表示する。 select newzip,pref from zipcode; -- 「SQLの窓」では select newzip,pref from [zipcode$]; とすること。 + すべてのフィールドを表示する場合は、*記号で代用できる。 select * from zipcode; ** データの検索 [#n67ab6f2] テーブル操作のSQL文を使ってみる。データベースの肝の部分。 *** データを検索する(選択演算) - WHERE句 [#ha95a36d] テーブルからデータ(レコード)を検索するには 「セレクト(SELECT)文」を使う。WHERE句で条件文をしているすることにより、条件にマッチするデータのみを表示できる。 >''【基本構文】 select フィールド名 from テーブル名 where 条件式 ; '' < 複数の行に分けて書くこともできる。 select フィールド名 from テーブル名 where 条件式 ; + 古い郵便番号が「113」の、すべてのフィールドを表示する。(「SQLの窓」の場合、数字の '' はつけないほうがいいかも) select * from zipcode where oldzip='113' ; + 市区名が「世田谷区」の、新番号と町村名を表示する。 select newzip,addr from zipcode where city='世田谷区' ; + 以下のようにすると、条件にマッチするレコードの件数が分かる。 select count(*) from zipcode where city='国分寺市' ; + 以下のように「リミット(LIMIT)句」を使うと、表示する件数を限定できる。 県名が「新宿区」の、すべてのフィールドを、50件表示する。(「SQLの窓」の場合、limitは使えないかも) select * from zipcode where city='新宿区' limit 50; *** ちょっと高度な検索 [#nc9a293c] 以下のSQLを理解し、結果を記録してください。 + 市区郡町村名が「渋谷区」 または 「文京区」 select * from zipcode where city='渋谷区' or city='新宿区' ; + 市区郡町村名に「島」が含まれる(likeは文字列比較、%はワイルドカード) select * from zipcode where city like '%島%'; + 市区郡町村名が「中央区」 かつ 市区郡町村名が「日本橋」で始まる。(「SQLの窓」の場合、'%日本橋%'でないと結果が出ないかも) select * from zipcode where city='中央区' and addr like '日本橋%' ; *** 課題1 [#ebc256e8] 以下の検索をするSQL文と、検索結果(長い場合は抜粋)を求めなさい。 + 「東京都町田市」の郵便番号の一覧を検索しなさい。 + 「東京都町田市玉川学園」の郵便番号を検索しなさい。 + 旧郵便番号が「132」だった地区の住所を検索しなさい。 + 町字名(addr)に、自分の好きな文字列が入っている地名の一覧を検索しなさい。 + 住所のどこかに「城」の入っている地名の一覧を検索しなさい。 **データの挿入・削除・更新 [#z8906ac9] *** データの挿入 - INSERT文 [#f3fa6961] テーブルにデータ(レコード)を作成するには 「インサート(INSERT)文」を使う。 >''【基本構文】 insert into テーブル名 (カラム名1, カラム名2, ...) values (カラム値1, カラム値2, ...); '' < insert into zipcode (oldzip,newzip,pref,city,addr) values('060','0600041','北海道','札幌市中央区','大通東'); *** データの削除 - DELETE文 [#q3239d37] テーブルにデータ(レコード)を削除するには 「デリート(DELETE)文」を使う。 >''【基本構文】 delete from テーブル名 where 条件式; '' < *** データの更新 - UPDATE文 [#e6ec8966] データ(レコード)を一括更新するには 「アップデート(UPDATE)文」を使う。 >''【基本構文】 update テーブル名 set フィールド名=値 where 条件式; '' < *** 課題2 [#fe4e92fa] - 教科書問7の表をダウンロードし、Excelで内容を確認する。 -- http://vilab.org/summer/bookq7.xls + INSERT文でデータを挿入して「商品」表を完成させる。下記は既に入っているシャンプーの例である。全部挿入したら select * でテーブル全体を表示させる。 insert into [商品$] (商品コード,商品名,単価) values('A5023','シャンプー',500); + INSERT文でデータを挿入して「販売」表を完成させる。全部挿入したら select * でテーブル全体を表示させる。 ** テーブルの結合(結合演算) [#yd6a2a91] データベースを結合するJOIN演算は、where句で複数のテーブルの結合するフィールドを = で並べることでできる。 >''【基本構文】 select フィールド名 from テーブル名1,テーブル名2,... where テーブル名1.フィールド名=テーブル名2.フィールド名,... ; '' < select 商品名,販売数量 from [商品$],[販売$] where [商品$].商品コード=[販売$].商品コード selectのフィールド名の指定が、どのテーブルのものか紛らわしくなるときは(特に「SQLの窓」はバカなので)、「テーブル名.フィールド名」と指定しなければならない。 select [商品$].商品名コード,単価 from [商品$],[販売$] where [商品$].商品コード=[販売$].商品コード *** 課題3 [#eb38dc17] + 下記のSQL文を実行して、結合演算について理解しなさい。 select [商品$].商品コード,商品名,販売数量 from [商品$],[販売$] where [商品$].商品コード=[販売$].商品コード + 教科書問7のSQLを「SQLの窓」のために書き直すと以下のようになる。実行してなぜこのようになるのか動作を理解しなさい。 select [商品$].商品コード,SUM(単価*販売数量) from [商品$],[販売$] where [商品$].商品コード=[販売$].商品コード group by [商品$].商品コード order by SUM(単価*販売数量) + 上記を応用して、売上を得意先別にまとめるSQLを作成して検索しなさい。 ** 課題の提出について [#ncb396f7] - 課題1〜課題3を解いたら、解答のSQLと出力結果を、私にメールしてください。 - 長い出力結果は、最初の1行、最後の1行、行数でいいです。 hi-shiozawa(at)engs.tamagawa.ac.jp -- ↑ (at)を半角文字(@)にしないと送れません。
テキスト整形のルールを表示する