SQL入门第三篇——连接查询

简介: 什么是连接查询• 从一张表跨越到另一张表进行查询,叫做跨表查询,多张表联合起来查询数据,称为连接查询• 连接查询的分类:SQL92:1992年出现的语法SQL99:1999年出现的语法;我们学习这个• 那么表之间的连接方式又有哪些呢?• 内链接:等值连接,非等值连接,自连接• 外连接:左外连接(左连接)右外连接(右连接)

SQL入门第三篇——连接查询

什么是连接查询

  • 从一张表跨越到另一张表进行查询,叫做跨表查询,多张表联合起来查询数据,称为连接查询
  • 连接查询的分类:SQL92:1992年出现的语法SQL99:1999年出现的语法;我们学习这个
  • 那么表之间的连接方式又有哪些呢?
  • 内链接:等值连接,非等值连接,自连接
  • 外连接:左外连接(左连接)右外连接(右连接)

内连接之等值连接

  • 案例:查询每个员工所以在部门名称,显示员工工名和部门名
    SQL92语法:
    seleet
    e.ename,d.dname
    from
    emp e,dept d
    where
    e.deptno =d.deptno;
    缺点:结构不清晰,表的连接条件和后期进一步筛选的条件,都放到了where后面
    SQL99语法:
    select
    e.ename,d.dname
    from
    emp e
    inner(inner可以省略) join
    dept d
    on
    e.deptno=d.deptno;
    优点:表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后面添加where

内连接之非等值连接

  • 案例:找出每个员工的薪资等级,要求显示员工名,薪资,薪资等级
    select e.ename,e.sal,s.grade from emp e join salary s on e.sal between s.losal and s.hisal;-- 条件不是一个等量关系为非等值连接

内连接之自连接

  • 案例:查询员工的上级领导,要求显示员工名和对应的领导名
    select e.name as '员工名',b.ename as ‘领导名’ from emp a join emp b on a.mgr=b.empno;需要将一张表看成是两张表连在一起

外连接(右外连接)

  • select e.ename,d.dname from emp e right join dept d on e.deptno = d.deptno;
    right代表将join关键字右边的这张表看成是主表,主要是为了将外连接当中,两张表连接,产生了主次关系
  • 左外连接与右外连接差不多,交换一下顺序就行,两者可以互换
  • 如果三张表,四张表怎么连接
  • 语法:
  • select
    ...
    from
    a
    join
    b
    on
    a和b的连接条件
    right join
    c
    on
    a和c的连接条件
  • 一条SQL中内连接和外连接可以混合

子查询

  • 也叫select嵌套查询
  • 案例:找出比最低工资高的员工姓名和工资
    第一步:先找出最低工资
    select min(sal) from emp;
    第二部:找出>800的
    select ename,sal from emp where sal > 800;
    合并:select ename,sal from emp where sal > (select min(sal) from emp);
  • from子句中的子查询
  • 案例:找出每个岗位的平均工资的薪资等级
  • 第一步:找出每个岗位的平均工资
    select job,avg(sal) form emp gruop by job;
  • 第二步:将以上表看成真实存在的表做成t表
    select
    t.*,s.grade
    from
    (select job,avg(sal) as avgsal form emp gruop by job) t
    join
    salgrade s
    on
    t.avgsal between s.losal and s.hisal;
  • 这里from后面子查询可以看成一张临时表(技巧)

union合并查询结果集

  • 案例:查询工作岗位是MANAGER和SALESMAN的员工
  1. select ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';
  2. select ename,job from emp where job in('MANAGER','SALESMAN');
  3. select ename,job from emp where job='MANAGER' union select ename,job from emp where job='SALESMAN';
  4. 实际的情况是union的效率要高一些。对于表连接来说,每连接一次新表,则匹配的次数满足笛卡尔积,成倍的翻。但是union可以减少匹配的次数。在减少匹配次数的情况下,还可以完成两个结果集的拼接(就像把*变成了+)

limit(起始下标,取多长)

  • 是将查询结果集的一部分取出来,通常使用在分页查询当中
  • 案例:取出工资排名在[3-5]名的员工
    select ename,sal from emp order by sal desc limit 2,3;从下标2也就是第三条开始取,取三条记录
  • 公式就是limit (页码-1)*页码长度,页码长度
相关文章
|
9天前
|
SQL
sql语句加正则 简化查询
sql语句加正则 简化查询
12 0
sql语句加正则 简化查询
|
27天前
|
SQL
sql server链接查询
sql server链接查询
17 1
|
27天前
|
SQL
sql server简单查询
sql server简单查询
14 1
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
61 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
2月前
|
SQL 缓存 关系型数据库
MySQL技能完整学习列表6、查询优化——3、查询缓存——4、SQL优化技巧
MySQL技能完整学习列表6、查询优化——3、查询缓存——4、SQL优化技巧
63 0
|
17天前
|
SQL 关系型数据库 MySQL
mysql一条sql查询出多个统计结果
mysql一条sql查询出多个统计结果
13 0
|
27天前
|
SQL
sql高级查询
sql高级查询
12 0
|
1月前
|
SQL 存储 数据可视化
10个高级的 SQL 查询技巧
10个高级的 SQL 查询技巧
|
28天前
|
SQL 数据库
sql server高级查询,看这篇文章就够了
sql server高级查询,看这篇文章就够了
21 0
|
1月前
|
SQL
T-SQL 语句查询
T-SQL 语句查询
55 0