DM データベースの構文仕様は、主に SQL (構造化照会言語) 標準に従っており、他のリレーショナル データベースと非常に似ています。以下は、一部の DM データベースの構文仕様です。
1. キーワード: DM データベースにはいくつかの予約キーワードがあり、これらのキーワードはテーブル名、列名、変数名などの識別子として使用できません。キーワードの完全なリストは、DM データベースのドキュメントに記載されています。
2. 大文字と小文字の区別: DM データベースでは大文字と小文字が区別されるため、SELECT と select は別のキーワードとして扱われます。
3. コメント: コードの可読性を高めるために 2 種類のコメントを使用できます。単一行のコメントは「--」で始まり、複数行のコメントは「/*」で始まり「*/」で終わります。
4. データ型: DM データベースは、数値、文字、タイムスタンプ、日付などを含むさまざまなデータ型をサポートします。CREATE TABLE ステートメントで各列のデータ型を指定できます。
5. 関数と演算子: DM データベースは、データを処理および操作するための多数の関数と演算子を提供します。たとえば、SUM 関数を使用して列の合計を計算したり、LIKE 演算子を使用してあいまい一致などを行うことができます。
6. サブクエリ: DM データベースでは、SELECT ステートメントでネストされたサブクエリを使用できます。これにより、クエリ結果を使用して他のクエリを実行できるようになります。
7. 制約: DM データベースは、主キー、一意制約、外部キーなどのさまざまな制約をサポートします。これらの制約は、データの整合性と一貫性を確保するのに役立ちます。
上記は DM データベースの一般的な構文仕様の一部です。詳細については、DM データベースの関連ドキュメントを参照してください。
以下は、一部の DM データベースの構文仕様と対応する例です。
1. CREATE TABLE: テーブルを作成するために使用します。
たとえば、次のステートメントは「students」というテーブルを作成し、3 つの列名、データ型、および制約を指定します。
```
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT CHECK(age >= 18)
);
「」
2. SELECT: テーブルからデータを取得するために使用されます。
たとえば、次のステートメントは、「students」テーブルからすべての行を選択し、年齢順に昇順に並べ替えます。
```
SELECT * FROM 学生 ORDER BY 年齢 ASC;
「」
3. INSERT: テーブルにデータを挿入するために使用されます。
たとえば、次のステートメントは「students」テーブルに行を挿入します。
```
INSERT INTO 学生 (ID、名前、年齢) VALUES (1, 'Tom', 20);
「」
4. UPDATE: テーブル内のデータを変更するために使用されます。
たとえば、次のステートメントは、「students」テーブルの学生 ID 1 の名前を「Jerry」に変更します。
```
生徒を更新 SET name = 'Jerry' WHERE id = 1;
「」
5. DELETE: テーブル内のデータを削除するために使用します。
たとえば、次のステートメントは、「students」テーブル内の ID 1 の学生データを削除します。
```
DELETE FROM students WHERE id = 1;
「」
6. ALTER TABLE: テーブル構造を変更するために使用します。
たとえば、次のステートメントは、新しい列「gender」を「students」テーブルに追加します。
```
ALTER TABLE 学生 ADD 性別 VARCHAR(10);
「」
7. CREATE INDEX: データ検索の効率を向上させるためにインデックスを作成するために使用されます。
たとえば、次のステートメントは、「students」テーブルの「name」列にインデックスを作成します。
```
CREATE INDEX name_idx ON 学生 (名前);
「」
8. GROUP BY: テーブル内のデータをグループ化するために使用されます。
たとえば、次のステートメントは、「students」テーブルのデータを「age」列の値でグループ化し、各年齢グループの学生の数をカウントします。
```
SELECT 年齢、COUNT(*) FROM 学生 GROUP BY age;
「」
9. HAVING: GROUP BY を使用してグループ化されたデータをフィルタリングするために使用されます。
たとえば、次のステートメントは、「students」テーブルのデータを「age」列の値でグループ化し、年齢が 20 歳以上の学生の数のみを表示します。
```
SELECT 年齢、COUNT(*) FROM 学生 GROUP BY age HAVING >= 20;
「」
10. JOIN: 2 つ以上のテーブルのデータを 1 つの結果セットに結合するために使用されます。
たとえば、次のステートメントは、ID 列に基づいて「students」テーブルと「scores」テーブルのデータを内部結合し、学生の名前とスコアを返します。
```
SELECT s.name, sc.score
FROM 学生 s
INNER JOIN スコア sc ON s.id = sc.id;
「」
11. UNION: 2 つ以上の SELECT ステートメントの結果を 1 つの結果セットに結合するために使用されます。
たとえば、次のステートメントは、「students」テーブルの 18 歳未満の学生と「young_students」テーブルの学生を 1 つの結果セットに結合します。
```
SELECT * FROM students WHERE age < 18
UNION
SELECT * FROM young_students;
「」
12. EXISTS: サブクエリが行を返すかどうかを確認するために使用されます。
たとえば、次のステートメントは、ID 1 の学生が「students」テーブルに存在するかどうかを確認します。
```
SELECT * FROM 学生 WHERE EXISTS (SELECT * FROM 学生 WHERE id = 1);
「」
ここでは、DM データベースの高度な文法仕様と対応する例をいくつか示します。
13. サブクエリ: SELECT ステートメントでサブクエリを使用するだけでなく、他の SQL ステートメントでもサブクエリを使用できます。たとえば、次のステートメントは、18 歳未満のすべての学生を「students」テーブルから削除します。
```
DELETE FROM students WHERE id IN (SELECT ID FROM students WHERE age < 18);
「」
14. ビュー: ビューは仮想テーブルであり、その内容は SELECT ステートメントの結果セットに基づいています。CREATE VIEW ステートメントを使用してビューを作成できます。
たとえば、次のステートメントは、各生徒の名前と合計スコアを表示する「student_scores」というビューを作成します。
```
CREATE VIEW Student_scores AS
SELECT s.id, s.name, SUM(sc.score) AS total_score
FROM students s
INNER JOIN スコア sc ON s.id = sc.id
GROUP BY s.id, s.name;
「」
15. ストアド プロシージャ: ストアド プロシージャは、複数回呼び出すことができる SQL ステートメントまたはコードの集合です。CREATE PROCEDURE ステートメントを使用してストアド プロシージャを作成できます。
たとえば、次のストアド プロシージャは入力パラメータを使用して新しい生徒データを挿入します。
```
CREATE PROCEDURE insert_student(IN p_name VARCHAR(50), IN p_age INT)
BEGIN
INSERT INTO students (name, age) VALUES (p_name, p_age);
終わり;
「」
16. カーソル: カーソルは、クエリ結果セットをトラバースするためのメカニズムです。DECLARE CURSOR ステートメントを使用してカーソルを宣言し、FETCH ステートメントを使用してデータを取得できます。
たとえば、次の例では、カーソルを使用して「students」テーブル内のすべての行を反復処理し、学生の名前と年齢を表示します。
```
DECLARE c_cursor CURSOR FOR SELECT 名前、年齢 FROM 学生;
c_cursor を開きます。
c_cursor INTO @name, @age; から次を取得します。WHILE @@FETCH_STATUS = 0 DO
SELECT CONCAT(@name, ' は ', @age, ' 歳');
c_cursor INTO @name, @age; から次を取得します。
途中で終了。CLOSE c_cursor;
DEALLOCATE c_cursor;
「」
17. ストアド プロシージャ パラメータ: ストアド プロシージャでは、入力パラメータまたは出力パラメータ、あるいはその両方を使用できます。たとえば、次のストアド プロシージャは 1 つの入力パラメータを受け取り、1 つの出力パラメータを返します。
```
CREATE PROCEDURE get_student_name(IN p_id INT, OUT p_name VARCHAR(50))
BEGIN
SELECT name INTO p_name FROM students WHERE id = p_id;
終わり;
「」
18. IF ステートメント: IF ステートメントを使用すると、条件に基づいてコード ブロックを実行できます。たとえば、次のステートメントは、年齢に基づいてクラスを生徒に割り当てます。
```
DECLARE @class VARCHAR(10);
DECLARE @age INT = 20;IF @age >= 18 AND @age <= 21 THEN
SET @class = 'A';
ELSEIF @age >= 22 AND @age <= 25 THEN
SET @class = 'B';
ELSE
SET @class = 'C';
終了 IF;SELECT CONCAT('クラス ', @class) AS クラス;
「」
19. CASE ステートメント: CASE ステートメントを使用すると、複数の条件に基づいてコード ブロックを実行できます。たとえば、次のステートメントは学生の成績を文字の成績にマップします。
```
SELECT 名前、スコア、
CASE
WHEN スコア >= 90 THEN 'A'
WHEN スコア >= 80 THEN 'B'
WHEN スコア >= 70 THEN 'C'
WHEN スコア >= 60 THEN 'D'
ELSE 'F'
END AS グレード
FROM スコア。
「」
20. トリガー: トリガーは、テーブルに対して特定の操作が実行されたときに自動的に実行される SQL ステートメントまたはコードです。たとえば、次の例では、「students」テーブルに新しい行が挿入されると、「logs」テーブルにログを自動的に挿入する「trig_students」という名前のトリガーを作成します。
```
CREATE TRIGGER trig_students
AFTER INSERT ON students
FOR EACH ROW
BEGIN
INSERT INTO ログ (メッセージ) VALUES ('新しい学生が追加されました');
終わり;
「」
21. ページング: LIMIT キーワードと OFFSET キーワードを使用して、クエリ結果セットから特定の数の行を選択します。たとえば、次のステートメントは行 11 から始まる 5 行のデータを返します。
```
SELECT * FROM 学生 LIMIT 5 OFFSET 10;
「」
22. 正規表現: DM データベースは正規表現関数をサポートしており、WHERE 句で REGEXP 演算子を使用してパターンと一致させることができます。たとえば、次のステートメントは、名前が「J」で始まる学生を返します。
```
SELECT * FROM students WHERE name REGEXP '^J';
「」
23. 全文検索: MATCH AGAINST ステートメントを使用して全文検索を実行し、関連性に基づいて結果を並べ替えます。たとえば、次のステートメントは、「データベース」という単語を含む記事を関連性順に並べて検索します。
```
SELECT * FROM 記事 WHERE MATCH (タイトル、内容) AGAINST ('データベース');
「」
24. 時間計算: DM データベースには、時刻と日付タイプのデータを処理するために使用できるさまざまな関数と演算子が用意されています。たとえば、次のステートメントは、現在の日付に 7 日を加えた日付を返します。
```
SELECT DATE_ADD(CURRENT_DATE(), INTERVAL 7 DAY);
「」
25. 暗号化: DM データベースは、MD5、SHA-1 などの複数の暗号化アルゴリズムをサポートします。対応する機能を使用してデータを暗号化できます。たとえば、次のステートメントは、MD5 アルゴリズムを使用して文字列「password」を暗号化します。
```
SELECT MD5('パスワード');
「」