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)*页码长度,页码长度
相关文章
|
12月前
|
SQL 监控 关系型数据库
一键开启百倍加速!RDS DuckDB 黑科技让SQL查询速度最高提升200倍
RDS MySQL DuckDB分析实例结合事务处理与实时分析能力,显著提升SQL查询性能,最高可达200倍,兼容MySQL语法,无需额外学习成本。
|
12月前
|
SQL 存储 关系型数据库
MySQL体系结构详解:一条SQL查询的旅程
本文深入解析MySQL内部架构,从SQL查询的执行流程到性能优化技巧,涵盖连接建立、查询处理、执行阶段及存储引擎工作机制,帮助开发者理解MySQL运行原理并提升数据库性能。
|
12月前
|
SQL 监控 关系型数据库
SQL优化技巧:让MySQL查询快人一步
本文深入解析了MySQL查询优化的核心技巧,涵盖索引设计、查询重写、分页优化、批量操作、数据类型优化及性能监控等方面,帮助开发者显著提升数据库性能,解决慢查询问题,适用于高并发与大数据场景。
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
663 18
|
11月前
|
SQL 关系型数据库 MySQL
(SQL)SQL语言中的查询语句整理
查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。
506 0
|
SQL 分布式计算 大数据
SparkSQL 入门指南:小白也能懂的大数据 SQL 处理神器
在大数据处理的领域,SparkSQL 是一种非常强大的工具,它可以让开发人员以 SQL 的方式处理和查询大规模数据集。SparkSQL 集成了 SQL 查询引擎和 Spark 的分布式计算引擎,使得我们可以在分布式环境下执行 SQL 查询,并能利用 Spark 的强大计算能力进行数据分析。
|
SQL 人工智能 数据库
【三桥君】如何正确使用SQL查询语句:避免常见错误?
三桥君解析了SQL查询中的常见错误和正确用法。AI产品专家三桥君通过三个典型案例:1)属性重复比较错误,应使用IN而非AND;2)WHERE子句中非法使用聚合函数的错误,应改用HAVING;3)正确的分组查询示例。三桥君还介绍了学生、课程和选课三个关系模式,并分析了SQL查询中的属性比较、聚合函数使用和分组查询等关键概念。最后通过实战练习帮助读者巩固知识,强调掌握这些技巧对提升数据库查询效率的重要性。
427 0
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")