SQLデータベースを管理する方法
SQLチートシート
序章
SQLデータベースには、データの追加、変更、削除、およびクエリに必要なすべてのコマンドがインストールされています。 このチートシートスタイルガイドは、最も一般的に使用されるSQLコマンドのいくつかへのクイックリファレンスを提供します。
このガイドの使用方法:
- このガイドは、自己完結型のコマンドラインスニペットを含むチートシート形式です。
- 完了しようとしているタスクに関連するセクションにジャンプします
- あなたが見るとき
highlighted text
このガイドのコマンドでは、このテキストは独自のデータベースの列、テーブル、およびデータを参照する必要があることに注意してください。 - このガイド全体を通して、示されているデータ値の例はすべてアポストロフィで囲まれています(
'
). SQLでは、文字列で構成されるデータ値をアポストロフィでラップする必要があります。 これは数値データには必要ありませんが、アポストロフィを含めても問題は発生しません。
SQLは標準として認識されていますが、ほとんどのSQLデータベースプログラムには独自の拡張機能があることに注意してください。 このガイドでは、リレーショナルデータベース管理システム(RDBMS)の例としてMySQLを使用していますが、提供されているコマンドは、PostgreSQL、MariaDB、SQLiteなどの他のリレーショナルデータベースプログラムでも機能します。 RDBMS間に大きな違いがある場合は、代替コマンドを含めました。
データベースプロンプトを開く(ソケット/信頼認証を使用)
Ubuntu 18.04のデフォルトでは、 root MySQLユーザーは、次のコマンドを使用してパスワードなしで認証できます。
- sudo mysql
PostgreSQLプロンプトを開くには、次のコマンドを使用します。 この例では、含まれているスーパーユーザーの役割である postgres ユーザーとしてログインしますが、これを作成済みの役割に置き換えることができます。
- sudo -u postgres psql
データベースプロンプトを開く(パスワード認証を使用)
root MySQLユーザーがパスワードで認証するように設定されている場合は、次のコマンドを使用して認証できます。
- mysql -u root -p
データベースにroot以外のユーザーアカウントを既に設定している場合は、次の方法を使用してそのユーザーとしてログインすることもできます。
- mysql -u user -p
上記のコマンドを実行すると、パスワードの入力を求められます。 コマンドの一部としてパスワードを指定する場合は、すぐに次の手順に従ってください。 -p
パスワードを使用したオプション。間にスペースはありません。
- mysql -u root -ppassword
データベースの作成
次のコマンドは、デフォルト設定でデータベースを作成します。
- CREATE DATABASE database_name;
データベースでデフォルトとは異なる文字セットと照合を使用する場合は、次の構文を使用してそれらを指定できます。
- CREATE DATABASE database_name CHARACTER SET character_set COLLATE collation;
データベースの一覧表示
MySQLまたはMariaDBのインストールに存在するデータベースを確認するには、次のコマンドを実行します。
- SHOW DATABASES;
PostgreSQLでは、次のコマンドで作成されたデータベースを確認できます。
- \list
データベースの削除
データベース内に保持されているテーブルとデータを含むデータベースを削除するには、次の構造に従うコマンドを実行します。
- DROP DATABASE IF EXISTS database;
ユーザーの作成
データベースの権限を指定せずにデータベースのユーザープロファイルを作成するには、次のコマンドを実行します。
- CREATE USER username IDENTIFIED BY 'password';
PostgreSQLは、類似しているがわずかに異なる構文を使用します。
- CREATE USER user WITH PASSWORD 'password';
新しいユーザーを作成し、1つのコマンドでそれらのユーザーに特権を付与する場合は、 GRANT
声明。 次のコマンドは、新しいユーザーを作成し、RDBMS内のすべてのデータベースとテーブルに対する完全な特権をユーザーに付与します。
- GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
に注意してください PRIVILEGES
この前のキーワード GRANT
声明。 ほとんどのRDBMSでは、このキーワードはオプションであり、このステートメントは同等に次のように記述できます。
- GRANT ALL ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
ただし、 PRIVILEGES
厳密SQLモードがオンになっているときにこのような特権を付与するには、キーワードが必要です。
ユーザーの削除
データベースユーザープロファイルを削除するには、次の構文を使用します。
- DROP USER IF EXISTS username;
このコマンドは、デフォルトでは、削除されたユーザーによって作成されたテーブルを削除しないことに注意してください。そのようなテーブルにアクセスしようとすると、エラーが発生する可能性があります。
データベースの選択
テーブルを作成する前に、まずテーブルを作成するデータベースをRDBMSに通知する必要があります。 MySQLとMariaDBでは、次の構文でこれを行います。
- USE database;
PostgreSQLでは、次のコマンドを使用して目的のデータベースを選択する必要があります。
- \connect database
テーブルの作成
次のコマンド構造は、次の名前の新しいテーブルを作成します table
、および2つの列が含まれ、それぞれに固有のデータ型があります。
- CREATE TABLE table ( column_1 column_1_data_type, column_2 column_2_data_taype );
テーブルの削除
すべてのデータを含むテーブルを完全に削除するには、次の手順を実行します。
- DROP TABLE IF EXISTS table
テーブルへのデータの挿入
次の構文を使用して、テーブルに1行のデータを入力します。
- INSERT INTO table ( column_A, column_B, column_C ) VALUES ( 'data_A', 'data_B', 'data_C' );
次のように、1つのコマンドを使用して、テーブルに複数行のデータを入力することもできます。
- INSERT INTO table ( column_A, column_B, column_C ) VALUES ( 'data_1A', 'data_1B', 'data_1C' ), ( 'data_2A', 'data_2B', 'data_2C' ), ( 'data_3A', 'data_3B', 'data_3C' );
テーブルからのデータの削除
テーブルからデータの行を削除するには、次のコマンド構造を使用します。 ご了承ください value
指定された値に保持されている必要があります column
削除する行:
- DELETE FROM table WHERE column='value';
注:を含めない場合 WHERE
の節 DELETE
ステートメントは、次の例のように、テーブルに保持されているすべてのデータを削除しますが、列やテーブル自体は削除しません。
- DELETE FROM table;
テーブル内のデータの変更
次の構文を使用して、特定の行に保持されているデータを更新します。 に注意してください WHERE
コマンドの最後にある句は、更新する行をSQLに指示します。 value
に保持されている値です column_A
変更する行と一致します。
注:を含めなかった場合 WHERE
の節 UPDATE
ステートメントの場合、コマンドはテーブルのすべての行に保持されているデータを置き換えます。
- UPDATE table SET column_1 = value_1, column_2 = value_2 WHERE column_A=value;
列の挿入
次のコマンド構文は、テーブルに新しい列を追加します。
- ALTER TABLE table ADD COLUMN column data_type;
列の削除
この構造に従うコマンドは、テーブルから列を削除します。
- ALTER TABLE table DROP COLUMN column;
基本クエリの実行
テーブルの単一の列からすべてのデータを表示するには、次の構文を使用します。
- SELECT column FROM table;
同じテーブルから複数の列をクエリするには、列名をコンマで区切ります。
- SELECT column_1, column_2 FROM table;
列の名前をアスタリスク(*
). SQLでは、アスタリスクは「すべて」を表すプレースホルダーとして機能します。
- SELECT * FROM table;
WHERE句の使用
クエリの結果を絞り込むには、 SELECT
とのステートメント WHERE
このような句:
- SELECT column FROM table WHERE conditions_that_apply;
たとえば、次のような構文を使用して、単一の行からすべてのデータをクエリできます。 ご了承ください value
指定された両方で保持される値である必要があります column
クエリする行:
- SELECT * FROM table WHERE column = value;
比較演算子の操作
の比較演算子 WHERE
句は、指定された列を値と比較する方法を定義します。 一般的なSQL比較演算子は次のとおりです。
オペレーター | それが何をするか |
---|---|
= |
平等のテスト |
!= |
不等式のテスト |
< |
未満のテスト |
> |
より大きいテスト |
<= |
以下または等しいかどうかをテストします |
>= |
以上または等しいかどうかをテストします |
BETWEEN |
値が指定された範囲内にあるかどうかをテストします |
IN |
行の値が指定された値のセットに含まれているかどうかをテストします |
EXISTS |
指定された条件で行が存在するかどうかをテストします |
LIKE |
値が指定された文字列と一致するかどうかをテストします |
IS NULL |
のテスト NULL 値 |
IS NOT NULL |
以外のすべての値をテストします NULL |
ワイルドカードの操作
SQLでは、ワイルドカード文字を使用できます。 これらは、テーブル内の特定のエントリを検索しようとしているが、そのエントリが正確に何であるかがわからない場合に役立ちます。
アスタリスク(*
)は「すべて」を表すプレースホルダーです。これにより、テーブル内のすべての列がクエリされます。
- SELECT * FROM table;
パーセント記号(%
)0個以上の不明な文字を表します。
- SELECT * FROM table WHERE column LIKE val%;
アンダースコア(_
)は、単一の不明な文字を表すために使用されます。
- SELECT * FROM table WHERE column LIKE v_lue;
列のエントリを数える
The COUNT
関数は、特定の列のエントリ数を見つけるために使用されます。 次の構文は、保持されている値の総数を返します column
:
- SELECT COUNT(column) FROM table;
結果を絞り込むことができます COUNT
を追加することによる機能 WHERE
このような句:
- SELECT COUNT(column) FROM table WHERE column=value;
列の平均値を見つける
The AVG
関数は、特定の列に保持されている値の平均(この場合は平均)を見つけるために使用されます。 に注意してください AVG
関数は、数値を保持する列でのみ機能します。 文字列値を保持する列で使用すると、エラーまたはエラーが返される場合があります。 0
:
- SELECT AVG(column) FROM table;
列の値の合計を見つける
The SUM
関数は、列に保持されているすべての数値の合計を見つけるために使用されます。
- SELECT SUM(column) FROM table;
と同じように AVG
関数、を実行する場合 SUM
文字列値を保持する列の関数は、エラーを返すか、単に 0
、RDBMSによって異なります。
列内の最大値を見つける
列内の最大の数値またはアルファベット順の最後の値を見つけるには、 MAX
関数:
- SELECT MAX(column) FROM table;
列内の最小値を見つける
列内の最小の数値またはアルファベット順の最初の値を見つけるには、 MIN
関数:
- SELECT MIN(column) FROM table;
ORDERBY句を使用した結果の並べ替え
アン ORDER BY
句は、クエリ結果を並べ替えるために使用されます。 次のクエリ構文は、からの値を返します column_1
と column_2
で保持されている値で結果を並べ替えます column_1
昇順、または文字列値の場合はアルファベット順:
- SELECT column_1, column_2 FROM table ORDER BY column_1;
同じアクションを実行するが、結果をアルファベットの降順または逆の順序で並べ替えるには、次のクエリを追加します。 DESC
:
- SELECT column_1, column_2 FROM table ORDER BY column_1 DESC;
GROUPBY句を使用した結果の並べ替え
The GROUP BY
句はに似ています ORDER BY
句ですが、次のような集計関数を含むクエリの結果を並べ替えるために使用されます COUNT
, MAX
, MIN
、 また SUM
. 前のセクションで説明した集計関数自体は、単一の値のみを返します。 ただし、列内の一致するすべての値に対して実行された集計関数の結果を表示するには、 GROUP BY
句。
次の構文は、で一致する値の数をカウントします column_2
昇順またはアルファベット順にグループ化します。
- SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2;
同じアクションを実行しますが、結果をアルファベットの降順または逆の順序でグループ化するには、次のクエリを追加します。 DESC
:
- SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2 DESC;
JOIN句を使用した複数のテーブルのクエリ
JOIN
句は、2つ以上のテーブルの行を結合する結果セットを作成するために使用されます。
- SELECT table_1.column_1, table_2.column_2 FROM table_1 JOIN table_2 ON table_1.common_column=table_2.common_column;
これは一例です INNER JOIN
句。 アン INNER JOIN
両方のテーブルで値が一致するすべてのレコードを返しますが、値が一致しないレコードは表示されません。
external を使用すると、2つのテーブルの一方からすべてのレコードを返すことができます。これには、もう一方のテーブルに対応する一致がない値も含まれます。 JOIN
句。 アウター JOIN
条項は次のいずれかとして記述されます LEFT JOIN
また RIGHT JOIN
.
A LEFT JOIN
句は、「左」テーブルからすべてのレコードを返し、「右」テーブルから一致するレコードのみを返します。 アウターの文脈で JOIN
句、左側のテーブルはで参照されているものです FROM
句、および右のテーブルは、後に参照される他のテーブルです JOIN
声明。 以下は、からのすべてのレコードを表示します table_1
からの一致する値のみ table_2
. に一致しない値 table_2
として表示されます NULL
結果セット:
- SELECT table_1.column_1, table_2.column_2 FROM table_1 LEFT JOIN table_2 ON table_1.common_column=table_2.common_column;
A RIGHT JOIN
句は、と同じように機能します LEFT JOIN
、ただし、右側のテーブルからすべての結果を出力し、左側から一致する値のみを出力します。
- SELECT table_1.column_1, table_2.column_2 FROM table_1 RIGHT JOIN table_2 ON table_1.common_column=table_2.common_column;
複数のSELECTステートメントとUNION句の組み合わせ
A UNION
演算子は、2つ(またはそれ以上)の結果を組み合わせるのに役立ちます SELECT
ステートメントを単一の結果セットに:
- SELECT column_1 FROM table UNION SELECT column_2 FROM table;
さらに、 UNION
句は2つ(またはそれ以上)を組み合わせることができます SELECT
異なるテーブルを同じ結果セットにクエリするステートメント:
- SELECT column FROM table_1 UNION SELECT column FROM table_2;
結論
このガイドでは、データベース、ユーザー、およびテーブルを管理し、それらのテーブルに保持されているコンテンツをクエリするために使用されるSQLの一般的なコマンドのいくつかについて説明します。 ただし、すべてが一意の結果セットを生成する句と演算子の多くの組み合わせがあります。 SQLの操作に関するより包括的なガイドをお探しの場合は、OracleのデータベースSQLリファレンスを確認することをお勧めします。
さらに、このガイドに表示したい一般的なSQLコマンドがある場合は、以下のコメントで質問または提案を行ってください。