我到今天才知道SQL92和SQL99

   日期:2020-08-28     浏览:452    评论:0    
核心提示:我到今天才知道SQL92和SQL99不多说,是在下孤陋寡闻了,今天才知道SQL分为92和99两个版本,也解除了我一直以来的疑惑,为啥我学习内连接的时候会有两个版本。ps: 92版本及1992年的版本,99类似92版本这里就介绍一下多表连接的区别哈笛卡尔积首先是知道啥是笛卡尔积哈,如果看图不明白,直接任意门哈→SQL 笛卡尔积现象求所有员工及其部门的信息SELECt d.name,e.name FROM department d,employee e;(结果如上图)这样的情况不

不多说,是在下孤陋寡闻了,今天才知道SQL分为92和99两个版本,也解除了我一直以来的疑惑,为啥我学习等值连接的时候会有两个版本。
ps: 92版本及1992年的版本,99类似

92版本

这里就介绍一下多表连接的区别哈

笛卡尔积

首先是知道啥是笛卡尔积哈,如果看图不明白,直接任意门哈→SQL 笛卡尔积现象

  • 求所有员工及其部门的信息
SELECt d.name,e.name 
FROM department d,employee e;

(结果如上图)这样的情况不是我们想要的,所以需要连接操作来消除笛卡尔积现象

等值连接

在92版本是这样写的,也是我一直用的

SELECt 
	d.name 部门,e.name 员工 
FROM 
	department d,employee e 
WHERe 
	e.department_id=d.id;

1.d.name 部门是别名的写法,后面类似,省略了AS
2.后面的等值条件消除了笛卡尔积现象,得到我想要的结果

非等值连接

在where后的条件为非等值条件 , 例如:> , < , >= , <= 等

  • 查询部门id>1的所有员工(这里好像有点问题,感觉这个案例不好测试非等值连接)
SELECt 
d.id 部门id, d.name 部门,e.name 员工 
FROM 
department d,employee e 
WHERe 
e.department_id=d.id 
AND 
d.id>1;

自连接

把一张表当成两张表来看代就可以进行自己连接自己的操作了

  • 查询部门id相差1的员工的信息(这些啥鬼需求,把爷给整乐了)
SELECt 
	a.name,a.department_id,b.name,b.department_id
FROM 
	employee a,employee b 
WHERe 
	ABS(a.department_id-b.department_id)=1;

这个案例实在垃圾,只是为了展示一下自连接

结果图:

将错就错,有哪位大佬能消除重复数据吗?求请教(评论区)

99版本

原来我习惯用的都是92版本的,现在来看看99版本的

等值连接

这个也就是我们常说的内连接,我基本没怎么用到它(指这个版本哈)

  • 求所有员工及其部门的信息
SELECt 
	d.name,e.name 
FROM 
	department d
INNER JOIN 
	employee e
ON 
	e.department_id=d.id;

非等值连接

  • 查询部门id>1的所有员工
SELECt 
d.id 部门id, d.name 部门,e.name 员工 
FROM 
	department d 
INNER JOIN 
	employee e 
ON 
	e.department_id=d.id 
WHERe 
	d.id>1;

自连接

  • 查询部门id相差1的员工的信息

SELECt 
	a.name,a.department_id,b.name,b.department_id
FROM 
	employee a 
INNER JOIN 
	employee b 
ON 
	ABS(a.department_id-b.department_id)=1;

总结

对比一下,可以发现99和92版本的区别,我平时习惯用的就是92版本的语句,然后99版本多了比较重要一个功能就是外连接

外连接

  • 外连接的查询结果为主表中的所有记录,如果从表中有和他匹配的,则显示匹配的值,如果从表中没有和他匹配的,则显示null

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

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

左外连接

这里只展示左外连接哈,右外连接类似
给部门表添加一个字段(市场),如图

可以看到左表(主表)的字段都完全显示了
sql语句:

SELECt 
	d.name,e.name 
FROM 
	department d
LEFT JOIN
	employee e
ON 
	e.department_id=d.id;
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服