• 検索結果がありません。

トランザクションの完了 /失敗

 基本形

SQL の分類

 SQL は次のように分類できる

 DDL

Data Definition Language:

データ定義言語

)

テーブルを作る ( CREATE TABLE)

テーブル定義を変更する (ALTER TABLE)

テーブルを消去する (DROP TABLE)

インデックスを作る /変更する /消去する

CREATE/ALTER/DROP INDEX

ビューを作る /変更する /消去する

CREATE/ALTER/DROP VIEW

等々

 DML (Data Manipulation Language

:データ操作言語

)

行を追加する (INSERT)

行を変更する (UPDATE)

行を消去する (DELETE)

行を読む (SELECT)

 DCL (Data Control Language:

データ操作言語

)

トランザクションの完了あるいは破棄の指示

ビューの定義: ビューとは?

 アプリケーションはテーブルの一部しか使わない

 最初からテーブルの一部だけを見せる

 カラム名などもアプリケーション専用にしてしまう

 アプリケーションの追加変更などでテーブルの形が変 わってもアプリケーションは変更せずに済む

 このような「仮想的な」表のことをビューと呼ぶ

 テーブルと同じように扱うことができる

行の「変更」や「追加」「削除」には制限がつくこともある

ビューの定義: 基本形と例

 基本形

CREATE VIEW ビュー名 ( カラム名 , ...) AS select 文;

 例

 CREATE VIEW 社長室 ( 部署名 , 部署 ID, 責任者 ) AS SELECT 部署名 , 部署 ID, 責任者 ID

FROM 部署

WHERE 部署 ID=1;

 効果

 SELECT 責任者 ID FROM 部署 WHERE 部署 ID=1;

少し複雑な SEL: サブクエリ

 WHERE 句の中に SELECT がある例

SELECT 従業員名 FROM 従業員 WHERE 所属 ID IN

(SELECT 部署 ID FROM 部署

WHERE 部署名 LIKE '% 製造 %');

 上記の意味:

読むカラム:従業員名

読むテーブル:従業員

条件:従業員の所属する部署の名前に「製造」が入ってい

ること

プログラム内部から SQL を使う

 2 つのやり方がある

 埋め込み SQL

 プログラム言語を SQL で拡張する

 API を使う

 SQL を文字列としてデータベースに与える

 JDBC, ODBC などいくつかの方法がある

埋め込み SQL

 "EXEC SQL" で始まる文で拡張部を示す

 拡張部では、 : で始まる単語で元のプログ ラムの変数を参照できる

 「カーソル」を使ってプログラム言語との 橋渡しをする

 SQL では一度に複数の行を読むことができる

 プログラム言語では一度に一行しか処理でき ない

 カーソルに SQL の結果をためて一行ずつプロ

グラム言語で処理する

埋め込み SQL の例

void foobar() { int i;

EXEC SQL BEGIN DECLARE SECTION;

char empname[100];

char lastname[50];

char firstname[50];

EXEC SQL ND DECLARE SECTION;

EXEC SQL DECLARE execCursor CURSOR FOR SELECT 従業員名, 姓ふりがな , 名ふりがな FROM 従業員

ODER BY 姓ふりがな, 名ふりがな;

EXEC SQL OPEN execCursor;

while (1) {

EXEC SQL FETCH FROM execCursor

INTO :empname, :lastname, :firstname;

printf(" 従業員名ふりがな:%s%s, 従業員名 %s\n", lastname, firstname, empname);

if (NO_MORE_TUPLES) break;

}EXEC SQL CLOSE execCursor;

埋め込み SQL で使うプロ グラム言語の変数宣言

カーソルの宣言

カーソルを開くとファイルのように一行ずつ 読める 一行ずつ読む

ドキュメント内 2010年度講義資料 DBMS講義 07 SQL (ページ 57-65)

関連したドキュメント