高度な接続を作成する
テーブルエイリアスを使用する
前述のように、ASを使用してエイリアスを作成できます。SQLでは、列名と計算フィールドに使用されるほか、テーブル名にもエイリアスを設定できます。これには、主に2つの理由があります。
- SQLステートメントを短くします
- 1つのSELECTステートメントで同じテーブルを複数回使用
できます。上記のステートメントから、FROM句の3つのテーブルすべてにエイリアスがあることがわかります。CustomersAScは、cをcustomersのエイリアスとして確立します。この例では、テーブルエイリアスはWHERE句で使用されますが、テーブルエイリアスはWHERE句だけでなく、SELECTリスト、ORDER BY句、およびステートメントの他の部分でも使用できます。
さまざまなタイプの接続を使用する
以前は、使用されていた単純な接続は内部接続または同等の接続でした。他に3つのタイプがあります。自己接続、自然接続、および外部接続です。
自己連想
テーブルエイリアスを使用する主な理由の1つは、同じテーブルを1つのSELECTステートメントで複数回参照できることです。
このソリューションはサブクエリを使用します。内部SELECTステートメントは単純な検索を実行し、IDDTNTRのvend_idを返します。 IDは、このデータを取得するために外部クエリのWHERE句で使用されます。
これは、結合を使用した同じクエリです。このクエリに必要な2つのテーブルは実際には同じテーブルです。したがって、productsテーブルはFROM句に2回表示されます。これは正当ですが、製品への参照があいまいです。はい、MYSQLは、製品テーブル内のインスタンスを参照していることを認識していません。
このために、2つのエイリアスp1、p2を使用し、インスタンスに基づいてルックアップテーブルを接続し、2番目のテーブルのprod_idでデータをフィルタリングしました。 、必要なデータを返します。
自己結合は通常、同じテーブルからデータを取得するときに使用されるサブクエリを置き換える外部ステートメントとして使用されます。最終結果は同じですが、接続の処理がサブクエリの処理よりもはるかに高速な場合があります。
自然なつながり
テーブルが結合されるたびに、少なくとも1つのリストが存在する必要があります。これで、テーブル内だけでなく、標準の結合はすべてのデータを返し、複数回発生することもあります。自然結合は複数回除外されるため、各列は1回戻ります。
自然結合これらの一意の列のみを選択できるような結合です。これは通常、テーブルにワイルドカード(SELECT *)を使用し、他のすべてのテーブル列に明示的なサブセットを使用して行われます。
この例では、ワイルドカードです。最初のテーブルにのみ使用され、他のすべての列は明確にリストされているため、重複する列は取得されません。
外部接続
多くの結合は、あるテーブルの行を別のテーブルの行に関連付け、場合によっては、関連付けられた行がない行を含める必要があります。結合には、関連するテーブルに関連付けられた行がない行が含まれます。このタイプは外部と呼ばれます。
このSELECTステートメントのカップリングはoUTERjOINを使用してカップリングのタイプを指定しますが、関連するカップリングの内部には、テーブル内の2つの異なる行には、関連する行をさらに含む外部カップリングラインはありません。oUTERjOIN構文を使用する場合は、LEFTまたはRIGHTを使用する必要があります。キーワードは、すべての行を含むテーブルを指定します(RIGHTはOUTER JOINの右側のテーブルを参照し、LEFTはOUTER JOINの左側のテーブルを参照します)
集約関数で結合を使用する
集計関数はデータを集計するために使用されます。集計関数のすべての例は単一のテーブルからのみ集計されます。これらの関数は結合でも使用できます。
このSELECTステートメントはINNERJOINを使用して顧客と注文テーブルを相互に関連付け、GROUPBY句は顧客ごとにデータをグループ化します。 、関数はCOUTを呼び出して各データをカウントし、num_ordとして返します
集約関数は、他の接続でも簡単に使用できます
接続および接続条件を使用する
接続の重要なポイントとその使用法:
- 使用する接続の種類に注意してください。通常は内部接続が使用されますが、外部接続も効果的です。
- 正しい接続条件が使用されていることを確認してください。使用されていない場合、誤ったデータが返されます
- 接続条件は常に提供する必要があります。そうしないと、Cartesian製品が取得されます。
- 接続には複数のテーブルを含めることができ、接続ごとに異なる接続タイプを使用することもできます。これは合法ですが、一般的には便利であり、使用する前に各接続を個別にテストする必要があります。
複合クエリ
複合クエリ
mysqlでは、複数のクエリ、クエリと結果セットを単一のリターンとして使用できます。これらの構成は、一般にクエリと(Union)または複合クエリ(複合クエリ)と呼ばれ
ます。クエリを組み合わせて使用することが望ましい2つの基本的なケースがあります。
- 1回のクエリで異なるテーブルから同様に構造化されたデータを返す
- 1つのテーブルで複数のクエリを実行し、1つのクエリに従ってデータを返します
結合されたクエリを作成する
UNION演算子を使用して、複数のSQLクエリを組み合わせることができます。UNIONを使用すると、複数のSELECTステートメントを指定して、それらの結果を1つの結果セットに組み合わせることができます。
UNIONを使用する
UNIONの使用は非常に簡単です。各SELECTステートメントを指定し
、ステートメントの間にキーワードUNIONを配置して、次のように2つのステートメントを結合します。
これらのステートメントは前の2つのSELECTステートメントで構成され、ステートメントはUNIONキーワードで区切られます。 、UNIONは、Mysqlに2つのSELECTステートメントを実行し、出力をクエリ結果セットに結合するように指示します。
UNIONルール
UNIONの使用に関するいくつかのルール:
- UNIONは、キーワードUNIONで区切られた2つ以上のSELECTステートメントで構成されている必要があります(したがって、4つのSELECTステートメントを組み合わせる場合は、3つのUNIONキーワードを使用する必要があります)
- UNIONの各クエリには、同じ列、式、または集計関数が含まれている必要があります(ただし、列を同じ順序でリストする必要はありません)。
- 列のデータタイプは互換性がある必要があります。タイプは完全に同じである必要はありませんが、DBMSが暗黙的に実行できる変換タイプである必要があります(たとえば、異なる数値タイプまたは異なる日付タイプ)。
重複する行を含めるか削除する
UNIONを使用すると、重複する行が自動的にキャンセルされます。これはUNIONのデフォルトの動作です。必要に応じて変更できます。UNIONの代わりにUNIONALLを使用できます。
UNIONALLを使用します。MYSQLは重複行をキャンセルしません。
結合されたクエリ結果を並べ替える
SELECTステートメントの出力はORDERBY句で並べ替えられます。UNION組み合わせクエリを使用する場合、使用できるORDER BY句は1つだけで、最後のSLECTステートメントの後に表示する必要があります。結果セットの場合、その一部を並べ替える方法がないため、そうではありません。複数
のORDERBY句を使用できます。ORDERYBY句は後でのみ表示されますが、すべてのSELECTステートメントのデータを並べ替えます。
全文検索
全文検索を理解する
以前はLIKEキーワードがありましたが、ワイルドカード演算子を使用してテキストを照合します。LIKEを使用すると、特別な値または部分的な値を含む行を見つけることができます。
検索メカニズムは非常に便利ですが、いくつかの制限があります。
- パフォーマンス-ワイルドカードと通常の式の照合では、通常、MYSQLがテーブル内のすべての行を照合する必要があります。したがって、検索される行の数が増えるため、これらの検索には非常に時間がかかる可能性があります。
- 明確な制御-ワイルドカードと通常の式の一致を使用します。何が一致し、何が一致しないかを明確に制御することは困難です。
- インテリジェントな結果-ワイルドカードと正規表現に基づく検索は非常に柔軟な検索を提供しますが、結果を選択するインテリジェントな方法を提供するものはありません。
これらすべての制限とその他の制限を全文で使用できます。フルテキスト検索を使用する場合、mysqlは各行を個別に表示したり、各単語を個別に分析および処理したりする必要はありません。MySQLは、指定された列の各単語のインデックスを作成し、検索でこれらの単語を検索できます。
全文検索を使用する
フルテキスト検索を実行するには、データの変更に応じてインデックスを作成する列を変更する必要があります。MySQLは自動的にインデックス作成と再インデックス作成を実行します。
その後、SELECTをMATCH()およびAgainst()とともに使用して、実際に検索を実行できます。
全文検索のサポートを有効にする
テーブルを作成するときは、フルテキスト検索を有効にします。CREATETABLEステートメントはFULLTEXT句を受け入れます。これにより、インデックス付き列のコンマ区切りのリストが表示されます
。CREATETABLE:テーブルを作成します。最初にFULLTEXT句、MYSQLを句FULLTEXT( note_text)インデックス作成用。FULLTEXTは単一の列にインデックスを付けるか、複数の列を指定できます。
全文検索を実行する
インデックスを作成した後、2つの関数MatchとAgainstを使用して全文検索を実行します。ここで、Matchは検索する列を指定し、Againstは使用する検索式を指定します。//BINARYメソッドを使用しない限り、全文検索は大文字と小文字を区別しません。
上記の検索では、全文検索にLIKEを使用することもできますが、順序が異なります
。SELECTではWHERE句の代わりにMATCHとAgainstが使用され、すべての行が返されます。一致と反対は、計算された列、この列を作成するために使用されます。全文検索で計算されたレベル値が含まれます。レベルは、行の単語数、一意の単語数、およびインデックス全体に基づいてMYSQLによって計算および処理されます。
クエリ拡張を使用する
クエリ拡張は、返されるフルテキスト検索結果の範囲を緩和するために使用されます。これはクエリ拡張のタスクでもあります。クエリ拡張を使用すると、MySQLはデータとインデックスの2つのスキャンを実行して、検索を完了します。
- 最初に:基本的な全文検索を実行して、検索条件に一致するすべての行を見つけます。
- 次に、MySQLはこれらの一致する行をチェックし、すべての有用な単語を選択します
- その後、MySQLは、元の条件だけでなく、すべての有用な単語を使用して、フルテキスト検索を再度実行しました。
ブールテキスト検索
mysqlは、フルテキスト検索の別の方法をサポートしています。ブールモードでは、ブールモード(ブールモード)と呼ばれます。
- 一致する単語
- 除外する単語
- ランクアップ
- 式のグループ化
- さらに、
この全文検索では、heavyという単語を含むすべての行が取得されます。キーワードIN BOOLEAN MODEが使用されます。実際、ブール演算子は指定されていないため、結果は指定されていないものと同じです。
データを挿入
データ挿入
INSERTは、データベーステーブルに行を挿入するために使用されます。挿入はいくつかの方法で使用できます。
- 完全な行を挿入
- 行の一部を挿入します
- 複数の行を挿入します
- 特定のクエリの結果を挿入します
完全な行を挿入
テーブルにデータを挿入する最も簡単な方法は、INSERT構文を使用することです。テーブル名と新しい行に挿入する値が必要です。
INSERT INTO Customers
VALUES(NULL,
'Pep E. LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046'
'USA'
NULL,
NULL);
INSERTステートメントは通常、出力を生成しません。このステートメントは、新しい顧客をcustomersテーブルに挿入します。各テーブル列に格納されているデータはVALUES句で指定されます。値は各列に指定する必要があります。上記の挿入ステートメント安全性が十分でない可能性があります。
INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zipe,
cust_country,
cust_contact,
cust_email)
VALUES(NULL,
'Pep E. LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046'
'USA'
NULL,
NULL);
仕事は同じですが、少し面倒ですが、十分に安全です。
複数の列を挿入します
INSERTはテーブルに行を挿入できますが、複数の行を挿入する場合はどうなりますか?
複数のINSERTステートメントを使用して一度に送信し、各ステートメントをセミコロンで終了することができます
INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zipe,
cust_country,
)
VALUES(NULL,
'Pep E. LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046'
'USA');
INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zipe,
cust_country,
)
VALUES('M.martian',
'42 Galaxy way',
'New York',
'NY',
'11213',
'USA');
取得したデータを挿入します
SELECTステートメントの結果をテーブルに挿入するために使用できるINSERTの別の形式があります。これは、INSERTステートメントとSELECTステートメントで構成されるいわゆるINSERTSELECTを取得します。
INSERT INTO customers(cust_id,
cust_contact,
cust_email,
cuts_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
SELECT cust_id,
cust_cpmtact
cust_email,
cuts_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
FROM custenw;
INSERT SELECTを使用して、custnewからデータをインポートします。
データの更新と削除
データの更新
テーブル内のデータを更新(変更)するには、UPDATEステートメントを使用できます。
- 更新表中特定行
- テーブルのすべての行を更新します
UPDATE customers
SET cust_email = '[email protected]'
WHERE cust_id=10005;
UPDATEEステートメントはwhereステートメントで終わります。whereステートメントは、MySQLが更新された番号が最も大きい行です。
データを削除する
テーブルからデータを削除するには、DELEATEステートメントを使用します。DELETEを使用して、テーブルから
特定の行
を2つの方法で削除し、テーブルからすべての行を削除します。
DELETE FROM customers,
WHERE cust_id=10006;
Customersテーブルcust_id = 10006のデータを削除します。