MySQLのSelect文の基本構文
6181 ワード
SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT]
[SQL_BIG_RESULT] [HIGH_PRIORITY]
[DISTINCT|DISTINCTROW|ALL]
select_list
[INTO {OUTFILE|DUMPFILE} 'file_name' export_options]
[FROM table_references [WHERE where_definition]
[GROUP BY col_name,...] [HAVING where_definition]
[ORDER BY {unsighed_integer|col_name|formura} [ASC|DESC],...]
[LIMIT [offset,] rows] [PROCEDURE procedure_name]]
この基本文法から分かるように、最も簡単なSELECT文はSELECT select_です.Listは、実際にこの最も簡単なSELECT文を利用して、あなたも多くの期待の機能を完成することができて、まずあなたはそれを利用してMySQLがサポートしたいかなる演算を行うことができて、例えば:SELECT 1+1、それは2を返します;次に、変数に値を付けることもできますが、PHPではSELECT文という機能を使えば、MySQLの関数を使ってPHPプログラムにいろいろな演算を行い、変数に値を付けることができます.多くの場合、MySQLにはPHPよりも強力な関数がたくさんあることがわかります.
STRAIGHT_JOIN、SQL_SMALL_RESULT、SQL_BIG_RESULT、HIGH_PRIORITYはMySQL対ANSI SQL 92の拡張である.オプティマイザがテーブルを最適でない順序で結合する場合は、STRAGHT_を使用します.JOINはクエリーを速めることができます.
SQL_SMALL_RESULTとSQL_BIG_RESULTは相対的なキーワードのセットです.GROUP BY、DISTINCT、またはDISTINCTROWとともに使用する必要があります.SQL_SMALL_RESULTはオプティマイザの結果が小さくなることを通知し、MySQLはソートではなく最終的なテーブルを一時テーブルで格納するように要求した.逆にSQL_BIG_RESULTはオプティマイザに結果が小さくなることを通知し、MySQLに一時表ではなくソートを使用するように要求した.
HIGH_PRIORITYは、1つの更新テーブルの文よりもSELECTの優先度を高くし、優先的な迅速なクエリーを行うことができます.
以上の4つのキーワードの使い方は確かに難しい.幸いなことに、ほとんどの場合、MySQLではこの4つのキーワードを使用しないことを完全に選択することができます.
DISTINCT、DISTINCTROWは、クエリが返す結果セットに対して最も基本的であるが有用なフィルタリングを提供します.つまり、結果セットには非繰返し行のみが含まれます.ここで注意したいのは、キーワードDISTINCT、DISTINCTROWにとって空の値は等しく、NULL値がいくらあっても1つだけ選択することです.ALLの使い方には蛇足のきらいがある.結果セットの生成には影響しません.
INTO {OUTFILE|DUMPFILE} 'file_name' export_options、結果セットをファイルに書き込みます.ファイルはサーバホスト上に作成され、すでに存在することはできません.文のexport_optionsセクションの構文は、LOAD DATAINFILE文で使用されているFIELDSおよびLINES句と同様に、MySQLで拡張されます.LOAD DATA編で詳しく説明します.OUTFILEとDUMPFILEのキーワードの違いは、後に1行だけファイルに書き、列や行が終わることはありません.
select list:次の項目を1つ以上含めることができます.
1、「*」は、create tableの順に並べられたすべての列を表します.
2、ユーザーが必要とする順番に並べられた列名のリスト.
3、カラム名の代わりに別名を使用できます.column name as column_heading.
4、式(列名、定数、関数、または算術演算子またはビット単位演算子で接続された列名、定数、関数の任意の組合せ).
5、内部関数または集合関数.
6、上記各項目のいずれかの組み合わせ.
FROM:SELECTコマンドで使用するテーブルを決定します.select_リストにはカラム名は含まれません(定数、算術式などのみ).テーブル・アイテムに複数のテーブルがある場合は、カンマで区切ります.キーワードFROMの後のテーブルの順序は結果に影響しません.
テーブル名は、表現を明確にするために関連する別名を与えることができます.ここの文法はtbl_です.name [AS] alias_name.例:
select t1.name,t2.salary from employee as t1,info as t2 where t1.name=t2.name
とselect t1.name,t2.salary from employee t1,info t2 where t1.name=t2.name
は完全に等価です.where句やhaving句など、テーブルへの他の参照はすべて別名で、別名は数値で始まることはできません.
where句は、insert、update、delete文での適用方法もselect文での適用方法と全く同じである検索条件を設定します.検索条件はキーワードwhereの直後にある.ユーザーが文で複数の検索条件を使用する場合は、andまたはor接続を使用できます.検索条件の基本構文は[not]expression comparison_operator expression;[not] expression [not] like “match_string”;[not] expression is [not] null;[not] expression [not] between expression and expression;[not] column_name join_operator column_name;[not] boolean_expression.
and:2つの条件を結合し、両方の条件がTRUEである場合に結果を返すために使用されます.同じ文で複数の論理演算子を使用する場合、and演算子は、ユーザがカッコで演算順序を変更しない限り、常に最も優先されます.
or:2つの条件を結合するために使用され、2つの条件のいずれかがTRUEである場合に結果を返す.同じ文で複数の論理演算子を使用する場合、演算子orは通常、演算子andの後に演算されます.もちろん,ユーザはカッコを用いて演算の順序を変更することができる.
between:範囲下限を識別するためのキーワードで、and後に範囲上限の値が付いています.範囲where@val between x and yには、ヘッダ値が含まれます.betweenの後に指定した最初の値が2番目の値より大きい場合、クエリはローを返しません.
column_name:比較で使用するカラム名.曖昧さが生じる場合は、カラムが存在するテーブル名を必ず指定します.
comparison_Operator:比較演算子.次の表を参照してください.
以下に、リファレンスクリップを示します.
シンボルの意味
=等しい
>より大きい
未満
>=以上
<=以下
!=等しくない
<>等しくない
char,varchar型データを比較する場合,「<」はアルファベットヘッダに近いことを意味し,「>」はアルファベット末尾に近いことを表す.一般に、小文字は大文字より大きく、大文字は数字より大きいが、これはサーバ上のオペレーティングシステムの比較順序に依存する可能性がある.
比較すると、末尾のスペースは無視されます.たとえば、「Dirk」は「Dirk」に等しい.
日付を比較する場合、「<」は「より前」、「>」は「より後」を表します.
比較演算子を使用してcharacterとdatetimeデータを比較する場合は、すべてのデータを引用符で引き起こす必要があります.
expression:カラム名、定数、関数、またはカラム名または定数の任意の組合せ、および算術演算子またはビット単位演算子で接続された関数です.次の表に算術演算子を示します.
以下に、リファレンスクリップを示します.
シンボルの意味
+プラス記号
-マイナス記号
*乗算記号
/除算
is null:NULL値を検索するときに使用します.
like:キーワードは、char、varchar、datetime(秒とミリ秒を除く)に対してlikeを使用することができ、MySQLではlikeも数字の式に使用することができます.
ユーザがdatetime型データを検索する場合、完全なdatetimeレコードには様々な日付コンポーネントが含まれているため、キーワードlikeを使用することが望ましい.たとえば、カラムarrival_timeには「9:20」という値が追加され、句where arrival_MySQLが入力したデータを「Jan 11900 9:20 AM」に変換したため、time=「9:20」は発見されなかった.しかし、句where arrival_time like「%9:20%」で見つけられます.
boolean_expression:trueまたはfalseの値を返す式.
match_string:文字とワイルドカードからなる列で、単一引用符または二重引用符で表され、マッチングモードです.ワイルドカードは次の表に示されています.
以下に、リファレンスクリップを示します.
シンボルの意味
%0または複数文字の文字列
_任意の1文字
not:論理式やキーワードを否定し、
like、null、betweenなどです.
groupbyとhaving句はselect文で使用され、
テーブルをグループに分割し、having句条件に一致するグループを返すことができます.
構文:select文の先頭
group by [all] aggregate_free_expression [,aggregate_free_expression]*
[having search_conditions]
select文の末尾
groupby:テーブルが分割されるグループを指定し、selectテーブル項目に集合関数が含まれている場合、各グループの合計値を計算します.これらの合計値の結果は、新しいローではなく新しいカラムで表示されます.having句では、ユーザーはこれらの新しい合計列を参照できます.グループbyより前のselect_listではavg,count,max,min,sumなどの集合関数を用いることができる.テーブルは、任意のカラムの組合せでグループ化できます.
all:結果にはすべてのグループのTransact-SQL拡張が含まれ、ここでのすべてのグループにはwhere句で除外されたグループも含まれます.having句を併用するとallの意味が否定される.
aggregate_free_expression:集合関数を含まない式.Transact-SQL拡張では、カラム名でグループ化しながら、集合関数のない式でグループ化できます.
having:groupby句に条件を設定します.whereがselect文に条件を設定する方法と似ています.havingの検索条件には、集合関数式が含まれます.それ以外に、その検索条件はwhere検索条件と同じです.
order by:結果を列別に並べます.selectに出力されるカラムは、カラム名、カラム別名、またはカラム位置で参照できます.たとえば、select id as myid、name as myname from mytable group by id、select id as myid、name as myname from mytable group by myid、select id as myid、name as myname from mytable groupby 1の3つの文は完全に等価です.もちろん,第3の用法には賛成しないが,これはプログラムの可読性に悪影響を及ぼす.降順で並べ替えるために、order by句で並べ替える列名の前にDESCキーワードを追加します.デフォルトは昇順で、ASCキーワードで明確に指定することもできます.
limit句:select文が返す行数を制限します.limitは1つまたは2つの数値パラメータをとり、2つのパラメータが与えられた場合、最初に戻る最初の行のオフセット量を指定し、2番目に戻る行の最大数を指定します.初期行のオフセットは0(1ではありません)です.パラメータが指定されている場合、オフセットが0の戻り行の最大数を示します.すなわちlimit 5とlimit 0,5は完全に等価である.
Procedureキーワードの意味については、私もよく分かりませんでした.ストレージ・プロシージャのサポートのようですが、MySQL自体はストレージ・プロシージャをサポートしていません.将来の拡張のために残されているようですね.