<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=SQL%E8%AF%AD%E6%B3%95</id>
	<title>SQL语法 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=SQL%E8%AF%AD%E6%B3%95"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=SQL%E8%AF%AD%E6%B3%95&amp;action=history"/>
	<updated>2026-07-16T06:05:28Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=SQL%E8%AF%AD%E6%B3%95&amp;diff=2962557&amp;oldid=prev</id>
		<title>imported&gt;Cewbot：​去除重複的轉換規則: 去除與公共轉換組重複的轉換規則 (1): 存在於轉換組 IT: zh-cn:数据库;zh-tw:資料庫</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=SQL%E8%AF%AD%E6%B3%95&amp;diff=2962557&amp;oldid=prev"/>
		<updated>2026-02-24T09:57:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Cewbot/log/20191129/configuration&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:Cewbot/log/20191129/configuration（页面不存在）&quot;&gt;去除重複的轉換規則&lt;/a&gt;: 去除與公共轉換組重複的轉換規則 (1): 存在於轉換組 IT: zh-cn:数据库;zh-tw:資料庫&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{NoteTA&lt;br /&gt;
|G1=IT&lt;br /&gt;
|1=zh-tw:資料; zh-cn:数据;&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[SQL]]编程语言的语法&amp;#039;&amp;#039;&amp;#039;是由ISO/IEC 9075标准中的[[ISO/IEC JTC 1/SC 32|ISO/IEC SC 32]]委员会所定义和维护的。尽管存在标准，不过SQL代码仍然无法在不进行修改的前提下在不同的数据库系统中直接移植。&lt;br /&gt;
&lt;br /&gt;
== 语言元素 ==&lt;br /&gt;
[[File:SQL ANATOMY wiki.svg|thumb|400px|图表显示了SQL语言元素组成的一个语句]]&lt;br /&gt;
&lt;br /&gt;
SQL语言分成了几种要素，包括：&lt;br /&gt;
&lt;br /&gt;
* 子句，是语句和查询的组成成分。（在某些情况下，这些都是可选的。）&amp;lt;ref&amp;gt;ANSI/ISO/IEC International Standard (IS). Database Language SQL—Part 2: Foundation (SQL/Foundation). 1999.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* 表达式，可以产生任何[[变量 (程序设计)|标量]]值，或由[[列 (数据库)|列]]和[[行 (数据库)|行]]的[[数据库表]]&lt;br /&gt;
* 谓词，给需要评估的SQL[[三值逻辑|三值逻辑（3VL）]]（true/false/unknown）或[[逻辑代数|布尔]][[真值]]指定条件，并限制语句和查询的效果，或改变程序流程。&lt;br /&gt;
* 查询，基于特定条件检索数据。这是&amp;#039;&amp;#039;SQL&amp;#039;&amp;#039;的一个重要组成部分。&lt;br /&gt;
* 语句，可以持久地影响纲要和数据，也可以控制[[数据库事务]]、程序流程、连接、会话或诊断。&lt;br /&gt;
** SQL语句也包括[[分號]]（&amp;quot;;&amp;quot;）语句终结符。尽管并不是每个平台都必需，但它是作为SQL语法的标准部分定义的。&lt;br /&gt;
* [[空白|无意义的空白]]在SQL语句和查询中一般会被忽略，更容易格式化SQL代码便于阅读。&lt;br /&gt;
&lt;br /&gt;
== 运算符 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 运算子&lt;br /&gt;
! 描述&lt;br /&gt;
! 例子&lt;br /&gt;
|-&lt;br /&gt;
| {{code|1= =}}&lt;br /&gt;
| 等于&lt;br /&gt;
| {{code|1= Author = &amp;#039;Alcott&amp;#039;}}&lt;br /&gt;
|-&lt;br /&gt;
| {{code|1= &amp;lt;&amp;gt;}}&lt;br /&gt;
| 不等于（许多資料庫管理系统除了支持{{code|1= &amp;lt;&amp;gt;}}以外还支持{{code|1= !=}}）&lt;br /&gt;
| {{code|Dept &amp;lt;&amp;gt; &amp;#039;Sales&amp;#039;}}&lt;br /&gt;
|-&lt;br /&gt;
| {{code|1= &amp;gt;}}&lt;br /&gt;
| 大于&lt;br /&gt;
| {{code|Hire_Date &amp;gt; &amp;#039;2012-01-31&amp;#039;}}&lt;br /&gt;
|-&lt;br /&gt;
| {{code|1= &amp;lt;}}&lt;br /&gt;
| 小于&lt;br /&gt;
| {{code|Bonus &amp;lt; 50000.00}}&lt;br /&gt;
|-&lt;br /&gt;
| {{code|1= &amp;gt;=}}&lt;br /&gt;
| 大于等于&lt;br /&gt;
| {{code|1= Dependents &amp;gt;= 2}}&lt;br /&gt;
|-&lt;br /&gt;
| {{code|1= &amp;lt;=}}&lt;br /&gt;
| 小于等于&lt;br /&gt;
| {{code|1= Rate &amp;lt;= 0.05}}&lt;br /&gt;
|-&lt;br /&gt;
| {{code|1= BETWEEN}}&lt;br /&gt;
| 在一个范围内&lt;br /&gt;
| {{code|Cost BETWEEN 100.00 AND 500.00}}&lt;br /&gt;
|-&lt;br /&gt;
| {{code|1= LIKE}}&lt;br /&gt;
| 字符模式匹配&lt;br /&gt;
| {{code|First_Name LIKE &amp;#039;Will%&amp;#039;}}&lt;br /&gt;
|-&lt;br /&gt;
| {{code|1= IN}}&lt;br /&gt;
| 等于多个可能的值之一&lt;br /&gt;
| {{code|DeptCode IN (101, 103, 209)}}&lt;br /&gt;
|-&lt;br /&gt;
| {{code|1= IS}} &amp;#039;&amp;#039;或&amp;#039;&amp;#039; {{code|IS NOT}}&lt;br /&gt;
| 与空值（数据缺失）比较&lt;br /&gt;
| {{code|Address IS NOT NULL}}&lt;br /&gt;
|-&lt;br /&gt;
| {{code|IS NOT DISTINCT FROM}}&lt;br /&gt;
| 等于值或均为空值（数据缺失）&lt;br /&gt;
| {{code|Debt IS NOT DISTINCT FROM - Receivables}}&lt;br /&gt;
|-&lt;br /&gt;
| {{code|1= AS}}&lt;br /&gt;
| 用于在查看结果时更改字段名称&lt;br /&gt;
| {{code|SELECT employee AS &amp;#039;department1&amp;#039;}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
有人也提议实现其他运算子，例如{{le|轮廓运算子|skyline operator}}（寻找那些不比任何其他记录“糟糕”的记录）。&lt;br /&gt;
&lt;br /&gt;
=== 条件（CASE）表达式 ===&lt;br /&gt;
&lt;br /&gt;
SQL在[[SQL-92]]标准中引入了&amp;lt;code&amp;gt;CASE/WHEN/THEN/ELSE/END&amp;lt;/code&amp;gt;语句。通常情况下所称的“搜索CASE语句”例子如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CASE WHEN n &amp;gt; 0 &lt;br /&gt;
          THEN &amp;#039;正&amp;#039;&lt;br /&gt;
     WHEN n &amp;lt; 0 &lt;br /&gt;
          THEN &amp;#039;负&amp;#039;&lt;br /&gt;
     ELSE &amp;#039;零&amp;#039;&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SQL按照&amp;lt;code&amp;gt;WHEN&amp;lt;/code&amp;gt;条件在源代码中出现的顺序进行判断。如果源代码中没有指定&amp;lt;code&amp;gt;ELSE&amp;lt;/code&amp;gt;表达式，SQL默认为&amp;lt;code&amp;gt;ELSE NULL&amp;lt;/code&amp;gt;。SQL标准中还有一种“简单CASE语句”，类似C语言的switch：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CASE n WHEN 1 &lt;br /&gt;
            THEN &amp;#039;one&amp;#039; &lt;br /&gt;
       WHEN 2&lt;br /&gt;
            THEN &amp;#039;two&amp;#039; &lt;br /&gt;
       ELSE &amp;#039;I cannot count that high&amp;#039;&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
该语法是隐式相等条件。通常情况下，遇到[[空值 (SQL)|与空值比较]]的情况会发出警告。&lt;br /&gt;
&lt;br /&gt;
对于[[Oracle数据库]]的SQL语法，还可以用&amp;lt;code&amp;gt;DECODE&amp;lt;/code&amp;gt;函数简化：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;oracle11&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DECODE(n, 1, &amp;#039;one&amp;#039;, &lt;br /&gt;
                 2, &amp;#039;two&amp;#039;,&lt;br /&gt;
                    &amp;#039;i cannot count that high&amp;#039;)&lt;br /&gt;
FROM   some_table;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
最后一个值是可选的，若无指定，默认为&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;。另外，与“简单CASE”不同的是，Oracle的&amp;lt;code&amp;gt;DECODE&amp;lt;/code&amp;gt;会认为两个&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;之间相等。&amp;lt;ref&amp;gt;{{cite web |url=http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm |title=DECODE |publisher=Docs.oracle.com |accessdate=2013-06-14 |archive-date=2013-06-28 |archive-url=https://web.archive.org/web/20130628025818/http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 查询 ==&lt;br /&gt;
&lt;br /&gt;
SQL中最常见的操作是查询，它是通过陈述性&amp;lt;code&amp;gt;[[查询 (SQL)|SELECT]]&amp;lt;/code&amp;gt;语句执行的。&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;从一个或多个[[数据库表|表]]或表达式中检索数据。标准的&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;不会对数据库有持久影响。&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;的一些非标准的实现可以有持久影响，如一些数据库中有&amp;lt;code&amp;gt;SELECT INTO&amp;lt;/code&amp;gt;语法。&amp;lt;ref name=&amp;quot;ms-sql-select-into&amp;quot;&amp;gt;{{cite book | chapter = Transact-SQL Reference | title = SQL Server Language Reference | series = SQL Server 2005 Books Online | publisher = Microsoft | date = 2007-09-15 | url = http://msdn.microsoft.com/en-us/library/ms188029.aspx | accessdate = 2007-06-17 | archive-date = 2008-04-30 | archive-url = https://web.archive.org/web/20080430104929/http://msdn.microsoft.com/en-us/library/ms188029.aspx | dead-url = no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
查询允许用户描述所需的数据，将{{le|查询计划|query plan|计划}}、{{le|查询优化器|query optimizer|优化}}以及执行用以产生它选取的结果的物理操作交给[[数据库|数据库管理系统（DBMS）]]负责。&lt;br /&gt;
&lt;br /&gt;
查询包含一系列含有最终结果的字段, 紧跟&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;关键词。星号（&amp;quot;&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;&amp;quot;）也可以用来指定查询应当返回查询表所有字段。&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;是最复杂的SQL语句，可选的关键词和子句包括：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[[From (SQL)|FROM]]&amp;lt;/code&amp;gt;子句指定了选择的数据表。&amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt;子句也可以包含&amp;lt;code&amp;gt;[[连接 (SQL)|JOIN]]&amp;lt;/code&amp;gt; 二层子句来为数据表的连接设置规则。&lt;br /&gt;
* &amp;lt;code&amp;gt;[[Where (SQL)|WHERE]]&amp;lt;/code&amp;gt;子句后接一个比较谓词以限制返回的行。&amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;子句仅保留返回结果里使得比较谓词的值为True的行。&lt;br /&gt;
* &amp;lt;code&amp;gt;[[Group by (SQL)|GROUP BY]]&amp;lt;/code&amp;gt;子句用于将若干含有相同值的行合并。 &amp;lt;code&amp;gt;GROUP BY&amp;lt;/code&amp;gt;通常与SQL聚合函数连用，或者用于清除数据重复的行。&amp;lt;code&amp;gt;GROUP BY&amp;lt;/code&amp;gt;子句要用在&amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;子句之后。&lt;br /&gt;
* &amp;lt;code&amp;gt;[[Having (SQL)|HAVING]]&amp;lt;/code&amp;gt;子句后接一个谓词来过滤从&amp;lt;code&amp;gt;GROUP BY&amp;lt;/code&amp;gt;子句中获得的结果，由于其作用于&amp;lt;code&amp;gt;GROUP BY&amp;lt;/code&amp;gt;子句之上，所以聚合函数也可以放到其谓词中。&lt;br /&gt;
* &amp;lt;code&amp;gt;[[Order by (SQL)|ORDER BY]]&amp;lt;/code&amp;gt;子句指明将哪个字段用作排序关键字，以及排序顺序(升序/降序)，如果无此子句，那么返回结果的顺序不能保证有序。&lt;br /&gt;
&lt;br /&gt;
下面是一个返回昂贵的书籍列表的&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;查询的例子。查询会从 &amp;#039;&amp;#039;Book&amp;#039;&amp;#039; 表中检索所有 &amp;#039;&amp;#039;price&amp;#039;&amp;#039; 的值大于 100.00 的行。结果按 &amp;#039;&amp;#039;title&amp;#039;&amp;#039; 升序排列。&amp;#039;&amp;#039;选择列表&amp;#039;&amp;#039;中的星号（*）表明&amp;#039;&amp;#039;Book&amp;#039;&amp;#039;表中所有字段都包含在结果集中。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT *&lt;br /&gt;
 FROM  Book&lt;br /&gt;
 WHERE price &amp;gt; 100.00&lt;br /&gt;
 ORDER BY title;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
下面的例子演示了通过返回与每本书相关联的书籍和作者来多表查询、分组和聚集。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT Book.title AS Title,&lt;br /&gt;
       count(*) AS Authors&lt;br /&gt;
 FROM  Book&lt;br /&gt;
 JOIN  Book_author&lt;br /&gt;
   ON  Book.isbn = Book_author.isbn&lt;br /&gt;
 GROUP BY Book.title;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
输出可能类似于下面的例子：&lt;br /&gt;
&lt;br /&gt;
 Title                  Authors&lt;br /&gt;
 ---------------------- -------&lt;br /&gt;
 SQL Examples and Guide 4&lt;br /&gt;
 The Joy of SQL         1&lt;br /&gt;
 An Introduction to SQL 2&lt;br /&gt;
 Pitfalls of SQL        1&lt;br /&gt;
&lt;br /&gt;
在&amp;#039;&amp;#039;isbn&amp;#039;&amp;#039;是两个表中唯一通用的列名，且名为&amp;#039;&amp;#039;title&amp;#039;&amp;#039;的列仅存在于&amp;#039;&amp;#039;Books&amp;#039;&amp;#039;表中的前提下，上述查询可以用以下形式重写：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT title,&lt;br /&gt;
       count(*) AS Authors&lt;br /&gt;
 FROM  Book &lt;br /&gt;
 NATURAL JOIN Book_author&lt;br /&gt;
 GROUP BY title;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
然而，许多厂商或者不支持这种方法，或者需要某些列命名约定来实现自然联接。&lt;br /&gt;
&lt;br /&gt;
SQL包含有用于计算存储值的值的运算符和函数。SQL允许在&amp;#039;&amp;#039;选择列表&amp;#039;&amp;#039;中使用表达式来投影数据，如下例所示，它返回成本超过100.00的书籍列表，另外一列&amp;#039;&amp;#039;sales_tax&amp;#039;&amp;#039;包含以&amp;#039;&amp;#039;price&amp;#039;&amp;#039;的6％计算的销售税数据。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT isbn,&lt;br /&gt;
       title,&lt;br /&gt;
       price,&lt;br /&gt;
       price * 0.06 AS sales_tax&lt;br /&gt;
 FROM  Book&lt;br /&gt;
 WHERE price &amp;gt; 100.00&lt;br /&gt;
 ORDER BY title;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 子查询 ===&lt;br /&gt;
&lt;br /&gt;
查询可以嵌套，以便一个查询的结果可以通过关系运算符或聚合函数在另一个查询中使用。嵌套查询也称为&amp;#039;&amp;#039;子查询&amp;#039;&amp;#039;。虽然连接和其他表操作在许多情况下提供了计算上优越（即更快）的替代方案，但是子查询的使用引入了在执行中会很有用或很必要的等级。在下例中，聚合函数&amp;lt;code&amp;gt;AVG&amp;lt;/code&amp;gt;接收子查询的结果作为输入：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT isbn,&lt;br /&gt;
       title,&lt;br /&gt;
       price&lt;br /&gt;
 FROM  Book&lt;br /&gt;
 WHERE price &amp;lt; (SELECT AVG(price) FROM Book)&lt;br /&gt;
 ORDER BY title;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
子查询可以使用外部查询的值，在这种情况下，它被称为{{le|相关子查询|correlated subquery}}。&lt;br /&gt;
&lt;br /&gt;
自1999年以来，SQL标准允许称为{{le|公共表表达式|common table expression}}的命名子查询（在IBM DB2版本2中实现之后命名和设计; Oracle把它叫做{{le|子查询部分|subquery factoring}}）。CTE还可以通过自身引用来[[递归]]；{{le|SQL中的分层和递归查询|Hierarchical and recursive queries in SQL|得到的机制}}允许树或图遍历，以及更一般的[[不动点]]计算。&lt;br /&gt;
&lt;br /&gt;
=== 派生表 ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;派生表&amp;#039;&amp;#039;是在FROM子句中引用SQL子查询的用法。基本上，派生表是可以从中选择或连接到的子查询。派生表功能允许用户将子查询引用为表。派生表也称为&amp;#039;&amp;#039;内联视图&amp;#039;&amp;#039;或&amp;#039;&amp;#039;子选择&amp;#039;&amp;#039;。&lt;br /&gt;
&lt;br /&gt;
在下例中，SQL语句涉及从初始“Book”表到派生表“sales”的连接。此派生表使用ISBN捕获关联的图书销售信息以加入“Book”表。因此，派生表提供的结果集包含附加列（销售的商品数量和销售图书的公司）：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT b.isbn, b.title, b.price, sales.items_sold, sales.company_nm&lt;br /&gt;
FROM Book b&lt;br /&gt;
  JOIN (SELECT SUM(Items_Sold) Items_Sold, Company_Nm, ISBN&lt;br /&gt;
        FROM Book_Sales&lt;br /&gt;
        GROUP BY Company_Nm, ISBN) sales&lt;br /&gt;
  ON sales.isbn = b.isbn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 空值与三值逻辑 ===&lt;br /&gt;
{{main|Null (SQL)|三值逻辑}}&lt;br /&gt;
&lt;br /&gt;
SQL中引入了[[空值 (SQL)|空值]]的概念，用来处理关系模型中缺少信息的情况。&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;一词表示空白值，是SQL中的保留词。如果Null进行比较，例如在WHERE子句中使用“=”判断相等，那么会返回未知值，而SELECT语句只会返回WHERE子句条件为真（TRUE）的结果，不会返回条件为假（FALSE）或未知的结果。&lt;br /&gt;
&lt;br /&gt;
“真”、“假”以及与空值直接比较时所得到的“未知”共同组成了SQL的[[三值逻辑|three-valued logic]]。SQL所用的真值表与Kleene和Lukasiewicz三值逻辑的共同部分对应 (它们对内涵的定义不同，然而SQL没有定义这样的操作)。&amp;lt;ref name=&amp;quot;Klein&amp;quot;&amp;gt;{{cite journal|title=Null Values in Relational Databases and Sure Information Answers|isbn=3540365966|url=https://link.springer.com/chapter/10.1007/3-540-36596-6_7|date=2001-01-07|publisher=Springer, Berlin, Heidelberg|doi=10.1007/3-540-36596-6_7|language=en|pages=119–138|accessdate=2018-04-02|author=Klein Hans-Joachim|archive-date=2018-06-05|archive-url=https://web.archive.org/web/20180605042114/https://link.springer.com/chapter/10.1007%2F3-540-36596-6_7|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=2 rowspan=2 | p AND q&lt;br /&gt;
! colspan=3 | p&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 真&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 假&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 未知&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=3 style=&amp;quot;width: 1.2em;&amp;quot; | q || style=&amp;quot;width: 5em;&amp;quot; | 真&lt;br /&gt;
| {{yes|真}}&lt;br /&gt;
| {{no|假}}&lt;br /&gt;
| {{Unk|未知}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 假&lt;br /&gt;
| {{no|假}}&lt;br /&gt;
| {{no|假}}&lt;br /&gt;
| {{no|假}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 未知&lt;br /&gt;
| {{Unk|未知}}&lt;br /&gt;
| {{no|假}}&lt;br /&gt;
| {{Unk|未知}}&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=2 rowspan=2 | p OR q&lt;br /&gt;
! colspan=3 | p&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 真&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 假&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 未知&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=3 style=&amp;quot;width: 1.2em;&amp;quot; | q || style=&amp;quot;width: 5em;&amp;quot; | 真&lt;br /&gt;
| {{yes|真}}&lt;br /&gt;
| {{yes|真}}&lt;br /&gt;
| {{yes|真}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 假&lt;br /&gt;
| {{yes|真}}&lt;br /&gt;
| {{no|假}}&lt;br /&gt;
| {{Unk|未知}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 未知&lt;br /&gt;
| {{yes|真}}&lt;br /&gt;
| {{Unk|未知}}&lt;br /&gt;
| {{Unk|未知}}&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=2 rowspan=2 | p = q&lt;br /&gt;
! colspan=3 | p&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 真&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 假&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 未知&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=3 style=&amp;quot;width: 1.2em;&amp;quot; | q || style=&amp;quot;width: 5em;&amp;quot; | 真&lt;br /&gt;
| {{yes|真}}&lt;br /&gt;
| {{no|假}}&lt;br /&gt;
| {{Unk|未知}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 假&lt;br /&gt;
| {{no|假}}&lt;br /&gt;
| {{yes|真}}&lt;br /&gt;
| {{Unk|未知}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | 未知&lt;br /&gt;
| {{Unk|未知}}&lt;br /&gt;
| {{Unk|未知}}&lt;br /&gt;
| {{Unk|未知}}&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | q&lt;br /&gt;
! style=&amp;quot;width: 5em;&amp;quot; | NOT q&lt;br /&gt;
|-&lt;br /&gt;
! 真&lt;br /&gt;
| {{no|假}}&lt;br /&gt;
|-&lt;br /&gt;
! 假&lt;br /&gt;
| {{yes|真}}&lt;br /&gt;
|-&lt;br /&gt;
! 未知&lt;br /&gt;
| {{Unk|未知}}&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
然而，由于在直接比较之外的处理，在SQL中对Null的语义解释存在争议。如上表所示，SQL中的两个NULL之间的直接等式比较（例如&amp;lt;code&amp;gt;NULL = NULL&amp;lt;/code&amp;gt;）返回真值“未知”。这符合Null不具有值（并不是任何数据域的成员）的解释，而是缺失信息的占位符或“标记”。但是，在&amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;INTERSECT&amp;lt;/code&amp;gt;操作符的SQL规范中，两个空值不相等的原则在实际上标识了null。&amp;lt;ref name=&amp;quot;Meyden&amp;quot;/&amp;gt; 因此，与涉及NULL的显式比较（例如上述&amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;子句中的那些）的操作不同，SQL中的这些集合运算可能产生表示不确定信息的结果。在Codd的1979年提案中（该提案基本被SQL92采纳），这种语义上的不一致被合理化了，他认为在集合操作中删除重复的操作发生在 &amp;quot;比检索操作求值中的相等验证更低的细节层次上&amp;quot;。&amp;lt;ref name=&amp;quot;Klein&amp;quot;/&amp;gt; 然而，计算机科学教授Ron van der Meyden认为“SQL标准的不一致意味着不可能将任何直观的逻辑语义归结为SQL中的null处理。”&amp;lt;ref name=&amp;quot;Meyden&amp;quot;&amp;gt;Ron van der Meyden, &amp;quot;[http://books.google.com/books?id=gF0b85IuqQwC&amp;amp;pg=PA344 Logical approaches to incomplete information: a survey] {{Wayback|url=http://books.google.com/books?id=gF0b85IuqQwC&amp;amp;pg=PA344 |date=20140702081315 }}&amp;quot; in Chomicki, Jan; Saake, Gunter (Eds.) &amp;#039;&amp;#039;Logics for Databases and Information Systems&amp;#039;&amp;#039;, Kluwer Academic Publishers ISBN 978-0-7923-8129-7, p. 344; [http://www.cse.unsw.edu.au/~meyden/research/indef-review.ps PS preprint] {{Wayback|url=http://www.cse.unsw.edu.au/~meyden/research/indef-review.ps |date=20160304035410 }} (note: page numbering differs in preprint from the published version)&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
另外，由于直接与空值比较会返回未知，因此SQL又提供了两个用于测试空值的语句：&amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;IS NOT NULL&amp;lt;/code&amp;gt;，前者用于判断是否为空，后者相反&amp;lt;ref name=&amp;quot;SQL2003-Part2-Sec87&amp;quot;&amp;gt;{{ cite book | last =ISO/IEC | title =ISO/IEC 9075-2:2003, &amp;quot;SQL/Foundation&amp;quot; | publisher =ISO/IEC | nopp =true }}&amp;lt;/ref&amp;gt;。 SQL不明确支持[[全称量化]]，必须将其定义为否定[[存在量化]]。&amp;lt;ref&amp;gt;M. Negri, G. Pelagatti, L. Sbattella (1989) &amp;#039;&amp;#039;[http://portal.acm.org/citation.cfm?id=63224.68822&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE Semantics and problems of universal quantification in SQL]{{Dead link}}&amp;#039;&amp;#039;.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Fratarcangeli, Claudio (1991). &amp;#039;&amp;#039;Technique for universal quantification in SQL&amp;#039;&amp;#039;. Retrieved from [http://portal.acm.org/citation.cfm?id=126482.126484&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=5934371&amp;amp;CFTOKEN=55309005 ACM.org.]&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;kawash&amp;quot;&amp;gt;Kawash, Jalal (2004) &amp;#039;&amp;#039;Complex quantification in Structured Query Language (SQL): a tutorial using relational calculus&amp;#039;&amp;#039; - Journal of Computers in Mathematics and Science Teaching ISSN 0731-9258 Volume 23, Issue 2, 2004 AACE Norfolk, Virginia. Retrieved from [http://www.thefreelibrary.com/Complex+quantification+in+Structured+Query+Language+(SQL):+a+tutorial...-a0119901477 Thefreelibrary.com] {{Wayback|url=http://www.thefreelibrary.com/Complex+quantification+in+Structured+Query+Language+(SQL):+a+tutorial...-a0119901477 |date=20101204092844 }}.&amp;lt;/ref&amp;gt; 还有“&amp;lt;行值表达式&amp;gt; IS DISTINCT FROM &amp;lt;行值表达式&amp;gt;”插入比较运算符，除非两个操作数相等或两者都为NULL，否则返回TRUE。同样，&amp;lt;code&amp;gt;IS NOT DISTINCT FROM&amp;lt;/code&amp;gt;定义为“NOT (&amp;lt;行值表达式&amp;gt; IS DISTINCT FROM &amp;lt;行值表达式&amp;gt;)”。[[SQL:1999]]还引入了&amp;lt;code&amp;gt;BOOLEAN&amp;lt;/code&amp;gt;类型变量，根据标准也可以是未知值。实践中一些数据库系统（例如[[PostgreSQL]]）会把 implement the BOOLEAN Unknown as a BOOLEAN NULL.&lt;br /&gt;
&lt;br /&gt;
== 数据操作 ==&lt;br /&gt;
&lt;br /&gt;
[[資料操縱語言]]（DML）是SQL用于添加、更新和删除数据的子集：&lt;br /&gt;
* &amp;lt;code&amp;gt;[[插入 (SQL)|INSERT]]&amp;lt;/code&amp;gt;添加行（正式名称为[[多元组|元组]]）到一个现有的表，例如：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO example&lt;br /&gt;
 (field1, field2, field3)&lt;br /&gt;
 VALUES&lt;br /&gt;
 (&amp;#039;test&amp;#039;, &amp;#039;N&amp;#039;, NULL);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[[Update|UPDATE]]&amp;lt;/code&amp;gt;修改现有的表中一些行，例如：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
UPDATE example&lt;br /&gt;
 SET field1 = &amp;#039;updated value&amp;#039;&lt;br /&gt;
 WHERE field2 = &amp;#039;N&amp;#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[[删除 (SQL)|DELETE]]&amp;lt;/code&amp;gt;从表中删除现有的行，如：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
DELETE FROM example&lt;br /&gt;
 WHERE field2 = &amp;#039;N&amp;#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[[Merge (SQL)|MERGE]]&amp;lt;/code&amp;gt;用来合并多个表的数据。它结合了&amp;lt;code&amp;gt;INSERT&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;UPDATE&amp;lt;/code&amp;gt;元素。它是在SQL:2003标准中定义的；在那之前，一些数据库也以不同的语法提供了相似的功能，又是叫做“{{le|upsert|upsert}}”。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 MERGE INTO table_name USING table_reference ON (condition)&lt;br /&gt;
 WHEN MATCHED THEN&lt;br /&gt;
 UPDATE SET column1 = value1 [, column2 = value2 ...]&lt;br /&gt;
 WHEN NOT MATCHED THEN&lt;br /&gt;
 INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 事务控制 ==&lt;br /&gt;
&lt;br /&gt;
如果数据库系统支持事务，那么可用以下语句：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;START TRANSACTION&amp;lt;/code&amp;gt;（或&amp;lt;code&amp;gt;BEGIN WORK&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;BEGIN TRANSACTION&amp;lt;/code&amp;gt;，取决于具体数据库系统的规定）表示[[数据库事务]]开始。&lt;br /&gt;
* &amp;lt;code&amp;gt;SAVE TRANSACTION&amp;lt;/code&amp;gt;（或&amp;lt;code&amp;gt;SAVEPOINT&amp;lt;/code&amp;gt;）命令会记录事务本身的状态，即保存点。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TABLE tbl_1(id int);&lt;br /&gt;
 INSERT INTO tbl_1(id) VALUES(1);&lt;br /&gt;
 INSERT INTO tbl_1(id) VALUES(2);&lt;br /&gt;
COMMIT;&lt;br /&gt;
 UPDATE tbl_1 SET id=200 WHERE id=1;&lt;br /&gt;
SAVEPOINT id_1upd;&lt;br /&gt;
 UPDATE tbl_1 SET id=1000 WHERE id=2;&lt;br /&gt;
ROLLBACK to id_1upd;&lt;br /&gt;
 SELECT id from tbl_1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[[Commit (SQL)|COMMIT]]&amp;lt;/code&amp;gt;会令事务过程中进行数据修改正式生效。&lt;br /&gt;
* &amp;lt;code&amp;gt;[[Rollback (SQL)|ROLLBACK]]&amp;lt;/code&amp;gt;会放弃上次&amp;lt;code&amp;gt;COMMIT&amp;lt;/code&amp;gt;或&amp;lt;code&amp;gt;ROLLBACK&amp;lt;/code&amp;gt;之后的修改，使数据恢复到前一状态。不过一旦&amp;lt;code&amp;gt;COMMIT&amp;lt;/code&amp;gt;语句结束，事务所产生的修改将无法回退。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;COMMIT&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;ROLLBACK&amp;lt;/code&amp;gt;会中止当前事务并释放锁。在没有&amp;lt;code&amp;gt;START TRANSACTION&amp;lt;/code&amp;gt;或类似语句的情况下，SQL的语义与实现有关的。&lt;br /&gt;
&lt;br /&gt;
下面例子展示了把一个账户的金额转移到另一个账户上面的过程。只要表示减少和增加的两个UPDATE语句中有一个失败，整个事务就会回退，更改也不会保存到数据库中。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
START TRANSACTION;&lt;br /&gt;
 UPDATE Account SET amount=amount-200 WHERE account_number=1234;&lt;br /&gt;
 UPDATE Account SET amount=amount+200 WHERE account_number=2345;&lt;br /&gt;
&lt;br /&gt;
IF ERRORS=0 COMMIT;&lt;br /&gt;
IF ERRORS&amp;lt;&amp;gt;0 ROLLBACK;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数据定义 ==&lt;br /&gt;
&lt;br /&gt;
[[資料定義語言]]（DDL）管理表和索引结构。DDL的最基本是&amp;lt;code&amp;gt;CREATE&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;ALTER&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;RENAME&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;DROP&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;TRUNCATE&amp;lt;/code&amp;gt;语句：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[[資料定義語言#CREATE|CREATE]]&amp;lt;/code&amp;gt;在数据库中创建一个对象（例如一张表），举例来说：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TABLE example(&lt;br /&gt;
 column1 INTEGER,&lt;br /&gt;
 column2 VARCHAR(50),&lt;br /&gt;
 column3 DATE NOT NULL,&lt;br /&gt;
 PRIMARY KEY (column1, column2)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[[資料定義語言#ALTER|ALTER]]&amp;lt;/code&amp;gt;以不同方式修改现有对象的结构，例如向现有的表或约束添加字段：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER TABLE example ADD column4 NUMBER(3) NOT NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[[Truncate|TRUNCATE]]&amp;lt;/code&amp;gt;以一种非常快速的方式删除表中的所有数据，删除表内的数据而不是表本身。这通常意味着后续的COMMIT操作, 即，它不能被回滚（与DELETE不同，数据不会为之后回滚而写入日志）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
TRUNCATE TABLE example;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[[資料定義語言#DROP|DROP]]&amp;lt;/code&amp;gt;删除数据库中的对象，通常无法挽回的，即，它不能被回滚，如：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
DROP TABLE example;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 数据类型 ==&lt;br /&gt;
&lt;br /&gt;
一张表中的每个字段都要定义该字段的类型。ANSI SQL包括下列数据类型：&amp;lt;ref name=&amp;quot;SQL1992&amp;quot;&amp;gt;{{cite journal | url = http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt | title = Information Technology: Database Language SQL | publisher = CMU | journal =  | access-date = 2017-10-28 | archive-date = 2006-06-21 | archive-url = https://web.archive.org/web/20060621035823/http://www.contrib.andrew.cmu.edu/%7Eshadow/sql/sql1992.txt | dead-url = yes }} (proposed revised text of DIS 9075).&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[[C. J. Date]] with [[Hugh Darwen]]: &amp;#039;&amp;#039;A Guide to the SQL standard : a users guide to the standard database language SQL, 4th ed.&amp;#039;&amp;#039;, Addison Wesley, USA 1997, {{ISBN|978-0-201-96426-4}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 字符串 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CHARACTER(&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)&amp;lt;/code&amp;gt;或&amp;lt;code&amp;gt;CHAR(&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)&amp;lt;/code&amp;gt;：宽度为&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;的定长字符串。如果内容长度不足，则以空格填充；&lt;br /&gt;
* &amp;lt;code&amp;gt;CHARACTER VARYING(&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)&amp;lt;/code&amp;gt;或&amp;lt;code&amp;gt;VARCHAR(&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)&amp;lt;/code&amp;gt;：最长为&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;个字符的可变宽度字符串；&lt;br /&gt;
* &amp;lt;code&amp;gt;NATIONAL CHARACTER(&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)&amp;lt;/code&amp;gt;或&amp;lt;code&amp;gt;NCHAR(&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)&amp;lt;/code&amp;gt;：支持国际字符集的固定宽度字符串；&lt;br /&gt;
* &amp;lt;code&amp;gt;NATIONAL CHARACTER VARYING(&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)&amp;lt;/code&amp;gt;或&amp;lt;code&amp;gt;NVARCHAR(&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)&amp;lt;/code&amp;gt;：可变宽度的&amp;lt;code&amp;gt;NCHAR&amp;lt;/code&amp;gt;字符串；&lt;br /&gt;
&lt;br /&gt;
=== Bit类型 ===&lt;br /&gt;
Bit是一种存储0或1的整数类型，一个Bit值需要一个字节。&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;BIT(&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)&amp;lt;/code&amp;gt;：&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;比特Bit类型&lt;br /&gt;
* &amp;lt;code&amp;gt;BIT VARYING(&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;)&amp;lt;/code&amp;gt;：最大长度为&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;的Bit类型&lt;br /&gt;
&lt;br /&gt;
=== 数值 ===&lt;br /&gt;
&lt;br /&gt;
* 整数：包括&amp;lt;code&amp;gt;SMALLINT&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;INTEGER&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;BIGINT&amp;lt;/code&amp;gt;，可表示的数据范围从小到大。&lt;br /&gt;
* 小数：包括&amp;lt;code&amp;gt;FLOAT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;REAL&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;DOUBLE PRECISION&amp;lt;/code&amp;gt;，可表示的数据范围从小到大。&lt;br /&gt;
* 定点数：包括&amp;lt;code&amp;gt;NUMERIC(长度, 精度)&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DECIMAL(长度, 精度)&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
定点数类型包含两个要素：长度、精度。长度表示数字的最大个数，包括小数点左面和右面的数字。精度是非负整数，精度为零意味着数值只能是整数。以123.45为例，它的长度为5，精度为2。&amp;lt;!-- For a decimal number with scale S, the exact numeric value is the integer value of the significant digits divided by 10&amp;lt;sup&amp;gt;S&amp;lt;/sup&amp;gt;. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SQL提供了除去小数部分、只保留整数部分的函数，叫做&amp;lt;code&amp;gt;TRUNC&amp;lt;/code&amp;gt;（Informix、DB2、PostgreSQL、Oracle和MySQL）或&amp;lt;code&amp;gt;ROUND&amp;lt;/code&amp;gt;（Informix、SQLite、Sybase、Oracle、PostgreSQL和Microsoft SQL Server）&amp;lt;ref name=&amp;quot;Jones 127&amp;quot;&amp;gt;Arie Jones, Ryan K. Stephens, Ronald R. Plew, Alex Kriegel, Robert F. Garrett (2005), &amp;#039;&amp;#039;SQL Functions Programmer&amp;#039;s Reference&amp;#039;&amp;#039;. Wiley, 127 pages.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 日期与时间 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;DATE&amp;lt;/code&amp;gt;：日期值（例如 &amp;lt;code&amp;gt;2011-05-03&amp;lt;/code&amp;gt;）&lt;br /&gt;
* &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt;：时间值（例如 &amp;lt;code&amp;gt;15:51:36&amp;lt;/code&amp;gt;）。时间值的粒度通常是100纳秒。&lt;br /&gt;
* &amp;lt;code&amp;gt;TIME WITH TIME ZONE&amp;lt;/code&amp;gt;或&amp;lt;code&amp;gt;TIMETZ&amp;lt;/code&amp;gt;：与&amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt;相同，但包含时区信息。&lt;br /&gt;
* &amp;lt;code&amp;gt;TIMESTAMP&amp;lt;/code&amp;gt;：[[时间戳]]，同时包含日期和时间（例如 &amp;lt;code&amp;gt;2011-05-03 15:51:36&amp;lt;/code&amp;gt;）。&lt;br /&gt;
* &amp;lt;code&amp;gt;TIMESTAMP WITH TIME ZONE&amp;lt;/code&amp;gt;或&amp;lt;code&amp;gt;TIMESTAMPTZ&amp;lt;/code&amp;gt;：与&amp;lt;code&amp;gt;TIMESTAMP&amp;lt;/code&amp;gt;相同，但包含时区信息。&lt;br /&gt;
* &amp;lt;code&amp;gt;INTERVAL&amp;lt;/code&amp;gt;&lt;br /&gt;
SQL提供了多个在日期时间类型和字符串类型之间互相转换的函数，例如&amp;lt;code&amp;gt;TO_DATE&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;TO_TIME&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;TO_TIMESTAMP&amp;lt;/code&amp;gt;等。可以通过&amp;lt;code&amp;gt;NOW&amp;lt;/code&amp;gt;函数来获取数据库服务器的时间。&lt;br /&gt;
&lt;br /&gt;
== 数据控制 ==&lt;br /&gt;
&lt;br /&gt;
[[資料控制語言]] (Data Control Language, DCL) 授权的用户访问和操作的数据。&lt;br /&gt;
它的两个主要的语句是：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GRANT&amp;lt;/code&amp;gt; 授权的一个或多个用户执行在一个对象上的一个操作或者一组操作。&lt;br /&gt;
* &amp;lt;code&amp;gt;REVOKE&amp;lt;/code&amp;gt; 消除了授权，其可以是默认的授权。&lt;br /&gt;
例如:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
GRANT SELECT, UPDATE&lt;br /&gt;
 ON example&lt;br /&gt;
 TO some_user, another_user;&lt;br /&gt;
&lt;br /&gt;
REVOKE SELECT, UPDATE&lt;br /&gt;
 ON example&lt;br /&gt;
 FROM some_user, another_user;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;br /&gt;
{{Reflist|30em}}&lt;br /&gt;
&lt;br /&gt;
{{-}}&lt;br /&gt;
{{SQL}}&lt;br /&gt;
{{查询语言}}&lt;br /&gt;
{{Database}}&lt;br /&gt;
{{ISO standards}}&lt;br /&gt;
&lt;br /&gt;
[[Category:SQL]]&lt;br /&gt;
[[Category:程序设计语言语法]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Cewbot</name></author>
	</entry>
</feed>