MySQL学习笔记(6)

  • 按多字段分组查询
    按照同一个分公司、同一个部门查询员工的平均工资:
USE test;
SHOW TABLES;
SELECT
	AVG(salary) 平均工资,department 部门,branch_company 分公司
FROM
	employee
GROUP BY
	department,branch_company;

在这里插入图片描述
在这里插入图片描述

  • 添加排序的分组查询
    对上述得到的平均工资降序排序:
USE test;
SHOW TABLES;
SELECT
	AVG(salary) 平均工资,department 部门,branch_company 分公司
FROM
	employee
GROUP BY
	department,branch_company
ORDER BY
	平均工资
DESC;

在这里插入图片描述

  • 连接查询——多个表之间的字段值相互匹配
USE test;
SHOW TABLES;
SELECT
	`name`,job
FROM
	employee_job,job
WHERE
	employee_job.job_id=job.job_id;

表名:employee_job

namejob_id
Justin2
Nancy2
Tom1
Lee3
Thomas1
Douglas4

表名:job

jod_idjob
1职工
2主管
3部门经理
4总监

例如上述两个表中,我们要将第一个表中员工的工作职务编号与第二个表中的职务相匹配,常规方法易导致笛卡尔集错误。

USE test;
SHOW TABLES;
SELECT
	`name`,job
FROM
	employee_job,job;

在这里插入图片描述
显然这样做是分别拿第一个表中的每一个name字段与第二个表中的所有job字段相匹配。
正确代码:

USE test;
SHOW TABLES;
SELECT
	`name`,job
FROM
	employee_job,job
WHERE
	employee_job.job_id=job.job_id;

sql99标准的等值连接:

USE test;
SHOW TABLES;
SELECT
	`name`,job
FROM
	employee_job
INNER JOIN
	job
ON
	employee_job.job_id=job.job_id;

在这里插入图片描述
如果最终结果我还想显示每个员工所属部门的部门编号,然而我们发现两个表中都有job_id字段,这时需要进行限定:

USE test;
SHOW TABLES;
SELECT
	`name`,job.job_id,job
FROM
	employee_job,job
WHERE
	employee_job.job_id=job.job_id;

即代码第四行需指定要显示的是job表中的job_id字段,否则会报错。
我们也可以给表起别名,从而简化代码:

USE test;
SHOW TABLES;
SELECT
	`name`,j.job_id,job
FROM
	employee_job AS e,job AS j
WHERE
	e.job_id=j.job_id;

也可以连接查询多个表,多个筛选条件用and连接:

USE test;
SHOW TABLES;
SELECT
	`name`,j.job_id,job,bonus_rate
FROM
	employee_job AS e,job AS j,employee AS em
WHERE
	e.job_id=j.job_id
AND 
	e.`name`=em.employee_name;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值