MySQLのクエリ句

6174 ワード

クエリ文
文の名前
使用目的
select
結果セットに含まれる列を特定
from
データを抽出するテーブルと、これらのテーブルがどのように接続されているかを示します.
where
不要なデータのフィルタ
group by
使用したい列の値を持つ行をグループ化するために使用します.
having
不要なグループをフィルタ
order by
最後の結果セットの行を1つ以上の列でソートします.
select文はいくつかの構成またはサブ文から構成される.しかし、MySQLでは、select句が必要なのは1つだけです.
select句
SELECT * FROM department;

このクエリでは、from句にはテーブル(department)が1つしかリストされず、select句は結果セットにすべてのdepartmentテーブルの列を含める必要があるだけです(*番号で表されます).クエリの意味は次のようになります.
  • departmentテーブルのすべての行と列
  • が表示されます.
    もちろん、departmentテーブルの最後の列のサブセットのみを取得することもできます.たとえば、次のようにします.
    SELECT name FROM department;

    したがってselect句の役割は以下のように要約できる.
  • select句は、可能なすべての列で、クエリー結果セットに含める列を選択するために使用されます.

  • select句に次のように追加できます.
  • 文字(数字や文字列など).
  • 式、例えばtransaction.amount*-1;
  • は、ROUND(transaction.amount,2)などの組み込み関数を呼び出す.
  • ユーザー定義の関数呼び出し.

  • 例:
    SELECT emp_id,
        'ACTIVE',
        emp_id * 3.14159,
        UPPER(lname)
    FROM employee;

    組み込み関数を実行する必要がある場合や、単純な式の評価を行う必要がある場合は、from句を完全に省略できます.たとえば、次のようにします.
    SELECT VERSION(), USER(), DATABASE();

    MySQLバージョン、ユーザー、および現在のデータベース名が返されます.
    列の別名
    select句の各要素の後に列の別名を追加して、カスタムラベルの目的を達成できます.
    SELECT emp_id,
        'ACTIVE' status,
        emp_id * 3.14159 empid_x_pi,
        UPPER(lname) last_name_upper
    FROM employee;

    句の中で列名をより明確に表すために、これらの別名の前にキーワードasを付けることができます.たとえば、次のようにします.
    SELECT emp_id,
        'ACTIVE' AS status,
        emp_id * 3.14159 AS empid_x_pi,
        UPPER(lname) AS last_name_upper
    FROM employee;

    重複行の削除
    selectキーワードの後にdistinctキーワードを追加して、重複する行を除去できます.
    SELECT DISTINCT cust_id FROM account;

    from句
  • from句は、クエリーで使用されるテーブルと、これらのテーブルを接続する方法を定義します.

  • テーブルは、関連するローの集合です.3つのタイプがあります.
  • 永続テーブル(create table文で作成されたテーブル)
  • テンポラリ・テーブル(サブクエリが返すテーブル).
  • 仮想テーブル(create view句を使用して作成されたビュー).

  • サブクエリによって生成されたテーブル
    サブクエリは、別のクエリに含まれるクエリです.サブクエリはselect文の各部分に表示され、カッコに含まれます.from句では、サブクエリは、他のクエリ句(from句が他のテーブルとインタラクティブである)に基づいて一時テーブルを生成する役割を果たします.例:
    SELECT 
        e.emp_id, e.fname, e.lname
    FROM (
        SELECT 
            emp_id, fname, lname, start_date, title
        FROM employee
    ) e;

    周辺クエリでは、サブクエリは別名(この例ではe)で参照されます.
    表示
    ビューは、データ辞書に格納されたクエリーで、テーブルのように動作しますが、実際にはデータ(実際には仮想テーブル)はありません.ビューに対するクエリーが発行されると、クエリーはビュー定義にバインドされ、最終的に実行されるクエリーが生成されます.例:クエリーemployeeテーブルのビューを定義します.内部レイプ関数の呼び出しが含まれています.
    CREATE VIEW employee_vw AS 
    SELECT emp_id, fname, lname, 
        YEAR(start_date) start_year
    FROM employee;

    ビューが作成されると、データは生成または格納されず、サーバは将来の使用のためにクエリーを簡単に保持するだけです.ビューが既に存在する以上、クエリー要求を発行できます.たとえば、次のようにします.
    SELECt emp_id, start_year FROM employee_vw;

    テーブル接続
    from句に複数のテーブルが表示されている場合は、各テーブル間の接続条件を同時に含める必要があります.例:
    SELECT employee.emp_id, employee.fname,
        employee.lname, department.name dept_name
    FROM employee 
    INNER JOIN
        department
    ON employee.dept_id = department.dept_id

    テーブル別名の定義
    from句の外でテーブルを参照する方法は2つあります.
  • は、employeeのような完全なテーブル名を使用する.emp_id;
  • 各テーブルに別名を指定し、クエリに必要な場所で別名を使用します.

  • 例:
    SELECT e.emp_id, e.fname,
        e.lname, d.name dept_name
    FROM employee e
    INNER JOIN
        department d
    ON e.dept_id = d.dept_id

    別名の前にasキーを使用することもできます.たとえば、次のようにします.
    SELECT e.emp_id, e.fname,
        e.lname, d.name dept_name
    FROM employee AS e
    INNER JOIN
        department AS d
    ON e.dept_id = d.dept_id

    where句
    where句は、結果セットで不要なローをフィルタリングするために使用されます.たとえば、employeeテーブルをクエリーする必要がありますが、head tellerという名前の従業員データのみを取得する場合は、クエリーのwhere句で指定できます.
    SELECT emp_id, fname, lname, start_date, title
    FROM employee
    WHERE title = 'Head Teller';

    この句にはフィルタ条件が1つしか含まれていませんが、必要に応じてオペレータand、or、またはnot分割を使用して、より多くの条件を同時に含めることができます.
    SELECT emp_id, fname, lname, start_date, title
    FROM employee
    WHERE title = 'Head Teller'
    AND start_date > '2018-01-01'

    where句でandやorなどのオペレータを同時に使用する必要がある場合は、カッコを使用して条件グループ化できます.
    SELECT emp_id, fname, lname, start_date, title
    FROM employee
    WHERE (title = 'Head Teller' AND start_date > '2018-01-01')
    OR (fname='zifeiy' AND start_date > '2017-01-01')

    groupbyとhaving句
    groupby句は、カラム値に基づいてデータをグループ化するために使用されます.groupby句を使用すると同時に、where句と同様にパケットデータをフィルタリングできるhaving句を使用する必要がある場合があります.
    次のクエリは、まず各部門に含まれる従業員数を計算し、少なくとも2人の従業員を含む部門名を返します.
    SELECT d.name, count(e.emp_id) num_employees
    FROM department d INNER JOIN employee e
    ON d.dept_id = e.dept_id
    GROUP BY d.name 
    HAVING count(e.emp_id) > 2;

    order by句
    order by句は、結果およびの元のカラムデータまたはカラムデータに基づいて計算された式の結果をソートするために使用されます.例:
    SELECT open_emp_id, product_cd
    FROM account
    ORDER BY open_emp_id;

    業界の科学技術は複数の列を結合して並べ替えます:
    SELECT open_emp_id, product_cd
    FROM account
    ORDER BY open_emp_id, product_cd;

    結果およびでは、まず従業員IDに基づいてソートされ、口座タイプに基づいてソートされます.
    order by句に各列が現れる順序は,各列をソートする順序を決定する.
    1.昇順または降順のソート
    ソート時に、キーワードascとdescで昇順か降順かを指定できます.デフォルトでは昇順ソートなので、降順ソートにdescキーを付けるだけです.例:
    SELECT account_id, product_cd, open_date, avail_balance
    FROM account
    ORDER BY avail_balance DESC;

    2.式によるソート
    order by句の後に式を追加してソートできます.
    SELECT cust_id, cust_type_cd, city, state, fed_id 
    FROM customer 
    ORDER BY RIGHT(fed_id, 3);

    3.数値プレースホルダによるソート
    select句の列に基づいてソートする必要がある場合は、列名の代わりに列がselect句にある位置番号を使用することを選択できます.例えば、ガザは、返される2番目の列と5番目の列に基づいてソートする必要がある場合、以下の方法を採用することができる.
    SELECT emp_id, title, start_date, fname, lname
    FROM employee
    ORDER BY 2, 5;

    転載先:https://www.cnblogs.com/zifeiy/p/8804529.html