数据库的查询总结

已建好数据库:

dept:

emp:

一、连接查询

1.相等连接:

【例2-27】查询工资大于等于3000的员工的员工编号、姓名、工资、所在部门编号及部门所在地址,结果按部门编号进行排序。

SELECT empno,ename,sal,deptno FROM emp WHERE sal>=3000 ORDER BY deptno;

2.自身连接:

【例2-28】查询emp表中在部门21工作的雇员的姓名及其管理员的姓名 

 SELECT e.ename 雇员,m.ename 管理员 FROM emp e,emp m WHERE m.empno=e.mgr AND e.deptno=21; 


 注意:起别名AS可省

结果:

3.不等连接:

【例2-29】salgrade表中存放着工资等级的信息,查询在部门编号为20工作的雇员的工资及工资等级的信息。

SELECT e.ename,e.sal,s.grade
   FROM emp e,salgrade s
   WHERE e.sal  BETWEEN s.losal  AND s.hisal
    AND e.deptno=20;

 4.左外连接:

FROM 表1  LEFT  【OUTER】 JOIN  表2 

            ON  表1.列=表2.列

SELECT dept.deptno,emp.deptno,ename,empno
   FROM  dept  LEFT JOIN emp
   ON  dept.deptno=emp.deptno
   WHERE dept.deptno=2 OR dept.deptno=3;

结果:

注:1.outer可以省略;

      2.如果右表信息没有匹配,右表补空

例:

SELECT dept.deptno,emp.deptno,ename,empno
   FROM  dept  LEFT JOIN emp
   ON  dept.deptno=emp.deptno
   WHERE dept.deptno=6 OR dept.deptno=3;

结果:

5.右外连接:

FROM 表1  RIGHT  【OUTER】  JOIN  表2

                ON  表1.列=表2.列

注:如果左表信息没有匹配,左表补空

【例2-31】示例。
 

SELECT empno,ename,emp.deptno,dept.deptno
  FROM  emp  RIGHT  OUTER JOIN  dept
  ON  emp.deptno=dept.deptno
  WHERE dept.deptno=2 OR dept.deptno=3;

结果:

二、子查询(select语句的嵌套)

1.返回单值的子查询:

【例2-32】查询与Draw工作岗位相同的员工的员工编号、姓名、工资、岗位信息。

SELECT empno,ename,sal,Job FROM emp WHERE Job='Draw';

【例2-33】查询工资大于平均工资而且与Draw工作岗位相同员工的信息。

SELECT * FROM emp WHERE sal>(SELECT AVG(sal) FROM emp) AND Job='Draw';

错误:SELECT * FROM emp WHERE sal>AVG(sal) AND Job='Draw';

注意:where子句中不能直接跟聚合函数;

2.返回多值的子查询

在WHERE子句中使用多值子查询时,必须使用多值比较运算符:[NOT]  IN、[NOT]  EXISTS、ANY、ALL,其中ALL、ANY必须与比较运算符结合使用。

使用IN操作符的多值子查询

【例2-34】查询工资为所任岗位最高的员工的职工编号、姓名、岗位和工资的信息,不包含岗位为CLERK和PRESIDENT的员工。

SELECT Job,MAX(sal) FROM emp GROUP BY Job HAVING Job
NOT IN('Draw','Pant');

使用ALL操作符的多值子查询

【例2-35】查询高于部门2的所有雇员工资的雇员信息。

SELECT * from emp WHERE sal>ALL(SELECT sal FROM emp WHERE deptno=2);

使用ANY操作符的多值子查询

【例2-36】查询高于部门10的任意雇员工资的雇员信息

SELECT * FROM emp WHERE sal>ANY(SELECT sal FROM emp WHERE deptno=2);

使用EXISTS操作符的多行查询

【例2-37】查询工作在NEW YORK的雇员姓名、部门编号、工资、岗位的信息。

SELECT ename,deptno,sal,Job FROM emp WHERE EXISTS(SELECT loc FROM emp WHERE loc='NEW YORK');

三、合并查询查询

UNION的语法格式为:

 SELECT 语句1

   UNION [ALL]

 SELECT 语句2

SELECT empno,ename,deptno,job FROM emp WHERE job='MANAGER'
UNION 
SELECT empno,ename,deptno,job FROM emp WHERE deptno=10;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值