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 列 を抽出する。