SQLデータベースを管理する方法

SQLチートシート

前書き

SQLデータベースには、データの追加、変更、削除、クエリに必要なすべてのコマンドがインストールされています。 この虎の巻スタイルのガイドは、最も一般的に使用されるいくつかのSQLコマンドのクイックリファレンスです。

このガイドの使用方法:

  • このガイドは、自己完結型のコマンドラインスニペットを含むチートシート形式です。

  • 完了しようとしているタスクに関連するセクションにジャンプします

  • このガイドのコマンドにhighlighted textが表示されている場合、このテキストはyour ownデータベースの列、テーブル、およびデータを参照している必要があることに注意してください。

  • このガイド全体を通して、示されているデータ値の例はすべてアポストロフィ(')で囲まれています。 SQLでは、ストリングをアポストロフィで構成したデータ値をラップする必要があります。 これは数値データには必要ありませんが、アポストロフィを含めても問題は発生しません。

SQLは標準として認識されていますが、ほとんどのSQLデータベースプログラムには独自の拡張機能があります。 このガイドでは、MySQLをリレーショナルデータベース管理システム(RDBMS)の例として使用していますが、指定されたコマンドは、PostgreSQL、MariaDB、SQLiteなどの他のリレーショナルデータベースプログラムで動作します。 RDBMS間に大きな違いがある場合は、代替コマンドを含めました。

データベースプロンプトを開く(ソケット/信頼認証を使用)

Ubuntu 18.04のデフォルトでは、root MySQLユーザーは、次のコマンドを使用してパスワードなしで認証できます。

sudo mysql

PostgreSQLプロンプトを開くには、次のコマンドを使用します。 この例では、含まれているスーパーユーザーロールであるpostgresユーザーとしてログインしますが、これを作成済みのロールに置き換えることができます。

sudo -u postgres psql

データベースプロンプトを開く(パスワード認証を使用)

root MySQLユーザーがパスワードで認証するように設定されている場合は、次のコマンドを使用して認証できます。

mysql -u root -p

データベースに非ルートユーザーアカウントを既に設定している場合は、このメソッドを使用してそのユーザーとしてログインすることもできます。

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';

この前のGRANTステートメントのPRIVILEGESキーワードに注意してください。 ほとんどのRDBMSでは、このキーワードはオプションであり、このステートメントは次のように書くことができます。

GRANT ALL ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

ただし、Strict SQL modeがオンになっている場合、このような特権を付与するには、PRIVILEGESキーワードが必要であることに注意してください。

ユーザーを削除する

次の構文を使用して、データベースユーザープロファイルを削除します。

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' );

次のように、単一のコマンドを使用して、テーブルに複数のデータ行を追加することもできます。

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';

[。注意]##

Note:次の例のように、DELETEステートメントにWHERE句を含めないと、テーブルに保持されているすべてのデータが削除されますが、列やテーブルは削除されません。自体:

DELETE FROM table;

テーブル内のデータの変更

次の構文を使用して、特定の行に保持されているデータを更新します。 コマンドの最後にあるWHERE句は、更新する行をSQL​​に指示することに注意してください。 valueは、変更する行に合わせてcolumn_Aに保持される値です。

[.note]#Note:UPDATEステートメントにWHERE句を含めなかった場合、コマンドはテーブルのすべての行に保持されているデータを置き換えます。

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;

列のエントリをカウントする

COUNT関数は、特定の列のエントリ数を見つけるために使用されます。 次の構文は、columnに保持されている値の総数を返します。

SELECT COUNT(column) FROM table;

次のようにWHERE句を追加することで、COUNT関数の結果を絞り込むことができます。

SELECT COUNT(column) FROM table WHERE column=value;

列の平均値を見つける

AVG関数は、特定の列に保持されている値の平均(この場合は平均)を見つけるために使用されます。 AVG関数は、数値を保持する列でのみ機能することに注意してください。文字列値を保持する列で使用すると、エラーまたは0が返される場合があります。

SELECT AVG(column) FROM table;

列の値の合計を見つける

SUM関数は、列に保持されているすべての数値の合計を見つけるために使用されます。

SELECT SUM(column) FROM table;

AVG関数と同様に、文字列値を保持する列でSUM関数を実行すると、RDBMSに応じて、エラーまたは0のみが返される場合があります。

列の最大値を見つける

列内の最大の数値またはアルファベット順の最後の値を見つけるには、MAX関数を使用します。

SELECT MAX(column) FROM table;

列内の最小値を見つける

列内の最小の数値またはアルファベット順の最初の値を見つけるには、MIN関数を使用します。

SELECT MIN(column) FROM table;

ORDER BY句を使用した結果の並べ替え

ORDER BY句は、クエリ結果を並べ替えるために使用されます。 次のクエリ構文は、column_1column_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;

GROUP BY句を使用した結果の並べ替え

GROUP BY句はORDER BY句に似ていますが、COUNTMAX、%()などの集計関数を含むクエリの結果を並べ替えるために使用されます。 t4)s、または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は、両方のテーブルで値が一致するすべてのレコードを返しますが、値が一致しないレコードは表示されません。

outerJOIN句を使用すると、他のテーブルに対応する一致がない値を含め、2つのテーブルのいずれかからすべてのレコードを返すことができます。 外側のJOIN句は、LEFT JOINまたはRIGHT JOINのいずれかとして記述されます。

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;

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句の組み合わせ

UNION演算子は、2つ(またはそれ以上)のSELECTステートメントの結果を1つの結果セットに結合するのに役立ちます。

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’s Database SQL Referenceを確認することをお勧めします。

また、このガイドに表示する一般的なSQLコマンドがある場合は、以下のコメントで質問するか提案してください。

Related