MiniSQLの仕様

mSQL言語は、ANSI SQLの仕様に準拠して、最低限必要な機能を提供しています。この言語を利用すると、テーブル構造で、データの保存、処理、検索を行うことができます。ビュー、入れ子のクエリーなど、リレーショナルな処理は実行できません。ANSIの仕様で決められたリレーショナルな処理は実行できませんが、複数のテーブル間での「結合」は実行できます。

これ以降の解説では、mSQLのキーワードは大文字で記述されています。しかし、実際のクエリーの指定では、大文字にする必要はありません。


CREATE句

mSQLのCREATE句は、テーブルの作成にのみ使用します。ビューのようなその他の定義を作成することはできません。また、1つのテーブルに対して、1つの主キー・フィールドしか定義できません。キー・フィールドでは、NULL値は認められません。

	CREATE TABLE table_name (

		col_name		col_type		[ not null | primary key ]

		[ , col_name		col_type		[ not null | primary key ] ]**

	)
例えば

	CREATE TABLE emp_details(

		first_name		char(15) not null,

		last_name		char(15) not null,

		dept		char(20),

		emp_id		int primary key,

		salary		int

	)
指定できるデータ・タイプ

DROP句

DROP句は、データベースからテーブル定義を削除するのに使用します。

	DROP TABLE table_name
例えば

	DROP TABLE emp_details


INSERT句

ANSI SQLとは異なり、SELECTをINSERT句に入れ子にすることができません。(すなわち、SELECTが戻したデータを挿入することはできません。) また現在のところ、データを挿入するフィールドの名前も指定する必要があります。フィールド名を指定しないと、挿入するデータを特定することも、正しいフィールドにデータを挿入することもできません。

	INSERT INTO table_name ( column [ , column ]** )

	VALUES (value [, value]** )
例えば

	INSERT INTO emp_details ( first_name, last_name, dept, salary)

	VALUES ('David', 'Hughes', 'I.T.S.','12345')
指定した値の数は、カラムの数と一致しなければなりません。


DELETE句

mSQLのDELETE句は、次のように指定してください。

	DELETE FROM table_name

	WHERE column OPERATOR value

	[ AND | OR column OPERATOR value ]**

演算子として、<、>、=、<=、>=、<>、likeを指定できます。 例えば:
	DELETE FROM emp_details WHERE emp_id = 12345


SELECT句

mSQLのSELECT句は、SQL仕様のSELECTよりも機能が限定されています。 実行できる機能には、次のようなものがあります。 mSQLのSELECTは、次のように指定します。

	SELECT [table.]column [ , [table.]column ]**

	FROM table [ , table]**

	[ WHERE [table.] column OPERATOR VALUE

		[ AND | OR [table.]column OPERATOR VALUE]** ]

	[ ORDER BY [table.]column [DESC] [, [table.]column [DESC] ]

	

	演算子として、<、>、=、<=、>=、<>、likeを指定できます。

	値には、データ値またはカラム名を指定できます。
単純なSELECTは、次のようになります。
	SELECT first_name, last_name FROM emp_details

	WHERE dept = 'finance'
検索したデータを姓で昇順に、名で降順にソートするには、クエリーを次のように指定してください。
	SELECT first_name, last_name FROM emp_details

	WHERE dept = 'finance'

	ORDER BY last_name, first_name DESC

重複した行を削除するには、DISTINCT演算子を使用してください。

	SELECT DISTINCT first_name, last_name FROM emp_details

	WHERE dept = 'finance'

	ORDER BY last_name, first_name DESC

LIKE句の場合は、SQLと同じように指定してください。 したがって、経理に所属している人物で、'Hughes'のように姓の後半が'ughes'である人を検索するには、クエリーを次のように指定してください。
	SELECT first_name, last_name FROM emp_details

	WHERE dept = 'finance' and last_name like '_ughes'
SELECTの実行中にテーブルを結合すると、リレーショナルなクエリー言語がどれほど便利であるのか理解できるでしょう。たとえば、定義したテーブルが2つあるとします。一方には従業員の情報を記録しており、もう一方には各従業員が従事しているプロジェクトを記録しています。また、両テーブルの各従業員には、一意の従業員番号が割り当てられています。誰がどのようなプロジェクトに従事しているのか、次のクエリーによって、ソートしたリストを作成できます。
	SELECT 	emp_details.first_name, emp_details.last_name,

			project_details.project

	FROM emp_details, project_details

	WHERE emp_details.emp_id = project_details.emp_id

	ORDER BY emp_details.last_name, emp_details.first_name
mSQLには、クエリー中に「結合する」テーブルの数に制限がありません。したがって、何らかの形で従業員番号に関連した情報があるテーブルが15あるとすると、これらの全てのテーブルからデータを抽出することができます。処理速度は遅くなるものの、1回のクエリーで実行します。結合に関して注意すべき重要な点は、テーブル名とともに、全てのカラム名も指定しなければならないことです。mSQLでは、一意に命名したカラムが複数のテーブルに渡って存在するという考え方をしていません。したがって、1つのSELECTで複数のテーブルをアクセスする場合、各カラムの名前を指定する必要がでてくるのです。


UPDATE句

mSQLのUPDATE句では、カラム名を値として使用できません。文字の値だけを、UPDATE句の値として指定できます。
	UPDATE table_name SET column=value [ , column=value ]**

	WHERE column OPERATOR value

		[ AND | OR column OPERATOR value ]**

	

	演算子として、<、>、=、<=、>=、<>、likeを指定できます。
例えば
	UPDATE emp_details SET salary=30000 WHERE emp_id = 1234