zoukankan      html  css  js  c++  java
  • serversql数据库的查询操作

    sql数据库

    sql数据库的执行顺序

    5. select       查看结果集中的哪个列,或列的计算结果 
    1. from         需要从哪个数据表检索数据
    2. where        过滤表中数据的条件
    3. group by     如何将上面过滤的数据分组
    4. having       对已分组的数据进行过滤的条件
    6. order by     按照不同排序方式返回数据
    

    下述查询中所用的数据表

    • 部门表dept数据
    diddnamedmgr
    1 销售部 1001
    2 研发部 1005
    3 服务部 1008
    • 员工表emp数据
    idnamegenderagesalarydnomgrid
    1001 赵伟 38 6000 1  
    1002 李萍兰 26 3000 1 1001
    1003 秦晓 30 4000 1 1001
    1004 赵晓辉 32 4200   1001
    1005 张岚 40 8000 2  
    1006 李秋平 24 4000 2 1002
    1007 顾世刚 30 6000 2 1002
    1008 段大宇 36 5000 3  

    sql联表

    • 内连接
      • 指返回数据完全满足连接条件
    • 外连接
      • 指返回数据除了包含完全满足连接条件的数据,还包括不满足连接条件的数据
      • 左外连接、右外连接、全连接
    • 自连接
      • 指连接的表是自身
    • 交叉连接
      • 表连接时没有连接条件,返回结果是两个表数据的笛卡尔积

    内连接

    • 连接语法一

     

    select  column_list 
    from    table_name1,table_name2     #表之间通过逗号隔开
    where   codition                    #表之间的连接条件
    
    • 连接语法二

     

    select column_list
    from table_name1
    [inner] join table_name2        #表之间的连接通过 join实现
    on condition;                   #表之间的连接条件
    [...n]  
    

    外连接

    外连接: 指表连接时除了返回符合连接条件的数据外,同时返回不符合连接条件的数据

    • 左外连接:
      • 是以左侧表为主,除返回符合连接条件的数据外,还返回左侧表不符合连接条件的数据
    • 右外连接:
      • 是以右侧表为主,除返回符合连接条件的数据外,还返回右侧表不符合连接条件的数据
    • 全外连接:

      • 除返回符合连接条件的数据外,还同时返回所有不符合连接条件的数据
    • 语法:

     

    select  column_list
    from    table_name1
    [left|right|full]   [outer] join table_name2    #表之间的连接条件通过 xx join 实现
    on  condition                                   #表之间的连接条件
    [...n]  
    

    自连接

    指对同一个表的连接,要执行一个内连接,必须使用不同的别名来区分

     

    select e1.name 员工姓名,e2.name 上级主管
    from emp e1,emp e2
    where e1.mgrid=e2.id    
    

    交叉连接

    在多表查询时,如果没有连接条件,则一个表的所有行将会和另一个表的所有行都会进行连接,连接的结果称为笛卡尔积

    • 连接语法一:

     

    select column_list
    from table_name1,table_name2[...n]
    
    • 连接语法二:

     

    select column_list
    from table_name1
    cross join table_name2[...n]
    

    子查询

    在前面使用的查询语句都是只包含一条select语句,而有些情况下依靠单条select语句无法完成查询要求

    这时候需要在select语句中内部嵌入另外的select语句,这条嵌入的select语句称为子查询

    子查询除了可以应用到select语句中,也可以应用到insert、update、delete语句中

    • 单行子查询
      • 只返回一行一列数据的子查询称为单行子查询
      • 外部查询可使用比较运算符: = 、> 、>= 、 < 、<= 、<> 操作符
    • 多行子查询
      • 返回多行单列数据的子查询称为多行子查询
      • 外部查询可使用:in、not in 、any、all操作符
    • 关联子查询
      • 子查询引用外部查询中包含的一列或多列,查询的执行依赖外部查询
      • 针对每行外部查询数据,都将执行一次子查询
      • 外部查询可使用 exists、not exists 操作符

    单行子查询

    单行子查询不向外部的SQL语句返回结果,或者只返回一行

    单行子查询可应用于select语句的where字句、having字句中

    • 在where字句中使用
      • 子查询作为条件判断的一方,位于小括号中(...)

     

    - 查询年龄最小的员工信息
        select * from emp
        where age=(select min(age) from emp)
        结果:查询到一条
    - 查询大于最小年龄的员工信息
        select * from emp
        where age>(select min(age) from emp)
        结果:查询到多条信息
    
    • 在having字句中使用

     

    - 查询部门员工平均年龄小于所有员工平均年龄的部门和该部门员工平均年龄
        select dno 部门编号,avg(age) 平均年龄 from emp
        group by dno
        having avg(age)<(select avg(age) from emp)
    

    多行子查询

    多行子查询通常返回一条或多条记录,多行子查询结果用于where语句时

    判断可以使用in、any、all操作符

    -查询负责管理其他员工的员工信息    --in
        select * from emp
        where id in (select mgrid from emp where mgrid is not null)
    - 查询年龄大于所有部门最大年龄的员工信息   --all
        select * from emp
        where age > all(select max(age) from emp group by dno)
    - 查询年龄大于任意部门最大年龄的员工信息   --any
        select * from emp
        where age > any(select max(age) from emp group by dno)
    

    关联子查询

    子查询中引用父查询信息,称为关联子查询

    关联子查询对于外部查询中的每一行都会运行一次

    -查询每个部门年龄最小员工
        select * from emp o
        where age=(select min(age) from emp i where i.dno=o.dno)
    -查询负责管理其他员工的员工信息
        select * from emp e1
        where exists (select 1 from emp e2 where e2.mgrid=e1.id)
    -查询不负责管理其他员工的员工信息
        select * from emp e1
        where not exists (select 1 from emp e2 where e2.mgrid=e1.id)
    

    高级查询

    操作符说明
    union all 并运算。返回各个查询检索出的所有行,包括重复行
    union 并运算。返回各个查询检索出的所有行,不包括重复行
    intersect 交运算。返回两个查询检索的共有行
    except 差运算。从左查询中返回右查询没有找到的所有的所有非重复值

    union all 操作

    union all 操作只合并结果集,不去除重复数据

    - 查询所有产品
        select * from prod1
        union all
        select * from prod2
        结果可能含有重复行
    

    union操作

    union操作合并结果集后去除重复数据

    -查询所有产品
        select * from prod1
        union
        select * from prod2
        结果:无重复行
    

    intersect操作

    intersect操作返回结果集间的交集,也就是共有部分

    -查询两个产品表的共有产品
        select * from prod1
        intersect
        select * from prod3
        结果:返回两表共有行
    
  • 相关阅读:
    torch7框架 深度学习(1)
    ubuntu 14.04 安装torch及编译环境zbstudio
    win10 下使用虚拟机安装ubuntu及其网络配置
    Lua学习笔记4. coroutine协同程序和文件I/O、错误处理
    Lua学习笔记2. lua变量和 循环
    Lua学习笔记1,基本数据类型
    linux下如何安装lua
    结构性约束事件聚合下的在线多目标跟踪方法
    基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法
    Git服务器 gitweb与gitLab的区别
  • 原文地址:https://www.cnblogs.com/tang-s/p/10123460.html
Copyright © 2011-2022 走看看