SELECT
COUNT(*)
FROM
employees;
言語化すると =>
employees テーブルにおいて、いくつ行数があるか、数える
SELECT
COUNT(*)
FROM
current_dept_emp
WHERE
to_date = '9999-01-01';
言語化すると =>
current_dept_emp テーブルにおいて、to_date 値が、9999-01-01 と一致する
行数がいくつあるか、数える
SELECT
emp_no,
MAX(salary)
FROM
salaries
GROUP BY
emp_no
ORDER BY
MAX(salary) DESC
LIMIT 30
;
言語化すると =>
salariesテーブルにおいて、emp_no ごとに区切って、
その中で salaryの最大値を降順(大きい順)に並び替えて、30行抽出する。
SELECT
e.emp_no,
e.first_name,
e.last_name,
t.title
FROM
employees AS e
INNER JOIN titles AS t
ON e.emp_no = t.emp_no
WHERE
e.emp_no BETWEEN 10010 AND 10100
AND t.to_date = '9999-01-01'
;
言語化すると =>
employeesテーブルと、titles テーブル を emp_no で結合して、
emp_no が、10010 ~ 10100 の間 かつ、to_date が、9999-01-01 と一致する
レコード(行)を抽出する。
ただし、列は、emp_no, first_name, last_name, titles
SELECT
cde.*,
d.dept_name
FROM
current_dept_emp AS cde
INNER JOIN departments AS d
ON cde.dept_no = d.dept_no
;
言語化すると =>
current_dept_empテーブル(cde)と、departments(d)テーブル を dept_no で結合して、
cde の列名 全て(cde.*) と、d の列名にある dept_name の列を抽出する。
SELECT
dept_name,
MAX(salary)
FROM
current_dept_emp AS cde
INNER JOIN departments AS d
ON cde.dept_no = d.dept_no
INNER JOIN salaries AS s
ON cde.emp_no = s.emp_no
WHERE
cde.to_date = '9999-01-01'
GROUP BY
d.dept_name
LIMIT 10;
言語化すると =>
current_dept_empテーブルと、departmentsテーブル を共通する dept_no で結合して
さらに、その結合されたテーブルと、salariesテーブルを 共通する emp_no で、結合する。
その上で、current_dept_empテーブルの to_date が、 '9999-01-01' と一致するレコードを取得する。
また、departmentsテーブルの1つの要素である dept_name で区切って、その中で、
salary の最大値 と dept_name の2列で、抽出する。ただし、10行以内で。
SELECT
dm.*,
d.dept_name,
s.salary
FROM
dept_manager AS dm
INNER JOIN departments AS d
ON dm.dept_no = d.dept_no
INNER JOIN salaries AS s
ON dm.emp_no = s.emp_no
WHERE
dm.to_date = '9999-01-01'
AND s.to_date = '9999-01-01'
;
言語化すると =>
dept_managerテーブル(dm)と、departmentsテーブル(d) を共通する dept_no で結合して
さらに、その結合されたテーブルと、salariesテーブル(s)を 共通する emp_no で、結合する。
また、dm テーブル の to_date 値が、9999-01-01 と一致、かつ、
s テーブルの to_date 値が、9999-01-01 と一致するレコードを取得する。
最後に、dm テーブルの列全てと、dテーブルの dept_name 列、sテーブルの salary 列 を抽出する。