基本的なSQLコマンドでMySQLを使用する

概要:オープンソースのデータベース管理システムMySQLで基本的なSQLコマンドを使用する方法を学びましょう。

MySQLは最も一般的に使用されているリレーショナルデータベースマネージャです。 その使いやすさとオープンソースライセンスはこの人気に大きく貢献してきました。

先週、私はUbuntuでMySQLをインストールして設定することをカバーしました。 この記事では、主に基本を守りながら 、複数のMySQL機能を紹介します。

注: MySQL クエリ (コマンド)は大文字と小文字を区別しませ ただし、実際のコマンドキーワードにALL CAPSを使用し、 その他の キーワードには小文字を使用するのが一般的な方法です。

基本的なSQLコマンド

MySQLサーバーへの接続と切断

クエリを入力できるようにするには、まずMySQLを使用してサーバーに接続し、MySQLプロンプトを使用する必要があります。 これを行うためのコマンドは次のとおりです。

mysql -h host_name -u user -p 

-hホスト名を指定するのに使用され(サーバーが別のマシンにある場合はそれを省略します)、- uユーザーを指定し、 -pユーザーパスワードを入力することを指定します

(安全上の理由から)推奨されていませんが、 -pの直後に入力することで、コマンドに直接パスワードを入力できます。 たとえば、 test_userのパスワードが1234で 、使用しているマシンに接続しようとしている場合は、次のようにします。

 mysql -u test_user -p1234 

必要なパラメータを正しく入力したら、 MySQLシェルプロンプトmysql> )で迎えられます

サーバーから切断してmysqlプロンプトを終了するには、次のように入力します。

 QUIT 

終了 (MySQLでは大文字と小文字が区別されません)または\ qと入力しても動作します。 Enterを押して終了します。

簡単なコマンドでバージョンに関する情報を出力することもできます。

 sudo mysqladmin -u root version -p 

注: これから説明するクエリを入力する前に、サーバーに接続していることを確認してください。

オプションのリストを見たい場合は、次のようにしてください。

 mysql --help 

MySQLでクエリを使用する

MySQLはデータをテーブルに格納しクエリと呼ばれるコマンドを使用します( SQL =構造化クエリ言語)。 データの保存、アクセス、変更について詳しく説明する前に、 基本的なクエリについて説明します。

MySQLはテーブルを使用するので、 クエリ出力テーブルに表示されます。 例外もありますが、すべてのSQLステートメントの後にセミコロン; )を続ける必要があります(最も注目に値するのはQUIT)。 カンマ )で区切ることができます 。 基本的な例をいくつか示します。

 mysql> SELECT VERSION(); mysql> SELECT CURRENT_DATE; mysql> SELECT VERSION(), CURRENT_DATE; 

例として、3番目のクエリは次のようなものを出力します。

 +-----------+--------------+ | VERSION() | CURRENT_DATE | +-----------+--------------+ | 8.0.15 | 2019-04-13 | +-----------+--------------+ 1 row in set (0, 41 sec) 

セミコロン; )は文の終わりを示すので、1行に複数の文を書くこともできます。

たとえば、

 mysql> SELECT VERSION(); mysql> SELECT CURRENT_DATE; 

あなたはまた書くことができます:

 mysql> SELECT VERSION(); SELECT CURRENT_DATE; 

複数行のクエリを入力することもできます( Enterキーを押す前に行の終わりにセミコロンを含めない場合)。 その場合、MySQLは単に別のプロンプトを入力してコマンドを続行させます。 例えば:

 mysql> SELECT -> VERSION() ->, -> CURRENT_DATE; 

複数行のクエリは、文字列の終わり( 'または“で囲まれた単語)で終わっていない場合にも発生します。

クエリをキャンセルしたい場合は、 \ c入力してEnterキーを押します。

さまざまな意味のプロンプトがあります。

  • mysql> =新しいクエリの準備ができて
  • - > =複数行のクエリの次の行を待つ
  • '> =次の行を待ち、一重引用符で始まる文字列の完了を待ちます( '
  • “> =次の行を待ち、二重引用符で始まる文字列の完成を待ちます(
  • `> =次の行を待ち、バックティックで始まる識別子の完成を待ちます( `
  • / *> =次の行を待機し、 /*で始まるコメントの完了を待機する

NOW()を使用して現在の時刻hh:mm:ss )を現在の日付と一緒に印刷することも、 USER()を使用して接続しているユーザーを印刷することもできます。

 mysql> SELECT NOW(); mysql> SELECT USER(); 

これはこれと同じような何かを出力します:

 +---------------------+ | NOW() | +---------------------+ | 2019-04-13 23:53:48 | +---------------------+ 1 row in set (0, 00 sec) +----------------+ | USER() | +----------------+ | [email protected] | +----------------+ 1 row in set (0, 00 sec) 

MySQLでは、 数学計算も計算できます。

 mysql> SELECT COS(PI()/3), (10-2+4)/3; 

出力中:

 +--------------------+------------+ | COS(PI()/3) | (10-2+4)/3 | +--------------------+------------+ | 0.5000000000000001 | 4.0000 | +--------------------+------------+ 

MySQLでデータベースを使用する

1.データベースに関する情報を入手する

まず最初に、 利用可能なデータベースを以下のようにリストすることができます

 mysql> SHOW DATABASES; 

選択したデータベースを見ることもできます

 mysql> SELECT DATABASE(); 

データベースが選択されていない場合、これはNULLを出力します 。 上記の2つのステートメントの出力例は次のとおりです。

 +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ +------------+ | DATABASE() | +------------+ | NULL | +------------+ 

2.データベースを作成する

これは単にコマンドを入力することによって行われます。

 mysql> CREATE DATABASE example_db; 

注意: Ubuntu 18.04(または他のUnixベースのシステム)では、データベース名とテーブル名は大文字と小文字を区別します。

3.データベースの選択

データベースを選択するには、それを使用したいことを言及する必要があります

 mysql> USE example_db; 

成功すると、メッセージが表示されます。

 Database changed 

成功しなかった場合、MySQLは指定されたデータベースを見つけることができないことを知らせるエラーを返します。

connectコマンドの最後に既存のデータベースの名前を記述して、サーバーに接続するときにデータベースを選択することもできます。

 mysql -h host_name -u user_name -p example_table 

例えば:

 mysql -u root -p example_table 

SQLでのテーブルの使用

表に関する情報の取得

現在のデータベースのテーブルを一覧表示するには、次のようにします。

 mysql> SHOW TABLES; 

注: データベースを選択したことを確認してください。

データベースが空の場合(たとえば、新しく作成された場合)、出力は次のようになります。

 Empty set (0, 00 sec) 

テーブルを作成すると、出力は次のようになります。

 +----------------------+ | Tables_in_example_db | +----------------------+ | table_1 | | table_2 | +----------------------+ 1 row in set (0, 00 sec) 

表の作成

テーブルを作成するには、レイアウト、つまり列とそれらが格納するデータの種類を指定する必要があります。

私の例では、名前、生年月日、性別、国など、人々のグループに関する情報を格納します。 そのテーブルを作成する方法は次のとおりです。

 mysql> CREATE TABLE table_1 (name VARCHAR(30), birth_date DATE, sex CHAR(1), country VARCHAR(40)); 

注: コマンドを複数行に書き込むこともできます。

あなたは私がテーブル名( table_1と列の名前( namebirth_datesexcountry )に言及したのを見ることができます。 列名の後に、格納するデータ型を指定しました。 VARCHAR(n)は長さが最大n文字の文字列、 DATE一目瞭然CCYY-MM-DD形式)、そし​​てCHAR(1)は単一の文字を意味します(具体的には'm''fを使うつもりです) ' 男性女性 ために)。 他の一般的な型には、 INT (整数)、 BOOL (ブール値)、 TIME (hh:mm:ss)があります。MySQLで使用できるデータ型は多数あります(数値、文字列、日付と時刻)。 AUTO_INCREMENTなど、より複雑なデータ型を使用することもできます。

テーブルを表示するとテーブルが表示されます。

必要に応じて、 ALTER TABLEを使ってテーブルのレイアウト変更できます。

 mysql> ALTER TABLE table_1 ADD email VARCHAR(50); mysql> ALTER TABLE table_1 DROP birth_date; 

これらの例では、列を追加し (1番目の例) 、列削除しました (2番目の例)。 ALTER TABLEにはより高度な用途があるので、ここでALTER TABLEについてのより多くの情報をチェックアウトすることができます。

表の説明

テーブルの構造はいつでも確認できます。

 mysql> DESCRIBLE table_name; 

例えば:

 mysql> DESCRIBE table_1; 

出力される予定です:

 +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | name | varchar(30) | YES | | NULL | | | birth_date | date | YES | | NULL | | | sex | char(1) | YES | | NULL | | | country | varchar(40) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 4 rows in set (0, 00 sec) 

表の削除

テーブルを削除するためのステートメントは次のとおりです。

 DROP TABLE table_name; 

表にデータを挿入する

データを挿入するには、すべての列に導入する値を(テーブル定義と同じ順序で)指定する必要があります。 空または未知の値にはNULLを使うべきです。 数値以外の値は必ず二重引用 ' )または二重引用符" )で囲んでください 。 値はコンマ )で区切る必要があります

これがSmithとEmilyの例です。

 mysql> INSERT INTO table_1 VALUES ('Smith', '1980-04-24', 'm', 'Argentina'); mysql> INSERT INTO table_1 VALUES ('Emily', '1994-07-19', 'f', NULL); 

表を空にする

テーブルを空にする (すべてのエントリを削除する)場合は、次のようにします。

 DELETE FROM table_name; 

WHEREを使用すると、特定の行を削除できます

 DELETE FROM table_name WHERE col_name = value 

以下のセクションでさらに詳しく説明します。

7.テーブルエントリの更新

エントリを更新するための構文は次のとおりです。

 UPDATE table_name SET col = 'value' WHERE conditions 

例えば:

 UPDATE table_1 SET country = 'France' WHERE name = 'Emily' 

条件を指定しないと、すべてのエントリが変更されます。

表からのデータの取り出し

テーブルからデータを抽出するために使用されるMySQLコマンドはSELECTです。 そのような文の構造は次のとおりです。

 SELECT what FROM where WHERE conditions; 

いくつかの一般的なアプリケーションについて説明しますので、データベースから必要なものを正確に抽出する方法を理解することができます。

a。 全データ選択

まず第一に、最も簡単な使い方はテーブルからすべてのデータを表示することです。 例えば:

 mysql> SELECT * FROM table_1; 

ワイルドカード* )はすべてを表し、 table_1は私が抽出したテーブルです。 WHEREの部分が省略されているのがわかります。 選択したデータに条件を付けることはオプションです。

b。 特定のデータを選択する

まず最初に選択します

特定の行を選択するには、データを絞り込む条件を指定する必要があります。

 mysql> SELECT * FROM table_1 WHERE name = 'Smith'; mysql> SELECT * FROM table_1 WHERE sex = 'm'; mysql> SELECT * FROM table_1 WHERE birth_date SELECT * FROM table_1 WHERE sex = 'f' AND birth_date > '1991-1-1'; mysql> SELECT * FROM table_1 WHERE sex = 'm' OR country = 'France'; mysql> SELECT * FROM table_1 WHERE country IS NOT NULL; 

最初の2つの例では、単に文字列を比較します大文字と小文字は区別されません )。 日付整数などの値を比較演算子>、=、<=、= )で比較することもできます。 「 等しくない 」を表すために使用されます。 論理演算子ANDOR )を使用して複数の条件を指定できます。 ANDORよりも優先順位が高くなります。 より複雑な条件がある場合は括弧を使用するのが最善です。

IS NOT NULLは、指定された列に値がない行だけを表示する方法です。 算術比較演算子NULLと一緒に使用することはできません。これは欠損値を表すためです(結果もNULLになります )。 IS NULLIS NOT NULLを使うべきです。

NULLFALSEとして扱われ、残りはTRUEとして扱われます

それでは、 特定の列の表示について説明します

そのためには、表示したい列をコンマで区切って指定する必要があります。 例えば:

 mysql> SELECT name, birth_date FROM table_1; 

繰り返しデータを削除することもできます 。 たとえば、すべての生年月日を取得したい場合(その日に複数の人が生まれた場合、同じ値を複数回取得することなく)、次のようにします。

 mysql> SELECT DISTINCT birth_date FROM table_1; 

これはDISTINCT結果のみを表示します

さらに具体的にするには、特定の列を条件付きで表示することWHERE )を組み合わせることができます。

 mysql> SELECT name, sex FROM table_1 WHERE country = 'France' AND birth_date < '1991-1-1'; 

c。 データの並べ替え

データをソートするには、 ORDER_BYを使用します

 mysql> SELECT name FROM table_1 ORDER BY birth_date; 

私はこれを特定のデータの選択と組み合わせたことがわかります。 上記のコマンドは、誕生日順に昇順に並べられたすべてのエントリの名前を表示します。

降順で注文することもできます。

 mysql> SELECT name FROM table_1 ORDER BY birth_date DESC; 

ソート複数の列に適用できます 。 たとえば、生年月日の降順、および同日に生まれる人を名前の昇順で並べ替えるには、次のようにします。

 mysql> SELECT name FROM table_1 ORDER BY birth_date DESC, name; 

d。 日付を操作する

現在の日付は CURDATE()を使って取得できます。 この年と別の年を使って、 TIMESTAMPDIFF()で差を計算することができます(例えば、人の年齢を取得するために

 mysql> SELECT name, birth_date, CURDATE(), -> TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS age -> FROM table_1 ORDER BY age; 

これは、 table_1の例の出力です。

 +--------+------------+------------+------+ | name | birth_date | CURDATE() | age | +--------+------------+------------+------+ | Emily | 1994-07-19 | 2019-04-13 | 24 | | Danny | 1992-08-04 | 2019-04-13 | 26 | | Joanna | 1992-08-04 | 2019-04-13 | 26 | | Joe | 1985-03-11 | 2019-04-13 | 34 | | Smith | 1980-04-24 | 2019-04-13 | 38 | +--------+------------+------------+------+ 

TIMESTAMPDIFF()は、結果として使用する単位(YEAR)と、差を計算するための2つの日付(birth_date、CURDATE())を引数として取りますAS別名)キーワードは、結果の列に名前を付けて、扱いやすくします(この例では、年齢によるソート)。

日付の特定の部分を参照するために、 引数として日付を使用して、 YEAR()MONTH() 、およびDAYOFMONTH()を使用できます 。 例えば:

 mysql> SELECT name, birth_date, MONTH(birth_date) FROM table_1; 

通常の数と同じように結果(月、年、日)を比較できます。 しかし、これらを翌月のようなものと比較するために、 CURDATE()に単純に追加することはできません。これは、13か月または他のそのような無意味をチェックする原因になる可能性があるためです。 そのための回避策はINTERVALDATE_ADD()です。

 mysql> SELECT name, birth_date FROM table_1 WHERE MONTH(birth_date) = MONTH(DATE_ADD(CURDATE(), INTERVAL 1 MONTH)); 

モジュロ演算子MOD )を使用することもできます。

 mysql> SELECT name, birth_date FROM pet WHERE MONTH(birth_date) = MOD(MONTH(CURDATE()), 12) + 1; 

無効な日付を使用すると、 NULLが返され 、次のように警告が生成されます

 mysql> SHOW WARNINGS; 

e。 パターンマッチングを使う

MySQLでは、 _任意の1文字を表し、 は0+文字を表し、パターンは(デフォルトで) 大文字と小文字を区別しませ= andの代わりに パターンを使用するには、 LIKENOT LIKEを使用する必要があります。

 mysql> SELECT birth_date FROM table_1 WHERE name LIKE '%a%'; mysql> SELECT birth_date FROM table_1 WHERE name LIKE '%b'; mysql> SELECT birth_date FROM table_1 WHERE name LIKE 'c%'; mysql> SELECT * FROM table_1 WHERE name LIKE '___'; 

これらの例では、名前に ' a 'が含まれる(最初の例)、 ' b 'で終わる(2番目の例)、または ' c 'で始まる(3番目の例)エントリの生年月日を選択します。 最後の例では、名前がちょうど3文字( ' _ 'の3つのインスタンス)の行を選択します。

REGEXP_LIKE()REGEXPおよびRLIKE演算子もを使用して、 拡張正規表現を使用することもできます 。 正規表現はこのガイドの範囲を超えていますが、ここで詳細を調べることができます。

f。 カウント結果

データのカウントは重要であり、現実の世界では多くの用途があります。 MySQLはそのようなタスクにCOUNT()を使用します。 最も簡単な例は、テーブルのエントリを数えることです。

 mysql> SELECT COUNT(*) FROM table_1; 

グループ間でカウントを分割することもできます 。 たとえば、国別にグループ化して、各国にいくつのエントリがあるかを表示できます。

 mysql> SELECT country, COUNT(*) FROM table_1 GROUP BY country; 

group byにさらに列を入力することで、さらに具体的なグループに言及することができます 。 例えば:

 mysql> SELECT country, sex, COUNT(*) FROM table_1 GROUP BY country, sex; 

これらの結果は、出力を絞り込むためにWHEREと一緒に使用することもできます。

数えるときは注意してください。 COUNT()以外に印刷するものを指定し、 GROUP BYの後にそれらの列について言及していない場合は、 エラーまたは予期しない結果が生じる可能性がありますONLY_FULL_GROUP_BYを参照)。

g。 複数のテーブルを使う

これは、もう少し複雑な状況で実行したいことがあります。

例として、魔女の人々( name )が会議に出席したときの日付( date )を格納する別のテーブル( table_2 )があるとします。

これらのテーブルの人々が会議に出席したときの年齢を表示できます。

 mysql> SELECT table_1.name, TIMESTAMPDIFF(YEAR, birth_date, date) AS age, meeting FROM table_1 INNER JOIN table_2 ON table_1.name = table_2.name; 

これは以下のように出力されます。

 +-------+------+-----------------+ | name | age | meeting | +-------+------+-----------------+ | Emily | 21 | Dog Lovers Club | | Emily | 22 | Dog Lovers Club | | Emily | 23 | Hackathon | | Smith | 36 | TED Talk | | Smith | 38 | Footbal Match | +-------+------+-----------------+ 

構文を説明してみます名前table_1.nametable_2.nameに言及しなければなりませんでした 、なぜなら列は両方のテーブルに存在するからです( birth_datedatemeetingの場合はテーブルのどちらかに固有なので指定する必要はありません)。 これは私が既にカバーしたステートメントを使います。

面白い部分はこれです:

  FROM table_1 INNER JOIN table_2 ON table_1.name = table_2.name; 

INNER JOINはテーブルをまとめて、共通点がある行(キーワードONで指定された条件)を取ります。 この場合、名前は一致します。

注: おそらく2つのSELECT結果を比較するために、同じ表をそれ自体と組み合わせることもできます。

MySQLでのバッチモードの使用

もう1つの優れた機能はバッチモードです対話式シェルの代わりに、ステートメントをファイルに入れて実行することができます。

 mysql -h host_name -u user_name -p < batch_file 

その後、パスワードの入力を求められます(ユーザーに必要な場合)。 エラーで停止するのではなく実行し続ける場合は、 -forceを使用してください。

出力を他のプログラムやファイルにリダイレクトすることもできます。

 mysql -h host_name -u user_name -p < batch_file | less mysql -h host_name -u user_name -p output_file 

-tを使って対話型の出力を得たり-vパラメータを使ってエコーの出力を行うこともできます。

対話型のMySQLシェルに入っていてスクリプトを実行したい場合は、次の2つのいずれかを使用してください。

 mysql> source batch_file; mysql> \. batch_file; 

まとめ

この記事では、 MySQLを使用表データベース処理するさまざまな方法について説明しました。さらに高度な機能についても詳しく説明しました。

このガイドがユーザーと初心者の苦労を助けてくれたらうれしいです。 あなたが初心者でなくても、私はあなたがあなたが知らなかった何かを読むことを願っています。 それでも問題が解決しない場合は、コメント欄でお知らせください。

推奨されます

Ubuntu LinuxにPandoraラジオクライアントPithosをインストールする
2019
Linuxでapt-getコマンドを使用する
2019
イリジウムブラウザ:プライバシーを意識したブラウザ
2019