SQL必知必会学習ノート1

6315 ワード

SQLは必ずノートを学ぶことを知っています
一、SQLを理解する
基本用語
  • データベース(database)組織化されたデータを保存するコンテナ(通常はファイルまたはファイルのセット)
  • テーブル(table)特定のタイプのデータの構造化リスト.各テーブルには自分を識別する名前があります.同じデータベースで唯一、データベースに同じ名前のテーブルはありません.
  • モード(schema)テーブルには、データがテーブルにどのように格納されるか、どのようなデータが格納されるか、データがどのように分解されるか、各部分の情報がどのように命名されるかなどの情報を定義する特性があります.テーブルを記述するこの情報のセットは、データベース内の特定のテーブルを記述するために使用されてもよいし、データベース全体(およびその中のラベルの関係)を記述するために使用されてもよい、いわゆるモード(schema)である.
  • 列(column)テーブルのフィールドです.すべてのテーブルは1つ以上の列で構成されています.各カラムには、対応するデータ型があります.データ型(datatype)は、カラムに格納できるデータの種類を定義します.
  • データ型で許可されるデータのタイプ.各テーブルには、カラムに格納されているデータ型を制限(または許可)し、カラムに格納されているデータ型を制限(または許可)します.
  • 行(row)テーブルのレコード.
  • プライマリ・キー(primary key)テーブルの各ローを一意に識別できるカラム(またはカラムのセット)です.プライマリ・キーとして条件を満たすには、任意の2行に同じプライマリ・キー値がありません.各行に1つのプライマリ・キー値が必要です(プライマリ・キー列にNULL値は許可されません).プライマリ・キー列の値は変更または更新できません.プライマリ・キー値は再利用できません(ローがテーブルから削除された場合、その後の新しいローにプライマリ・キーを割り当てることはできません).
  • SQLの拡張多くのDBMSメーカーは、文や命令を追加することでSQLを拡張しています.この拡張の目的は、特性操作の追加機能または簡略化方法を提供することである.

  • 二、データの検索
    1.単一カラムの取得
    SELECT prod_name FROM Products
    

    Productsテーブルからprod_という名前のテーブルを取得nameの列、必要な列名はSELECTキーワードの後、FROMキーワードはどのテーブルからデータを取得するかを支出します.取得した結果は次のとおりです.
    prod_name
    ---------------------------
    Fish bean bag toy
    Bird bean bag toy
    ...
    

    2.複数の列の取得
     1つのテーブルから複数のカラムを取得し、SELECT文を使用します.唯一の違いは、SELECTキーワードの後に複数のカラム名を指定し、カラム名の間にカンマで区切らなければならないことです.
    SELECT prod_id,pro_name,pord_price
    FROM Products;
    

     Productsからデータを選択し、指定した3列を選択します.
    3.すべての列を取得
     必要な列を指定する以外に、SELECTはすべての列を検索することができ、それらを列挙する必要はありません.実際のカラム名の位置にアスタリスク(*)ワイルドカードを使用すると、以下のようになります.
    SELECT * 
    FROM Products;
    

    4.異なる値の取得
     たとえば、productsテーブルのすべてのプロダクトのIDを取得したい場合は、DISTINCTキーワードを使用します.
    SELECT DISTINCT vend_id
    FROM Products;
    

     警告:DISTINCTを部分的に使用することはできません.DISTINCTキーワードはすべての列に作用し、その後の列だけではありません.たとえば、SELECT DISTINCT vendを指定します.id,prod_priceは、指定した2つのカラムが完全に同じでない限り、すべてのローが取得されます.
    5.制限結果
     最初の行または一定数の行に戻りたい場合は、どうすればいいですか?これは可能ですが、残念ながら、このSQLの実装は、さまざまなデータベースで異なります.
     SQL ServerとAccessでSELECTを使用する場合は、TOPキーを使用して、次のように最大何行まで戻るかを制限できます.
    SELECT TOP 5 prod_name
    FROM Products;
    

    6.コメントの使用
     注釈使用--行に埋め込み、--その後のテキストが注釈です
    SELECT prod_name --       
    FROM Products;
    

    1行の開始に#を使用し、行全体がコメントとして使用されます.
    #       
    SELECT prod_name
    FROM Products;
    

     注釈は/*で始まり、*/まで終わる
    三、ソート検索データ
    1.データのソート:
    SELECT prod_name
    FROM Products
    ORDER BY prod_name;
    

     prod_に従うnameはアルファベット順に並べ替えられます.注意:ORDER BY句の位置が文の最後の句であることを保証します.最後の句でない場合は、エラーメッセージが表示されます.非選択列でソートするのも合法です.
    2.複数の列で並べる
    SELECT prod_id, prod_price, prod_name
    FROM Products
    ORDER BY prod_price, prod_name;
    

     配列時の順序は完全に規定通りに行われる.
    3.列の位置によるソート
    SELECT prod_id, prod_price, prod_name
    FROM Products
    ORDER BY 2, 3;
    

     SELECTリストに表示されない列に基づいてソートする場合、この技術は採用できないことは明らかである.必要に応じて、カラム名と相対位置を混在させることができます.
    4.ソート方向の指定
     降順を行うためには、DESCキーワードを指定する必要があります.
    SELECT prod_id, prod_price, prod_name
    FROM Products
    ORDER BY prod_price DESC;
    

     複数の列でソート:
    SELECT prod_id, prod_price, prod_name
    FROM Products
    ORDER BY prod_price DESC, prod_name;
    

    四、データのフィルタリング
    1.WHERE句の使用
     フィルタ条件を指定してフィルタする
    SELECT prod_name, prod_price
    FROM Products
    WHERE prod_price = 3.49;
    

     注意:ORDER BYはWHEREの後にあります.
    2.WHERE句オペレータ
    オペレータ
    説明
    =
    に等しい
    <>
    等しくない
    !=
    等しくない
    <
    より小さい
    <=
    以下
    !<
    以下
    >
    より大きい
    >=
    以上
    !>
    以下
    BETWEEN
    指定した2つの値の間
    IS NULL
    NULLの値
  • 単一引用符は、文字列を定義するために使用されます.文字列タイプのカラムと値を比較する場合は、引用符を限定する必要があります.引用符なしで数値列と比較します.
  • BETWEEN用法
  • SELECT prod_name, prod_price 
    FROM Products
    WHERE prod_price BETWEEN 5 AND 10;
    
  • Null値チェック.フィルタに含まれていない場合はNULLのデータは得られません.
  • SELECT prod_name, prod_price 
    FROM Products
    WHERE prod_price IS NULL;
    

    五、高級データフィルタリング
    1.WHERE句の組み合わせ
     論理操作を使用してフィルタを強化する.
    SELECT prod_id, prod_price prod_name
    FORM Products
    WHERE vend_id = 'DLL01' AND prod_price <= 4;
    
  • ANDの優先度はORより高く、オペレータをカッコで制御します.

  • 2.INオペレータ
     INオペレータは条件範囲を指定するために使用され、INはカンマで区切られ、カッコで囲まれた合法的な値のセットを取ります.
    SELECT prod_name, prod_price
    FROM Products
    WHERE vend_id IN ('DLL01', 'BRS01')
    ORDER BY prod_name;
    

    3.NOTオペレータ
     NOT:WHERE句では,その後の条件を否定するキーワードとして用いられる.
    SELECT prod_name, prod_price
    FROM Products
    WHERE NOT vend_id = 'DLL01'
    ORDER BY prod_name;
    

    六、ワイルドカードでフィルタする
    1.LIKEオペレータ
    いくつかの概念
  • ワイルドカードは、値の一部に一致する特殊な文字に使用されます.
  • 探索モードは、文字値、ワイルドカード、または両方の組合せからなる探索条件である.
  • 述語LIKEは述語です.

  • パーセントワイルドカード
    たとえば、Fishで始まるすべての製品を見つけるには、次のようにします.
    SELECT prod_name, prod_price
    FROM Products
    WHERE prod_name LIKE 'Fish%';
    

     ワイルドカードは、検索モードの任意の場所で使用でき、複数のワイルドカードを使用できます.
     説明:後ろのスペースに注意してください.カラムが50文字で、格納されているテキストが17文字しかない場合は、33個のスペースが後に埋め込まれます.WHERE prod_を使用する場合name LIKE'F%y'はFの先頭、yで終わるprod_のみにマッチするname.値の後ろにyではなくスペースがある場合.簡単な解決策は「F%y」を使うことです.
     警告:ワイルドカード%がNULLに一致しません.
    下線()ワイルドカード
     は%と同じように使用されますが、単一の文字のみが一致します.
    かっこ([])ワイルドカード
    カッコワイルドカードは、指定した位置の文字に一致する文字セットを指定するために使用されます.例えば、JまたはMから始まるすべての名前の連絡先を探し出して、以下のクエリを行うことができる.
    SELECT cust_contact
    FROM Customers
    WHERE cust_contact LIKE '[JM]%'
    ORDER BY cust_contact;
    

    このワイルドカードは、接頭辞^で否定できます.たとえば、次のクエリは、JとM以外の任意の文字で始まる任意の連絡先名を伴う.
    SELECT cust_contact
    FROM Customers
    WHERE cust_contact LIKE '[^JM]%'
    ORDER BY cust_contact
    

     NOTオペレータも使用可能
    SELECT cust_contact
    FROM Customers
    WHERE NOT cust_contact LIKE '[JM]%'
    ORDER BY cust_contact;
    

    2.ワイルドカードを使うテクニック
     ワイルドカード検索は、一般に、前述した他の検索よりも長い時間を要する.ワイルドカードを使うにはテクニックに注意しなければなりません.
  • ワイルドカードを過度に使用しないでください.他のオペレータが同じ目的を達成できる場合は、他のオペレータを使用します.
  • ワイルドカードを使用する必要がある場合は、できるだけ検索モードの開始に使用しないでください.ワイルドカードを先頭に置いて検索するのが一番遅いです.
  • ワイルドカードの位置に注意して、場所を間違えると、希望のデータが戻らないかもしれません.