#进阶7连接查询/*
当查询字段涉及到多个多个表时,就设计到连接查询
#------------------SQL92语法------------------------------
#一、内连接
#1)等值连接
/*
语法
select 查询列表
from 表名1 别名一,表名2 别名二,...
where等值连接的连接条件`department_id`
特点
1、为了解决多表中的字段名重名问题,往往为表起别名,提高了语义性
2、表的顺序无要求
*/#例子:查询员工名和部门名#一旦起别名,就只认识别名了!!!!!SELECT employees.last_name,departments.department_name
FROM employees,departments
WHERE employees.`department_id`=departments.`department_id`;#案例一:SELECT`department_name`,city
FROM departments d,locations l
WHERE d.`location_id`=l.`location_id`AND d.department_id>100;#添加分组+筛选#例子:查询每个城市的部门数SELECTCOUNT(*) 部门个数,l.`city`FROM departments d,locations l
WHERE d.`location_id`=l.`location_id`GROUPBY l.`city`;#2)非等值连接#3)自连接#-------------------sql99语法------------------------------#一、内连接#语法:SELECT 查询列表
FROM 表名1 别名
【INNER】 JOIN 表名2 别名
ON 连接条件
WHERE 筛选条件
GROUPBY分组列表
ORDERBY排序列表
sql92和sql99的区别
sql99使用JOIN关键字代替了之前的逗号,并且将连接条件和筛选条件进行了分离,提高了阅读性
#1、等值#例子1:SELECT last_name,department_name
FROM departments d
INNERJOIN employees e
ON e.department_id=d.department_id;#例子2:查询每个城市的部门个数SELECT l.`city`,COUNT(*)FROM departments d
JOIN locations l
ON d.`location_id`=l.`location_id`GROUPBY city;#例子3:查询部门中员工数>10的部门名,并且按照部门名降序SELECT d.`department_name`,COUNT(*) 员工人数
FROM departments d
JOIN employees e
ON d.`department_id`=e.`department_id`GROUPBY d.department_id
HAVINGCOUNT(*)>10ORDERBYCOUNT(*)DESC;#2、非等值#3、自连接#二、外连接