MySQL 表连接(内连接)

# 表的内连接,内连接是结果集中只保留符合连接条件的记录
-- 方法一
SELECT e.empno,e.ename,d.dname
-- 连接目标
FROM t_emp e JOIN t_dept d
-- 连接条件
ON e.deptno=d.deptno;

-- 方法二
SELECT e.empno,e.ename,d.dname
-- 连接目标
FROM t_emp e,t_dept d
-- 连接条件
WHERE e.deptno=d.deptno;

-- 内连练习一
# 不同表的内连接
# 查询每个员工的工号,姓名,部门名称,底薪,职位,工资等级
SELECT e.empno,e.ename,d.dname,e.sal,e.job,s.grade
FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno
JOIN t_salgrade s ON e.sal BETWEEN s.losal and s.hisal;

# 相同表的内连接一
# 查询Scott相同部门的员工都有谁
SELECT e2.ename
FROM t_emp e1 JOIN t_emp e2 ON e1.deptno=e2.deptno
WHERE e1.ename="SCOTT" AND e2.ename!="SCOTT";

# 相同表的内连接二
# 查询底薪超过公司平均底薪的员工信息
SELECT e.empno,e.ename,e.deptno,e.job
FROM t_emp e JOIN 
(SELECT avg(sal) as avgs FROM t_emp) t
ON e.sal>=t.avgs;

# 查询RESEARCH部门的人数,最高底薪、最低底薪、平均底薪、平均工龄
SELECT COUNT(*),MAX(e.sal),MIN(e.sal),AVG(e.sal),
FLOOR(AVG((DATEDIFF(NOW(),e.hiredate)/365)))
FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno
WHERE d.dname="RESEARCH";

SELECT FLOOR(29.9) # 29
SELECT CEIL(1.1) # 1.2

# 查询每种职业的最高工资、最低工资、平均工资、最高工资等级和最低工资等级
SELECT e.job,
MAX(e.sal+IFNULL(e.comm,0)),
MIN(e.sal+IFNULL(e.comm,0)),
AVG(e.sal+IFNULL(e.comm,0)),
MAX(s.grade),
MIN(s.grade)
FROM t_emp e JOIN t_salgrade s
ON (e.sal+IFNULL(e.comm,0)) BETWEEN s.losal AND s.hisal
GROUP BY e.job;


# 查询每个底薪超过部门平均底薪的员工信息
SELECT e.empno,e.ename,e.sal
FROM t_emp e JOIN
(SELECT deptno,AVG(sal) as depsal FROM t_emp GROUP BY deptno) t
ON e.deptno=t.deptno
AND e.sal>depsal;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值