连接查询

1. 关于查询结果集的去重

-distinct

select distinct job from emp;

distinct只能出现在所有字段的最前面。

select distinct deptno,job from emp;

去重的是deptno和job联合去重

distinct表示后面的字段联合去重

  1. 统计岗位的数量?

    select count(distinct job)
    from emp;
    

2. 连接查询

2.1 什么是连接查询

在实际开发中,大部分的情况下都不是从单表中查询数据,一般都是多张表联合查询取出最终的结果。
在实际开发中,一般一个业务都会对应多张表,比如:学生和班级,起码两张表。

2.2 连接查询的分类

2.2.1 年代划分

根据语法出现的年代来划分的话,包括:

  • SQL92(一些老的DBA可能还在使用这种语法。DBA:DataBase Administrator,数据库管理员)
  • SQL99(比较新的语法)
2.2.2 表的连接方式划分
  • 内连接
    • 等值连接
    • 非等值连接
    • 自连接
  • 外连接
    • 左外连接
    • 右外连接
  • 全连接

2.3 内连接

2.3.1 等值连接

最大特点是:条件是等量关系

  1. 查询每个员工的部门名称,要求显示员工名和部门名
    SQL92:太老了,不常用

    select e.ename,d.dname
    from emp e,dept d
    where e.dept = d.dept
    

    SQL99:常用的

    select e.ename,d.dname
    from emp e join dept d
    on e.dept = d.dept
    

inner可以省略,带inner目的是可读性好一些

select e.ename,d.dname
from emp e
inner join dept d
on e.deptno = d.deptno;

语法:

... A join B
on 连接条件
where ...
2.3.2 非等值连接

最大的特点是:连接条件中的关系是非等量关系

  1. 找出每个员工的工资等级,要求显示员工名、工资、工资等级
 select ename,sal from emp; //14
+--------+---------+
| ename  | sal     |
+--------+---------+
| SMITH  |  800.00 |
| ALLEN  | 1600.00 |
| WARD   | 1250.00 |
| JONES  | 2975.00 |
| MARTIN | 1250.00 |
| BLAKE  | 2850.00 |
| CLARK  | 2450.00 |
| SCOTT  | 3000.00 |
| KING   | 5000.00 |
| TURNER | 1500.00 |
| ADAMS  | 1100.00 |
| JAMES  |  950.00 |
| FORD   | 3000.00 |
| MILLER | 1300.00 |
+--------+---------+
select * from salgrade; //5
+-------+-------+-------+
| GRADE | LOSAL | HISAL |
+-------+-------+-------+
|     1 |   700 |  1200 |
|     2 |  1201 |  1400 |
|     3 |  1401 |  2000 |
|     4 |  2001 |  3000 |
|     5 |  3001 |  9999 |
+-------+-------+-------+

如果没有条件的话,会产生笛卡尔积,有14*5条数据

select e.ename,e.sal,s.grade
from emp e join salgrade s
on e.sal between s.losal and s.hisal;
+--------+---------+-------+
| ename  | sal     | grade |
+--------+---------+-------+
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值