MySQL------ SQL99语法

一、SQL99语法

  语法:

    select  查询列表

    from 表1 别名 【连接类型】

    join 表2 别名

    on 连接条件

    【where 筛选条件】

    【group by 分组】

    【having 筛选条件】

    【oder by 排序列表】

  分类:

    内连接:inner

    外连接:左外 left【outer】、右外 right【outer】、全外 full【outer】

    交叉连接:cross

二、内连接

  语法:

    select  查询列表

    from 表1 别名 

     inner join 表2 别名

    on 连接条件

  分类:等值连接、非等值连接、自连接

    #案例:查询员工名、部门名<等值连接>
    SELECT last_name,department_name
    FROM employees e
    INNER JOIN departments d
    ON e.`department_id` = d.`department_id`


    #案例:查询员工名、部门名、工种名‘、并按部门名降序
    SELECT last_name,department_name,job_title
    FROM employees e
    INNER JOIN departments d ON e.`department_id`= d.`department_id`
    INNER JOIN jobs j ON e.`job_id` = j.`job_id`
    ORDER BY department_name DESC;

  特点:1、添加排序、分组、筛选

     2、inner 可以省略

     3、筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读

     4、inner join 连接和 sq192语法中的等值连接效果是一样的,都是查询多表的交集

三、非等值连接

  #查询员工的工资级别
  SELECT salary,grade_level
  FROM employees e
  JOIN job_grades g
  ON e.`salary` BETWEEN g.`lowest_sal`AND g.`highest_sal`;

四、自连接

  #案例:查询员工的名字、上级的名字
  SELECT e.last_name 员工,m.last_name 领导
  FROM employees e
  JOIN employees m
  ON m.`employee_id` = e.`manager_id` ; #含义:领导下的员工 = 员工上的领导

五、外连接

  应用场景:用于查询一个表中有,另一个表没有的记录

  特点:

  1、外连接的查询结果为主表中的所有记录

      如果从表中有和它匹配的,则显示匹配的值

      如果从表中没有和它匹配的,则显示null

      外连接查询结果=内连接结果+主表中有而从表没有的记录

  2、左外连接,left join左边的是主表

       右外连接,right join右边的是主表

  3、左外和右外交换两个表的顺序,可以实现同样的效果

  4、全外连接 = 内连接的结果+表1中有但表2没有的,表2中有但表1没有的

 

      #案例:查询没有男朋友的女生名 (左外)
      SELECT be.name,bo.id,bo.`boyName`
      FROM beauty be
      LEFT OUTER JOIN boys bo
      ON be.`boyfriend_id` = bo.`id`
      WHERE bo.id IS NULL;

      #案例:查询没有男朋友的女生名 (右外)
      SELECT be.*,bo.*,
      FROM boys bo
      RIGHT OUTER JOIN beauty be
      ON be.`boyfriend_id` = bo.`id`
      WHERE be.id IS NULL;

五、交叉连接     

      #案例
      SELECT b.*,bo.*
      FROM beauty b
      CROSS JOIN boys bo;

 

posted @ 2020-05-25 11:01  昔の少年  阅读(471)  评论(0编辑  收藏  举报