SQL标准:SQL92、SQL99 |
您所在的位置:网站首页 › mysql完全支持标准sql语句吗 › SQL标准:SQL92、SQL99 |
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 ... 需要注意的是,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中好像没有全外连接,具体有时间再查看一下文档 ORACLE 对SQL92的此种表外连接有比较好的支持,MySQL不支持两表内连接 SQL99中的各种写法如下: 1、笛卡尔积(交叉连接) -- 以下三种情况都会出现笛卡尔积 SELECT * FROM 表A CROSS JOIN 表B; SELECT * FROM 表A INNER JOIN 表B; SELECT * FROM 表A JOIN 表B; 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;
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |