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

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

2 テーブル名 ken 
ken_ko
kenmei
1
北海道
47
沖縄県

3 テーブル名 gaka 
gaka_ko
gaka
1
普通科
2
総合学科

RDBMSは、Postgresを使用し、データベース名は、「taikendb」です。 平成13年度の単位制高等学校のページで使用しているデータの一部を加工して、上のように3つのテーブルを作成しました。 テーブル名(表名)は、それぞれ「gako」「ken」「gaka」です。また、カラム名(表名)は、それぞれのテーブル最初の行に表示してあります。

1.データの表示(1) SELECT文
データベースの中のデータを表示するには、「select」というSQL言語を使います。データベースの検索などに一般的に 使われるものです。
一般的なselect文の文法は、 「select (列名) from 表名 where 条件」です。

注)テーブル名や列名以外の「select」 「*」「from」 等のSQL言語については、半角で入力してください。
「SQL入力画面へ」をクリックすると、SQL入力画面に移動します。

●単純にデータを表示してみる。(問い合わせ処理)SQL入力画面へ
 ◇例題・・・「gako」テーブルからすべての単位制高等学校のデータを表示する。
解     select * from gako

(*は、すべての列を表示する場合に使います。)
 ◆演習1・・・「ken」テーブルからすべての単位制高等学校のデータを表示する。

 ◆演習2・・・「gako」テーブルのgako_koとgakomeiのみ表示する。
   ヒント   select 列名,列名 from gako

 ◆演習3・・・「ken」テーブルをkemei、koen_koの順番で表示する。


●目的のデータのみ表示してみよう。(選択演算)SQL入力画面へ
 ◇例題・・・「gako」テーブルで、gako_ko「1234」の学校を表示する。
解 select * from gako where gako_ko=1234

 ◆演習4・・・「gako」テーブルで、ken_ko「1」で、gako_ko「2001」以降の学校を表示する。
ヒント 条件が複数ある場合は、「and」を間に入れる。以上という条件には「>=」を使う。

 ◆演習5・・・「gako」テーブルで、山で始まる学校を表示する。
ヒント 条件の内容が数値データ以外の場合は、シングルクオートで囲む。例 gakomei='A高校'ワイルドカードを使う場合は、 「=」の変わりに「like」を使う。「%」は任意の文字列、「_」は任意の1文字を示す。

●データを並び替えてみよう。  SQL入力画面へ
データを昇順・降順で表示するには、order by 列名 desc を使います。降順に表示する場合は、「desc」を最後に入力する。 昇順の場合は「asc」を使いますが、「asc」は、省略可能です。

 ◆演習6・・・「gako」テーブルで、gako_koの降順に表示してみる。

 ◆演習7・・・「gako」テーブルで、ken_ko順、gako_ko順に表示してみる。
ヒント 条件が複数ある場合は、半角カンマで区切る。


●複数の表を結合して表示してみよう。(結合演算)SQL入力画面へ
構文 select テーブル名1.列名,テーブル名2.列名 from テーブル名1,テーブル名2 where テーブル名1.列名=テーブル名2.列名

◇例題・・・「gako」テーブルと「ken」テーブルを結合して、gako_ko、kenmei、gakomeiを表示してみる。

解     select gako.gako_ko,ken.kenmei,gako,gakomei from gako,ken where gako.ken_ko=ken.ken_ko
where 以下に結合条件を加える。
別解 select gako.gako_ko,ken.kenmei,gako.gakomei from gako inner join ken on gako.ken_ko = ken.ken_ko
SQL99では、内部結合の場合に、inner joinを使う。これについては、MS Accessとの比較ページで、詳しく 書いてありますのでご覧ください。

 ◆演習8・・・「gako」テーブルと「ken」テーブルと「gaka」テーブルを結合して、gako_ko、kenmei、gakomei、学科名を表示してみる。
ヒント 「and」を入れることで、複数を結合することができる。


2.集合関数SQL入力画面へ
集合関数を利用することにより、値が数値である列の、合計・最大値・最小値・平均値などを求めることができます。
count(*) 行数、 sum(列名) 合計、 avg(列名) 平均値、min(列名)、 max(列名) 最大値
一般的な集合関数文法は、 「select avg(列名) from 表名 where 条件」です。

 ◇例題・・・「gako」テーブルからすべての単位制高校の学校数を求める。

解     select count(*) from gako
 ◆演習9・・・「gako」テーブルからgaka_koの平均値を求める。

 ◆演習10・・・沖縄県の単位制高校の学校数とgako_koの最大値を求める。(沖縄ken_ko=47)

3.グループ化処理SQL入力画面へ
group by を使うことで、同じ列の同じ値のデータをグループ化することができます。
構文 select 列名,集合関数 from テーブル名 group by 列名

 ◇例題・・・「gako」テーブルで、gaka_koごとの学校数をgaka_ko共に表示させる。
解     select gaka_ko,count(*) from gako group by gaka_ko

 ◆演習11・・・「gako」テーブルと「科目データ」テーブルを結合して、同じgaka_koの学校の学科名と 学校数、ken_koの平均、ken_koの最大値を求めなさい。

 ◆演習12・・・「gako」テーブルで、20校以上ある学科の学科名と学校数を表示しなさい。

ヒント 「having」を使う。


4.その他SQL入力画面へ
●サブクエリー(副問い合わせ)
select文で、さらにselectを使う場合を、サクブクエリーと言います。
構文 select ・・・ from ・・・where ・・・ in (select ・・・)

 ◆演習13・・・「gaka」テーブルで、学科名に「総」を含む学科名を内側として、該当する学科の 学校のgakomeiと学科名を表示しなさい。
(副問い合わせ処理をしなくてもSQL文を作ることもできますが、今回は、副問い合わせ処理で構文を作成してみよう。)

●重複行を排除して表示する
distinctを使うと重複した行を排除して表示できます。
 ◆演習14・・・ken_ko25の県の科目コードを、重複する行を排除して表示する。

その他、いろいろ自分で問題を作成してSQL文を勉強してみてください。
解答は、こちらです。
HOMEへ データベーストップへ <<<RDBMSと正規化