SQL——查询语句

1.分组查询

可以将数据使用group by子句将表中的数据分成若干组;
语法规则:

SELECT 		column,group_function(column)
From   		table
[where      condition]
[group by 	group_by_expression]
[order by	column];
# 1.where一定要放在from后面
# 2.from之前只能出现分组函数和需要分组的字段

案例1:查询每个工种的平均工资;
每个工种:就是按照工种进行分组;
平均工资:使用分组函数avg()

SELECT avg(salary),job_id from employee group by job_id;

2.连接查询

2.1 内连接

2.1.1 等值连接

SELECT		a.column1, b.column2, c.column3...
FROM		table a,table b...
WHERE		a.column1=b.column2
[AND		b.column1=c.column3];
#原理是用一张表去匹配另一张表中条件相同的数据;
#查询出的结果为两张表的交集部分;

案例1:查询部门名和对应的员工名;

SELECT last_name,department_name
FROM employees emp,departments dept
WHERE emp.department_id=dept.department_id;

实例2:查询有奖金的每个部门的部门名和部门领导编号和该部门的最低工资

select d.department_name,d.manager_id,min(e.salary)
from departments d,employees e
where d.department_id=e.department_id
and e.commission_pct is not null
group by d.department_name,d.manager_id;

2.1.2 非等值连接

在等值连接的基础上将等值条件换成其他的匹配条件;

2.1.3 自连接

当某张表中存在特殊的字段使得该表可以实现自己连接自己的情况;
实例1:查询员工名以及上级的名称

select e.employee_id 员工ID,e.last_name 员工姓名,m.manager_id 上司ID,m.last_name 上司姓名
from employees e,employees m
where e.manager_id=m.employee_id;

2.1.4 SQL99中的内连接 INNER(常用+重点)

语法规则如下:

select		查询列表
from1 别名1	
inner join2 别名2	
on			连接条件
[where		筛选条件]
[后续也可以加分组、排序、筛选等条件]
2.1.4.1 内连接之等值连接

实例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,job_title
from 		employees e
inner join 	department d on e.department_id=d.department_id
inner join 	jobs j on e.job_id=j.job_id
order by 	department_name desc;

2.2 外连接

一般用来查询一个表中有,而另一个表中没有的数据;
外连接分为主表从表
A. 左外连接中,left join左边的是主表
B. 右外连接中,right join右边的是主表
主从表之间进行匹配,匹配的原则是:
用主表中的一条来以此匹配从表中的每一条,若筛选条件相同,则显示筛选结果。若筛选条件不同,主表字段照常显示,而从表的字段显示为null

2.2.1 左外连接 LEFT [OUTER]

语法规则如下:

select	查询列表
from1 别名1	LEFT[OUTER]
join2 别名2	
on		连接条件
[where	筛选条件]
[后续也可以加分组、排序、筛选等条件]

实例1:查询没有员工存在的部门;

select 		d.department_name
from 		departments d
left join 	employees e
on 			d.department_id=e.departmed.department_name,nt_id
where 		e.employee_id is null;

2.2.2 右外连接 RIGHT [OUTER]

语法规则如下:

select	查询列表
from1 别名1	RIGHT[OUTER]
join2 别名2	
on		连接条件
[where	筛选条件]
[后续也可以加分组、排序、筛选等条件]

右外连接的语法规则和匹配规则与左外连接相同,只不过是主从表的位置发生了变化;

2.2.3 全外连接 FULL[OUTER]

语法规则如下:

select	查询列表
from1 别名1	FULL[OUTER]
join2 别名2	
on		连接条件
[where	筛选条件]
[后续也可以加分组、排序、筛选等条件]

MYSQL不支持全外连接。

2.3 交叉连接 CROSS

语法规则如下:

select	查询列表
from1 别名1	CROSS
join2 别名2	
on		连接条件
[where	筛选条件]
[后续也可以加分组、排序、筛选等条件]

他的结果是实现笛卡尔乘积的一张超大型的表;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值