2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

急に「Amazon Aurora MySQL」を担当する事になった。

Posted at

昨年、数年ぶりに、業務でデータベースのインフラを担当する事になり、
基本的な操作がパッと出て来なくて、苦労したので、内容をまとめていました。
読んでくれている貴方も、急に「Amazon Aurora MySQL」を担当する事になった。
なんて事があるかも知れません。
そんな方のお役に立ちたいので、 クリスマスプレゼントのつもりで、ちらりと公開させて頂きます。

Aurora MySQLインスタンスの作成

AWSコンソールにログインして、Aurora MySQLインスタンスを作成するための手順

  1. Amazon RDSコンソールにアクセスし、左側のメニューから「Databases」を選択します。
  2. 「Create database」ボタンをクリックします。
  3. データベースエンジンとして「Amazon Aurora」を選択し、その後「Amazon Aurora with MySQL compatibility」を選択します。
  4. インスタンスの詳細を設定し、必要な情報を入力します。この情報には、インスタンスのサイズ、ストレージ、セキュリティグループ、パスワード、バックアップなどが含まれます。
  5. 「Create database」ボタンをクリックして、インスタンスを作成します。
  6. Aurora MySQLインスタンスに接続する

Aurora MySQLインスタンスに接続する

  1. AWSコンソールにログインします。
  2. 左側のメニューから「Amazon RDS」を選択します。
  3. インスタンスを選択し、その後「Connectivity & security」タブを選択します。
  4. セキュリティグループでインバウンドトラフィックを許可する必要がある場合は、必要な設定を行います。
  5. エンドポイント、ポート、ユーザー名、パスワードなどの情報を使用して、Aurora MySQLインスタンスに接続します。
  6. Aurora MySQLインスタンスでデータベースを作成する

Aurora MySQLインスタンスにデータベースを作成し、
データベースを使用する

  1. 接続したいAurora MySQLインスタンスに接続します。
  2. MySQLコマンドを使用して、新しいデータベースを作成します。例えば、以下のようにします。
CREATE DATABASE mydatabase; 
  1. データベースを使用するには、以下のようにしてデータベースに接続します。
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テーブルがあるとします。
image.png

次のクエリは、Country列が'Mexico'の顧客情報を取得します。

SELECT *
FROM Customers
WHERE Country = 'Mexico';

このクエリでは、Customersテーブルからすべての列を取得し、WHERE句を使用してCountry列が'Mexico'の行のみを選択します。結果は以下のようになります。
image.png
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句には、グループ化する列が含まれます。
例えば、以下のテーブルがあるとします。
image.png
このテーブルを使って、以下のようなクエリを実行することができます。

SELECT gender, AVG(age)
FROM table
GROUP BY gender;

これにより、性別ごとの平均年齢が返されます。
image.png
上記クエリでは、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:
image.png
テーブル2:
image.png
これらのテーブルをJOIN句を使って結合するには、以下のようにクエリを実行します。

SELECT table1.id, table1.name, table2.department
FROM table1
INNER JOIN table2
ON table1.id = table2.id;

このクエリにより、以下のような結果が得られます。
image.png
上記のクエリでは、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:
image.png
テーブル2:
image.png
これらのテーブルをUNION ALL句を使って結合するには、以下のようにクエリを実行します。

SELECT id, name, age
FROM table1
UNION ALL
SELECT id, name, age
FROM table2;

このクエリにより、以下のような結果が得られます。
image.png
上記のクエリでは、2つのテーブルの列をUNION ALL句で結合し、重複を削除せずに、すべての行を結果として返します。

SQLのDISTINCTキーワード

SQLのDISTINCTキーワードは、SELECT文で指定された列の一意の値のみを返します。つまり、重複した値を除去して結果セットを返します。

使用方法の例を示します。

例1:単一の列を持つ表でDISTINCTを使用する

以下の例は、単一の列を持つ表でDISTINCTを使用する方法を示しています。

SELECT DISTINCT column_name
FROM table_name;

例えば、以下のようなCustomersテーブルがあるとします。

image.png

以下のクエリは、Customersテーブルから一意の国名のリストを取得します。

SELECT DISTINCT Country
FROM Customers;

結果は次のようになります。
image.png

例2:複数の列を持つ表でDISTINCTを使用する

以下の例は、複数の列を持つ表でDISTINCTを使用する方法を示しています。

SELECT DISTINCT column_name1, column_name2, ...
FROM table_name;

例えば、以下のようなOrdersテーブルがあるとします。
image.png
以下のクエリは、一意の顧客IDと注文日のリストを取得します。

SELECT DISTINCT CustomerID, OrderDate
FROM Orders;

結果は以下のようになります。
image.png

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テーブルがあるとします。
image.png
以下のクエリは、部署ごとの従業員数を一時的なビューを使用して取得します。

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文で使用します。結果は以下のようになります。
image.png
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

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?