データの取得
単一の行の取得
/* 没有明确排序查询的结果,则返回的数据的顺序没有特殊意义 */
select prod_name from products;
複数の列を取得します
select prod_id,prod_name,prod_price from products;
すべての列を取得します
/* 如果给定一个通配符(*),则返回列表中的所有列。
列的顺序一般是列在表中定义出现的顺序。
检索不需要的列通常会降低检索和应用程序的性能
*/
select * from produts;
別の検索行
使用DISTICNTキーワードは、このキーワードはMYSQLの復帰にのみ異なる値を示しています。
select distinct vend_id from products;
リミット結果
SELECTステートメントは、一致するすべての行を返します
指定された行を戻すために、LIMIT句を使用することができます
//カウントデータの先頭から開始; LIMIT開始は、カウントがゼロからカウントを開始します
select prod_name from products LIMIT 5; /* 检索前5行数据 */
あなたのデータをソート
取得したデータのランキングによると、SELECT文のORDER BY句を使用すると、必要とされています
取得したデータは、純粋にランダムな順序で表示されません。何のデータは、一般的にソートされていない場合は,,それは、表示順序基礎となる表に表示されます。データがその後更新され、削除されている場合ただし、この順序はMYSQLリユース再利用収納スペースを影響を受けることになります。制御は、その後、明確でない場合はそのため、ことはできません(とすべきでない)ソート順に依存します。リレーショナルデータベースの設計理論を使用すると、ソート順を指定しない場合、あなたは意味のある順序を取得したと仮定してはならないということです。
データのソート
select prod_name from products order by prod_name; /* 按照姓名顺序进行排序 */
複数の列で並べ替え
(単に複数の列を選択したときに行ったように)だけで、列名を指定して複数の列でソートするには、列名は、缶の間にカンマで区切られました
/*首先按照价格,然后按照名称进行排序*/
/* 仅在多个行具有相同的prod_price值时才对产品按prod_name进行排序。
如果prod_price列中所有的值都是唯一的,则不会按照prod_name排序
*/
select prod_id,prod_price,prod_name from products order by prod_price,prod_name;
ソート方向を指定します。
データ昇順(AからZ)に限定されるものではなく、ソート、これは、ORDER BY句は、降順に(AからZまで)降順にのみ、デフォルトのソート順を使用することができるされています。降順の場合、あなたはDESCキーワードを指定する必要があります。
/* 按价格以降序排序产品*/
select prod_id from products order by prod_price desc;
あなたが複数の列で降順にソートしたい場合は、各列のDESCキーワードを指定する必要があります。
DESCキーワードは、ASCとは反対側の、あなたは昇順で、それを指定することができます。
データのフィルタリング
データベーステーブルは、通常、めったに表のすべての行を取得する必要がない、大量のデータが含まれています。
特定の操作またはレポートのために必要な抽出されたデータテーブルの通常サブセットのみ。
取得し、必要なデータのみを指定する必要があります検索条件検索条件は、フィルタ基準として知られています。
SELECT文は、データは、WHERE句で指定した検索条件に基づいてフィルタリングされます。句は、テーブル名の後に指定されWHERE
単一の値をチェックしてください
select prod_name,prod_price from products where prod_price = 2.50;
不一致チェック
select vend_id,prod_name from products where vend_id <>1003;
範囲チェック
値の範囲を調べるために、オペレータとの間で使用されてもよいです。
select prod_name from products where prod_price between 5 AND 10;
ヌルチェック
あなたは、テーブル、カラムに値が含まれていないかどうか、設計者が指定することができ、テーブルを作成するとき。呼ばれる値が含まれていない列はNULL値はnullが含まれている場合
フィールドには0が含まれていることを非NULL値、文字列はスペースのみまたは異なるが含まれています
select prod_name from products where prod_price is null;
AND演算子
複数の列によってフィルタするために、オペレータは、WHERE句の条件を取り付けるために使用されてもよいです。
そして:すべての指定された検索条件を満足する行を示すために使用されます
select prod_id,prod_price from products where vernd_id = 1003 and prod_price <=10;
OR演算子
OR:MySQLのラインは、任意の検索条件の一致を示しています
評価順
溶液は、括弧演算子を対応するクリアパケットであります
IN演算子
条件の範囲を指定するオペレータは、各条件の範囲内で一致させることができます。
INは正当な値のリストは、すべての括弧内、カンマで区切っかかります。
select prod_name from products where vend_id in (1002,1003) order by prod_name;
NOT演算子
NOT演算子の役割:それはかかとの後に任意の条件を否定しました。
/* 列出除1002和1003之外所有供应商制造的产品 */
select prod_name from products where vend_id NOT in (1002,1003) order by prod_name;
ワイルドカードろ過
ワイルドカード:特殊文字の部分と一致する値
検索句にワイルドカードを使用するためには、LIKE演算子を使用する必要があります。
LIKEは、MySQLを直接等しい一致を比較するのではなく、ワイルドカード一致する検索パターンを使用して、続いて示しました。
特許ワイルドカード%
検索文字列では、%は任意の文字を任意の回数を表しているように見えます
/* 找出所有以词jet起头的产品 */
select prod_id from products where prod_name like 'jet%';
/* 匹配包含anvil的值,而不论它之前或之后出现什么字符 */
select prod_id from products where prod_name like '%anvil%';
/* 匹配以s起头以e结尾的所有产品 */
select prod_id from products where prod_name like 's%e';
- ワイルドカード
唯一の代わりに、複数の文字の単一の文字にマッチ
計算フィールドを作成します。
私たちは、データの計算や書式設定、データベースの変換から直接取得する必要があり、代わりに、データ、およびクライアント・アプリケーションを検索したり手続きしてから再フォーマットを報告します
計算フィールドは、SELECT文で実行時に作成され、それが実際にデータベースに存在していません
スプライシングフィールド
スプライシング:値に単一の値を構成する互いに接続
MySQLはSELECT句で、スプライスに2つの列を連結方式の()関数を使用します
select Concat(vend_name,'(',vend_country,')') from vendors order by vend_name;
実行算術計算
データ処理機能を使用します
テキスト処理関数
機能 | 機能 |
---|---|
左() | 左側の文字列を返します。 |
長さ() | 文字列の長さを返します。 |
見つけて() | 文字列の部分文字列を検索します |
下の() | 文字列の小文字 |
LTRIM() | スペースの左にある文字列を削除します |
日付と時刻の処理関数
機能 | 機能 |
---|---|
AddDate() | 日付を追加します(日、週) |
でaddTime() | 時間を追加 |
CURDATE() | 現在の日付を返します。 |
CURTIME() | 現在の時刻を返します。 |
日付() | これは、日時の現在の日付部分を返します。 |
DateDiff関数() | 2つの日付の差を計算します |
集約されたデータ
私たちはしばしば、むしろ、彼らが実際に取得したものよりもデータを集約、特殊機能MySQLを提供することを目的にする必要があります。これらの機能を使用して、MySQLのクエリは、分析やレポート生成のために、データを取得するために使用することができます。検索のこのタイプの例は以下の通りです。
-
テーブル内の行の数を決定する(または条件が満たされているか、してライン値の特定の数を含みます)
-
中国の銀行は、テーブルを設定および取得
-
最大テーブルの列の値(又は行またはすべての行の特定)を見つけ、最小値及び平均値
集計機能:線群上で実行され、計算関数が返す単一の値
機能 説明 AVG() 列の平均値を返します。 カウント() 列の行数を返します。 MAX() 列の最大値を返します。 MIN() 列の最小値を返します。 和() 戻り値カラムの値と
AVG()関数
AVG()は、テーブルの行の数で計算され、特定の列の和を計算し、カラム平均値が得られています。
AVG()関数は、列の値がNULLである行は無視されます
/**
返回products所有产品的平均价格
**/
SELECT AVG(PROD_PRICE) AS avg_price;
/*1003供应商的平均价格*/
SELECT AVG(PROD_PRICE) AS avg_price where vend_id=1003;
COUNT()関数
COUNT()関数がカウントされます。行数をテーブル内の行の数を決定または特定の条件を満たすように利用できるCOUNT()関数
COUNT(*):表の行数をカウントし、関係なく、表の列のヌルまたは非ヌル値を含みます
COUNT(columb):特定の列数のNULL値の行の値は無視さを有します。
/* 返回customers表中客户的总数*/
select count(*) as num_cust from customers;
MAX機能
MAX()は、指定された列内の最大値を返します
MAXは()カラム名を指定する必要があります
列の値がNULLである行を無視
select max(prod_price) as max_price from products;
MIN関数
MIN()列の最小値を返します
列の値がNULLである行を無視
SUM関数
SUMは、()を指定するために使用される列の値(合計)
集計関数は、データを要約します。MySQLは集約関数の数をサポートし、あなたは彼らが、これらの機能を効率的に設計されて望ましい結果を返すために使用するさまざまな方法を使用することができ、彼らは彼らよりもはるかに高速なアプリケーションを計算する一般的な再クライアントの結果を返します
パケットデータ
凝集が各群について計算した可能にするように、それは、論理グループにデータパケットを可能にします。
グループの作成
グループ化は、SELECT文のGROUP BY句で確立されています。
/*
GROUP BY子句指示MySql按照vend_id排序并分组数据。
这导致对每个vend_id而不是整个表就散num_prod.
GROUP BY子句指示MySql子句指示MySQL分组数据,然后对每个组而不是整个结果集进行聚集。
*/
SELECT
VEND_ID,
COUNT(*) AS NUM_PRODS
FROM
PRODUCTS
GROUP BY VEND_ID ;
- GROUP BY句は、任意の数の列を含めることができます。これは、パケットの入れ子のデータパケットのより詳細な制御を提供することを可能にします
- パケットがGROUP BY節にネストされている場合、データパケットは、所定の最後に集約されます。言い換えれば、ときにパケットの確立は、すべての列が計算で示されています。
- GROUP BY句は、各列は、列または有効な式を取得する必要があります。
- NULLパケットが返されるように、パケットは、カラム内のNULL値である場合。行A列の複数のNULL値場合、それらは1つのグループに分割されます。
パケットフィルタリング
外部データパケットに加えてGROUP BY、MySQLは、パケットを除外するパケットが所定含むパケットを、フィルタリングすることを可能することができ
フィルター行が指定されていないパケットの
ここで、ラインフィルタ、およびフィルタリングされたパケットがHAVING
/* */
SELECT
cust_id,
COUNT(*) AS orders
FROM
orders
GROUP BY cust_id
HAVING COUNT(*) >= 2 ;
どこで差を有します
パケットデータは、前にフィルタリングされた場合、データパケット後に濾過有しています。
WHERE従って、これらの値に基づいてパケットをフィルタリングするHAVING節に影響を与え、計算された値を変更してもよいパケットに含まれるラインを除きます
/* 具有2个(含)以上,价格为10(含)以上的产品 */
SELECT
vend_id,
COUNT(*) AS num_prods
FROM
products
WHERE prod_price >= 10 /*Where子句过滤所有prod_price至少为10的行 */
GROUP BY vend_id /* 按照vend_id分组数据 */
HAVING COUNT(*) >= 2 ; /* having子句过滤数据计数为2或2以上的分组 */
SELECT句の順序
SELECT
字段,计算字段
FROM
表
WHERE
xxxxxxx /* 行级过滤 */
GROUP BY /* 分组说明 */
xxxxx
HAVING /* 组级过滤 */
xxxxx
ORDER BY
xxxx /* 输出要排序顺序 */
LIMIT
xxxx /* 要检索的行数 */