|
SQL言語の説明とSQLの体験
|
||||||||||||||||||||||||||||
|
SQL(Structured Query Language)言語は、RDBMS(リレーショナルデータベース)のテーブルの設計とデータベースを
操作するための言語です。ここでは、データベースを操作する言語を中心に説明します。全国単位制高等学校のデータをもとに、
実際にSQLを一部体験できるようにしました。 体験データのテーブル構成 1 テーブル名 学校データ
2 テーブル名 県データ
3 テーブル名 学科データ
RDBMSは、Postgresを使用し、データベース名は、「taikendb」です。 平成13年度の単位制高等学校のページで使用しているデータの一部を加工して、上のように3つのテーブルを作成しました。 テーブル名(表名)は、それぞれ「学校データ」「県データ」「学科データ」です。また、カラム名(表名)は、それぞれのテーブル最初の行に表示してあります。 1.データの表示(1) SELECT文 データベースの中のデータを表示するには、「select」というSQL言語を使います。データベースの検索などに一般的に 使われるものです。 一般的なselect文の文法は、 「select (列名) from 表名 where 条件」です。 注)テーブル名や列名以外の「select」 「*」「from」 等のSQL言語については、半角で入力してください。 「SQL入力画面へ」をクリックすると、SQL入力画面に移動します。 ●単純にデータを表示してみる。(問い合わせ処理)SQL入力画面へ ◇例題・・・「学校データ」テーブルからすべての単位制高等学校のデータを表示する。 解 select * from 学校データ (*は、すべての列を表示する場合に使います。) ◆演習1・・・「県データ」テーブルからすべての単位制高等学校のデータを表示する。 ◆演習2・・・「学校データ」テーブルの学校コードと学校名のみ表示する。 ヒント select 列名,列名 from 学校データ ◆演習3・・・「県データ」テーブルを県名、県コードの順番で表示する。 ●目的のデータのみ表示してみよう。(選択演算)SQL入力画面へ ◇例題・・・「学校データ」テーブルで、学校コード「1234」の学校を表示する。 解 select * from 学校データ where 学校コード=1234 ◆演習4・・・「学校データ」テーブルで、県コード「1」で、学校コード「2001」以降の学校を表示する。 ヒント 条件が複数ある場合は、「and」を間に入れる。以上という条件には「>=」を使う。 ◆演習5・・・「学校データ」テーブルで、山で始まる学校を表示する。 ヒント 条件の内容が数値データ以外の場合は、シングルクオートで囲む。例 学校名='A高校'ワイルドカードを使う場合は、 「=」の変わりに「like」を使う。「%」は任意の文字列、「_」は任意の1文字を示す。 ●データを並び替えてみよう。 SQL入力画面へ データを昇順・降順で表示するには、order by 列名 desc を使います。降順に表示する場合は、「desc」を最後に入力する。 昇順の場合は「asc」を使いますが、「asc」は、省略可能です。 ◆演習6・・・「学校データ」テーブルで、学校コードの降順に表示してみる。 ◆演習7・・・「学校データ」テーブルで、県コード順、学校コード順に表示してみる。 ヒント 条件が複数ある場合は、半角カンマで区切る。 ●複数の表を結合して表示してみよう。(結合演算)SQL入力画面へ 構文 select テーブル名1.列名,テーブル名2.列名 from テーブル名1,テーブル名2 where テーブル名1.列名=テーブル名2.列名 ◇例題・・・「学校データ」テーブルと「県データ」テーブルを結合して、学校コード、県名、学校名を表示してみる。 解 select 学校データ.学校コード,県データ.県名,学校データ,学校名 from 学校データ,県データ where 学校データ.県コード=県データ.県コード where 以下に結合条件を加える。 別解 select 学校データ.学校コード,県データ.県名,学校データ.学校名 from 学校データ inner join 県データ on 学校データ.県コード = 県データ.県コード SQL99では、内部結合の場合に、inner joinを使う。これについては、MS Accessとの比較ページで、詳しく 書いてありますのでご覧ください。 ◆演習8・・・「学校データ」テーブルと「県データ」テーブルと「学科データ」テーブルを結合して、学校コード、県名、学校名、学科名を表示してみる。 ヒント 「and」を入れることで、複数を結合することができる。 2.集合関数SQL入力画面へ 集合関数を利用することにより、値が数値である列の、合計・最大値・最小値・平均値などを求めることができます。 count(*) 行数、 sum(列名) 合計、 avg(列名) 平均値、min(列名)、 max(列名) 最大値 一般的な集合関数文法は、 「select avg(列名) from 表名 where 条件」です。 ◇例題・・・「学校データ」テーブルからすべての単位制高校の学校数を求める。 解 select count(*) from 学校データ ◆演習9・・・「学校データ」テーブルから学科コードの平均値を求める。 ◆演習10・・・沖縄県の単位制高校の学校数と学校コードの最大値を求める。(沖縄県コード=47) 3.グループ化処理SQL入力画面へ group by を使うことで、同じ列の同じ値のデータをグループ化することができます。 構文 select 列名,集合関数 from テーブル名 group by 列名 ◇例題・・・「学校データ」テーブルで、学科コードごとの学校数を学科コード共に表示させる。 解 select 学科コード,count(*) from 学校データ group by 学科コード ◆演習11・・・「学校データ」テーブルと「科目データ」テーブルを結合して、同じ学科コードの学校の学科名と 学校数、県コードの平均、県コードの最大値を求めなさい。 ◆演習12・・・「学校データ」テーブルで、20校以上ある学科の学科名と学校数を表示しなさい。 ヒント 「having」を使う。 4.その他SQL入力画面へ ●サブクエリー(副問い合わせ) select文で、さらにselectを使う場合を、サクブクエリーと言います。 構文 select ・・・ from ・・・where ・・・ in (select ・・・) ◆演習13・・・「学科データ」テーブルで、学科名に「総」を含む学科名を内側として、該当する学科の 学校の学校名と学科名を表示しなさい。 (副問い合わせ処理をしなくてもSQL文を作ることもできますが、今回は、副問い合わせ処理で構文を作成してみよう。) ●重複行を排除して表示する distinctを使うと重複した行を排除して表示できます。 ◆演習14・・・県コード25の県の科目コードを、重複する行を排除して表示する。 その他、いろいろ自分で問題を作成してSQL文を勉強してみてください。 解答は、こちらです。 |
| HOMEへ | データベーストップへ | <<<RDBMSと正規化 |