CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50),
salary INTEGER
);
INSERT INTO employees (name, department, salary) VALUES
('Alice Smith', 'Sales', 60000),
('Bob Johnson', 'Marketing', 75000),
('Charlie Brown', 'Sales', 55000),
('David Lee', 'Engineering', 90000),
('Eve Wilson', 'Marketing', 80000),
('Frank Miller', 'Engineering', 95000);
テーブルが正しく作成され、データが投入されたことを確認するには、次の SQL クエリを実行します。
SELECT * FROM employees;
次のような出力が表示されるはずです。
id | name | department | salary
----+-----------------+-------------+--------
1 | Alice Smith | Sales | 60000
2 | Bob Johnson | Marketing | 75000
3 | Charlie Brown | Sales | 55000
4 | David Lee | Engineering | 90000
5 | Eve Wilson | Marketing | 80000
6 | Frank Miller | Engineering | 95000
(6 rows)
id | name | department | salary
----+-----------------+------------+--------
1 | Alice Smith | Sales | 60000
3 | Charlie Brown | Sales | 55000
(2 rows)
WHERE 句では、>、<、>=、<=、<> などの他の比較演算子も使用できます。たとえば、給与が 70000 を超える従業員を取得するには、次のクエリを使用できます。
SELECT * FROM employees WHERE salary > 70000;
出力は次のようになります。
id | name | department | salary
----+-----------------+-------------+--------
2 | Bob Johnson | Marketing | 75000
4 | David Lee | Engineering | 90000
5 | Eve Wilson | Marketing | 80000
6 | Frank Miller | Engineering | 95000
(4 rows)
AND や OR などの論理演算子を使用して、複数の条件を組み合わせることもできます。たとえば、「Sales」部署で働き、給与が 58000 を超える従業員を取得するには、次のクエリを使用できます。
SELECT * FROM employees WHERE department = 'Sales' AND salary > 58000;
出力は次のようになります。
id | name | department | salary
----+---------------+------------+--------
1 | Alice Smith | Sales | 60000
(1 row)
最後に、psql シェルを終了します。
\q
これにより、labex ユーザーのターミナルに戻ります。
LIKE を使用したパターンマッチング
このステップでは、PostgreSQL で LIKE 演算子を使用してパターンマッチングを行う方法を学びます。LIKE 演算子を使用すると、特定のパターンに一致するデータを検索できます。これは、探している正確な値がわからない場合に特に役立ちます。
まず、PostgreSQL データベースに接続しましょう。LabEx VM でターミナルを開きます。
id | name | department | salary
----+-----------------+-------------+--------
2 | Bob Johnson | Marketing | 75000
3 | Charlie Brown | Sales | 55000
5 | Eve Wilson | Marketing | 80000
(3 rows)
名前が「n」で終わるすべての従業員を検索するには、次のクエリを使用できます。
SELECT * FROM employees WHERE name LIKE '%n';
このクエリは、name 列が「n」で終わるすべての行を返します。出力は次のようになります。
id | name | department | salary
----+---------------+------------+--------
2 | Bob Johnson | Marketing | 75000
3 | Charlie Brown | Sales | 55000
5 | Eve Wilson | Marketing | 80000
(3 rows)
id | name | department | salary
----+-----------------+-------------+--------
3 | Charlie Brown | Sales | 55000
1 | Alice Smith | Sales | 60000
2 | Bob Johnson | Marketing | 75000
5 | Eve Wilson | Marketing | 80000
4 | David Lee | Engineering | 90000
6 | Frank Miller | Engineering | 95000
(6 rows)
id | name | department | salary
----+-----------------+-------------+--------
6 | Frank Miller | Engineering | 95000
4 | David Lee | Engineering | 90000
5 | Eve Wilson | Marketing | 80000
2 | Bob Johnson | Marketing | 75000
1 | Alice Smith | Sales | 60000
3 | Charlie Brown | Sales | 55000
(6 rows)
SELECT * FROM employees ORDER BY department ASC, salary DESC;
このクエリは、最初に department 列で昇順にデータをソートします。各部署内では、salary 列で降順にデータがソートされます。出力は次のようになります。
id | name | department | salary
----+---------------+-------------+--------
6 | Frank Miller | Engineering | 95000
4 | David Lee | Engineering | 90000
5 | Eve Wilson | Marketing | 80000
2 | Bob Johnson | Marketing | 75000
1 | Alice Smith | Sales | 60000
3 | Charlie Brown | Sales | 55000
(6 rows)
id | name | department | salary
----+-----------------+-------------+--------
1 | Alice Smith | Sales | 60000
2 | Bob Johnson | Marketing | 75000
3 | Charlie Brown | Sales | 55000
(3 rows)
id | name | department | salary
----+-----------------+-------------+--------
3 | Charlie Brown | Sales | 55000
4 | David Lee | Engineering | 90000
5 | Eve Wilson | Marketing | 80000
(3 rows)
LIMIT と OFFSET を ORDER BY 句と組み合わせることもできます。たとえば、給与が最も高い 2 人の従業員を取得するには、次のクエリを使用できます。
SELECT * FROM employees ORDER BY salary DESC LIMIT 2;
id | name | department | salary
----+-----------------+-------------+--------
6 | Frank Miller | Engineering | 95000
4 | David Lee | Engineering | 90000
(2 rows)
3 番目と 4 番目に給与が高い従業員を取得するには、次のクエリを使用できます。
SELECT * FROM employees ORDER BY salary DESC LIMIT 2 OFFSET 2;
id | name | department | salary
----+-----------------+-------------+--------
5 | Eve Wilson | Marketing | 80000
2 | Bob Johnson | Marketing | 75000
(2 rows)