首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SQL标准:SQL92、SQL99

SQL标准:SQL92、SQL99

作者头像
张哥编程
发布2024-12-13 16:49:43
发布2024-12-13 16:49:43
1.4K0
举报
文章被收录于专栏:云计算linux云计算linux

SQL有两个主要的标准,分别是 (1)SQL92:92年提出的标准规范,SQL92的形式更简单,但是写的SQL语句会比较长,可读性差。也被叫做SQL-2标准。

(2)SQL99:相比于SQL92,语法更加复杂,但可读性更强。也被叫做SQL-3标准。

两个标准中的多表连接 两表外连接

平时我们比较常用的外连接方式如下,

1、左外连接

SELECT * FROM 表A LEFT OUTER JOIN 表B ON 表A.key = 表B.key;

表A在此语句中是主表,表B在此语句中是从表;

2、右外连接

SELECT * FROM 表A RIGHT OUTER JOIN 表B ON 表A.key = 表B.key;

表B在此语句中是主表,表A在此语句中是从表;

3、全外连接

SELECT * FROM 表A FULL OUTER JOIN 表B ON 表A.key = 表B.key;

以上使用的就是就是SQL99的标准,并且OUTER可以省略;

其中关键的语句就是

LEFT [OUTER] JOIN ... ON ... ,

RIGHT [OUTER] JOIN ... ON ... 和

FULL [OUTER] JOIN ... ON ...

代码语言:javascript
复制
需要注意的是,ORACLE中支持SQL99的全外连接;但是在MySQL中是不支持全外连接的,可以通过使用左外连接,右外连接,结合UNION来实现全外连接的功能

而在SQL92中,外联接使用(+),(+)所在位置代表了从表所在的位置,现在用SQL92可以将上面SQL修改一下:

-- 左外连接 SELECT * FROM 表A, 表B ON 表A.key = 表B.key(+);

-- 右外连接 SELECT * FROM 表A, 表B ON 表A.key(+) = 表B.key;

-- 全外连接 SQL92中好像没有全外连接,具体有时间再查看一下文档

代码语言:javascript
复制
ORACLE 对SQL92的此种表外连接有比较好的支持,MySQL不支持

两表内连接

SQL99中的各种写法如下:

1、笛卡尔积(交叉连接)

-- 以下三种情况都会出现笛卡尔积 SELECT * FROM 表A CROSS JOIN 表B; SELECT * FROM 表A INNER JOIN 表B; SELECT * FROM 表A JOIN 表B;

代码语言:javascript
复制
SELECT * FROM 表A JOIN 表B;在ORACLE中会报错,主要是因为ORACLE对sql的语法比较严格,单独使用JOIN内联接时,必须要搭配上ON使用;外连接时也是一样;但在MySQL中没有这些限制。

2、等值连接

SELECT * FROM 表A INNER JOIN 表B ON 表A.key = 表B.key;

3、不等值连接

SELECT * FROM 表A INNER JOIN 表B ON 表A.key != 表B.key;

对应的SQL92语法为:

-- 笛卡尔积(交叉连接)

-- 等值连接 SELECT * FROM 表A, 表B ON 表A.key = 表B.key; -- 不等值连接 SELECT * FROM 表A, 表B WHERE 表A.key != 表B.key;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档