Scala editor Java中高进阶架构 Minjs jquery延时 jquery获取元素宽度 bootstrap时间轴 collection框架的结构 拼接json字符串 ceb转换成pdf在线转换 matlab 图像识别 新手学c还是java 图片生成链接 python中get函数 python命令 python做界面 javaindexof java抽象类 java类 java文件 java发邮件 java怎么使用 java字符串匹配 java怎么获取当前时间 java特性 java的date java获取url参数 圣剑世界 win10计算器下载 在线pr序列设置 华为一键root工具 ezcad2 eclipse中文版下载 计价软件 big5 subscribe 朋友圈访客记录教程 c语言从入门到精通 磁芯大战 linux格式化硬盘
当前位置: 首页 > 学习教程  > 编程语言

MySQL(十)SQL99标准

2020/8/11 19:04:50 文章标签:

目录

  • SQL99 标准
  • 一、内连接
    • 1. 等值连接
    • 2. 非等值连接
    • 3. 自连接
  • 二、外连接
  • 三、交叉连接
  • 四、连接的总结

SQL99 标准

SQL99语法:

SELECT 查询列表
FROM1 别名 【连接类型】
join2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序条件】

连接类型分类:

内连接: inner
外连接:
左外连接:left [outer]
右外连接:right [outer]
全外连接:full [outer]
交叉连接: cross

一、内连接

语法:

select 查询列表
from1 别名
inner join2 别名
on 连接条件;

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

1. 等值连接

  • 查询员工名以及对应的部门名

    SELECT
    	last_name,
    	department_name 
    FROM
    	employees
    	INNER JOIN departments ON employees.department_id = departments.department_id;
    
  • 查询名字中包含e的员工名和工种名(筛选)

    SELECT
    	last_name,
    	job_title 
    FROM
    	employees e
    	INNER JOIN jobs j ON e.job_id = j.job_id 
    WHERE
    	e.last_name LIKE '%e%'
    
  • 查询部门个数大于3的城市名和部门的个数(分组,筛选)

    SELECT
    	city,
    	COUNT(*) AS 部门个数 
    FROM
    	departments d
    	INNER JOIN locations l ON d.location_id = l.location_id 
    GROUP BY
    	city 
    HAVING
    	COUNT(*) > 3;
    
  • 查询每个部门的员工个数

    # 查询哪个部门的员工个数大于3,显示对应的部门名称和员工个数
    SELECT
    	department_name 部门名,
    	COUNT( * ) 部门人数 
    FROM
    	employees e
    	INNER JOIN departments d ON e.department_id = d.department_id 
    GROUP BY
    	department_name 
    HAVING
    	COUNT( * ) > 3;
    
  • 查询哪个部门的员工个数大于3,显示对应的部门名称和员工个数,并且按个数降序排序

    # 查询哪个部门的员工个数大于3,显示对应的部门名称和员工个数,并且按个数降序排序
    SELECT
    	department_name,
    	COUNT( * ) 
    FROM
    	departments d
    	INNER JOIN employees e ON d.department_id = e.department_id 
    GROUP BY
    	e.department_id 
    HAVING
    	COUNT( * ) > 3 
    ORDER BY
    	COUNT( * ) DESC;
    
  • 查询员工名、部门名、工种名,并且按部门名降序排序

    # 查询员工名、部门名、工种名,并且按照部门名称降序排序
    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;
    
  • 总结
    ① 添加排序、分组、筛选
    ② inner 可以省略
    ③ 筛选条件可以放在where后面,连接条件放在on后面,提高分离性,便于阅读
    ④ inner join连接和SQL92语法中的等值连接效果是一样的

2. 非等值连接

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

3. 自连接

  • 查询员工的姓名 以及其领导的姓名
    # 查询员工的名字,以及其领导的名字
    SELECT
    	e1.last_name 员工姓名,
    	e2.last_name 领导姓名
    FROM
    	employees e1
    	JOIN employees e2 ON e1.manager_id = e2.employee_id;
    

二、外连接

用于查询一个表中有,但是另一个表中没有的记录。
查询特点:

  1. 外连接的查询结果为主表中的所有记录
    如果从表中有和主表匹配的,则显示匹配的值
    如果从表中没有和主表匹配的,则显示null
    外连接查询的结果=内连接结果+主表中有而从表中没有的记录
  2. 左外连接,left join左边的是主表
    右外连接,right join右边的是主表
  3. 左外和右外如果交换两个表的顺序,可以实现同样的结果
  4. 全外连接相当于内连接的结果+表1中有但是表2中没有的+表2中有但是表1中没有的

示例 数据库:
beauty:
在这里插入图片描述
boys:
在这里插入图片描述

  • 查询没有男朋友的女神们的名字(男朋友的id不在boys表中)
    左外连接:
    SELECT
    	beauty.name,
    	boys.boyName 
    FROM
    	beauty
    	LEFT OUTER JOIN boys ON beauty.boyfriend_id = boys.id 
    WHERE
    	boys.id IS NULL;
    
    右外连接:
    SELECT
    	beauty.NAME,
    	boys.boyName 
    FROM
    	boys
    	RIGHT OUTER JOIN beauty ON beauty.boyfriend_id = boys.id 
    WHERE
    	boys.id IS NULL
    
  • 查询哪个部门没有员工
    SELECT
    	departments.department_name
    FROM
    	departments
    	LEFT OUTER JOIN employees ON departments.department_id = employees.department_id 
    WHERE
    	employees.employee_id IS NULL
    

三、交叉连接

交叉连接就是笛卡尔积,几乎没有意义。

SELECT
	beauty.*,
	boys.* 
FROM
	beauty
	CROSS JOIN boys;

结果(部分数据):
在这里插入图片描述

四、连接的总结

SQL92和SQL99标准的对比:
功能上,SQL99支持的功能比较多。
可读性上,SQL99实现连接条件和筛选条件的分离,可读性比较高。

join连接总结:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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


本文链接: http://www.dtmao.cc/news_show_100054.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?