SQL クエリメソッドの素晴らしい概要

巴扎黑
リリース: 2017-05-21 18:39:16
オリジナル
1269 人が閲覧しました

単純な Transact-SQL クエリには、選択リスト、FROM 句、および WHERE 句のみが含まれます。それぞれ、クエリ対象の列、クエリ対象のテーブルまたはビュー、検索条件を記述します。 1. 単純なクエリ

単純な Transact-SQL クエリには、選択リスト、FROM 句、および WHERE 句のみが含まれます。これらはそれぞれ、クエリ対象の列、クエリ対象のテーブルまたはビュー、および検索条件を記述します。 たとえば、次のステートメントは、testtable テーブルの「Zhang San」という名前のニックネーム フィールドと電子メール フィールドをクエリします。


SELECT Nickname,email

FROM testtable

WHERE name='张三'


(1) 選択リスト

選択リスト (select_list) は、クエリ対象の列を示します。これは、列名リストのセットである場合があります。アスタリスク、式、変数(ローカル変数、グローバル変数を含む)など。

1. すべての列を選択します

たとえば、次のステートメントは、testtable テーブル内のすべての列のデータを表示します:

SELECT *

FROM testtable



2. いくつかの列を選択し、その表示順序を指定します

Inクエリ結果セット データは、選択リストで指定された列名と同じ順序で並べ替えられます。
例:


SELECT Nickname,email

FROM testtable



3. 列タイトルを変更します

選択リストでは、列タイトルを再指定できます。定義形式は次のとおりです。
列タイトル = 列名

列名 列タイトル

指定された列タイトルが標準の識別子の形式ではない場合、次のステートメントでは、列タイトルを表示するために引用符区切り文字を使用する必要があります。 :


SELECT Nickname=nickname, email=email

FROM testtable



4. 重複行を削除

テーブル内の条件を満たすすべての行を表示したり、重複データを削除するには、SELECT ステートメントの ALL または DISTINCT オプションを使用します。デフォルトはすべての行です。 DISTINCT オプションを使用すると、すべての重複データ行に対して SELECT によって返される結果セットに 1 行だけが保持されます。

5. 返される行数を制限する

TOP n [PERCENT] オプションを使用して、返されるデータ行数を制限します。TOP n は n 行が返されることを示し、TOP n PERCENT は n が 100 分の 1 を表すことを示し、指定します。返される行数は、合計行数の割合に等しい。

例:


SELECT TOP 2 *

FROM testtable

SELECT TOP 20 PERCENT *
FROM testtable


(2) FROM句


FROM句は、SELECT文のクエリとクエリ関連のテーブルやビューを指定します。 FROM 句には、カンマで区切って最大 256 個のテーブルまたはビューを指定できます。 FROM句で同時に複数のテーブルまたはビューを指定する場合、選択リストに同じ名前の列がある場合、オブジェクト名を使用して、これらの列が属するテーブルまたはビューを制限する必要があります。たとえば、cityid 列が usertable テーブルと citytable テーブルの両方に存在する場合、2 つのテーブルの cityid をクエリするときは、次のステートメント形式を使用する必要があります:


SELECT username,citytable.cityid

FROM usertable,citytable

WHERE usertable。 cityid=citytable .cityid


FROM句でテーブルやビューの別名を指定するには、次の2つの形式が使用できます:

別名としてのテーブル名

テーブル名の別名
(2) FROM句

FROM句はSELECT文のクエリを指定します関連するテーブルまたはビューをクエリします。 FROM 句には、カンマで区切って最大 256 個のテーブルまたはビューを指定できます。
FROM句で同時に複数のテーブルまたはビューを指定する場合、選択リストに同じ名前の列がある場合、オブジェクト名を使用して、これらの列が属するテーブルまたはビューを制限する必要があります。たとえば、cityid 列が usertable テーブルと citytable テーブルの両方に存在する場合、2 つのテーブルの cityid をクエリするときは、次のステートメント形式を使用する必要があります:

SELECT username,citytable.cityid
FROM usertable,citytable

WHERE usertable.cityid =citytable. cityid


FROM句でテーブルやビューのエイリアスを指定するには、次の2つの形式を使用できます:
テーブル名をエイリアスとして指定する

テーブル名をエイリアスとして指定する

例えば、上記のステートメントは、 table as:

SELECT username,b.cityid
FROM usertable a,citytable b

WHERE a.cityid=b.cityid


SELECT はテーブルやビューからデータを取得するだけでなく、返された結果セットからデータをクエリすることもできます他のクエリステートメントによって。

例:

SELECT a.au_fname+a.au_lname

FROM authors a,titleauthor ta

(SELECT title_id,title

FROM title
WHERE ytd_sales>10000
) AS tこちら a.au_id=ta.au_id
AND ta.title_id=t.title_id

この例では、SELECT によって返された結果セットに別名 t が与えられ、そこからデータが取得されます。

(3) WHERE句を使ってクエリ条件を設定します

WHERE句はクエリ条件を設定し、不要なデータ行をフィルタリングします。たとえば、次のステートメントは、年齢が 20 より大きいデータをクエリします: SELECT *

FROM usertable

WHERE age>20

WHERE 句には、さまざまな条件演算子を含めることができます。
比較演算子 (サイズ比較): >、>=、=、<、<=、<>、!>、!<式の値が指定された範囲内にあるかどうか): BETWEEN…AND…
NOT BETWEEN…AND…
リスト演算子 (式がリスト内の指定された項目であるかどうかを判断): IN (項目 1, 項目 2… )
NOT IN (項目 1、項目 2...)
パターン マッチャー (値が指定された文字ワイルドカード形式と一致するかどうかを判断するため): LIKE、NOT LIKE
Null 値決定子 (式が空かどうかを判断するため): IS NULL、NOT IS NULL
論理演算子 (複数の条件の論理接続用): NOT、AND、OR

1. 範囲演算子の例: age BETWEEN 10 AND 30 は age>=10 AND age<=30 と同等です

2. リスト演算子の例: country IN ('Germany','China')
3. パターン マッチング演算子の例: あいまい検索によく使用され、列の値が指定された文字列形式と一致するかどうかを判断します。 char、varchar、text、ntext、datetime、smalldatetime タイプのクエリに使用できます。
次のワイルドカード文字を使用できます:
パーセント記号 %: 任意のタイプおよび長さの文字に一致します。中国語の場合は、2 つのパーセント記号、つまり %% を使用してください。
Underscore_: 単一の任意の文字と一致します。これは、式の文字長を制限するためによく使用されます。
角括弧 []: 文字、文字列、または範囲を指定し、一致するオブジェクトがそれらのいずれかである必要があります。 [^]: 値は [] と同じですが、一致するオブジェクトが指定された文字以外の文字である必要があります。
例:
Publishingで終わる制限は、LIKE '%Publishing'を使用
Aで始まる制限:LIKE '[A]%'
Aで始まる制限:LIKE '[^A]%'
4. Null値判定の例WHERE age IS NULL

5. 論理演算子: 優先順位は NOT、AND、OR です

(4) クエリ結果の並べ替え

ORDER BY 句を使用して、クエリによって返された結果を 1 つ以上の列で並べ替えます。 ORDER BY 句の構文形式は次のとおりです。

ORDER BY {column_name [ASC|DESC]} [,...n]
ここで、ASC はデフォルト値の昇順を表し、DESC は降順を表します。 ORDER BY は、ntext、text、image データ型で並べ替えることはできません

例:

SELECT *

FROM usertable
ORDER BY age desc,userid ASC

さらに、式に基づいて並べ替えることもできます。

2. ユニオンクエリ

UNION 演算子は、2 つ以上の SELECT ステートメントのクエリ結果セットを 1 つの結果セットに結合して表示できます、つまり、ユニオンクエリを実行します。 UNION の構文形式は次のとおりです。

select_statement

UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]

ここで、selectstatement は結合する SELECT クエリ ステートメントです。

ALL オプションは、すべての行を結果セットにマージすることを意味します。この項目が指定されていない場合、結合されたクエリ結果セットには重複行のうち 1 行だけが保持されます。

結合クエリを実行する場合、クエリ結果の列見出しは最初のクエリ ステートメントの列見出しとなります。したがって、列ヘッダーは最初のクエリ ステートメントで定義する必要があります。結合クエリの結果を並べ替える場合は、最初のクエリ ステートメントで列名、列タイトル、または列番号も使用する必要があります。

UNION 演算子を使用する場合は、各ユニオン クエリ ステートメントの選択リストに同じ数の式が存在すること、および各クエリ選択式が同じデータ型であることを確認する必要があります。そうでない場合は、同じ型に自動的に変換できます。データの。自動変換中に、数値型の場合、システムは低精度データ型を高精度データ型に変換します。

複数のクエリを含むUNIONステートメントでは、実行順序は左から右へ、この実行順序を変更するには括弧を使用します。例:

クエリ1 UNION (クエリ2 UNION クエリ3)

3. 接続クエリ

接続演算子を使用して複数のテーブルクエリを実装できます。接続はリレーショナル データベース モデルの主な機能であり、他のタイプのデータベース管理システムと区別する目印です。

リレーショナルデータベース管理システムでは、テーブルの構築時に各データ間の関係を決定する必要はなく、エンティティのすべての情報が 1 つのテーブルに格納されることがよくあります。データを取得する場合、複数のテーブルに格納されているさまざまなエンティティに関する情報が結合操作を通じてクエリされます。結合操作はユーザーに大きな柔軟性を与え、いつでも新しいデータ型を追加できます。さまざまなエンティティに対して新しいテーブルを作成し、結合を通じてクエリを実行します。

SELECT 文の FROM 句または WHERE 句で接続を確立できます。FROM 句で接続を示すと、接続操作と WHERE 句の検索条件を区別しやすくなります。したがって、Transact-SQL ではこの方法が推奨されます。
SQL-92 標準で定義されている FROM 句の結合構文形式は次のとおりです:

FROM join_table join_type join_table

[ON (join_condition)]

join_table は、結合操作に参加しているテーブルの名前を指します。同じテーブル上での接続は、自己結合とも呼ばれます。

join_typeは接続タイプを示し、内部結合、外部結合、クロス結合の3種類に分けられます。内部結合では、比較演算子を使用してテーブル間のデータの特定の列を比較し、結合条件に一致するこれらのテーブル内のデータ行をリストします。使用されるさまざまな比較方法に応じて、内部結合は等価結合、自然結合、不等結合の 3 つのタイプに分類されます。外部結合には、左外部結合 (LEFT OUTER JOIN または LEFT JOIN)、右外部結合 (RIGHT OUTER JOIN または RIGHT JOIN)、完全外部結合 (FULL OUTER JOIN または FULL JOIN) の 3 種類があります。内部結合とは異なり、外部結合では、結合条件に一致する行をリストするだけでなく、左のテーブル (左外部結合を使用する場合)、右のテーブル (右外部結合を使用する場合)、または両方のテーブル (右外部結合を使用する場合) もリストします。完全外部結合を使用する)。検索条件に一致します。
クロス結合 (CROSS JOIN) には WHERE 句がありません。接続されたテーブル内のすべてのデータ行のデカルト積を返します。結果セット内のデータ行の数は、最初のテーブル内のデータ行の数と等しくなります。クエリ条件を満たす 2 番目の値を掛けた値 クエリ条件を満たすテーブル内のデータ行の数。
結合操作の ON (join_condition) 句は、結合されたテーブルの列、比較演算子、論理演算子などで構成される結合条件を示します。
どのような接続であっても、text、ntext、imageデータ型の列は直接接続できませんが、この3つの列は間接的に接続できます。例:

SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

(1) 内部結合
結合クエリ操作では、結合条件に一致するデータ行を一覧表示し、比較演算子を使用して結合された列の列値を比較します。内部結合には 3 つのタイプがあります:
1. 等価結合: 結合条件で等号 (=) 演算子を使用して、結合された列の列値を比較します。クエリ結果には、結合されたテーブル内のすべての列がリストされます。列が重複します。
2. 不等結合: 結合条件の等号演算子を除く他の比較演算子を使用して、結合された列の列値を比較します。これらの演算子には、>、>=、<=、<、!>、!<、および <> が含まれます。
3. 自然結合: 結合条件で等号 (=) 演算子を使用して結合された列の列値を比較しますが、選択リストを使用してクエリ結果セットに含まれる列を示し、重複する列を削除します。結合されたテーブル。
たとえば、以下は等結合を使用して、同じ都市にある著者と出版社を著者テーブルと出版社テーブルにリストします:

SELECT *
FROM authors AS a INNER JOIN Publishers AS p
ON a.city=p.city
別の例 自然結合を使用して、選択リストの authors テーブルと Publishers テーブルの重複する列 (city と state) を削除します:
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN Publishers AS p
ON a.city=p.city

(2) 外部結合
内部結合を行うと、クエリ結果セット内のクエリ条件(WHERE検索条件またはHAVING条件)と接続条件を満たす行のみが結合されます。が返されます。外部結合が使用される場合、返されるクエリ結果セットには、結合条件を満たす行が含まれるだけでなく、左側のテーブル (左外部結合の場合)、右側のテーブル (右外部結合の場合)、または 2 つのエッジ テーブル (フル) も含まれます。外部結合内のすべてのデータ行)。以下に示すように、左外部結合はフォーラムのコンテンツと作成者情報を接続するために使用されます:

SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username

All authors in user テーブル内のテーブルとすべての作成者、およびその都市:

SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username

(3) Cross join
クロス結合には WHERE 句がありません。接続されている 2 つのテーブルのすべてのデータ行のデカルト積が返されます。結果セットで返されるデータ行の数は、最初のテーブルのデータ行の数と同じです。データ行の数は、クエリ条件に一致する 2 番目のテーブルのデータ行の数で乗算されます。たとえば、タイトル テーブルに書籍のカテゴリが 6 つあり、出版社テーブルに出版社が 8 社ある場合、次の相互接続によって取得されるレコードの数は 6*8=48 行に等しくなります。

SELECT type,pub_name

FROM title CROSS JOIN Publishers
ORDER BY type
[Post=0][/Post]

以上がSQL クエリメソッドの素晴らしい概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!