3.2クエリーの入力


前の章で説明したように、サーバに接続されていることを確認します.接続上のサーバ自体は、アプリケーションに使用するデータベースを選択していませんが、実行できます.この場合、テーブルの作成に直接ジャンプしたり、データをロードしたり、テーブルから情報を取得したりするよりも、クエリーの知識を知ることが重要です.これはクエリーを入力する基本原則を提供し、いくつかのクエリーを使用してmysqlがどのように動作しているかを熟知してみることができます.
これは、サーバにバージョン番号と現在の時間を教えるように要求する簡単なコマンドです.mysql>プロンプトで次のコマンドを入力し、Enterを押します.
mysql> SELECT VERSION(), CURRENT_DATE; +--------------+--------------+
| VERSION() | CURRENT_DATE | +--------------+--------------+
| 5.6.1-m4-log | 2010-08-06 | +--------------+--------------+
1 row in set (0.01 sec)
mysql>

このクエリはmysqlのいくつかの側面を説明します.
  • コマンドは通常SQL文で構成され、セミコロンが続く.(いくつかの例外はセミコロンを必要としません.前に述べたQUITは例です.後で他の例を見ます.)
  • コマンドが発行されると、mysqlはサーバに送信され、実行結果が表示され、別のmysql>が他のコマンドを受け入れる準備ができていることが表示されます.
  • mysqlクエリー出力を表(行と列)として表示する.最初の行には列のラベルが含まれます.次の行はクエリーの結果です.通常、カラムラベルは、データ・テーブルから取得したカラムの名前です.さっきの例のように、テーブル列ではなく式を取得している場合は、mysqlは式自体で列をマークします.
  • mysqlは、どのくらいのローが返されたか、クエリにどのくらいの時間がかかったかを示し、サーバのパフォーマンスの概要を提供します.クロック時間(CPUまたはマシン時間ではない)を表し、サーバ負荷やネットワーク遅延などの影響を受けるため、これらの値は不正確である.(簡潔化のため、本章の他の例では「集合中の行」が表示されない場合がある.

  • キーワードを大文字と小文字で入力できます.次のクエリは等価です.
    mysql> SELECT VERSION(), CURRENT_DATE;
    mysql> select version(), current_date;
    mysql> SeLeCt vErSiOn(), current_DATE;

    単純な計算機としてmysqlを使用できることを証明した別のクエリです.
    mysql> SELECT SIN(PI()/4), (4+1)*5; +------------------+---------+
    | SIN(PI()/4) | (4+1)*5 | +------------------+---------+
    | 0.70710678118655 | 25 | +------------------+---------+
    1 row in set (0.02 sec

    これで表示されるコマンドは、かなり短い単行文です.1行に複数の文を入力できます.各文を1つのセミコロンで区切るだけです.
    mysql> SELECT VERSION(); SELECT NOW(); +--------------+
    | VERSION() | +--------------+
    | 5.6.1-m4-log | +--------------+
    1 row in set (0.00 sec) +---------------------+
    | NOW() | +---------------------+
    | 2010-08-06 12:17:13 | +---------------------+
    1 row in set (0.00 sec)

    1つのローに1つのコマンドをすべて指定する必要はありません.長いコマンドは複数のローに入力できます.mysqlは、入力行の終わりではなく終わりのセミコロンを探すことで、文がどこで終わるかを決定します.(言い換えれば、mysqlはフリーフォームの入力を受け入れます.入力行を収集しますが、セミコロンが見えるまで実行します.)
    これは単純なマルチロー文です.
    mysql> SELECT
    -> USER()
    -> ,
    -> CURRENT_DATE; +---------------+--------------+
    | USER() | CURRENT_DATE | +---------------+--------------+
    | jon@localhost | 2010-08-06 | +---------------+--------------+

    この例では、複数行のクエリーの最初の行を入力した後、プロンプトがmysql>から->にどのように変化するかに注意します.これは、mysqlが完全な文を見ていないことをどのように指摘し、残りの部分を待っているかです.プロンプトはあなたの友达です.価値のあるフィードバックを提供しているので、このフィードバックを使用すると、mysqlが何を待っているかが常にわかります.
    入力中のコマンドを実行したくない場合は、cを入力してキャンセルします.
    mysql> SELECT
    -> USER() -> \c mysql>

    ここでもプロンプトに注意してください.cを入力すると、mysql>に戻り、mysqlが新しいコマンドを受け入れる準備ができていることを示すフィードバックを提供します.
    次の表に、表示可能な各プロンプトを示し、mysqlのステータスを簡単に説明します.
    プロンプト
    意味
    mysql>
    命令を受け入れる準備ができている
    ->
    複数行コマンドの次の行を待つ
    ‘>
    次の行を待ち、一重引用符(')で始まる文字列の最後を待ちます.
    “>
    次の行を待ち、二重引用符(""")で始まる文字列の最後を待ちます.
    `>
    次の行を待ち、反斜点(`’)で始まる識別子の終わりを待つ.
    /*>
    次の行を待って、/*で始まるコメントの終了を待っています.
    1つのローでコマンドを発行しようとすると、通常は複数のロー文が「偶然」表示されますが、セミコロンは終了しません.この場合、mysqlはさらに入力するのを待っています.
    mysql> SELECT USER() ->

    このような場合(文を入力したと思いますが、1つの->プロンプト応答しかありません)、mysqlがセミコロンを待っている可能性があります.プロンプトのヒントに気づかなかったら、何をする必要があるかを意識する前に、しばらく座っているかもしれません.セミコロン完了文を入力するとmysqlが実行されます.
    mysql> SELECT USER()
    -> ; +---------------
    | USER() | +---------------+
    | jon@localhost | +---------------+

    文字列収集中に">和">プロンプトが表示される(mysqlがフィールド列の完了を待っていることを示す別の方法).mysqlでは、「」または「」「文字で囲まれた文字列(例を挙げると、「hello」または「goodbye」)を書くことができ、mysqlでは複数行にまたがる文字列を入力できます.'>または'>プロンプトが表示されます.これは、すでに'''または'''の先頭を含む行を入力したことを意味しますが、終了文字列の一致引用符はまだ入力されていません.これはよくあなたが不注意で引用符を省略したことを示します.例:
    mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30; '>

    このSELECT文を入力し、Enterキーを押して結果を待つと、何も現れません.なぜこのクエリーにそんなに時間がかかったのか驚かないでください.mysqlは、終了していない文字列の残りの部分を見ることを望んでいることを示します.(文のエラーを見ましたか?文字列'Smithは2番目の引用符を失いました.)
    この時、あなたは何をすべきですか?最も簡単なのは、このクエリーをキャンセルすることです.しかし、mysqlは文字列の一部として説明するので、cを入力するだけではいけません.逆に、この閉じた引用符(mysqlはあなたがこの文字列を完成したことを知っています)を入力し、c:
    mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30; '> '\c
    mysql>

    プロンプトはmysql>に戻り、mysqlが新しいコマンドを受け入れる準備ができていることを示します.
    `>プロンプトは「>和」>プロンプトに似ていますが、`>で始まる識別子が終わっていないことを示します.
    '>と">プロンプトの意味を知ることが重要です.終了していない文字列を誤って入力すると、後で入力された行はmysqlに無視されます.QUITを含む行も含まれます.これは、特に現在のコマンドをキャンセルする前に終了引用符を指定する必要があることを知らない場合に困惑する可能性があります.