文章目录
SQL主要有两个标准: SQL92和 SQL99。
一般来说,SQL92的形式更简单,但SQL语句的可读性较差;SQL99相比于SQL92,语法更加复杂,但可读性更强。
SQL92下的内连接
查询所有员工的id及其所在部门名称。
SELECT last_name,department_name
FROM employees,departments
WHERE employees.department_id = departments.department_id; -- 返回106条数据,但employees中共有107条记录。
以上使用内连接的方式查询出106行记录,但employees里实际有107行记录,即总共有107位员工,其中有1名员工的department_id为null,因此没有被查询出来。
# 有一名员工的department_id为null
SELECT employee_id,department_id
FROM employees
WHERE department_id IS NULL;
/*
employee_id department_id
178 (Null)
*/
也就是说,使用内连接查询到的结果丢了一条数据。
SQL92下的外连接
查询所有员工的id及其所在部门名称。
SELECT employee_id,department_name
FROM employees,departments
WHERE employees.department_id = departments.department_id(+);
-- 报错:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 3
SQL92下的外连接,使用+。遗憾的是,MySQL不支持SQL92外连接的这种语法,Oracle支持这种写法。