zoukankan      html  css  js  c++  java
  • 第15节--连接查询

    连接查询

    含义:又称多表查询(多表连接),当查询的字段来自多个表时,就会用到连接查询

    笛卡尔乘积现象:表1有m行,表2有n,结果为m*n行;发生原因:没有有效的连接条件;如何避免:添加有效的连接条件

    连接查询分类:

    按年代分类:

      SQL92标准(仅支持内连接)

      SQL99标准(支持内连接+外连接+交叉连接)【推荐此标准】

    按功能分类:

        内连接:等值连接,非等值连接,自连接

        外连接:左外连接,右外连接,全外连接

    交叉连接

    sql92语法:

    等值连接 案例:

    (等值连接):查询女神名和对应的男神名
    select Name,boyName
    from boys,beauty
    where beauty.boyfriend_id=boys.id;
    (等值连接加上筛选条件):查询有奖金的员工名和部门名
    
    select last_name,department_name
    from employees e, departments d
    where e.department_id=d.department_id
    and commission_pct is not null;

    备注:mysql查询中可以为表漆别名,有利于提高语句的简洁度,区分多个重名的字段。如果为表起了别名,则查询的字段就不能使用原来的表名去限定;
    等值连接加分组:查询每个城市的部门个数
    
    select count(*), city
    from departments d, locations l
    where d.location_id=l.location_id
    group by city;
    (等值连接加排序): 查询每个工种的工种名和员工个数,并按员工个数排序
    
    select count(*) c, job_title
    from employees e,jobs j
    where e.job_id=j.job_id
    group by job_title
    order by c;
    (三表连接):查询员工名,部门名,和所在城市
    
    select last_name,department_name,city
    from employees e, departments d,locations l
    where e.department_id=d.department_id
    and d.location_id=l.location_id;

    》非等值连接 案例

    查询员工的工资和工资级别
    
    select salary, grade_level
    from employees e, job_grades g
    where salary between lowest_sal and highest_sal;

    》自连接

    查询员工名和上机的名称
    
    select e.last_name, m.last_name
    from employees e, employees m
    where e.manager_id=m.employee_id;

    SQL 99语法

    》内连接;分类:等值连接,非等值连接,自连接

    语法: select 查询列表 from 表1 别名

        (inner)join 表2 别名 on 连接条件

        where 筛选条件

        group by 分组列表

        having 分组后的筛选

        order by 排序列表

        limit 子句;

    特点:

      ① 表的顺序可以调换

      ②内连接的结果为多表的交集

      ③n表连接至少需要n-1个连接条件

    》外连接

    语法:select 查询列表

       from 表1 别名

       left/right/ full (outer) join 表2 别名

       on 连接条件

       where 筛选条件

         group by 分组列表

         having 分组后的筛选

         order by 排序l列表

         limit 子句;

    特点:①查询的结果为主表中所有的行,从表中和它匹配的将显示匹配行,如果从表没有匹配的则显示null

               ②left join左边为主表;right join右边为主表;full join两边都是主表

               ③一般用于查询除了交集部分的剩余不匹配的行

    》交叉连接

    语法:select 查询列表

    from 表1 别名

    cross join 表2 别名;(类似于笛卡尔乘积)

    Jasminelee
  • 相关阅读:
    shell笔记
    全引用与部分引用
    R语言 EFA(探索性因子分析)
    Markdown 基本使用
    Oracle截取字符串和查找字符串
    ggplot画基本图形类型
    ggplot画图笔记
    用R语言 画条形图(基于ggplot2包)
    Git基本操作
    R语言为数据框添加列名或行名
  • 原文地址:https://www.cnblogs.com/Jasmine6-Lee/p/12659464.html
Copyright © 2011-2022 走看看