# sql99语法 /* 99语法: select 查询列表 from 表1 别名 (连接类型) join 表2 别名 (连接类型) on 连接条件 WHERE 筛选条件 GROUP BY having 限制分组后的内容 ORDER BY 92语法 select 查询列表 from 表1 别名,表2 别名 WHERE 连接条件 与99语法相比,其区别在于99用join代表多个表而92直接在from后面用,代表含义, 99连接条件用on,92连接条件和筛选条件都用where 连接类型 内连接:inner(重点) 外连接: 左外 left 右外 rigth 全外 full 交叉连接cross */ #内连接 /* select 查询列表 from 表1 别名 inner join 表2 别名 on 连接条件 */ #99语法等值连接 #案例1,查询员工名,部门名 select last_name ,department_name FROM employees e INNER JOIN departments d on e.department_id = d.department_id; #案例2,查询名字中包含e的有员工名和工种名 select last_name,job_title from employees e INNER JOIN jobs j on e.job_id = j.job_id WHERE e.last_name like '%e%'; #案例3,查询部门个数大于3的城市名和部门个数(分组+筛选) select COUNT(*),city FROM departments d INNER JOIN locations l ON d.location_id = l.location_id GROUP BY city HAVING COUNT(*)>3; #案例4,查询哪个部门的员工个数>3的部门名和员工个数,并按个数降序(添加排序) select count(*),department_name FROM employees e INNER JOIN departments d on e.department_id = d.department_id GROUP BY department_name HAVING COUNT(*) > 3 ORDER BY COUNT(*) DESC; #外连接 /* 应用场景:用于查询一个表中有,另一个表中没有的记录。 特点: 1:外连接的查询结果为主表的所有记录。如果从表有匹配,则显示匹配值 如果没有匹配,则显示null。 2:左外连接:left join 左边是主表 右外连接:right join 右边是主表 */ #案例1,查询男朋友,不在男神表中的女神名。 select b.name,bo.* FROM beauty b LEFT OUTER JOIN boys bo ON b.boyfriend_id = bo.id WHERE bo.id is null; #WHERE 和Having作为筛选条件的区别:两个都是用来筛选条件的, #但是Where的范围是原始数据表的内容筛选, #而Having是对group分组的内容做筛选。 #案例2,查询哪个部门没有员工 #右外 SELECT d.*,e.employee_id FROM employees e RIGHT OUTER JOIN departments d ON d.department_id = e.department_id WHERE e.employee_id is NULL; #全外连接 USE girls; SELECT b.*,bo.* FROM beauty b FULL OUTER JOIN boys bo ON b.boyfrieds_id = boys.id; #内连接 #