0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初めての実務でSQLを書いてみて大事だと思ったこと

Last updated at Posted at 2024-08-05

はじめに

初めての実務で、クエリをかくことになり、自分の中で意識したいなということを記述してみました。

1. エイリアスを活用する

テーブル名が長くなると、読みづらくなりますね。短くしましょう。

.sql
SELECT 
  t.name,
  t.age,
  o.order_date
FROM 
  customers t
JOIN 
  orders o ON t.customer_id = o.customer_id;

省略方法1

こちらは、簡潔に記入する省略方法です。

.sql
FROM customer t

省略方法2

こちらはASをつける省略方法です。

.sql
FROM customer AS ct

2. SQLクエリで、2つのカラムを結合するには

たとえば、郵便番号のように二つの値を結合するときはどういうクエリを記述するのか?

A. CONCAT関数を用いましょう

.sql
SELECT CONCAT(column_name,column_name) FROM table_name;

さらに列と列の間に半角スペースなどの任意の文字列を含める場

.sql
SELECT CONCAT(column_name,' ',column_name) FROM table_name;

郵便番号を結合してみた

.sql
SELECT CONCAT(住所1, '-', 住所2) AS 郵便番号
FROM テーブル名;

// result: 123-4132

3. NOT EXIST使い倒せ!!

employees(従業員テーブル)

employee_id name department_id
1 佐藤 23
2 高橋 21
3 鈴木 34
4 松橋 15
5 棚橋 12

departments(部署テーブル)

department_id department_name
23 惣菜
21
34
15 レジ

これがあると仮定します。
そこで今回、従業員が所属していない部署を調べたいとするときに、どんなクエリを投げるのか?

.sql
SELECT department_name

FROM departments d

WHERE NOT EXISTS (
    SELECT 1
    FROM employees e
    WHERE e.department_id = d.department_id
);

従業員が所属していない部署を探すのに、NOT EXISTSを使いましょう。

軽く補足

WHERE句の外側のクエリ

SELECT department_name FROM departments d

  • departmentsテーブルからdepartment_nameをカラムを取得しています

WHERE句の内側のサブクエリ

SELECT 1 FROM employees e WHERE e.department_id = d.department_id

  • employeesテーブルのdepartment_idと、departmentsテーブルのdepartment_idと一致するものの1行を取得しています

NOT EXISTS

  • 内側のサブクエリが結果を返さない場合にTRUEを返却します

おわりに

SQLは、どのテーブルのどの項目をもってきたいかが定まれば、ガツガツかけると思います。目的を明確にし、言語化してからかいてみるといいかもですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?