目的:为了将数据分组
语法:
select 分组函数,列(次列出如今后面的group by里)
from 表
[where 筛选条件 ]
group by 分组列表
[order by子句]mysql
案例:web
分组筛选小结,分组查询的筛选能够分为分组前的筛选和分组后的筛选,二者的主要区别在于筛选条件,分组前经过原始表,分组后经过分组后的结果集做为筛选。sql
案例:svg
也能够添加排序,排序放在最后。函数
当查询的数据涉及到多个表时,须要用到链接查询。要避免笛卡尔乘积,须要添加链接条件。
按功能分类:code
案例1:查询员工名和对应的公寓名
SELECT last_name,department_name
FROM employees,departments
WHERE employees.department_id=departments.department_id;xml
案例2:为表取别名,取了别名后不能再使用原来的表名来限定,表的顺序可更换
查询员工名、工种号、工种名
SELECT e.last_name,e.job_id,j.job_title
FROM employees e,jobs j
WHERE e.job_id
=j.job_id
;排序
案例3:能够加筛选
查询有奖金的员工名、部门名
SELECT last_name,department_name
FROM employees,departments
WHERE employees.department_id=departments.department_id
AND employees.commission_pct
IS NOT NULL;ci
案例3:能够加分组
查询每一个城市的部门个数
SELECT COUNT(*) 个数,city
FROM departments d,locations l
WHERE d.location_id
=l.location_id
GROUP BY city;it
案例4:能够加排序
查询工种名并按人数降序
SELECT job_title,COUNT()
FROM employees e,jobs j
WHERE e.job_id
=j.job_id
GROUP BY job_title
ORDER BY COUNT() DESC;
案例5:三表链接
查询员工名、部门名和所在的城市
SELECT last_name,department_name,city
FROM employees e,departments d,locations l
WHERE e.department_id
=d.department_id
AND d.location_id
=l.location_id
;
即链接条件不为=时
案例1:查询员工的工资和工资级别
select salary,grade_level
from employees e,job_grades g
where salary between g.lowest_sal and g.highest_sal;
案例:查询员工名和上级的名称
SELECT e.employee_id,e.last_name
,m.employee_id
,m.last_name
FROM employees e, employees m
WHERE e.manager_id
=m.employee_id
;
语法:
select 查询列表
from 表1 别名
【链接类型】join 表2 别名
on 链接条件
[where 筛选条件]
…
等值链接:
案例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:三表链接:查询员工名,部门名,公众名,并按部门名降序
SELECT last_name,department_name,j.job_title
FROM employees e
INNER JOIN departments d ON e.department_id
=d.department_id
INNER JOIN jobs j ON e.job_id
=j.job_id
ORDER BY d.department_name
DESC;
非等值链接
案例1:查询员工的工资级别
SELECT salary,grade_level
FROM employees e
INNER JOIN job_grades g
ON e.salary
BETWEEN g.lowest_sal AND g.highest_sal;
自链接
案例1:查询员工的名字,上级的名字
SELECT e.last_name,m.last_name
FROM employees e
INNER JOIN employees m
ON e.manager_id
=m.employee_id
;
案例1:查询男友 不在男神表的女神名
使用左外链接
SELECT b.name,bo.*
FROM beauty b
LEFT OUTER JOIN boys bo
ON b.boyfriend_id
=bo.id
WHERE bo.id IS NULL;
案例2:查询哪一个部门没有员工
使用左外链接
SELECT d.*,e.employee_id
FROM departments d
LEFT OUTER JOIN employees e
ON d.department_id
=e.department_id
WHERE e.employee_id
=NULL;
案例3:mysql不支持
全外链接=内链接的结果+表1中有表2没有+表1中没有表2中有的
多表查询案例:
boyfriend_id
=bo.id
id
>3;location_id
=l.location_id
department_id
IS NULL;