概要
ローカル SQL

BDE（Borland Database Engine）では，ローカル SQL（Structured Query Language）を通じてローカルおよびリモートのデータベーステーブルにアクセスできます。ローカル SQL（「クライアントベース SQL」とも呼ばれます）は ANSI 標準 SQL のサブセットで，Paradox および dBASE のテーブルやフィールド（SQL では「列」と呼ばれます）の命名規則をサポートするように拡張されています。

ローカル SQL では，SQL を使って「リモート」の SQL サーバーだけでなく，データベースサーバー上にない「ローカル」の標準データベーステーブル（たとえば Paradox と dBASE のテーブル）にも問い合わせを行うことができます。またローカル SQL は，ローカルの標準テーブルとリモートの SQL サーバー上のテーブルの両方にまたがるマルチテーブル問い合わせを行うためにも必要です。

命名規則

このトピックでは，ローカル SQL でのテーブルと列の命名規則，構文の拡張と制限について説明します。

SQL 文は，データ定義言語（DDL）とデータ操作言語（DML）の２つに分類されます。

データ操作

テーブルデータの選択，挿入，更新，および削除に使われるデータ操作言語（DML）の SQL 文。このトピックでは，構文と使用例について説明します。

データ定義

テーブルの作成，変更，削除，およびインデックスの作成と削除に使われるデータ定義言語（DDL）の SQL 文。DDL は BDE（Borland Database Engine）の関数呼び出しに直接変換されます。このトピックでは，構文と使用例について説明します。

ANSI 標準 SQL の詳細については，市販の SQL の解説書などを参照してください。

 BDE に関するトピック


命名規則

ANSI 標準 SQL では，テーブル名や列名には英数字とアンダースコア（_）からなる１語しか使えません。ローカル SQL では，よりわかりやすい名前が使えるように拡張されています。

テーブル

ローカル SQL では，テーブル名についてファイルとパスの指定が完全にサポートされています。ただしパスやファイル名拡張子を持つテーブル名は，単一引用符または二重引用符で囲まなければなりません。たとえば，次のようにします。

SELECT * FROM 'PARTS.DBF'

SELECT * FROM "C:\SAMPLE\PARTS.DBF"

ローカル SQL ではテーブル名について BDE のエリアスもサポートされています。たとえば，次のようにします。

SELECT * FROM ":PDOX:TABLE1"

ローカルテーブル名の拡張子を省略すると，BDE 環境設定ユーティリティのシステムページにある「Default Driver」の設定で指定されているものになります。あるいは問い合わせまたはテーブルに結び付けられている標準エリアスのデフォルトドライバと同じ種類のものになります。

またローカル SQL では，単一引用符または二重引用符で囲めば，SQL キーワードと同じ名前をテーブル名として使えます。たとえば，次のようにします。

SELECT PASSID FROM "PASSWORD"

列

ローカル SQL では，以下の条件を満たしていれば，Paradox の複数の語からなる列名，および SQL のキーワードと同じ名前の列名が使えます。

列名が単一引用符または二重引用符で囲まれている

列名の先頭に SQL テーブル名またはテーブル相関名が付けられている

たとえば，次の列名は２語からなっています。

SELECT E."Emp Id" FROM EMPLOYEE E

次の例では，列名は SQL の DATE キーワードと同じです。

SELECT DATELOG."DATE" FROM DATELOG

参照: 予約語


予約語

以下は，ローカル SQL の予約語のアルファベット順の一覧です。

ACTIVE, ADD, AFTER, ALL, ALTER, AND, ANY, AS, ASC, ASCENDING, AT, AUTO, AUTOINC, AVG

BASE_NAME, BEFORE, BEGIN, BETWEEN, BLOB, BOOLEAN, BOTH, BY, BYTES

CACHE, CAST, CHAR, CHARACTER, CHECK, CHECK_POINT_LENGTH, COLLATE, COLUMN, COMMIT, COMMITTED, COMPUTED, CONDITIONAL, CONSTRAINT, CONTAINING, COUNT, CREATE, CSTRING, CURRENT, CURSOR

DATABASE, DATE, DAY, DEBUG, DEC, DECIMAL, DECLARE, DEFAULT, DELETE, DESC, DESCENDING, DISTINCT, DO, DOMAIN, DOUBLE, DROP

ELSE, END, ENTRY_POINT, ESCAPE, EXCEPTION, EXECUTE, EXISTS, EXIT, EXTERNAL, EXTRACT

FILE, FILTER, FLOAT, FOR, FOREIGN, FROM, FULL, FUNCTION

GDSCODE, GENERATOR, GEN_ID, GRANT, GROUP, GROUP_COMMIT_WAIT_TIME

HAVING, HOUR

IF, IN, INACTIVE, INDEX, INNER, INPUT_TYPE, INSERT, INT, INTEGER, INTO, IS, ISOLATION

JOIN

KEY

LEADING, LEFT, LENGTH, LEVEL, LIKE, LOG_BUFFER_SIZE, LOGFILE, LONG, LOWER

MANUAL, MAX, MAXIMUM_SEGMENT, MERGE, MESSAGE, MIN, MINUTE, MODULE_NAME, MONEY, MONTH

NAMES, NATIONAL, NATURAL, NCHAR, NO, NOT, NULL, NUM_LOG_BUFFERS, NUMERIC

OF, ON, ONLY, OPTION, OR, ORDER, OUTER, OUTPUT_TYPE, OVERFLOW

PAGE_SIZE, PAGE, PAGES, PARAMETER, PASSWORD, PIVOT, PLAN, POSITION, POST_EVENT, PRECISION, PRIMARY, PRIVILEGES, PROCEDURE, PROTECTED

RAW_PARTITIONS, RDB$DB_KEY, READ, REAL, RECORD_VERSION, REFERENCES, RESERV, RESERVING, RETAIN, RETURNING_VALUES, RETURNS, REVOKE, RIGHT, ROLLBACK

SCHEMA, SECOND, SEGMENT, SELECT, SET, SHADOW, SHARED, SINGULAR, SIZE, SMALLINT, SNAPSHOT, SOME, SORT, SQLCODE, STABILITY, STARTING, STARTS, STATISTICS, SUB_TYPE, SUBSTRING, SUM, SUSPEND

TABLE, THEN, TIME, TIMESTAMP, TIMEZONE_HOUR, TIMEZONE_MINUTE, TO, TRAILING, TRANSACTION, TRIGGER, TRANSFORM, TRIM

UNCOMMITTED, UNION, UNIQUE, UPDATE, UPPER, USER, USING

VALUE, VALUES, VARCHAR, VARIABLE, VARYING, VIEW

WAIT, WHEN, WHERE, WHILE, WITH, WORK, WRITE

YEAR

演算子:

||, +, -, *, /, <>, <, >, ,（カンマ）, =, <=, >=, ~=, !=, ^=, (, )


データ操作

いくらか制約がありますが，ローカル SQL はデータ操作のための次の文をサポートしています。

SELECT（既存のデータを読み取る）

INSERT（テーブルに新規データを追加する）

UPDATE（既存のデータを変更する）

DELETE（テーブルから既存のデータを除去する）

以下のトピックでは，ローカル SQL の DML 文で利用できる関数について説明しています。

DML 文中の引数置換

統計関数

文字列関数

日付関数

演算子

問い合わせの更新

具体例については，次のトピックを参照してください。

DML の例


SELECT

SELECT 文は，１つ以上のテーブルからデータを読み取る際に使います。複数のテーブルからデータを読み取る SELECT 文は「結合」と呼ばれます。ローカル SQL は次の書式の SELECT 文をサポートしています。

SELECT [DISTINCT] column_list

FROM table_reference

[WHERE search_condition]

[ORDER BY order_list]

[GROUP BY group_list]

[HAVING having_condition]

[UNION select_expr]

注記がある場合を除いて，節はすべて ANSI 標準 SQL と同様に扱われます。[ ] 内の節はオプションです。

column_list にはデータの読み取り元の列を指定します。たとえば，次の文は２つの列からデータを読み取ります。

SELECT PART_NO, PART_NAME

FROM PARTS

SELECT 文の使い方の詳細については，以下のトピックを参照してください。

FROM 節

WHERE 節

ORDER BY 節

GROUP BY 節

HAVING 節

UNION 節

異種結合


FROM 節

FROM 節には，データの読み取り元の１つまたは複数のテーブルを指定します。table_reference には，単一のテーブル，コンマで区切ったテーブルのリスト，または SQL-92 標準で指定されている内部結合または外部結合を指定します。たとえば，次の文では単一のテーブルを指定しています。

SELECT PART_NO

FROM "PARTS.DBF"

次の文は table_reference で左外部結合を指定しています。

SELECT * FROM PARTS LEFT OUTER JOIN INVENTORY

ON PARTS.PART_NO = INVENTORY.PART_NO


WHERE 節

オプションの WHERE 節を使うと，問い合わせによって返される行が，search_condition で指定された条件と一致する行のみに絞られます。たとえば，次の文では PART_NO が 543 を超える列だけが読み取られます。

SELECT * FROM PARTS

WHERE PART_NO > 543

この WHERE 節に IN を含めて，その後に値をカッコで囲んだリストを置くことができます。たとえば，次の文は部品番号が IN の後のリスト内の値に一致する行だけを読み取ります。

SELECT * FROM PARTS

WHERE PART_NO IN (543, 544, 546, 547)

比較演算子 (=，<，>，...) に加えて，IN，ANY，ALL，EXISTS などを使った述語もサポートされています。


ORDER BY 節

ORDER BY 節には，読み取った行を並べる順序を指定します。たとえば，次の問い合わせは全部品を部品名のアルファベット順に読み取ってリストします。

SELECT * FROM PARTS

ORDER BY PART_NAME ASC

次の問い合わせは全部品の情報を，部品番号の数値の降順に読み取ります。

SELECT * FROM PARTS

ORDER BY PART_NO DESC

計算フィールドで並べるには，その相関名を指定するか，またはその位置を数字で指定します。たとえば，次の問い合わせでは計算フィールドである FULL_NAME の順序で行が並べられます。

SELECT LAST_NAME || ', ' || FIRST_NAME AS FULL_NAME, PHONE

FROM CUSTOMER

ORDER BY FULL_NAME

GROUP BY 節または GROUP BY 節で指定した列名すべてが SELECT 節内に出現する必要はありません。


GROUP BY 節

GROUP BY 節には，集合関数について列をどのようにグループ化して読み取るかを指定します。


HAVING 節

HAVING 節には，問い合わせで返されるレコードの条件を指定します。これは，GROUP BY 節と組み合わせて使われる条件式です。HAVING 節の式に一致しないグループは返されません。

HAVING 節では副問い合わせがサポートされます。副問い合わせは，外部または「親」問い合わせで返される列の数を制限するための検索条件のように機能します。WHERE 節を参照してください。

比較演算子 (=，<，>，...) に加えて，IN，ANY，ALL，EXISTS などを使った述語もサポートされています。


UNION 節

UNION 節は，２つ以上の SELECT 文の結果を結び付けて１つのテーブルを作成します。


異種結合

ローカル SQL は異なったデータベース形式のテーブルの結合をサポートしています。このような結合を「異種結合」と呼びます。

テーブル名を指定するには，次のようにします。

ローカルテーブルの場合は，エリアスまたはパスを指定します。

リモートテーブルの場合は，エリアスを指定します。

次の文は，Paradox テーブルと dBASE テーブルからデータを読み取ります。

SELECT DISTINCT C.CUST_NO, C.STATE, O.ORDER_NO

FROM "CUSTOMER.DB" C, "ORDER.DBF" O

WHERE C.CUST_NO = O.CUST_NO

BDE エリアスもテーブル名と組み合わせて使用できます。


INSERT

ローカル SQL は，VALUES を使って挿入する値のリストを指定する方法と，問い合わせ指定を使う方法の２種類の INSERT 文が使えます。

例

次の文は，テーブルに列を追加し，２つの列に値を割り当てています。

INSERT INTO EMPLOYEE_PROJECT (EMP_NO, PROJ_ID) VALUES (52, 党DGPII媒);

次の文は，テーブルに挿入する値を SELECT 文を使って指定しています。

INSERT INTO PROJECTS

    SELECT * FROM NEW_PROJECTS

          WHERE NEW_PROJECTS.START_DATE > 党6-JUN-1994媒;


UPDATE

ANSI 標準の UPDATE 文に対する制約や拡張はありません。


DELETE

ANSI 標準の DELETE 文に対する制約や拡張はありません。


DML 文中の引数置換

DML 文中で値のかわりに変数または引数マーカー（?）を使えます。変数の先頭には必ずコロン（:）がなければなりません。たとえば，次のようにします。

SELECT LAST_NAME, FIRST_NAME

FROM "CUSTOMER.DB"

WHERE LAST_NAME > :var1 AND FIRST_NAME < :var2


集合関数

ローカル SQL では，以下の ANSI 標準 SQL の集合関数をデータの読み取りに使えます。

SUM()（列内のすべての数値の合計を求める）

AVG()（列内のすべての非 NULL 数値の平均を求める）

MIN()（列内の最小値を求める）

MAX()（列内の最大値を求める）

COUNT()（指定された条件と一致する列内の値の個数を数える）

以下に示されているように，集計関数内での式の使用もサポートされています。

      SUM( Field * 10 )

      SUM( Field ) * 10

      SUM( Field1 + Field2 )


文字列関数

ローカル SQL は，読み取り，挿入，更新時に，以下の ANSI 標準 SQL の文字列操作関数をサポートしています。

UPPER()（文字列を大文字に変える）

LOWER()（文字列を小文字に変える）

TRIM()（文字列の左端，右端，または両端で指定された文字が繰り返されている部分を除去する）

SUBSTRING()（文字列から部分文字列を作成する）


部分文字列

SUBSTRING() は，文字列を引数にとり，その文字列の部分文字列を作成します。

   SELECT SUBSTRING( CUSTNAME FROM 1 FOR 10 )  FROM CUSTOMER

この問い合わせでは，CUSTNAME 列の先頭から 10 文字が返されます。


日付関数

ローカル SQL は，日付や時間のフィールドから単一の数値フィールドを分離する EXTRACT() 関数をサポートしています。EXTRACT の構文は以下のとおりです。

EXTRACT (extract_field FROM field_name)

たとえば，次の文は DATE フィールドから年の値を抽出します。

SELECT EXTRACT(YEAR FROM HIRE_DATE)

FROM EMPLOYEE

この関数を使って，MONTH，DAY，HOUR，MINUTE，および SECOND も抽出できます。

ノート:	EXTRACT は TIMEZONE_HOUR および TIMEZONE_MINUTE 節はサポートしていません。


演算子

ローカル SQL は以下の演算子をサポートしています。

種類	演算子

算術	+   　-　   *     /

比較	<     >     =    <>     >=      <=
IS NULL   IS NOT NULL

論理	AND     OR      NOT

文字列連結	||


更新可能な問い合わせ

ローカル SQL は，シングルテーブルとマルチテーブルの更新可能な問い合わせをサポートできるように拡張されています。

更新には以下のような制限があります。

リンクしているフィールドは更新できない

インデックスを切り替えるとエラーが発生する

ライブ問い合わせに対する制限

ライブ問い合わせのセマンティクス（意味論）では，すべてのデータ操作メソッドは，BDE 関数「DbiOpenTable」が返すカーソルハンドルに機能的にも意味的にも似ているカーソルハンドルを返します。

シングルテーブルの問い合わせまたはビューは以下のような制限に従うときに更新可能です。

JOIN，UNION，INTERSECT，MINUS 操作はない

SELECT では DISTINCT キーワードはない（この制限は，インデックスのすべてのフィールドについて行う場合には適用されないこともあります）

SELECT 節で指定されるものは単純な列参照または計算フィールドであり，集計操作は行えない

FROM 節で参照されるテーブルは，更新可能な基本テーブルまたは更新可能なビューのどちらかである

GROUP BY 節，HAVING 節はない

FROM 節内のテーブルを参照する副問い合わせはなく，相互に関連する副問い合わせもない

ORDER BY 節の条件を満たすためにインデックスを使用できる

フィールドまたはカーソルメソッドに対してはさらに制限が適用されることがあります。ORDER BY 節の条件を満たすためにインデックスが使われると，BDE 関数「DbiSwitchToIndex」はエラーを返します。

ライブ結合に対する制限

ライブ結合は複合カーソルに関連しています。ライブ結合は，以下の場合にのみ使用できます。

すべての結合が左から右の外部結合である

すべての結合が等結合である

すべての結合条件を満たすためにインデックスを使用できる（Paradox と dBASE の場合）

出力順が定義されていない

結合内のテーブルはすべて基本テーブルである

問い合わせには，シングルテーブルの更新ができなくなるような上記の要素が含まれない

制限事項

実行の前に問い合わせ文プロパティ「stmtCONSTRAINED」を TRUE に設定すれば，更新可能な問い合わせに制約を加えることができます。変更または挿入によって結果セットから新しいレコードがなくなるとエラーが返されます。

計算フィールド

計算フィールドのある更新可能な問い合わせでは，追加のフィールドプロパティによって，結果フィールドは読み出し専用フィールドおよび計算フィールドであるとみなされます。BDE 関数「DbiPutField」を呼び出すと，関連するすべてのフィールドが再計算されます。

問い合わせ結果に対する BDE 関数の呼び出し

問い合わせがカーソルハンドルを返す場合，そのカーソルハンドルは，「DbiOpenTable」から返されるカーソルハンドルが持つ低レベルの問い合わせ機能を完全にサポートします。したがって，結果セットにさらに制約を加える場合には，フィルタとフィールドマップを適用することができます。「DbiAddIndex」や「DbiSwitchToIndex」の一部の操作は，開いているテーブルのカーソルハンドルの場合とは異なり，サポートされていません。


DML の例

以下の例は，標準データベースに対する DML 文を示しています。

例 1: UPDATE

update goods
set city = 'Santa Cruz'
where goods.city = 'Scotts Valley'

例 2: INSERT

insert
into goods ( part_no, city )
values ( 'aa0094', 'San Jose' )

例 3: DELETE

delete
from goods
where part_no = 'aa0093'

例 4: SELECT（結合）

次の例は，JOIN と同じ働きをするものとして SELECT 文がどのようにサポートされているかを示しています。

select distinct p.part_no, p.quantity, g.city
from parts p, goods g
where p.part_no = g.part_no
and p.quantity > 20
order by p.quantity, g.city, p.part_no

結合を行う SELECT 文には WHERE 節がなければなりません。WHERE 節には，等価チェックにおいて少なくとも１つのフィールドが含まれます。

例 5: 副選択

副選択問い合わせがサポートされています。次の例はその構文を示しています。

select p.part_no
from parts p
where p.quantity in
(select i.quantity
from inventory i
where  i.part_no = 'aa9393')

例 6: GROUP BY

次の例は，GROUP BY 節の使い方を示しています。

select part_no, sum(quantity) as PQTY
from parts
group by part_no

ノート:	SELECT 節で集計を行う場合には，GROUP BY 節を使って集計対象となるフィールドをグループ化するようにします。

例 7: ORDER BY

次の例は，DESCENDING 節を使った ORDER BY 節の使い方を示しています。

select distinct customer_no
from "c:\data\customer"
order by customer_no descending


データ定義

ローカル SQL はテーブルの作成，変更，およびドロップ，ならびにインデックスの作成とドロップを行うためのデータ定義言語（DDL）をサポートしています。

ビューがサポートされています。

ローカル SQL では DDL 文中の変数は値に置換できません。

以下の DDL 文がサポートされています。

CREATE TABLE

ALTER TABLE

DROP TABLE

CREATE INDEX

DROP INDEX

CREATE VIEW

具体例については，次のトピックを参照してください。

DDL の例


CREATE TABLE

CREATE TABLE は以下の制限付きでサポートされています。

ドメインに基づく列定義はサポートされていません。

制約条件は，Paradox については一次キーのみに設定できます。dBASE についてはサポートされていません。

たとえば，次の文は LAST_NAME 列と FIRST_NAME 列に一次キー制約条件を持つ Paradox テーブルを作成します。

CREATE TABLE "employee.db"

(

LAST_NAME CHAR(20),

FIRST_NAME CHAR(15),

SALARY NUMERIC(10,2),

DEPT_NO SMALLINT,

PRIMARY KEY(LAST_NAME, FIRST_NAME)

)

この文を dBASE テーブルに適用するには，一次キー定義を取り除かなければなりません。

CREATE TABLE "employee.dbf"

(

LAST_NAME CHAR(20),

FIRST_NAME CHAR(15),

SALARY NUMERIC(10,2),

DEPT_NO SMALLINT

)

Paradox および dBASE のテーブルの作成

ローカル SQL を使って Paradox および dBASE のテーブルを作成するには，テーブルに名前を付けるときにファイル拡張子を指定します。

".DB"（Paradox テーブル）

".DBF"（dBASE テーブル）

ローカルテーブル名について拡張子を省略すると，BDE 環境設定ユーティリティのシステムページの Default Driver 設定で指定されているものと同じ種類のテーブルが作成されます。

CREATE TABLE でのデータ型マッピング

CREATE TABLE で使われるデータ型に関する SQL の構文と，その各型が BDE で Paradox および dBASE のどの型にマッピングされるかを次の表で示します。

SQL 構文	BDE 論理型	Paradox	dBASE
SMALLINT	fldINT16	整数型	数値型 (6,0)
INTEGER	fldINT32	倍長整数型	数値型 (11,0)
DECIMAL(x,y)	fldBCD	BCD 型	未対応
NUMERIC(x,y)	fldFLOAT	実数型	数値型 (x,y)
FLOAT(x,y)	fldFLOAT	実数型	浮動型 (x,y)
CHARACTER(n)	fldZSTRING	文字型	文字型
VARCHAR(n)	fldZSTRING	文字型	文字型
DATE	fldDATE	日付型	日付型
BOOLEAN	fldBOOL	論理型	論理型
BLOB(n,1)	fldstMEMO	メモ型	メモ型
BLOB(n,2)	fldstBINARY	バイナリ型	バイナリ型
BLOB(n,3)	fldstFMTMEMO	書式付きメモ型	未対応
BLOB(n,4)	fldstOLEOBJ	OLE 型	OLE 型
BLOB(n,5)	fldstGRAPHIC	グラフィック型	未対応
TIME	fldTIME	時間型	未対応
TIMESTAMP	fldTIMESTAMP	日付時間型	未対応
MONEY	fldFLOAT, fldstMONEY	金額型	浮動型 (20,4)
AUTOINC	fldINT32, fldstAUTOINC	カウンタ型	未対応
BYTES(n)	fldBYTES(n)	バイト型	未対応
x = 精度 （既定値はドライバ固有）

y = 小数部 （既定値は 0）

n = バイト長 （既定値は 0）

1-5 = BLOB サブタイプ （既定値は 1）


ALTER TABLE

ローカル SQL は ANSI 標準 の ALTER TABLE 文の次のようなサブセットをサポートしています。次の ALTER TABLE の構文を使うと既存のテーブルに新しい列を追加できます。

ALTER TABLE table ADD column_name data_type [, ADD column_name data_type ...]

たとえば，次の文は dBASE テーブルに列を追加します。

ALTER TABLE "employee.dbf" ADD BUILDING_NO SMALLINT

次の ALTER TABLE の構文を使うとテーブルから既存の列を削除できます。

ALTER TABLE table DROP column_name [, DROP column_name ...]

たとえば，次の文は Paradox テーブルから列を２つドロップします。

ALTER TABLE "employee.db" DROP LAST_NAME, DROP FIRST_NAME

ADD と DROP の操作は１つの文にまとめられます。たとえば，次の文は列を２つドロップし，１つ追加します。

ALTER TABLE "employee.dbf" DROP LAST_NAME, DROP FIRST_NAME, ADD FULL_NAME CHAR[30]


DROP TABLE

DROP TABLE は Paradox または dBASE のテーブルを削除します。たとえば，次の文は Paradox テーブルを削除します。

DROP TABLE "employee.db"


CREATE INDEX

CREATE INDEX を使うと，次の構文によってテーブルにインデックスを作成できます。

CREATE INDEX index_name ON table_name (column [, column ...])

dBASE テーブルのインデックスは，CREATE INDEX によってのみ作成できます。たとえば，次の文は dBASE テーブルにインデックスを作成します。

CREATE INDEX NAMEX ON "employee.dbf" (LAST_NAME)

Paradox については，CREATE INDEX によって作成できるのは二次インデックスのみです。Paradox の一次キーインデックスは，CREATE TABLE で新しいテーブルを作成する際に一次キー制約条件を指定した場合のみ作成できます。


DROP INDEX

ローカル SQL では，インデックスを削除するための ANSI 標準 の DROP INDEX 文の次のようなバリエーションが提供されています。これは dBASE および Paradox のファイル名をサポートするように変更されています。

DROP INDEX table_name.index_name | PRIMARY

PRIMARY キーワードを使うと，Paradox の一次インデックスを削除できます。たとえば，次の文は EMPLOYEE.DB の一次インデックスをドロップします。

DROP INDEX "employee.db".PRIMARY

dBASE の任意のインデックスまたは Paradox の二次インデックスをドロップするには，インデックス名を指定します。たとえば，次の文は Paradox テーブルの二次インデックスをドロップします。

DROP INDEX "employee.db".NAMEX


CREATE VIEW

ビューは，SELECT 文から仮想テーブルを作成します。テーブル上の動く枠または窓を通して，必要なデータだけを参照できます。ユーザーは，複雑に修正された SELECT 文を入力するかわりにビューを使うことによって簡単に選択できます。

CREATE VIEW は，データベース内のテーブルを基礎とするデータのビューを記述します。返す列は，SELECT 文でソーステーブルの列を指定することで定義します。ビューは，物理的に格納されているデータそのものではありません。テーブルの場合と同じように，ビューに対して選択，射影，結合，合併の各操作を行うことができます。

CREATE VIEW では，次の構文を使ってテーブルに対するビューを作成します。

CREATE VIEW view_name [ (column_name [, column_name]...)]

CREATE VIEW は，CDR（クライアントデータリポジトリ）と組み合わせてサポートされています。CDR は，ビューを定義する SELECT 文を格納します。

制限付きビューを作成する「WITH CHECK OPTION」がサポートされています。

ビューに対するビューもサポートされています。ただし，更新可能なビューはすべて制限事項をカスケードするので CASCADE/LOCAL ビュー属性はサポートされていません。


DDL の例

以下の例は，標準データベースに対する DDL 文の使い方を示しています。

例 1a: DDL（DROP TABLE）

テーブル名にピリオド「.」が含まれている場合は名前を引用符で囲みます。

drop table "c:\data\customer.db"

例 1b: DDL（DROP TABLE）

テーブル名にピリオド「.」が含まれていない場合は引用符を使う必要はありません。

drop table clients

例 2: DDL（CREATE INDEX）

create index part on parts (part_no)

Paradox: Paradox の一次インデックスは，テーブル作成するときにのみ作成できます。二次インデックスは，大文字と小文字の区別なく作成されます。

dBASE: dBASE のインデックスは，保守されるインデックスとして作成されます。指定されるインデックス名はタグ名です。

上記以外のインデックスの詳細については，BDE API オンラインヘルプの「DbiAddIndex」 を参照してください。

例 3: DDL（DROP INDEX）

インデックスを削除する構文は「テーブル名.インデックス名」です。

drop index parts.part_no

Paradox: Paradox の場合のみ「テーブル名.primary」は一次インデックスを示します。

drop index parts.primary