「基礎からはじめるデータベースセミナー」は、データベースの知識を習得するにはまず何から始めたらよいのかと、書籍やセミナー情報を探している方のためのセミナーです。
日本オラクル株式会社 井上 学 (いのうえ まなぶ) 山田 真二郎(やまだ しんじろう)
「基礎からはじめるデータベースセミナー」は、データベースの知識を習得するにはまず何から始めたらよいのかと、書籍やセミナー情報を探している方のためのセミナーです。これまでデータベースに触れたことのない方や、おもにメインフレームやオフコンを中心に扱ってきたために、オープンな環境で動くリレーショナル・データベースに携わった経験がない人たちや営業職の方向けに、「そもそもデータベースって何だろう?」というところから始まり、リレーショナルデータベースのしくみとOracle Databaseのアーキテクチャを基本から学習することを目的としています。今回は、その第5回目の講義です。「SQL」について詳しくご説明します。
講師
生徒
第4回の講義で学んだとおり、SQLはリレーショナル・データベースを構成する主要な構成要素の1つですよね?
はい、そうです。ではまずはじめに、前回の講義の内容を軽く復習しましょう。 SQLは、データベースを操作するための言語で、3つの種類に区分されます。
また、SQLはC言語などとは違い、非手続き型言語です。つまり、if…then…やloopなどを使って細かい処理を個々にソースに記述するのではなく、一文で問い合わせを実行します。
これにより、データベースの操作がきわめて容易になるのですね。
ただし、場合によってはif…then…などを使って手続き型のような処理をおこなう必要があるときもあります。そのような場合は、C言語、JAVA、またはPL/SQLにSQLを組み込むことで手続き型の処理と組み合わせることができます。
では早速、SQLを使ってデータを操作してみましょう。
今回の講義で使用する表(EMPLOYEE表)を考えてみます。EMPLOYEE表に格納するデータは、社員番号(empno)、名前(empname)、職種(job)、電話番号(tel)、部門番号(deptno)、給与(salary)の6つのデータを格納する表を利用します。
表を作成するには、CREATE文を使用します。CREATE文の記述方法は、以下のとおりです。
CREATE TABLE [表名] (
列名1 格納するデータ型,
列名2 格納するデータ型,
・・・・・・
列名n 格納するデータ型
);
図1 表(EMPLOYEE表)を作成する
図1は、EMPLOYEE表を作成した場合の例になります。
各列名の後ろに記述している「格納するデータ型」とは何でしょうか?
どのような形式でデータを格納するかを指定するもので、たとえばNUMBERやVARCHAR2などがあります。NUMBERは数値データを格納する際に定義し、VARCHAR2は文字列データを格納する際に定義します。
なるほど。図1の列名と、それが何を表すものかを考えるとよくわかりますね。
1章で作成した表には、データがまだ格納されていません。INSERT文を使用して表にデータを格納してみましょう。INSERT文の記述方法は、以下のとおりです。
INSERTINTO表名(列名1、列名2、・・)VALUE(列名1に挿入するデータの値、列名2に挿入するデータの値、・・・);
図5では、「従業員」表に対して、以下のデータを挿入します。
社員番号:100、名前:佐藤、職種:社長、Tel:03-5213-6666、部門番号:10、給与:5000
社員番号:200、名前:鈴木、職種:技術部長、Tel:06-6457-6777、部門番号:20、給与:1250
社員番号:300、名前:高橋、職種:営業部長、Tel:022-716-6000、部門番号:30、給与:1600
社員番号:400、名前:渡辺、職種:技術、Tel:03-5213-6666、部門番号:20、給与:1100
社員番号:500、名前:田中、職種:営業、Tel:022-716-6000、部門番号:30、給与:1300
図2 データを挿入する(EMPLOYEE表にデータを挿入する)
表からデータを取り出すには、SELECT文を使用します。データを取り出すSELECT文の記述方法は、以下のとおりです。
SELECT カラム名 FROM 表名 WHERE データを取り出す条件; 表からすべてのデータを取り出すには、「*」を使ってすべてのカラムを指定します。
SELECT * FROM EMPLOYEE;
すべての行が取り出されると、これだけでは目的のデータを見つけにくいですね。
はい。そこで次に、条件を付けて取り出すデータの行を絞り込むのです。そのためには、WHERE句を用います。今回は、DEPTNO(部門番号)が20の行のみ取り出すように条件が付きました。
これまでの例ではすべての列を取り出してきました。ここからさらに絞り込んで、必要な行の列の値のみ取り出してみます。DEPTNOが20の行から、名前と給与のデータのみ取り出してみましょう。
図3 1つの表からデータ(DEPTNOが20の行のみ)を取り出す
列も指定すると、欲しいデータのみを取り出すことができてわかりやすいですね。
図4 1つの表からデータ(DEPTNOが20の行のEMPNAMEとSALARYのみ)を取り出す
では次に、単一の表だけでなく複数の表からデータを取り出すことを考えてみましょう。複数の表を結合する場合でも、SQLを実行することにより、簡単に必要なデータを取り出せます。ここでは、EMPLOYEE表とDEPARTMENT表の2つを結合して必要なデータを取り出してみます。2つの表を利用して、EMPLOYEE表に格納されている従業員の名前と、その従業員が所属する部門名のデータを取り出してみます。2つの表を関連付けることにより、 EMPLOYEE表にはなかった部門名を名前とあわせて取り出すことができます。
図5 複数の表からデータを取り出す
データを更新するにはUPDATE文を使用します。UPDATE文の記述方法は、以下のとおりです。
UPDATEテーブル名SET列名=データの値,列名=データの値,・・・WHERE条件;
図6では、社員番号300番の高橋さんのSALARY(給与)を、1,600から2,000に更新します。
図6 EMPLOYEE表からEMPNOが300の給与を2000に変更する
データを削除するにはDELETE文を使用します。DELETE文の記述方法は、以下のとおりです。
DELETE FROM 表名 WHERE 条件;
例)EMPLOYEE表から社員番号:300番のデータを削除する。 DELETE FROM 従業員 WHERE 社員番号=300;
SQLを使用したデータベースの操作について、実際に表を見ながら理解していくととてもわかりやすいですね。表の作成や、データを操作する際には、すべてSQLを利用してデータベースに対する操作がよくわかりました。
リレーショナル・データベースを扱ううえで、SQLは必須となりますから、きちんと復習して身につけてくださいね。
さて、次回は「リレーショナル・データベースのおもな機能」についてご説明します。
"基礎から始めるデータベース入門セミナー" インデックスに戻る
本記事は、「オラクル通信」の同名連載記事から抜粋し、一部に修正を加えたものです。
Copyright © 2010, Oracle Corporation Japan. All rights reserved.
無断転載を禁ず
この文書はあくまでも参考資料であり、掲載されている情報は予告なしに変更されることがあります。日本オラクル社は本書の内容に関していかなる保証もいたしません。また、本書の内容に関連したいかなる損害についても責任を負いかねます。
Oracleは米国Oracle Corporationの登録商標です。文中に参照されている各製品名及びサービス名は米国Oracle
Corporationの商標または登録商標です。その他の製品名及びサービス名はそれぞれの所有者の商標または登録商標の可能性があります。