Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのusingについてまとめています。

usingは、joinの結合条件をスッキリわかりやすく記述できる

例えば、以下のSQLは、employees(社員)テーブルと、dept_emp(部署・社員紐付けテーブル)、departments(部署)テーブルをjoinで結合してデータを取得するSQLです。テーブルの結合条件として、employeesとdept_empではemp_no(社員番号)を、dept_empとdepartmentsではdept_no(部署番号)を指定しています。

mysql> SELECT 
    -> employees.emp_no, 
    -> first_name, 
    -> last_name, 
    -> dept_name 
    -> FROM 
    -> employees 
    -> left join dept_emp using(emp_no) 
    -> left join departments using(dept_no)
    -> limit 10;
+--------+------------+-----------+--------------------+
| emp_no | first_name | last_name | dept_name          |
+--------+------------+-----------+--------------------+
|  10001 | Georgi     | Facello   | Development        |
|  10002 | Bezalel    | Simmel    | Sales              |
|  10003 | Parto      | Bamford   | Production         |
|  10004 | Chirstian  | Koblick   | Production         |
|  10005 | Kyoichi    | Maliniak  | Human Resources    |
|  10006 | Anneke     | Preusig   | Development        |
|  10007 | Tzvetan    | Zielinski | Research           |
|  10008 | Saniya     | Kalloufi  | Development        |
|  10009 | Sumant     | Peac      | Quality Management |
|  10010 | Duangkaew  | Piveteau  | Production         |
+--------+------------+-----------+--------------------+

join条件に同じカラム名を指定するときだけ使える記述方法。見た目がスッキリします。

なお、onを使って指定すると、以下のようになります。結果は全く同じです。

mysql> SELECT 
    -> employees.emp_no, 
    -> first_name, 
    -> last_name, 
    -> dept_name 
    -> FROM 
    -> employees 
    -> left join dept_emp on employees.emp_no = dept_emp.emp_no 
    -> left join departments on dept_emp.dept_no = departments.dept_no
    -> limit 10;
+--------+------------+-----------+--------------------+
| emp_no | first_name | last_name | dept_name          |
+--------+------------+-----------+--------------------+
|  10001 | Georgi     | Facello   | Development        |
|  10002 | Bezalel    | Simmel    | Sales              |
|  10003 | Parto      | Bamford   | Production         |
|  10004 | Chirstian  | Koblick   | Production         |
|  10005 | Kyoichi    | Maliniak  | Human Resources    |
|  10006 | Anneke     | Preusig   | Development        |
|  10007 | Tzvetan    | Zielinski | Research           |
|  10008 | Saniya     | Kalloufi  | Development        |
|  10009 | Sumant     | Peac      | Quality Management |
|  10010 | Duangkaew  | Piveteau  | Production         |
+--------+------------+-----------+--------------------+

Oracleでは、PL/SQLで、バインド変数指定にUSINGを使用する

OracleのPL/SQL内でUSINGを使用する場合は、バインド変数を指定するという意味になります。

参考)PL/SQLの動的SQL

CREATE PROCEDURE calc_stats (
  w NUMBER,
  x NUMBER,
  y NUMBER,
  z NUMBER )
IS
BEGIN
  DBMS_OUTPUT.PUT_LINE(w + x + y + z);
END;
/
DECLARE
  a NUMBER := 4;
  b NUMBER := 7;
  plsql_block VARCHAR2(100);
BEGIN
  plsql_block := 'BEGIN calc_stats(:x, :x, :y, :x); END;';
  EXECUTE IMMEDIATE plsql_block USING a, b;  -- calc_stats(a, a, b, a)
END;
/

上記のSQLでは、cals_statsというプロシージャに変数aと変数bをバインド変数に関連付けて実行しています。プレーすホルダ:xには変数aが、:yには変数bが指定され、結果としてプロシジャcalc_stats(a,a,b,a)が実行されることになります。

まとめ

ポテパンダの一言メモ
  • USINGはjoinの結合条件を指定するSQL
  • 結合するテーブルのカラム名が同じ場合のみ使用可能
  • Oracleは、PL/SQL内でバインド変数の指定時にUSINGを使用する

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。