# 表的内连接,内连接是结果集中只保留符合连接条件的记录
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;