SQL言語の説明とSQLの体験
|
||||||||||||||||||||||||||||
SQL(Structured Query Language)言語は、RDBMS(リレーショナルデータベース)のテーブルの設計とデータベースを
操作するための言語です。ここでは、データベースを操作する言語を中心に説明します。全国単位制高等学校のデータをもとに、
実際にSQLを一部体験できるようにしました。 体験データのテーブル構成 1 テーブル名 gako
2 テーブル名 ken
3 テーブル名 gaka
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と正規化 |