昨年、数年ぶりに、業務でデータベースのインフラを担当する事になり、
基本的な操作がパッと出て来なくて、苦労したので、内容をまとめていました。
読んでくれている貴方も、急に「Amazon Aurora MySQL」を担当する事になった。
なんて事があるかも知れません。
そんな方のお役に立ちたいので、 クリスマスプレゼントのつもりで、ちらりと公開させて頂きます。
Aurora MySQLインスタンスの作成
AWSコンソールにログインして、Aurora MySQLインスタンスを作成するための手順
- Amazon RDSコンソールにアクセスし、左側のメニューから「Databases」を選択します。
- 「Create database」ボタンをクリックします。
- データベースエンジンとして「Amazon Aurora」を選択し、その後「Amazon Aurora with MySQL compatibility」を選択します。
- インスタンスの詳細を設定し、必要な情報を入力します。この情報には、インスタンスのサイズ、ストレージ、セキュリティグループ、パスワード、バックアップなどが含まれます。
- 「Create database」ボタンをクリックして、インスタンスを作成します。
- Aurora MySQLインスタンスに接続する
Aurora MySQLインスタンスに接続する
- AWSコンソールにログインします。
- 左側のメニューから「Amazon RDS」を選択します。
- インスタンスを選択し、その後「Connectivity & security」タブを選択します。
- セキュリティグループでインバウンドトラフィックを許可する必要がある場合は、必要な設定を行います。
- エンドポイント、ポート、ユーザー名、パスワードなどの情報を使用して、Aurora MySQLインスタンスに接続します。
- Aurora MySQLインスタンスでデータベースを作成する
Aurora MySQLインスタンスにデータベースを作成し、
データベースを使用する
- 接続したいAurora MySQLインスタンスに接続します。
- MySQLコマンドを使用して、新しいデータベースを作成します。例えば、以下のようにします。
CREATE DATABASE mydatabase;
- データベースを使用するには、以下のようにしてデータベースに接続します。
USE mydatabase;
Aurora MySQLでテーブルを作成する
CREATE TABLE employees (
id INT NOT NULL AUTO_INCREMENT,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(100),
PRIMARY KEY (id)
);
データの挿入
テーブルを作成したら、データを挿入することができます。例えば、次のようなクエリを実行することで、employeesテーブルに新しい行を挿入できます。
INSERT INTO employees (first_name, last_name, email) VALUES ('John', 'Doe', 'john.doe@example.com');
データの更新
データを更新するには、UPDATE文を使用します。例えば、次のようなクエリを実行することで、employeesテーブルのデータを更新できます。
UPDATE employees SET email = 'jane.doe@example.com' WHERE id = 1;
データの削除
データを削除するには、DELETE文を使用します。例えば、次のようなクエリを実行することで、employeesテーブルからデータを削除できます。
DELETE FROM employees WHERE id = 1;
このように、Aurora MySQLはMySQLと同様に使用できます。
SQLのWHERE句
SQLのWHERE句は、データベース内のテーブルから特定の条件に基づいて行を選択するために使用されます。WHERE句を使用することで、クエリが返す行の数を減らし、必要な情報に特化したクエリを作成することができます。
WHERE句の基本的な構文は以下の通りです。
SELECT column_name(s)
FROM table_name
WHERE condition;
ここで、column_name(s)は返される列の名前を指定するためのコンマ区切りのリストです。table_nameは対象とするテーブルの名前です。そして、conditionは行を選択するための条件を指定します。
たとえば、以下のようなCustomersテーブルがあるとします。
次のクエリは、Country列が'Mexico'の顧客情報を取得します。
SELECT *
FROM Customers
WHERE Country = 'Mexico';
このクエリでは、Customersテーブルからすべての列を取得し、WHERE句を使用してCountry列が'Mexico'の行のみを選択します。結果は以下のようになります。
WHERE句を使用することで、テーブル内の特定の行を選択することができます。条件をより複雑にすることもできます。たとえば、複数の条件を組み合わせることもできます。WHERE句は、SQLで最も一般的に使用されるキーワードの1つです。
SQLのGROUP BY句
SQLのGROUP BY句は、特定の列をグループ化し、
そのグループに関する集計情報を取得するために使用されます。
以下は、GROUP BY句の基本的な構文です。
SELECT column1, column2, ..., aggregate_function(columnx)
FROM table
GROUP BY column1, column2, ...;
SELECT句には、グループ化する列と、集計関数が含まれます。
FROM句には、データを取得するテーブルが含まれます。
GROUP BY句には、グループ化する列が含まれます。
例えば、以下のテーブルがあるとします。
このテーブルを使って、以下のようなクエリを実行することができます。
SELECT gender, AVG(age)
FROM table
GROUP BY gender;
これにより、性別ごとの平均年齢が返されます。
上記クエリでは、gender列をグループ化して、
AVG関数により各グループの平均年齢を計算しています。
SQLのJOIN句
SQLのJOIN句は、複数のテーブルから必要なデータを取得するために使用されます。JOIN句は、異なるテーブルの列の値を基準に、テーブルを結合します。
JOIN句には、いくつかのタイプがありますが、最も一般的なタイプは INNER JOINです。 INNER JOINは、2つのテーブルの間で共通の値を持つ列を使用して、行を結合します。 その他のJOINタイプには、LEFT JOIN、RIGHT JOIN、FULL OUTER JOINなどがあります。
以下は、INNER JOINの基本的な構文です。
SELECT table1.column1, table2.column2, ...
FROM table1
INNER JOIN table2
ON table1.join_column = table2.join_column;
SELECT句には、結果に含める列が含まれます。
FROM句には、データを取得するテーブルが含まれます。
INNER JOIN句には、結合するテーブルが含まれます。
ON句には、結合条件が含まれます。結合条件は、2つのテーブルの間で共通の列を指定します。
例えば、以下の2つのテーブルがあるとします。
テーブル1:
テーブル2:
これらのテーブルをJOIN句を使って結合するには、以下のようにクエリを実行します。
SELECT table1.id, table1.name, table2.department
FROM table1
INNER JOIN table2
ON table1.id = table2.id;
このクエリにより、以下のような結果が得られます。
上記のクエリでは、2つのテーブルのid列を基準にINNER JOINで結合し、テーブル1からid、name列とテーブル2からdepartment列を取得しています。
SQLのUNION ALL句
SQLのUNION ALL句は、複数のSELECTステートメントの結果セットを1つの結果セットに結合するために使用されます。UNION ALL句は、重複した行を削除せずに、すべての結果を返します。
以下は、UNION ALL句の基本的な構文です。
SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2;
各SELECTステートメントで返される列は同じ数である必要があります。
列のデータ型は同じである必要があります。
例えば、以下の2つのテーブルがあるとします。
テーブル1:
テーブル2:
これらのテーブルをUNION ALL句を使って結合するには、以下のようにクエリを実行します。
SELECT id, name, age
FROM table1
UNION ALL
SELECT id, name, age
FROM table2;
このクエリにより、以下のような結果が得られます。
上記のクエリでは、2つのテーブルの列をUNION ALL句で結合し、重複を削除せずに、すべての行を結果として返します。
SQLのDISTINCTキーワード
SQLのDISTINCTキーワードは、SELECT文で指定された列の一意の値のみを返します。つまり、重複した値を除去して結果セットを返します。
使用方法の例を示します。
例1:単一の列を持つ表でDISTINCTを使用する
以下の例は、単一の列を持つ表でDISTINCTを使用する方法を示しています。
SELECT DISTINCT column_name
FROM table_name;
例えば、以下のようなCustomersテーブルがあるとします。
以下のクエリは、Customersテーブルから一意の国名のリストを取得します。
SELECT DISTINCT Country
FROM Customers;
例2:複数の列を持つ表でDISTINCTを使用する
以下の例は、複数の列を持つ表でDISTINCTを使用する方法を示しています。
SELECT DISTINCT column_name1, column_name2, ...
FROM table_name;
例えば、以下のようなOrdersテーブルがあるとします。
以下のクエリは、一意の顧客IDと注文日のリストを取得します。
SELECT DISTINCT CustomerID, OrderDate
FROM Orders;
SQLのWITHキーワード
SQLのWITHキーワードは、クエリ内で一時的なビューを作成するために使用されます。
WITHキーワードを使用することで、複雑なクエリを簡素化することができ、クエリの可読性と再利用性を向上することができます。
WITHキーワードを使用する構文は以下の通りです。
WITH temporary_view AS (
SELECT column_name(s)
FROM table_name
WHERE condition
)
SELECT *
FROM temporary_view;
temporary_viewは一時的なビューの名前で、SELECT文で使用されます。temporary_view内のクエリは、任意のSELECT文と同様に構築されます。temporary_viewを含むSELECT文の後に続くSELECT文は、一時的なビューで定義された列を使用することができます。
例えば、以下のようなEmployeesテーブルがあるとします。
以下のクエリは、部署ごとの従業員数を一時的なビューを使用して取得します。
WITH employee_count AS (
SELECT Department, COUNT(*) AS num_employees
FROM Employees
GROUP BY Department
)
SELECT Department, num_employees
FROM employee_count;
このクエリは、EmployeesテーブルからDepartment列をグループ化し、各部署ごとに従業員数を数えます。そして、一時的なビューであるemployee_countを作成し、SELECT文で使用します。結果は以下のようになります。
WITHキーワードを使用することで、クエリ内に一時的なビューを作成することができ、クエリを簡素化することができます。
SQLのCOALESCE 関数
COALESCE 関数は、渡された複数の引数のうち、最初に NULL 以外の値を返すものを返します。つまり、COALESCE 関数は、最初の引数から順番に NULL 以外の値があるかどうかをチェックし、最初に NULL 以外の値を見つけた場合にその値を返します。引数がすべて NULL の場合、COALESCE 関数は NULL を返します。
SELECT COALESCE(column1, column2, column3) AS result_column
FROM table_name;
このクエリは、column1、column2、column3 のうち、最初に NULL 以外の値を result_column として返します。つまり、column1 が NULL でない場合、column1 の値が返されます。column1 が NULL の場合、column2 の値が返されます。column1 と column2 がともに NULL の場合、column3 の値が返されます。column1、column2、column3 がすべて NULL の場合、result_column は NULL になります。
COALESCE 関数は、NULL を非常に扱いやすくするため、よく使われます。例えば、テーブルの列に NULL が含まれている場合、その列を集計する場合に COALESCE 関数を使用すると、NULL 値を適切に扱うことができます。欠損値をデフォルト値に置き換える方法。
例として、以下のようなテーブルがあると仮定してください。
employees
| id | first_name | last_name | salary |
|----|------------|-----------|--------|
| 1 | John | Smith | 50000 |
| 2 | Jane | Doe | NULL |
| 3 | Bob | Johnson | 60000 |
| 4 | Alice | Lee | NULL |
このテーブルからCoalesce関数を使用して、各従業員の給与を取得する例を示します。
(salary列のNULLをデフォルト値である0に置き換える)
SELECT id, first_name, last_name, COALESCE(salary, 0) AS salary
FROM employees;
上記のクエリを実行すると、以下のような結果が得られます。
| id | first_name | last_name | salary |
|----|------------|-----------|--------|
| 1 | John | Smith | 50000 |
| 2 | Jane | Doe | 0 |
| 3 | Bob | Johnson | 60000 |
| 4 | Alice | Lee | 0 |
給与がNULLの従業員の場合、Coalesce関数は0を返します。これにより、各従業員の給与が取得され、NULLの値が0に置き換えられます。
例1: COALESCE関数を使用して、列の値がNULLの場合に代替値を返す。
SELECT COALESCE(column_name, 'N/A') FROM table_name;
この例では、column_nameがNULLである場合、代替値としてN/Aが返されます。
例2: COALESCE関数を使用して、複数の列のうち最初の非NULL値を返す。
SELECT COALESCE(column1, column2, column3) FROM table_name;
この例では、column1、column2、およびcolumn3のいずれかがNULLである場合、最初に非NULL値が返されます。
例3: COALESCE関数を使用して、サブクエリの結果がNULLである場合に代替値を返す。
SELECT COALESCE((SELECT column_name FROM table_name WHERE condition), 'N/A');
この例では、conditionが満たされない場合、サブクエリの結果はNULLとなります。COALESCE関数を使用することで、代替値としてN/Aを返すことができます。
例4:Coalesce関数を使用して、2つの列の非NULL値を結合する
SELECT Coalesce(column1, column2) AS result
FROM table_name;
この例では、table_nameというテーブルから、column1とcolumn2の値を結合して、resultというエイリアス名で表示します。もしcolumn1の値がNULLであれば、Coalesce関数はcolumn2の値を返します。
例5:Coalesce関数を使用して、複数のテーブルの値を結合する
SELECT Coalesce(table1.column1, table2.column2, table3.column3) AS result
FROM table1
LEFT JOIN table2 ON table1.id = table2.id
LEFT JOIN table3 ON table1.id = table3.id;
この例では、3つのテーブル(table1、table2、table3)から、idが一致する値を結合して、Coalesce関数を使用して非NULL値を結合します。もしtable1.column1の値がNULLであれば、Coalesce関数はtable2.column2の値を返し、table2.column2の値もNULLであれば、table3.column3の値を返します。
例6:COALESCEを使用して、NULLを回避する方法
SELECT COALESCE(column1, column2, column3, 'No value') AS result FROM table_name;
上記の例では、3つの列(column1、column2、column3)のいずれかがNULLである場合、'No value'が返されます。
例7:COALESCEを使用して、複数の列の値を結合する方法
SELECT COALESCE(column1 || ' ', '') || COALESCE(column2 || ' ', '') || COALESCE(column3 || ' ', '') AS result FROM table_name;
上記の例では、3つの列(column1、column2、column3)の値を連結して返します。NULLの値がある場合は、その列の値を空文字列に変換して連結します。
上記の例は、各列の値をスペースで区切って連結する例です。適宜、区切り文字を変更することも可能です。
参考にして頂けたら、幸いです。
そういえば、チューニングやバックアップも考慮したなぁと。。
Amazon Aurora MySQL SQLチューニング
https://qiita.com/kimuni-i/items/e58f3c6b5e8f4d7ddab6
不要なインデックスを削除して、パフォーマンスをチューニング
https://qiita.com/kimuni-i/items/101f1673141cb92a987d
Amazon Aurora MySQLのWell-Architected基本構成を確認してみた
https://qiita.com/kimuni-i/items/d657f4c2924c2acaefc3
MySQLバックアップ 基本
https://qiita.com/kimuni-i/items/c2ff7e735e67c10613a5
DynamoDB テーブルに保存されている項目にLambda 関数で、アクセスしたい時
https://qiita.com/kimuni-i/items/d3f36a90b3988fe3e5f9