SQLエイリアス

概要:このチュートリアルでは、クエリをより短く、より理解しやすくするためのテーブルエイリアスとカラムエイリアスを含むSQLエイリアスについて学びます。

SQLエイリアスを使用すると、クエリの実行中に、テーブルまたはカラムに一時的な名前を割り当てることができます。SQLには、テーブルエイリアスとカラムエイリアスの2種類のエイリアスがあります。

SQLカラムエイリアス

データベーステーブルを設計する際、カラム名を短く保つために略語を使用することがあります。例えば

  • so_noは、販売注文番号を表します。
  • qtyは、数量を表します。

または、カラムやテーブルの名前付けに略語を積極的に使用するレガシーシステムを使用する必要があるかもしれません。

例えば、SAP ERPは、販売ドキュメント番号カラムの名前としてVBELNなどの、すべてのカラムとテーブルに(ドイツ語の)略語を使用します。

SQLを使用してこれらのテーブルからデータをクエリすると、出力は明確ではありません。これを修正するには、クエリの実行中に一時的な名前をカラムに付けるカラムエイリアスを使用できます。

次に、カラムエイリアスの使用方法の構文を示します。

column_name AS alias_nameCode language: SQL (Structured Query Language) (sql)

この構文では、ASキーワードの後にカラム名を指定し、続いてカラムエイリアスを指定します。ASキーワードはオプションです。したがって、次のように省略できます。

column_name alias_nameCode language: SQL (Structured Query Language) (sql)

エイリアスにスペースが含まれている場合は、次のように単一引用符(または二重引用符)で囲む必要があります。

column_name AS 'Alias Name'Code language: SQL (Structured Query Language) (sql)

次の例は、カラムエイリアスの使用方法を示しています。

SELECT
	inv_no AS invoice_no,
	amount,
	due_date AS 'Due date',
	cust_no 'Customer No'
FROM
	invoices;Code language: SQL (Structured Query Language) (sql)

このクエリには、複数のカラムエイリアスがあります。

  • invoice_noは、inv_noカラムのカラムエイリアスです。
  • 'Due date'は、due_dateカラムのカラムエイリアスです。エイリアスにスペースが含まれているため、単一引用符(')または二重引用符(")で囲む必要があります。
  • 'Customer no'は、cust_noカラムのエイリアスです。ASキーワードがないことに注意してください。

式のエイリアス

クエリに式が含まれている場合は、式にカラムエイリアスを割り当てることができます。例:

SELECT 
    first_name, 
    last_name, 
    salary * 1.1 AS new_salary
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

この例では、データベースは結果セットの式の見出しとしてカラムエイリアスを使用します。

カラムエイリアスのよくある間違い

SELECT句でカラムにエイリアスを割り当てるため、SELECT句の後に評価される句でのみエイリアスを参照できます。

次のクエリはエラーになります。

SELECT 
    first_name, 
    last_name, 
    salary * 1.1 AS new_salary
FROM
    employees
WHERE new_salary > 5000Code language: SQL (Structured Query Language) (sql)

エラー

Unknown column 'new_salary' in 'where clause'Code language: JavaScript (javascript)

なぜでしょうか?

このSELECTステートメントでは、データベースは次の順序で句を評価します。

FROM > WHERE > SELECTCode language: SQL (Structured Query Language) (sql)

データベースは、SELECT句の前にWHERE句を評価します。したがって、WHERE句を評価するとき、データベースにはnew_salaryカラムエイリアスの情報がありません。そのため、エラーが発生しました。

ただし、次のクエリは正しく機能します。

SELECT 
    first_name, 
    last_name, 
    salary * 1.1 AS new_salary
FROM
    employees
ORDER BY new_salary;Code language: SQL (Structured Query Language) (sql)

この例では、データベースは次の順序でクエリの句を評価します。

FROM > SELECT > ORDER BYCode language: SQL (Structured Query Language) (sql)

データベースは、ORDER BY句の前にSELECT句を評価します。したがって、ORDER BY句を評価する時点では、データベースは式salary * 1.1のエイリアスであるnew_salaryエイリアスの情報を保持しています。したがって、期待どおりに動作します。

SQLテーブルエイリアス

カラムと同様に、テーブルにエイリアスを割り当てることができます。そして、これらのエイリアスはテーブルエイリアスと呼ばれます。

テーブルにエイリアスを割り当てるには、次の構文を使用します。

table_name AS table_aliasCode language: PHP (php)

この構文では、ASキーワードもオプションです。したがって、次のように省略できます。

table_name table_aliasCode language: SQL (Structured Query Language) (sql)

テーブルにエイリアスを割り当てても、テーブルの名前が永続的に変更されるわけではないことに注意してください。クエリの実行中に一時的に別の名前がテーブルに与えられるだけです。

では、なぜテーブルエイリアスが必要なのでしょうか?

SELECT句でカラム名を指定する場合、次の構文を使用できます。

table_name.column_nameCode language: CSS (css)

この構文では、カラムにはテーブル名とカラム名の両方を含む完全修飾名があります。例:

SELECT 
    employees.first_name, 
    employees.last_name
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

この例では、クエリはemployeesテーブルのfirst_nameカラムとlast_nameカラムからデータを選択します。一般的なクエリとは異なり、first_nameカラムとlast_nameカラムの完全修飾名を指定します。

SELECT句では、employeesテーブル名の代わりに、employeesテーブルのテーブルエイリアスを使用できます。例:

SELECT 
    e.first_name, 
    e.last_name
FROM
    employees AS e;Code language: SQL (Structured Query Language) (sql)

この例では、FROM句でemployeeseテーブルエイリアスを割り当て、SELECT句でそれを参照します。

しかし、なぜカラムに完全修飾名を使用する必要があるのでしょうか?

サンプルデータベースの次のemployeesテーブルとdepartmentsテーブルを参照してください。

Employees & Departments Tables

employeesテーブルとdepartmentsテーブルの両方に、同じ名前のカラム(department_id)があります。

両方のテーブルからデータをクエリする場合は、department_idカラムが属する正確なテーブルを指定する必要があります。そうしないと、データベースがデータの選択元となるテーブルを認識しないため、エラーが発生します。

employeesテーブルからデータを選択する場合は、次のようにSELECT句で参照できます。

employees.department_idCode language: SQL (Structured Query Language) (sql)

departmentsテーブルのdepartment_idにも同じことが当てはまります。

departments.department_idCode language: SQL (Structured Query Language) (sql)

edemployeesテーブルとdepartmentsテーブルのテーブルエイリアスである場合、次のようにテーブルエイリアスを使用して各テーブルのdepartment_idカラムを参照できます。

e.department_id
d.department_idCode language: SQL (Structured Query Language) (sql)

次のチュートリアルでは、join句を使用して両方のテーブルからデータを選択し、テーブルエイリアスを適用する方法を学習します。また、自己結合テクニックを使用して、単一のクエリで同じテーブルを2回参照する方法も学習します。この場合、テーブルエイリアスを使用する必要があります。

概要

  • SQLには、カラムエイリアスとテーブルエイリアスの2種類のエイリアスがあります。
  • SELECT句の後に評価される句で、カラムエイリアスを参照します。
  • カラム名を修飾するには、テーブルエイリアスを使用します。
このチュートリアルは役に立ちましたか?