zoukankan      html  css  js  c++  java
  • MySQL 进阶6: 连接查询 (多表连接) : 等值连接/非等值连接 /左右全连接/内连接

    #进阶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`;
  • 相关阅读:
    有道词典_每日一句_2020/06
    有道词典_每日一句_2020/05
    有道词典_每日一句_2020/04
    有道词典_每日一句_2020/03
    Vue的模板语法之指令1——Vue学习笔记(3)
    Vue的模板语法之插值——Vue学习笔记(2)
    Vue的基本使用——Vue学习笔记(1)
    有道词典_每日一句_2020/02
    有道词典_每日一句_2020/01
    微信小程序 真机调试警告:Some selectors are not allowed in component wxss
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/9851019.html
Copyright © 2011-2022 走看看