SQL言語の説明とSQLの体験
SQL(Structured Query Language)言語は、RDBMS(リレーショナルデータベース)のテーブルの設計とデータベースを 操作するための言語です。ここでは、データベースを操作する言語を中心に説明します。全国単位制高等学校のデータをもとに、 実際にSQLを一部体験できるようにしました。

体験データのテーブル構成
1 テーブル名 学校データ
学校コード 県コード 学校名 学科コード
1001 1 北海道立北海道有朋高等学校 1       
1089 14
神奈川県立神奈川総合高等学校 1
1282 47 沖縄県立泊高等学校 1

2 テーブル名 県データ 
県コード
県名
1
北海道
47
沖縄県

3 テーブル名 学科データ 
学科コード
学科名
1
普通科
2
総合学科

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と正規化