精华内容
下载资源
问答
  • #连接查询 /* 概念:查询的字段来自于 语法: select 字段1,字段2 ... 产生原因:没有加连接条件,导致结果为 1 ... 等值连接(where)——非等值连接 二、sql99推出的标准,使用join关键字实现连接 ..
    
    
    #连接查询
    
    /*
    
    概念:查询的字段来自于多个表
    
    语法:
    
             select
    字段1,字段2
    
             from 表1,表2
    
             【where 连接条件】
    
    笛卡尔乘积:
    
             产生原因:没有加连接条件,导致结果为 表1 的行数*表2 的行数
    分类:
    
             一、传统模式的多表连接
    
             等值连接(where)——非等值连接
    
     
    
             二、sql99推出的标准,使用join关键字实现连接
    
             内连接——外连接
    
     
    
             三、自连接
    
    */
    
     
    
    #一、传统模式的多表连接
    
    #也叫等值连接
    
    /*
    
    特点有
    
    ①表的顺序没有要求
    
    ②n表连接,至少需要n-1个连接条件
    
    ③一般需要为表起别名,这样可以提高语句简洁度,并且防止字段有歧义
    
    ④可以添加分组、排序、筛选,一起混合使用
    
    */
    
     
    
     
    
    #①案例1:查询员工名、部门名
    
    SELECT `last_name`,`department_name`
    
    FROM `employees`,`departments`
    
    WHERE
    `employees`.`department_id`=`departments`.`department_id`;
    
     
    
    #②为表起别名
    
    /*
    
    一般需要为表起别名,好处:
    
    a、提高语句简洁度
    
    b、防止字段有歧义,比如说 两张表中都有name字段,使用b.name 或者a.name 这样表示就没有歧义 
    
    c、提高效率
    
    如果已经为表起别名,则使用字段时,只能用别名限定而不能用表名限定
    
    */
    
    SELECT e.`last_name`,d.`department_name`
    
    FROM `employees` 
    e,`departments` d
    
    WHERE e.`department_id`=d.`department_id`;
    
     
    
    #③添加筛选条件
    
    #案例:查询 工资>5000的工种名和员工名、工资
    
    SELECT job_title,last_name,salary
    
    FROM employees e,jobs j
    
    WHERE e.`job_id`=j.`job_id`
    
    AND salary>5000;
    
     
    
     
    
     
    
    #④添加分组和筛选
    
    #01案例:查询每个部门的员工个数和部门名,每个部门人数大于5
    
    SELECT COUNT(*) 个数,department_name
    
    FROM employees e,departments d
    
    WHERE e.`department_id`=d.`department_id`
    
    GROUP BY e.`department_id`
    
    HAVING 个数>5#⑤排序
    
    #01案例:查询每个部门的员工个数和部门名,每个部门人数大于5,并按照人数倒序排序
    
    SELECT COUNT(*) 个数,department_name
    
    FROM employees e,departments d
    
    WHERE e.`department_id`=d.`department_id`
    
    GROUP BY e.`department_id`
    
    HAVING 个数>5
    
    ORDER BY 个数 DESC;
    
    
    #⑥ 三表连接
    
    #案例:查询员工名、部门名和所在城市
    
    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`;
    
    
    
    
    展开全文
  • 等值连接(where)——非等值连接 二、sql99推出的标准,使用join关键字实现连接 内连接——外连接 三、自连接 */ #一、传统模式的多表连接 #也叫等值连接 /* 特点有 ①表的顺序没有要求 ②n表连接,

    #连接查询
    /*
    概念:查询的字段来自于多个表
    语法:
    select 字段1,字段2
    from 表1,表2
    【where 连接条件】
    笛卡尔乘积:
    产生原因:没有加连接条件,导致结果为 表1 的行数*表2 的行数
    解决方法:添加上有效的myemployees

    分类:
    一、传统模式的多表连接
    等值连接(where)——非等值连接

    二、sql99推出的标准,使用join关键字实现连接
    内连接——外连接
    
    三、自连接
    

    */

    #一、传统模式的多表连接
    #也叫等值连接
    /*
    特点有
    ①表的顺序没有要求
    ②n表连接,至少需要n-1个连接条件
    ③一般需要为表起别名,这样可以提高语句简洁度,并且防止字段有歧义
    ④可以添加分组、排序、筛选,一起混合使用
    */

    展开全文
  • 多表连接查询 含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询 ...内连接:等值连接 、非等值连接 、 自连接 外连接:左外连接 、 右外连接 、 全外连接 交叉连接 一、sql92标准 1》等值

    MySQL多表连接查询

    1. 含义:

    又称多表查询,当查询的字段来自于多个表时,就会用到连接查询

    笛卡尔乘积现象: 表1 有m行,
                                  表2 有n行,那么结果=m*n行
    在这里插入图片描述
    笛卡尔乘积现象:如果连接条件省略或无效的连接条件,导致现象出现
    解决办法:添加有效的连接条件
    在这里插入图片描述

    2. 分类:

    年代分类:
               sql92标准:仅仅支持内连接
               sql99标准:【推荐使用】:支持内连接、外连接(左外和右外)、交叉连接
    功能分类:
               内连接:等值连接 、非等值连接 、 自连接
               外连接:左外连接 、 右外连接 、 全外连接
               交叉连接.

    一、sql92标准

    1) 等值连接

    特点:
         ① 多表等值连接的结果为多表的交集部分
         ② n表连接,至少需要n-1个连接条件
         ③ 多表不分主次,没有顺序要求
         ④ 一般为表起别名,提高阅读性和性能
         ⑤ 可以搭配排序、分组、筛选….等子句使用

    # 查询员工名和对应的部门名
    在这里插入图片描述
    1. 为表起别名

    好处:
          ①提高语句的简洁度;
          ②区分多个重名的字段

    注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限定

    #查询员工名、工种号、工种名
    在这里插入图片描述
    这里需要用表名限定
    但如果反复用表名去限定,语句更复杂
    因此,可以为表名起别名
    在这里插入图片描述

    2. 两个表的顺序可以调换
    #查询员工名、工种号、工种名
    在这里插入图片描述

    3. 可以添加筛选条件
    #查询有奖金的员工名、部门名
    在这里插入图片描述
    #查询城市名中第二个字符为o的部门名和城市名
    在这里插入图片描述
    4. 可以添加分组
    #查询每个城市的部门个数
    在这里插入图片描述
    5. 可以添加排序
    #查询每个工种的工种名和员工的个数,并且按员工个数降序
    在这里插入图片描述
    6. 三表连接
    在这里插入图片描述

    2) 非等值连接

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3) 自连接

    #查询员工名和上级的名称
    在这里插入图片描述

    二、sql99语法:通过join关键字实现连接

    1. 含义: 1999年推出的sql语法
    2. 语法:
                select 查询列表
                from 表1 别名 【连接类型】
                join 表2 别名 on 连接条件
              【where 筛选条件】
              【group by 分组字段】
              【having 分组后的筛选条件】
              【order by 排序的字段或表达式】
    3. 分类:
               内连接 :inner
               外连接 :
                           左外 : left 【outer】
                           右外 :right【outer】
                           全外 : full 【outer】
                交叉连接 :cross join

    1> 内连接:

    语法:
             select 查询列表
             from 表1 别名
             inner join 表2 别名
             on 连接条件 ;
    分类:
             等值
             非等值
             自连接

    A. 等值连接

    特点:
           ①添加排序、分组、筛选
           ②inner可以省略
           ③筛选条件放在where后面, 连接条件放在on后面,提高分离性,便于阅读(sql99的好处)
           ④inner join连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集

    1.查询员工名、部门名
    在这里插入图片描述
    注:两个表调换顺序,结果一样

    2.查询名字中包含e的员工名和工种名(添加条件)
    在这里插入图片描述

    3.查询部门个数>3的城市名和部门个数(添加分组+筛选)
    ① 查询每个城市的部门个数
    ② 在①结果上筛选满足条件的
    在这里插入图片描述
    4.查询员工个数>3的部门名和员工个数,且按个数降序的部门(添加排序)
    在这里插入图片描述
    5.查询员工名、部门名、工种名,并按部门名降序(三表连接)
    在这里插入图片描述
    B. 非等值连接
    查询工资级别的个数>20的个数,并且按工资级别降序
    在这里插入图片描述
    C. 自连接
    查询员工的名字、上级的名字

    2> 外连接

    用于查询一个表中有,另一个表中没有的记录

    特点:
          ①外连接的查询结果为主表中的所有记录
              *如果从表中有和它匹配的,则显示匹配的值
              *如果从表中没有和它匹配的,则显示null
              *外连接查询结果=内连接结果(交集部分)+主表中有而从表中没有的(用null填充)记录
          ②左外连接,left join左边的是主表
              右外连接,right join右边的是主表
          ③左外和右外交换两个表的顺序,可以实现同样的效果
          ④全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的

    左外连接 :
    #查询没有员工的部门
    注:查询的信息主要来自哪个表,哪个就是主表
    在这里插入图片描述
    添加条件 :

    在这里插入图片描述
    使用id是主键 绝对不为空

    右外连接 :
    在这里插入图片描述

    注 : 全外链接( MySQL不支持 )

    3> 交叉连接

    在这里插入图片描述
    sql92 VS sql99
    功能:    sql99支持的较多
    可读性: sql99实现连接条件和筛选条件的分离,可读性强
    在这里插入图片描述

    展开全文
  • #进阶6: 连接查询 (多表连接) : 等值连接/非等值连接 /左右全连接/内连接 /* 含义: 当查询的字段来自于多个表时, 就会用到连接查询 一: sql 92标准 :等值连接 ,(#内连接) 1.可以为表区别名,区分多个重名...
    #进阶6: 连接查询 (多表连接) : 等值连接/非等值连接 /左右全连接/内连接
    /*
      含义: 当查询的字段来自于多个表时, 就会用到连接查询
      
      一: sql 92标准 :等值连接 ,(#内连接)
        1.可以为表区别名,区分多个重名的字段
        2.为表使用别名后,只能使用别名去"select"!
        
      二:非等值连接
        1.where 列名 BETWEEN ... AND ...
      三:自连接 :自己连接自己
      
      四:左 / 右 外连接
        1.应用场景: 用于查询一个表有内容,另一个表没有内容
            如果从表中有和它匹配的,则显示匹配的值
            如果从表中没有和它匹配的,则显示null
        2.左外连接, left OUTER join   (左边的是主表)
            on 连接关系
            where 筛选条件
        3.右外连接,right OUTER join   (右边的是主表)
            on 连接关系
            where 筛选条件
    
       五:#全外连接 = 内连接的结果 + 表1中有但表2中没有的 + 表2中有的但表1中没有的
        #MYSQL不支持!!    Oracle数据库
    
        六:#交叉连接
        实现笛卡尔成绩,实现两个表的任意两项进行连接!
        
        七:sql 92 和 sql 99
        
    */
    
    #查询对偶姓名匹配
    
    SELECT beauty.`name`,boys.`boyName`
    FROM beauty,boys
    WHERE beauty.`boyfriend_id`=boys.`id`;
    
    #案例2: 查询员工名和对应的部门名
    
    SELECT last_name,department_name
    FROM employees,departments
    WHERE employees.`department_id`=departments.department_id;
    
    #3.查询员工名/工种号/工种名 #使用别名
    SELECT e.`last_name` ,e.`job_id`,j.`job_title`
    FROM  employees e,jobs j
    WHERE e.`job_id`=j.`job_id`;
          
    #4.查询有奖金的员工名和部门名
    SELECT e.`last_name`,e.`department_id`
    FROM employees e,departments d
    WHERE e.`department_id`=d.`department_id`;
    
    #5.查询每个工种的工种名和员工的个数, 并且按员工个数排序
    SELECT j.`job_title`,COUNT(*)
    FROM jobs j,employees e
    WHERE j.`job_id`=e.`job_id`
    GROUP BY j.`job_title`
    ORDER BY COUNT(*) DESC;
    
    #2 / 非等值连接
    
    #案例1:查询员工的工资和工资级别
    SELECT salary,grade_level
    FROM employees e,job_grades g
    WHERE e.salary BETWEEN g.`lowest_sal` AND g.`highest_sal`;
    
    #3 / 左 . 右 外连接
        #案例1:查询女生的男朋友不在boys 表中的 女生   -- [左外连接]
    SELECT b.name,bo.* 
    FROM beauty b  
    LEFT OUTER JOIN boys bo
    ON b.`boyfriend_id`=bo.`id`
    WHERE bo.`id` IS NULL ;
    
        #案例2: 查询哪个部门没有员工
    SELECT  d.*,e.employee_id
    FROM departments d
    LEFT OUTER JOIN employees e
    ON d.`department_id`=e.`department_id`
    WHERE e.employee_id IS NULL;
    
    #全外连接 = 内连接的结果 + 表1中有但表2中没有的 + 表2中有的但表1中没有的
        #MYSQL不支持!!
    
    #交叉连接
    SELECT b.*,bo.*
    FROM beauty b
    CROSS JOIN boys bo;
    
    #内连接
    
    SELECT *
    FROM beauty b
    INNER JOIN boys
    ON b.`boyfriend_id`=boys.`id`;

     

    转载于:https://www.cnblogs.com/zhazhaacmer/p/9851019.html

    展开全文
  • #进阶6: 连接查询 (多表连接) : 等值连接/非等值连接 /左右全连接/内连接/*含义: 当查询的字段来自于多个表时, 就会用到连接查询一: sql 92标准 :等值连接 ,(#内连接)1.可以为表区别名,区分多个重名的字段2.为表使用...
  • 时光在不经意间,总是过得出奇的快。小暑已过,进入中暑,太阳更加热烈的绽放着ta的光芒,......回顾练习资料girls库以及两张的脚本: https://pan.baidu.com/s/1NAvIOIrIPB8ZVfRblU2ppg 提取码: ...
  • 1、多表查询 笛卡尔乘积的原因是两个表之间缺乏有效的连接条件。...多表等值连接的结果为多表的交集部分 n表连接,至少需要n-1个连接条件 多表的顺序没有要求 一般需要为表起别名 可以搭配前面介绍的所有子
  • 包括等值连接查询,自然连接查询,非等值连接查询,自身连接查询,外连接查询和复合条件连接查询等 1.等值与非等值连接查询  where 子句中连接两个的条件称为连接条件 如 Student.Sname=Sc.Sno  比较运算符有...
  • 关于MySQL92和99 等值连接、非等值连接、自连接、外连接及多表查询的代码示例总结! 一. MySQL92语法 *1. 内连接 没有关联关系的数据是不在查询范围之内的 * 1)等值连接 – 查询出101的班级信息(并带上该班级的...
  • 一:多表等值连接的结果为多表的交集部分 二:n表连接,至少需要n-1个连接条件 三:多表的顺序没有要求 四:一般需要为表起别名 五:可以搭配前面介绍的所有子句使用,比如排序,分组,筛选 案例一:查询女神名...
  • #案例:查询女神名和对应的男神名 SELECT NAME,boyName FROM boys,beauty WHERE ...#案例:查询employees的员工名和对应的departments的部门名,限定字段名相同 SELECT last_name,department...
  • order by 支持别名三、分组查询练习四、连接查询传统模式的多表连接 一、分组函数 分组函数 /* 函数,类似java中的方法 叫什么?方法名或者函数名 干什么?函数功能 分组函数,又称为统计函数或聚合函数 length
  • 时光在不经意间,总是过得出奇的快。小暑已过,进入中暑,太阳更加热烈的绽放着ta的光芒,......回顾练习资料girls库以及两张的脚本: https://pan.baidu.com/s/1NAvIOIrIPB8ZVfRblU2ppg 提取码: ...
  • 时光在不经意间,总是过得出奇的快。小暑已过,进入中暑,太阳更加热烈的绽放着ta的光芒,......回顾练习资料girls库以及两张的脚本: https://pan.baidu.com/s/1NAvIOIrIPB8ZVfRblU2ppg 提取码: ...
  • 多表查询 多表查询:当查询的数据并不是来源一个表时,需要使用多表链接操作完成查询。根据不同表中的数据之间的关系查询相关联的数据。...包括等值联接和自然联接 等值连接等值连接 自连接 SQL99...
  • 1、数据查看 SELECT * FROM beauty; SELECT * FROM boys; SELECT NAME,boyname FROM beauty,boys WHERE boyfriend_id=boys.id;...概念:查询的字段来自于 语法: select 字段1,字段2 from 1,2 【...
  • 笛卡尔积:是多表查询的数据基础(最全面的拼装)A表 m行 x列B表 n行 y列结果:A×B m*n行 x+y列按照需求自己处理 emp表和dept表数据之间没有进行匹配第一个表中的所有行和第二个表中的所有行都发生连接连接条件被省略...
  • mysql-数据查询语句-多表连接查询连接查询,是关系数据库中最主要的查询,包括等值查询、自然连接查询、非等值查询、自身连接查询、外连接查询和复合条件连接查询等。1、等值与非等值连接查询连接查询的where子句中...
  • 分析等值连接的处理过程: EqualJoinMapper.java package com.equaljoin; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.ha...
  • 存入到excel中,更直观,方便查询 image.png 等值连接(取交集) 语法 select * from 1,2 where 1.列=2.列 -- 查询学生信息及学生成绩 select * from students as stu,scores as sc where stu.studentNo=...
  • Mysql查询时的多表连接查询举个栗子等值连接自然连接:NATUEAL JOIN内连接:INNER JOIN或JOIN左外连接:LEFT OUTER JOIN或者LEFT JOIN右外连接:RIGHT OUTER JOIN或者RIGHT JOIN交叉连接(笛卡尔连接) 举个栗子 ...
  • 连接所能查出来的数据是这样的:主中的所有数据,以及从中满足连接条件的数据 而左外连接和右外连接的不同就在于主的位置不同。左外连接:写在左边的是主,左外连接:写在右边的是主(所谓的左边和右边...
  • python数据合并、多表连接查询1、concat()我们可以通过DataFrame或Series类型的concat方法,来进行连接操作,连接时,会根据索引进行对齐。axis:指定连接轴,默认为0(上下)。【axis=0/1】join:指定连接方式,默认...
  • 实例:查询员工信息,要求显示:员工号,姓名,月薪,部门名称...分析:设计到2张表,员工,部门。至少有N-1个条件(2-1=1) select e.empno,e.ename,e.sal,e.dname from emp e,dept d where e.depno = d.depno;
  • 1、显示所有员工的姓名,部门号和部门名称 SELECT last_name,e.department_id,department_name FROM employees e,departments d ...7、数据查看 SELECT * FROM departments; SELECT * FROM locations;
  • 等值连接会出现笛卡尔积(出现一张虚拟的临时,不存在),此时需要过滤掉错误的数据,以两都出现的对应字段对接两,最后结果是显示出来的就是证确的数据,这叫等值连接,格式:select * from 1,2 where 1....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,443
精华内容 577
关键字:

多表等值连接