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)*页码长度,页码长度
相关文章
|
20天前
|
SQL 存储 人工智能
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
91 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
27天前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
36 8
|
1月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
58 4
|
1月前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
1月前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
138 10
|
1月前
|
SQL 关系型数据库 MySQL
|
1月前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
35 0
|
3月前
|
关系型数据库 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)")
|
5月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
135 13
|
5月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。