MYSQL教程 – 带有语法的类型和示例(第1部分)

前面我们讨论了SQL中的RDBMS概念。今天,我们将在SQL中看到Clause。这是我们的SQL子句教程的第一部分。在本文中,我们将讨论SQL中3种类型的子句,即WITH子句,SELECT子句和FROM子句。另外,我们将看到嵌套表引用。

因此,让我们开始SQL子句教程。

1. SQL Server中的子句是什么?

我们将详细研究在先前的教程中使用过的SQL命令。SQL命令遵循标准的SQL语法和功能。

基本上,我们使用它们为查询应用过滤器,从而获得过滤结果。最重要的类型是-

DISTINCT Clause 用于检索唯一记录
FROM Clause 用于列出表和联接信息
WHERE Clause 用于过滤结果
ORDER BY Clause 用于对查询结果进行排序
GROUP BY Clause 用于按一列或多列分组
HAVING Clause 用于限制返回的行的组

在本节中,我们将讨论3种类型的SQL子句-

  • 在SQL中带有子句
  • SQL中的SELECT子句
  • SQL中的FROM子句

2. SQL中的WITH子句

此子句由Oracle首先在Oracle 9i第2版数据库中引入。它也允许命名表。查询也可以使用嵌套的子查询位来编写,这将使调试过程更加复杂。

非递归公用表表达式在with子句的帮助下受支持,它们可以在后续with子句项中作为表引用,在主查询中,可以将该子句视为为临时表提供查询范围

SQL WITH子句的语法

WITH name [(column, ...)] AS (query expression) ...

SQL中WITH子句的语法规则

  • 列名必须唯一,如果在任何情况下都不唯一,则应提供列名列表
  • 如果声明了with子句项的列,则预计的Quarry Express查询表达式的列数必须匹配,并且封闭项必须具有唯一名称

3. SQL中的SELECT子句

在SQL中,以select关键字开头的查询通常称为select语句。

SQL中SELECT子句的语法

SELECT [DISTINCT|ALL] ((expression [[AS] name])|(group identifier.STAR))*|STAR ...

SQL中SELECT子句的语法规则

  • 别名表达式只能在order by子句或输出列名称中使用,不能在查询中的其他任何地方使用
  • 仅当符号可比较时,才可以指定区别

4. SQL中的FROM子句

该子句为目标表指定SELECT,UPDATE和DELETE。我们可以在子查询规范中使用它,然后将该子规范用作应用外部查询的新关系。

注意

我们不能在子查询中使用来自关系的相关变量。

实例语法

  • FROM table [[AS] alias]
  • FROM table1 [INNER|LEFT OUTER|RIGHT OUTER|FULL OUTER] JOIN table2 ON join-criteria
  • FROM table1 CROSS JOIN table2
  • FROM (subquery) [AS] alias
  • FROM TABLE(subquery) [AS] alias
  • FROM table1 JOIN /*+ MAKEDEP */ table2 ON join-criteria
  • FROM table1 JOIN /*+ MAKENOTDEP */ table2 ON join-criteria
  • FROM /*+ MAKEIND */ table1 JOIN table2 ON join-criteria
  • FROM /*+ NO_UNNEST */ vw1 JOIN table2 ON join-criteria
  • FROM table1 left outer join /*+ optional */ table2 ON join-criteria
  • FROM TEXTTABLE…
  • FROM XMLTABLE…
  • FROM ARRAYTABLE…
  • FROM (SELECT …

i.从子句提示

在确定和控制从属联接行为的过程中,MAKEIND,MAKEDEP和MAKENOTDEP用作提示。仅应在不通过使用查询结构,元数据和成本信息的优化器使用最佳计划的情况下使用它们。

这些提示可以在该子句的注释中看到。必须在子句的前面指定它们,而不能在任何名称表的前面指定它们。

将针对from子句或视图的子查询指定NO_UNNEST,以指示计划器不要在嵌套查询中合并嵌套的SQL,这也称为读取展平。

ii.嵌套表参考

嵌套表可能在FROM子句中带有TABLE关键字。它们是使用具有常规联接语义的视图的替代方法。从嵌套表中包含的命令投影的列也将用作条件,where子句等的一部分的任何其他FROM子句投影列。

只要使用INNER和LEFT OUTER联接,嵌套表就可能与对先前FROM子句列引用的引用有关。这在嵌套表达式是过程或函数调用的情况下特别有用。

  • 有效的例子:
select * from t1, TABLE(call proc(t1.x)) t2
  • 无效的示例,因为t1出现在from子句中的嵌套表之后:
select * from TABLE(call proc(t1.x)) t2, t1

iii.文字表

TEXTTABLE函数处理字符输入以产生表格输出。它支持每种固定和定界文件格式解析。函数本身定义了要投影的列。TEXTTABLE函数隐式是一个嵌套表,并将与之前的FROM子句条目相关联。

用法–

TEXTTABLE(expression COLUMNS , ... [NO ROW DELIMITER] [DELIMITER char] [(QUOTE|ESCAPE) char] [HEADER [integer]] [SKIP integer]) AS name
COLUMN := name datatype [WIDTH integer [NO TRIM]]

参数– 

表达式 –要处理的文本内容,应该可以转换为CLOB。

NO ROW DELIMITER指示固定解析不应假定存在换行符。

DELIMITER设置要使用的扇区定界符。默认为','。

顾名思义,QUOTE设置引号或限定符,或用于包装字段值的字符。默认为“”。

顾名思义,ESCAPE设置了在不使用引号的情况下使用的转义字符。可以在定界符或换行符与前面的字符进行转义的情况下使用。

HEADER指定出现行名的文本行号(对每行进行计数)。标题之前的所有行都将被跳过。如果指定了HEADER,则标题行用于通过不区分大小写的名称匹配来确定TEXTTABLE列的位置。这在仅需要一组列的情况下尤其有用。如果未提供HEADER值,则默认为1。如果未提供HEADER,则列应与文本内容在位置上匹配。

“跳过”指定了在解析内容之前要跳过的文本行数(对每行进行计数)。HEADER应该用SKP指定。

这里的WIDTH表示以字符而不是以字节为单位的列的固定宽度长度。cr NL换行符值视为一个字符。

NO TRIM指定不得对所有前导和尾随空格修剪文本值。

语法规则–

  • 如果为一列指定宽度,则应为所有列指定宽度,并且该宽度应为非负整数。
  • 如果给出了宽度,则使用固定宽度的解析,并且不得给出ESCAPE,QUOTE和HEADER。
  • 没有指定宽度,则不能使用NO ROW DELIMITER。

列名不应包含重复项。

例子

  • 当HEADER参数返回1行['b']:
SELECT * FROM TEXTTABLE(UNESCAPE('col1,col2,col3\na,b,c') COLUMNS col2 string HEADER) x
  • 当固定宽度时,它返回2行['a','b','c'],['d','e','f']:
SELECT * FROM TEXTTABLE(UNESCAPE('abc\ndef') COLUMNS col1 string width 1, col2 string width 1, col3 string width 1) x

a.XML表格

XMLTABLE函数使用XQuery提供表格输出。XMLTABLE函数隐式是一个嵌套表,并将与前面的FROM子句条目相关联。XMLTABLE是SQL / XML 2006规范的一部分。

用法– 

XMLTABLE([,] xquery-expression [] [COLUMNS , ... )] AS name
COLUMN := name (FOR ORDINALITY | (data type [DEFAULT expression] [PATH string])

参量

  • 可选的XMLNAMESPACES子句指定我们在XQuery和COLUMN路径表达式中使用的名称空间。
  • xquery-expression应该是有效的XQuery。xquery返回的每个序列项都不会产生由COLUMNS子句定义的一行值。
  • 如果COLUMNS不是这样,则相当于具有COLUMNS子句:“ COLUMNS OBJECT_VALUE XML PATH'。'”,它将整个项目作为XML值返回。
  • FOR ORDINALITY列键入为整数,并且可以返回从1开始的项目号作为其值。
  • 如果PATH不是这样,则由于列名,路径是等效的。

语法规则–

  • 此外,只有1 FOR ORDINALITY列。
  • 列名不应包含重复项。

因此,这一切都在SQL的Clause中。希望您喜欢我们的解释。

5.总结

我们讨论了SQL中3种主要的子句类型-WITH子句,SELECT子句和FROM子句。此外,在FROM子句中,我们看到了from子句提示,嵌套表引用,texttable和XMLtable。另外,我们学习了SQL子句的语法和语法规则。

 

本文由 学习链 作者:学习链 发表,其版权均为 学习链 所有,文章内容系作者个人观点,不代表 学习链 对观点赞同或支持,未经许可,禁止转载,题图来自Unsplash,基于CC0协议。

发表评论