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

データベース工学 2011年度資料

N/A
N/A
Protected

Academic year: 2021

シェア "データベース工学 2011年度資料"

Copied!
30
0
0

読み込み中.... (全文を見る)

全文

(1)

データベース工学

2011 年度資料 4

2011/4-7 情報学科 最首 この資料の目次 4 SQL について 4.1 SQL の概要 4.2 データ定義言語について 4.3 データ操作言語について

SQL について

ここではDBMS を操作する SQL について説明する。

4.1 SQL の概要

SQL(Structured Query Language)は IBM 社が開発した関係データベースの処理言語であ る。JIS 規格になっている。情報処理技術者試験では JIS X 3005 の仕様に従う。

SQL はデータ定義言語(DDL data definition language)とデータ操作言語(DML data manipulation language)に分けられる。 データ定義言語(DDL) DDL にはテーブル、ビューの定義(領域確保)、テーブル、ビューの権限の定義などがある。 以下が操作に使うコマンドである。 Create テーブル、ビューを作る Drop テーブル、ビューを削除する Grant テーブル、ビューで権限を与える Revoke テーブル、ビューで権限を取り消す データ操作言語(DML) データ操作言語はデータベースの利用者がデータの選択、挿入、編集、削除などを行うコ マンドからなります。以下がよく使用されるものです。 Select テーブル、ビューの内容を取り出す Delete テーブル、ビューの内容を削除 Insert テーブル、ビューに新たなタプルを挿入 Update テーブル、ビューの内容を変更 SQL ではコマンドはアルファベットの大文字でも小文字でもよい。(insensitive)

4.2 データ定義言語について

CREATE CREATE コマンドは実テーブル、ビューなどを定義するときに使用する。 情報処理技術者試験では以下の3つのCREATE コマンドが出題されている。 CREATE TABLE テーブルを定義するとき使用 CREATE TABLE の構文

(2)

CREATE TABLE テーブル名 ( 列名1 データ型 1 [列制約定義 1], 列名2 データ型 2 [列制約定義 2], ……….. [, テーブル制約定義]) 上記で […定義]としてあるところは、定義することがなければ省略できる。 「テーブル制約定義」を加える時は、前の列定義との間を「,」で区切る。 制約が複数あるときも「,」で区切る。 例 create table 品番(

品番 ID varchar(18) primary key, 入庫数 numeric (9, 0), 出庫数 numeric (9, 0), 受注数 numeric (9, 0), 更新担当者 char (5), 更新日付 char (8), 更新時間 char (6) ) 同じ定義をテーブル制約を使った場合 create table 品番( 品番 ID varchar(18) , 入庫数 numeric (9, 0), 出庫数 numeric (9, 0), 受注数 numeric (9, 0), 更新担当者 char (5), 更新日付 char (8), 更新時間 char (6),

primary key(品番 ID) )

列制約定義「primary key」は品番 ID が主キーであるという制約

この制約は品番ID の値がユニークでかつ未入力が許されないと言う定義。 テーブル制約定義「primary key(品番 ID)」も品番 ID が主キーであるという制約 【データ型】 varchar(整数値) 可変長文字列(但し、最大の長さは整数値で規制) char(整数値) 固定長文字列(長さは整数値) numeric(整数値 1, 整数値 2) 数値(整数値 1 は全体の桁数, 整数値 2 は少数桁) 列制約定義 テーブル制約定義

(3)

(2) 数値 (3) その他 データ型 date yyyy-mm-dd 日付を格納 整合性制約の定義 「CREATE TABLE の構文」で列制約定義、テーブル制約定義を挿入するところがある。 これは[ ..] で囲まれているので、オプションで必要のあるときだけ記述すればよい。 テーブルを定義する時点で、ここに整合性制約(以下、制約と呼ぶ)を設定すれば、データを 入力するときに制約に従って検査が行われ、入力ミスが防げる。 代表的な制約は以下である デフォルト値の設定 非ナル制約 一意性制約 主キー制約 検査制約 参照制約 表明 デフォルト値の設定 DEFAULT 列名を定義するとき、DEFAULT キーワードでデフォルト値を設定する。データ入力時に 値を指定しない場合、デフォルト値が設定される。 例 入庫数 numeric(9, 0) DEFAULT 0 非ナル制約 NOT NULL 指定属性の値が NULL にならないようにする制約 例 入庫数 numeric(9, 0) NOT NULL

一意性制約 UNIQUE 指定した属性に重複する値が入ることを防ぐ制約、電話番号に重複値を入れない場合 例 列制約定義の場合 電話番号 CHAR(15) UNIQUE テーブル制約定義の場合 UNIQUE(電話番号) 主キー制約 PRIMARY KEY ある属性を主キーに指定するとき データ型 数値の範囲 smallint -32768-32767 integer -2147483648-2147483647 int でもよい Numeric numeric(n,m) n:全桁数、m:小数点以下桁数

(4)

例 列制約定義の場合 品番ID varchar(18) PRIMARY KEY テーブル制約定義の場合 PRIMARY KEY(品番 ID)

主キーが複合キー(複数の属性からなる)の場合はテーブル制約定義を使う。(下記) テーブル制約定義の別な例 PRIMARY KEY(属性 1、属性 2) 検査制約 CHECK 指定した属性の値が、指定した条件を満たすものに限定する場合 例 属性単価が100 円以上のものに限定する場合 列制約定義の場合 単価 INT CHECK(単価 >= 100) テーブル制約定義の場合 CHECK(単価 >= 100) 参照制約 2つのテーブルが参照関係にあるときの整合性制約である。 テーブルA の列 属性 1 がテーブル B を参照していると、A の属性 1 は外部キー に指定することができる。参照制約を正義すると以下の制約が発生する。 (1) デフォルトでは、参照元テーブル(A)にデータを追加するとき、外部キーに指定した 属性1(列)の値は、参照先テーブル(B)に登録されたデータ、または NULL 値である。 (2) デフォルトでは、参照先テーブル(B)のデータ(値)を削除、更新する場合、参照元テ ーブル(A)にそのデータ(値)を持ったデータが存在すると、操作できない。 (3) オプションを指定すると、更新、削除の連動を指定できる。 参照制約の構文 列制約定義の構文 PREFERENCES 参照先テーブル名(参照する属性名) | [ON DELETE] | [NO ACTION]

| [ON UPDATE] | [CASCADE] | [SET NULL] テーブル制約定義の構文

FOREIGN KEY (外部キーとなる属性名)

PREFERENCES 参照先テーブル名(参照する属性名) | [ON DELETE] | [NO ACTION]

| [ON UPDATE] | [CASCADE] | [SET NULL]

列制約定義の構文では、その列定義の列名(属性名)が外部キーとなる。 ON DELETE、ON UPDATE の削除、更新での制約である。

(5)

参照先テーブルで削除や更新ができる。このテーブルで外部データを 設定している列にはNULL を設定。

例 CREATE TABLE order_details (

order_id integer REFERENCES order (id), product_id integer REFERENCES product (id), quantity integer CHECK (quantity > 0), PRIMARY KEY (order_id, product_id) ); 情報処理技術者試験問題より (正解 ア) (正解 エ) CREATE VIEW CREATE VIEW はビュー(仮想テーブル)を定義するときに使用 CREATE TABLE で作るテーブルは実テーブルといわれる。このときは物理的に テーブルを作るので、そのテーブルのためのディスク容量は必要。 テーブルの特定部分、または複数のテーブルから選択した部分をビューとして作り、

(6)

利用する。ビューの作成理由は以下である。 ビューならディスクの容量が不要 誤操作を行った場合、データを再度作成できる。実テーブルの場合はご操作はデータの 喪失となる。 セキュリティを考え、参照可能、更新不可能などの設定ができる。 CREATE VIEW の構文 CREATE VIEW ビュー名[列名、列名、…]

AS SELECT ~ [WITH CHECK OPTION] 列名はビューで使用する列名である。

「SELECT ~」には実テーブルからの SELECT 文を書く。この構文は後で述べる SELECT 文に準拠する。

[WITH CHECK OPTION]は、必要なとき挿入するビューのデータの条件である。 更新可能なビュー ビューに対して 挿入、更新、削除による操作が可能である。しかし以下のビュー は読み取り専用で更新はできない。 集合関数(AVG、MAX、その他)を含む操作で作成されたビュー場合 GROUP BY、HAVING を使って作成されたビューいる場合 複数のテーブルの結合、合併などで作成されたビューの場合 同一表に対する副問い合わせで作成されたビューの場合 DISTINCT 使って作成されたビューいる場合 ビューと権限 ビューの権限は、(1)ビューを作成するときの権限、(2)ビューを使用するときの権限 に分けられる。 (1) ビューを作成するときの権限 ビューを作成する利用者をA とする。ビューを作成する時の元になるテーブルを T1,T2 とする。A は T1,T2 に対する SELECT 権限を持つ必要がある。

GRANT OPTION のない SELECT 権限がある場合

A はビューを作成することは可能であるが、ビューの SELECT 権限を他者に 与えることはできない

GRANT OPTION のある SELECT 権限がある場合

A はビューを作成することは可能。ビューの SELECT 権限を他者に与えること もできる。

SELECT 権限での GRANT OPTION とは、下記の GRANT 構文の最後のオプションで ある。

(7)

INSERT 権限、UPDATE 権限、DELETE 権限は更新可能なビューであることが前提 情報処理技術者試験問題には ビューの問題が出ているのでそれを参考に説明する。 例(情報処理技術者試験問題より) (正解 ウ) 問題1 ア、イ、エ は何故更新可能ではないか。 問題2 ア、イ、ウ、エは何をするSQL 文か説明しなさい。 (正解 ア) 問題1 イ、ウ、エ は何故更新可能ではないか。 問題2 ア、イ、ウ、エは何をするSQL 文か説明しなさい。

(8)

(正解 イ)

問題1 ア、ウ、エ は何故更新可能ではないか。

(9)

(正解 イ)

問題1 ア、ウ、エ は何故間違いか?

問題2 ア、イ、ウ、エは何をするSQL 文か説明しなさい。

(10)

CREATE ROLE ロールは、データベースに対する権限をまとめたもの CREATE ROLE の構文 CREATE ROLE ロール名 ロールに1つの権限を与える文の例 GRANT 1つの権限 ON テーブル名 1(またはビュー名) TO ロール名 1つの権限: SELECT、INPUT、UPDATE、DELETE という権限の1つ 上例ではテーブル名1(またはビュー名)に1つの権限を与えるロールをロール名とする。 このロール1 をユーザ U1,U2 に与える場合は以下となる。 GRANT ロール名 TO U1,U2 DROP

CREATE TABLE、CREATE VIEW で作成したテーブル、ビューを、 CREATE ROLE で作ったロールを削除するのは DROP を使用する。 DROP の構文 DROP TABLE テーブル名 DROP VIEW ビュー名 DROP ROLE ロール名 GRANT テーブルやビューの所有者にはそれらを使用するすべての権限が与えられている。 他のユーザには明示的に権限を与えて利用できるようにする。 この権限を与えるのに使用するコマンドがGRANT GRANT の構文 GRANT 権限 1、… ON テーブル名(またはビュー名) TO ユーザ ID1、… [WITH GRANT OPTION]

権限にはALL PRIVILEGES、SELECT、INPUT、UPDATE、DELETE という権限 UPDATE(列名、…) で与える列名を制限できる

WITH GRANT OPTION : テーブルを作成したユーザが、与えられた権限を他の ユーザに与えら場合に使用

(11)

(正解 ウ) 問題 ア、イ、エ はどういう権限を与えたり、削除したりしているか。 REVOKE REVOKE の構文 権限を取り消す場合に利用 REVOKE の構文

REVOKE 権限 1、… ON テーブル名(or ビュー名) FROM ユーザ ID1、…

4.3 データ操作言語について

4.3.1 SELECT 文 4.3.1.1 SELECT 文の基本的利用法 データベースからデータを読み出す操作をSELECT 文で行う。 この操作をQUERY(問合せ)という。 リレーションR(A,B,…)をテーブルであらわす。リレーション R では属性 A,B,…で 表現したが、それらはテーブルでは列名となる。 リレーショナルデータモデルとSQL の違いとして以下がある。 SQL では集合関数(aggregate function)として、COUNT、SUM,AVG,MAX,MIN など を使える。

SQL では DISTINCT 指定、GROUP-BY 句、HAVING 句、ORDER-BY 句の指定が可能 SQL で探索条件を指定するとき比較演算子、BETWEEN,LIKE,NULL,EXISTS 述語 などを使える 1つのテーブルに対するSELECT 文の構文 SELECT 列名 1、列名 2、...または * FROM テーブル名 WHERE 条件式 抽出する列名を「列名1、列名 2、...」としてある。ここには列名の並びの他に以下 のものが指定できる。 * すべての列(属性) ‘文字列定数’ 文字列定数を列の値とするとき 計算式 計算式の結果を列の値とするとき

集合関数 集合関数SUM( ),AVG( ),MAX( ) などの関数の結果を列の値 とするとき

(12)

条件式 抽出するタプルの絞り込みに使用 SELECT 文で、「列名 1、列名 2、...」で列名 x は変数といえる。条件式にこれらの 変数を使った条件を書く。変数としては、この列名になくても、テーブル名のテーブ にあるすべての属性が使える。 ここでは「SELECT 文でデータをデータベースから取り出す」と呼ぶ。 例1 商品テーブルを以下とすると、「全商品の全属性を取り出す」命令は以下である。 SELECT * FROM 商品 商品 商品番号 商品名 原価 売価 定価 M110 AAAA 4000 4600 5000 M120 AABB 2500 2800 3200 M130 BBBB 3500 3800 4000 M140 BBCC 1200 1500 1600 M150 CCCC 700 800 1000 例2 注文テーブルから「顧客 ID を取り出す」命令は以下である。 SELECT 顧客 ID FROM 注文 注文 注文日 顧客 ID 商品名 数量 単価 2009/1/10 C1 AAAA 5 5,000 2009/1/10 C1 BBBB 3 4,000 2009/1/15 C2 BBBB 6 4,000 2009/1/20 C3 AAAA 3 5,000 2009/1/20 C3 CCCC 10 1,000 2009/1/25 C4 BBBB 3 4,000 例3 例 3 注文テーブルから「顧客 ID を取り出す、重複は除去する」命令は以下である。 SELECT DISTINCT 顧客 ID FROM 注文

例4 商品テーブルから商品番号、定価、定価の 2 割引きの値を求める SQL 文は以下 SELECT 商品番号、定価、定価*0.8 FROM 商品

例5 商品テーブルから定価が 2000 円以上のタプルの全属性値を求める SQL 文は以下 SELECT * FROM 商品 WHERE 定価>= 2000

(13)

SELECT * FROM 商品 WHERE 定価 BETWEEN 1500 AND 4000 AND 売価<=原価*1.2

WHERE 句の「売価」、「原価」は商品テーブルの属性で、変数となる。 例8 注文テーブルから注文した商品の総数を顧客 ID 毎に分ける SQL 文は以下 SELECT 顧客 ID、SUM(数量) FROM 注文 GROUP BY 顧客 ID WHERE 句の「顧客 ID」は注文テーブルの属性で、変数となる。

例9 注文テーブルか注文総数が 10 以上の顧客について顧客 ID と注文総数を求める SQL 文は以下

SELECT 顧客 ID、SUM(数量) FROM 注文 GROUP BY 顧客 ID HAVING SUM(数量)>=10 例10 以下のテーブル「成績」で、名前が「isao」である学生をの学籍番号、名前を 求めるSQL 文は以下である。

SELECT 学籍番号、名前 FROM 成績 WHERE 名前 LIKE ’%isao’

LIKE を使うと、文字列の一部のみ指定して一致するものを求めることができる。 「%」は文字列の長さが0以上の任意の文字列と一致することを表す。「_」は任意の 1 文字と一致することを表す。 成績 学籍番号 名前 国語点数 数学点数 英語点数 住所コード 05j3001 Inoueisao 30 80 40 3 05j3002 Ootukamegumi 54 25 82 5 05j3003 Suzukitakashi 50 45 65 2 05j3004 Takahashishin 40 77 51 1 05j3005 Tanakayasuko 82 43 10 1 05j3006 Nakamurashun 57 62 49 2 05j3007 hasegawamachiko 31 71 71 1 05j3008 Henmimidori 91 34 66 3 05j3009 Matudaisao 45 67 45 3 05j3010 Matumurajin 28 82 39 2 05j3011 Yamadadaisuke 76 55 61 1 05j3012 yamamotoryoko 55 43 43 1 05j3013 wakabayasitomoko 68 31 51 4 05j3014 Watanabenaoki 83 46 60 1 問題 上記の例1 から例 10 の SQL 文を実行したとき得られるテーブルを書きなさい。 情報処理技術者試験問題より

(14)

(正解 ウ)

(15)

(正解 ウ)

クラブ<>’テニス’ の演算結果は、「等しくない」場合真であるが、クラブ名が「-」の場 合は「偽」となる。

(16)

(正解 ウ)

問題 ア、イ、エを得ることができるSQL 文を書け。

(17)

(正解 イ)

(18)

(正解 イ)

SELECT 部品区分、COUNT(*) AS 部品数、SUM(在庫量) AS 在庫合計 FROM 部品 GROUP BY 部品区分

(19)

(正解 エ)

上記問題は NOT( A AND B) は(NOT A)OR(NOT B)に展開できることを利 用する。 4.3.1.2 複数のテーブルを結合する SQL 文の例 複数テーブルに対するSELECT 文の構文 SELECT 列名 1、列名 2、...または * FROM テーブル名 1, テーブル名 2,… WHERE 条件式 抽出する列名を「列名1、列名 2、...」としてある。 2テーブルの場合、「列名」を「テーブル名k の列名」として以下で書く。 テーブルk・列名 例21 商品、注文という 2 テーブルで商品名が同じタプルのすべての属性値を新しい タプルとするデータを求める

(20)

この例で、商品.*、注文.* は商品テーブル、注文テーブルの全属性を表す。 例22 商品情報の全てと、それを注文した顧客 ID、注文数量を求める SQL 文

SELECT 商品.*、注文.顧客 ID、注文.数量 FROM 商品、注文 WHERE 商品.商品名=注文.商品名 顧客テーブルを以下とする。 顧客 顧客 ID 顧客名 C1 佐藤 C2 中村 C3 田中 C4 加藤 例23 注文状況を示す全ての商品名、顧客名、注文数量の組を求める SQL 文 SELECT 商品名、顧客名、注文.数量 as 注文数量 FROM 商品、注文、顧客名 WHERE 商品.商品名=注文.商品名 AND 注文.顧客 ID=顧客.顧客 ID 注文テーブルの数量を、列名を注文数量としてデータを取得。 上記の場合、商品名は「商品.商品名=注文.商品名」で決まるのでテーブル名.商品名 としなくてもよい。顧客名は顧客テーブルにある属性で、他のテーブルにはないので 属性名だけでよい。 例24 自己結合(self-join)の例: 自己結合の典型的な例は以下である。 社員(社員番号、社員名、給与、上司) テーブル例 社員 社員 ID 従業員名 給与 上司 135 INAGAKI 60 240 240 KIMURA 50 NULL 184 KUSANAGI 60 135 235 KATORI 40 240 上司属性には、社員番号が入る。社員番号は社員テーブルの主キーなので、 上司に社員番号が入るとは、属性上司が外部キーであることを意味する。 この例で、上司より高給を取っている社員番号と、その上司の社員番号を求めるSQL 文 SELECT X.社員番号、Y.社員番号 FROM 社員 X、 社員 Y

(21)

(正解 ア)

問題 イ、ウ、エを取り出すSQL 文書け。 問題の考え方

SELECT DISTINCT S1.生年、S2.生年 FROM 社員 AS S1, 社員 AS S2 というタプルの一部は以下である。1943 は2つあるが、省略した。 1943 1968 1970 1953 1954 1962 1975 1961 1957 1943 (1943,1943) 1968 (1968,1953) 1970 1953 1954 1962 1975 1961 1957 (1957,1957) 上記のテーブルで、(1943,1943)と書いたのは、(0001,織田信夫,1943,0001, 織田信夫,1943) という直積で得られる1つのタプルのS1 の生年と S2 の生年のみを書いた。

(22)

直積にはを合計 100 個のタプルがある。(1943,1943),(1943,1943),が要素 S1 生年の値が 「1943」のタプルである。これを S1.生年でグループ化し、S1.生年>=S2.生年 なるタプ ルは2 個である。これが COUNT(*)の値である。S1.生年の値が「1953」の場合(1953,1943), (1953,1943),(1953,1953)となり、S1.生年>=S2.生年 なるタプルは 3 個である。 DISTINCT が付いているので、「ア」が正解となる。 (正解 エ) 問題の考え方

SELECT X.会員名 FROM 会員 X,会員 Y WHERE X.リーダ会員番号=Y.会員番号 は下記の結果となる。 X Y 会 員 番号 会員名 生年月日 リーダ会員 番号 会 員 番号 会員名 生年月日 リーダ会員 番号 001 田中 1960-03 002 002 鈴木 1970 002 002 鈴木 1970 002 002 鈴木 1970 002 003 佐藤 1975 002 002 鈴木 1970 002 004 福田 1960-10 004 004 福田 1960-10 004

(23)

自然結合 NATURAL JOIN 外部結合 OUTER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN 内部結合の表記方法 構文1 SELECT 列名 1,列名 2,… FROM テーブル 1, テーブル 2, …. WHERE テーブル 1.列名 1=テーブル 2.列名 1 (FROM の後に複数のテーブルを並べ、WHERE 句で選択条件を書く) 構文2

SELECT 列名 1,列名 2,… FROM テーブル 1 [INNER]JOIN テーブル 2 ON テーブル 1.列名 1=テーブル 2.列名 1

または以下

SELECT 列名,列名,… FROM テーブル 1 [INNER]JOIN テーブル 2 USING (列名,…)

(INNER JOIN または JOIN と、ON 句、USING 句で選択条件を書く。 テーブル1とテーブル2 の列名が同じなら USING を使う)

外部結合の表記方法 左外部結合の構文

SELECT 列名 1,列名 2,… FROM テーブル 1 LEFT [OUTER] JOIN テーブル 2 ON テーブル 1.列名 1=テーブル 2.列名 1

または以下

SELECT 列名,列名,… FROM テーブル 1 LEFT [OUTER] JOIN テーブル 2 USING (列名,…)

(INNER JOIN または JOIN と、ON 句、USING 句で選択条件を書く。 テーブル1とテーブル2 の列名が同じなら USING を使う)

右外部結合の構文

SELECT 列名 1,列名 2,… FROM テーブル 1 RIGHT [OUTER] JOIN テーブル 2 ON テーブル 1.列名 1=テーブル 2.列名 1

全外部結合の構文

SELECT 列名 1,列名 2,… FROM テーブル 1 FULL [OUTER] JOIN テーブル 2 ON テーブル 1.列名 1=テーブル 2.列名 1

「A 外部結合 B」の場合、左外部結合では A の値すべてが結合の対象になる。 右外部結合ではB の値すべてが結合の対象になる。

全外部結合ではA または B に値があれば、結合の対象になる。

(24)

(正解 ア)

問題 上記問題の「LEFT OUTER JOIN」を「RIGHT OUTER JOIN」、「FULL OUTER JOIN」の場合、どのような結果になるか。

4.3.1.3 入れ子型質問での SQL 文の例

SQL では SELECT 文の WHERE 句の探索条件に、別な SELECT 文が入ることがる。 WHERE 句の探索条件に入る SELECT 文を入れ子型質問(nested query)、あるいは部分 質問という。入れ子は何段になってもよい。

(25)

Type1:内側の SELECT 文と外側の SELECT 文で全く関係なく処理できる入れ子型質問 (SELECT 文の入る条件)を最初に実行し、WHERE の条件を決定する。

その条件を使って、外側のSELECT 文を実行する。

例31 商品名 AAAA の商品を注文している顧客の顧客 ID と顧客名を求める SQL SELECT 顧客 ID,顧客名 FROM 顧客

WHERE 顧客 ID

IN (SELECT 顧客 ID FROM 注文 WHERE 商品名=’AAAA’) (SELECT …)の実行結果は以下である。

この結果から上記のSQL 文は以下となる。

SELECT 顧客 ID,顧客名 FROM 顧客 WHERE 顧客 ID IN (C1,C3) この質問は次の結合質問でも書ける。

SELECT 顧客 ID,顧客名 FROM 注文、顧客

WHERE 注文.顧客 ID=顧客.顧客 ID AND 注文.商品名=’AAAA’

Type2:入れ子になっている質問を外側のリレーションから1つづつタプルを取り出しなが ら処理する。

(SELECT 文の入る条件)の中に、外側の SELECT 文の変数値を使っている場合に 起きる。

例32 例 31 を Type2 で求める SQL 文

SELECT 顧客 ID,顧客名 FROM 顧客 WHERE ‘AAAA’ IN

(SELECT 商品名 FROM 注文 WHERE 顧客 ID=顧客.顧客 ID)

(SELECT 商品名 FROM 注文 WHERE 顧客 ID=顧客.顧客 ID)は以下でもよい。 (SELECT 商品名 FROM 注文 WHERE 注文.顧客 ID=顧客.顧客 ID)

この顧客.顧客 ID が決まると、IN(SELECT …)が決定する。

この文は、SELECT 顧客 ID,顧客名 FROM 顧客 で得られる全タプルについて、 入れ子型質問を検査する。

例33 平均定価より高い商品の商品名を求める SQL 文

SELECT 商品名 FROM 商品 WHERE 定価>(SELECT AVG(定価) FROM 商品) 問題 例31~33 での SQL 文を実行したとき得られるテーブルを書きなさい。

情報処理技術者試験問題より

顧客 ID C1 C3

(26)
(27)

WHERE NOT EXISTS(SELECT 製品番号 FROM 在庫 WHERE 在庫数>30 AND 製品.製品番号=在庫.製品番号) 最初の SELECT は「主問い合わせ」、2 行目の SELECT を「副問い合わせ」という。 主問い合わせを1 行処理する毎に副問い合わせ処理を実行する問題である。 (正解 エ) 4.3.1.4 SQL のリレーショナル完備性 リレーショナルDML がリレーショナル代数、あるいはリレーショナル論理の質問記述 能力があるとき、リレーショナル完備という。リレーショナル代数の5つの演算 和、 差、直積、射影、選択 について対応するSELECT 文を示す。 和のSQL 文 R∪S SELECT * FROM R UNION SELECT * FROM S 差のSQL 文 R-S

(28)

SELECT * FROM R

WHERE NOT EXISTS (SELECT * FROM S) 直積のSQL 文 R×S

SELECT R.*、S.* FROM R,S 射影のSQL 文 R[A1,A2,…,Ak]

SELECT A1,A2,…,Ak FROM R 選択のSQL 文 R[A1θA2]

(29)

4.3.2 INSERT 文 テーブルに新しいタプルを挿入するときの命令 INSERT 文の構文 INSERT INTO テーブル名[(列名,…)] 挿入内容 挿入する列をきめて挿入するときテーブル名(列名,…) とする。 挿入内容 ①VALUES(データ 1、データ 2、...) 挿入する値(定数)、または NULL をカンマで区切って挿入 ②SELECT 文で挿入 SELECT 文で抽出したタプルを挿入。複数のタプルの挿入が可能 例1

INSERT INTO DEPT(DEPTNO,DNAME,LOC) VALUES(70,'SHOP','OSAKA'); 問題1 この命令は、何というテーブルの何という列(属性)にどういう値を入れるか。 問題2 テーブル 履修 0、履修 1 を以下とする。履修 1 の内容を履修 0 にコピーする INSERT 文を書け。

「INSERT INTO ??? SELECT DISTINCT ???」で答えなさい。

履修0 履修1 学生名 科目名 学生名 科目名 伊藤俊介 データベース 伊藤俊介 データベース 伊藤俊介 人工知能論 佐野秀和 プログラミング1 佐野秀和 データベース 4.3.3 UPDATE 文 テーブルのデータを変更するとき使用するコマンド UPDATE 文の構文 UPDATE テーブル名 SET 列名=変更内容、... WHERE 条件式 列名=変更内容 をカンマで区切って複数並べることができる。 変更内容は定数、計算式、NULL が指定できる 条件式は変更データ(タプル)を絞り込むために使う 条件を省略した場合は指定した表の全行が更新対象となる。 問題 下記のUPDATE 文はどのうような更新をするか?

UPDATE DEPT SET LOC ='KYOTO' WHERE DEPTNO = 70;

対象とするテーブル名、タプルを絞り込む条件、どの属性(列)をそのように更新するか を答えなさい。

(30)

4.3.4 DELETE 文 テーブルのデータ(タプル)を削除するとき使用するコマンド DELETE 文の構文 DELETE FROM テーブル名 WHERE 条件式 条件式は削除データ(タプル)を絞り込むために使う 条件を省略した場合は指定した表の全行が削除の対象となる。 問題 下記のDELETE 文はどのうような更新をするか?

DELETE FROM DEPT WHERE DEPTNO < 70;

参照

関連したドキュメント

第一,同源唯定的珸素如何処理?一一考i正河源看来是最踏実的方法,但不能保旺那神

Der Kaiser - so heißt es - hat Dir, dem Einzelnen, dem jämmerlichen Untertanen, dem winzig vor der kaiserlichen Sonne in die fernste Ferne geflüchteten Schatten, gerade Dir hat

儀礼の「型」については、古来から拠り所、手本とされてきた『儀礼」、『礼記』があり、さらに朱喜

「父なき世界」あるいは「父なき社会」という概念を最初に提唱したのはウィーン出身 の精神分析学者ポール・フェダーン( Paul Federn,

語基の種類、標準語語幹 a語幹 o語幹 u語幹 si語幹 独立語基(基本形,推量形1) ex ・1 ▼▲ ・1 ▽△

しかし,物質報酬群と言語報酬群に分けてみると,言語報酬群については,言語報酬を与

Hoekstra, Hyams and Becker (1997) はこの現象を Number 素性の未指定の結果と 捉えている。彼らの分析によると (12a) のように時制辞などの T

Guasti, Maria Teresa, and Luigi Rizzi (1996) &#34;Null aux and the acquisition of residual V2,&#34; In Proceedings of the 20th annual Boston University Conference on Language