SqlServer_SQL基础语法总结

SQL教程
地址:http://www.w3school.com.cn/sql/index.asp;

一、SQL 基础教程
1、SQL(结构化查询语言)定义
(1)、SQL 是用于访问和处理数据库的标准的计算机语言。你可以使用 SQL 访问和处理数据系统中的数据,这类数据库包括:Oracle, Sybase, SQL Server, DB2, Access 等等。
(2)、SQL 指结构化查询语言,使我们有能力访问数据库,是一种ANSI(美国国家标准化组织)的标准计算机语言。

2、SQL 能做什么?
SQL 面向数据库执行查询,可从数据库取回数据,可在数据库中插入新的记录,可更新数据库中的数据,可从数据库删除记录, 可创建新数据库,可在数据库中创建新表,可在数据库中创建存储过程,可在数据库中创建视图,可以设置表、存储过程和视图的权限。

3、SQL不足
SQL是一种标准,不幸地是,存在着很多不同版本的 SQL 语言,但是为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的关键词(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。除了 SQL 标准之外,大部分 SQL 数据库程序都拥有它们自己的私有扩展!

4、如何在您的网站中使用SQL?
要创建发布数据库中数据的网站,您需要以下要素:
(1)RDBMS 数据库程序(比如 MS Access, SQL Server, MySQL);
(2)服务器端脚本语言(比如 PHP 或 ASP);
(3)SQL;
(4)HTML / CSS;

5、RDBMS
RDBMS指的是关系型数据库管理系统。
RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access;RDBMS 中的数据存储在被称为表(tables)的数据库对象中;表是相关的数据项的集合,它由列和行组成;

6、SQL语法
SQL对大小写不敏感;
(1)、SQL 语句后面的分号
某些数据库系统要求在每条 SQL 命令的末端使用分号。在我们的教程中不使用分号。分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的语句。如果您使用的是 MS Access 和 SQL Server 2000,则不必在每条 SQL 语句之后使用分号,不过某些数据库软件要求必须使用分号。
(2)、SQL DML(Data Manipulation Language) 和 DDL(data definition language)
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。
A、查询和更新指令构成SQL的DML部分:SELECT - 从数据库表中获取数据;UPDATE - 更新数据库表中的数据;DELETE - 从数据库表中删除数据;INSERT INTO - 向数据库表中插入数据;B、SQL的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
(3)、SQL 中最重要的 DDL 语句:
    CREATE DATABASE - 创建新数据库;
    ALTER DATABASE - 修改数据库;
    CREATE TABLE - 创建新表;
    ALTER TABLE - 变更(改变)数据库表;
    DROP TABLE - 删除表;
    CREATE INDEX - 创建索引(搜索键);
    DROP INDEX - 删除索引;

7、SQL SELECT 语句_SELECT语句用于从表中选取数据,结果被存储在一个结果表中(称为结果集)。
语法:SELECT 列名称 FROM 表名称;(多列用逗号","分隔,所有列用星号"*"表示)
外题:如何在结果集(result-set)中导航:由 SQL 查询程序获得的结果被存放在一个结果集中。大多数数据库软件系统都允许使用编程函数在结果集中进行导航,比如:Move-To-First-Record、Get-Record-Content、Move-To-Next-Record 等等。类似这些编程函数不在本教程讲解之列。如需学习通过函数调用访问数据的知识,请访问我们的 ADO 教程 和 PHP 教程。

8、SQL SELECT DISTINCT 语句
说明:在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 DISTINCT 用于返回唯一不同的值;
语法:SELECT DISTINCT 列名称 FROM 表名称;
结果:DISTINCT关键字指定的列不存在重复值;

9、SQL WHERE 子句
说明:WHERE 子句用于规定选择的标准;如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句;
语法:SELECT 列名称 FROM 表名称 WHERE 列 运算符 值;
运算符:=等于;<>不等于;>大于;<小于;>=大于等于;<=小于等于;BETWEEN在某个范围内;LIKE搜索某种模式;切记在某些版本的 SQL 中,操作符 <> 可以写为 !=;
引号:SQL使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。如果是日期时间值,access用#号,而sqlserver用引号;

10、SQL AND & OR 运算符
说明:AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤;
作用:AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来;如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录;如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录;
示例:我们也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式):SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William') AND LastName='Carter';

11、SQL ORDER BY 子句
说明:ORDER BY 语句用于对结果集进行排序;ORDER BY 语句默认按照升序对记录进行排序;如果您希望按照降序对记录进行排序,可以使用 DESC 关键字;
示例:以逆字母顺序显示公司名称,并以数字顺序显示顺序号:SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC;

12、SQL INSERT INTO 语句
说明:INSERT INTO 语句用于向表格中插入新的行;
语法:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....);(如果不指定列,默认为所有列)

13、SQL UPDATE 语句
说明:Update 语句用于修改表中的数据;
语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;
示例:UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson';

14、SQL DELETE 语句
说明:DELETE 语句用于删除表中的行;
语法:DELETE FROM 表名称 WHERE 列名称 = 值;
示例:删除所有数据行:DELETE FROM table_name或者DELETE * FROM table_name;


二、SQL 高级教程
1、SQL TOP 子句
说明:TOP 子句用于规定要返回的记录的数目;对于拥有数千条记录的大型表来说,TOP 子句是非常有用的;切记:并非所有的数据库系统都支持 TOP 子句;
语法:SELECT TOP number|percent column_name(s) FROM table_name;
MySQL语法:SELECT column_name(s) FROM table_name LIMIT number;
Oracle语法:SELECT column_name(s) FROM table_name WHERE ROWNUM <= number;
示例:选取头两条记录:SELECT TOP 2 * FROM Persons;选取 50% 的记录:SELECT TOP 50 PERCENT * FROM Persons;

2、SQL LIKE 操作符
说明:LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式;
语法:SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;(like前边加上not则表示不包含)
模式:"%" 可用于定义通配符(模式中缺少的字母);
示例:以 "N" 开始:SELECT * FROM Persons WHERE City LIKE 'N%';以 "g" 结尾:SELECT * FROM Persons WHERE City LIKE '%g';包含 "lon":SELECT * FROM Persons
WHERE City LIKE '%lon%';不包含 "lon":SELECT * FROM Persons WHERE City NOT LIKE '%lon%'

3、SQL 通配符
说明:在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符;SQL 通配符必须与 LIKE 运算符一起使用;%替代一个或多个字符;_仅替代一个字符;[charlist]字符列中的任何单一字符;[^charlist]或者[!charlist]不在字符列中的任何单一字符;
示例:以 "A" 或 "L" 或 "N" 开头:SELECT * FROM Persons WHERE City LIKE '[ALN]%';

4、SQL IN 操作符
说明:IN 操作符允许我们在 WHERE 子句中规定多个值;
语法:SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...);

5、SQL BETWEEN 操作符
说明:BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围;
(1)与and使用:操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期;SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;切记:不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,但不包括 "Adams" 和 "Carter" ;某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter" 。所以,请检查你的数据库是如何处理 BETWEEN....AND 操作符的!
(2)与not使用:不包含;SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter';

6、SQL Alias(别名)
说明:通过使用 SQL,可以为列名称和表名称指定别名(Alias),使用别名使查询程序更易阅读和书写;
(1)、表别名:SELECT column_name(s) FROM table_name AS alias_name;
(2)、列别名:SELECT column_name AS alias_name FROM table_name;
示例:SELECT po.OrderID, p.LastName, p.FirstName FROM Persons AS p, Product_Orders AS po WHERE p.LastName='Adams' AND p.FirstName='John';

7、SQL JOIN
说明:SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据;
Join和Key:有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join;数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起;
引用两个表:(1)、通过主键:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P = Orders.Id_P;(2)、通过join:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P ORDER BY Persons.LastName;
join类型:除了我们在上面的例子中使用的 INNER JOIN(内连接),我们还可以使用其他几种连接;JOIN: 如果表中有至少一个匹配,则返回行;LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行;RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行;FULL JOIN: 只要其中一个表中存在匹配,就返回行;

8、SQL INNER JOIN (内连接)关键字
说明:在表中存在至少一个匹配时,INNER JOIN 关键字返回行;LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行;
语法:SELECT column_name(s) FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name;切记:INNER JOIN 与 JOIN 是相同的;

9、SQL LEFT JOIN 关键字
说明:LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行;
语法:SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name;切记:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN;

10、SQL RIGHT JOIN 关键字
说明:RIGHT JOIN 关键字会从右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行;
语法:SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name;切记:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN;

11、SQL FULL JOIN 关键字
说明:只要其中某个表存在匹配,FULL JOIN 关键字就会返回行;
语法:SELECT column_name(s) FROM table_name1 FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name;
切记:FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出;

12、SQL UNION 和 UNION ALL 操作符
(1)、SQL UNION 操作符
说明:UNION 操作符用于合并两个或多个 SELECT 语句的结果集;请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同;
语法:SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2;切记:UNION 操作符默认选取不同的值。如果允许重复的值,请使用 UNION ALL;
(2)、UNION ALL语法:SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2;切记:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名;

13、SQL SELECT INTO 语句
说明:SQL SELECT INTO 语句可用于创建表的备份复件;SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中;SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档;
语法:A把所有的列插入新表:SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename;B或者只把希望的列插入新表:SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename;
示例_制作备份复件:A_制作 "Persons" 表的备份复件:SELECT * INTO Persons_backup FROM Persons;B_IN 子句可用于向另一个数据库中拷贝表:SELECT * INTO Persons IN 'Backup.mdb' FROM Persons;

14、SQL CREATE DATABASE 语句
说明:CREATE DATABASE 用于创建数据库;
语法:CREATE DATABASE database_name;切记:可以通过 CREATE TABLE 来添加数据库表;

15、SQL CREATE TABLE 语句
说明:CREATE TABLE 语句用于创建数据库中的表;
语法:CREATE TABLE 表名称(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
数据类型:数据类型(data_type)规定了列可容纳何种数据类型;integer(size)、int(size)、smallint(size)、tinyint(size)仅容纳整数,在括号内规定数字的最大位数;decimal(size,d)、numeric(size,d)容纳带有小数的数字,"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数;char(size)容纳固定长度的字符串(可容纳字母、数字以及特殊字符),
在括号中规定字符串的长度;varchar(size)容纳可变长度的字符串(可容纳字母、数字以及特殊的字符),在括号中规定字符串的最大长度;date(yyyymmdd)容纳日期;
示例_创建名为 "Person" 的表:
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
切记:可使用 INSERT INTO 语句向空表写入数据;

16、SQL 约束 (Constraints)
说明:约束用于限制加入表的数据的类型,可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句);
类型:NOT NULL,UNIQUE,PRIMARY KEY,FOREIGN KEY,CHECK,DEFAULT;

17、SQL NOT NULL 约束
说明:NOT NULL 约束强制列不接受 NULL 值;NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录;
示例:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

18、SQL UNIQUE 约束
说明:UNIQUE 约束唯一标识数据库表中的每条记录;UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证;PRIMARY KEY 拥有自动定义的 UNIQUE 约束;请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束;
示例_创建主键约束:
(1)MySQL:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)
(2)、SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
(3)MySQL / SQL Server / Oracle / MS Access(如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束:):
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)
示例_修改表约束:
(1)、MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD UNIQUE (Id_P);
(2)、如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束:
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName);
示例_撤销 UNIQUE 约束:MySQL:ALTER TABLE Persons DROP INDEX uc_PersonID;SQL Server / Oracle / MS Access:ALTER TABLE Persons DROP CONSTRAINT uc_PersonID;

19、SQL PRIMARY KEY 约束
说明:PRIMARY KEY 约束唯一标识数据库表中的每条记录;主键必须包含唯一的值;主键列不能包含 NULL 值;每个表都应该有一个主键,并且每个表只能有一个主键;
(1)、创建表时添加主键
>MySQL;
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id_P)
)
>SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
>如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
)
(2)修改表时添加主键,切记:如果您使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时);
>MySQL / SQL Server / Oracle / MS Access:ALTER TABLE Persons ADD PRIMARY KEY (Id_P);
>需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束:MySQL / SQL Server / Oracle / MS Access:ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName);
(3)、撤销 PRIMARY KEY 约束:
MySQL:ALTER TABLE Persons DROP PRIMARY KEY;
SQL Server / Oracle / MS Access:ALTER TABLE Persons DROP CONSTRAINT pk_PersonID;

20、SQL FOREIGN KEY (外键)约束
说明:一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY;FOREIGN KEY 约束用于预防破坏表之间连接的动作;FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一;
(1)、创建表时添加外键约束
>MySQL:
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)
>SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)
>需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
)
(2)、修改表时添加外键约束_在 "Orders" 表已存在的情况下为 "Id_P" 列创建 FOREIGN KEY 约束;
>MySQL / SQL Server / Oracle / MS Access:ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P);
>需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束:
MySQL / SQL Server / Oracle / MS Access:ALTER TABLE Orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P);
(3)、撤销 FOREIGN KEY 约束:
>MySQL:ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders;
>SQL Server / Oracle / MS Access:ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders;

21、SQL CHECK 约束
说明:CHECK 约束用于限制列中的值的范围;如果对单个列定义 CHECK 约束,那么该列只允许特定的值;如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制;
(1)、创建表时添加检查约束
>CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数:
My SQL:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
>需要命名 CHECK 约束,以及为多个列定义 CHECK 约束:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)
(2)、修改表时添加检查约束
>MySQL / SQL Server / Oracle / MS Access:ALTER TABLE Persons ADD CHECK (Id_P>0);
>需要命名 CHECK 约束,以及为多个列定义 CHECK 约束:
MySQL / SQL Server / Oracle / MS Access:ALTER TABLE Persons ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes');
(3)、撤销检查约束
SQL Server / Oracle / MS Access:ALTER TABLE Persons DROP CONSTRAINT chk_Person;
MySQL:
ALTER TABLE Persons DROP CHECK chk_Person;

22、SQL DEFAULT 约束
说明:DEFAULT 约束用于向列中插入默认值;如果没有规定其他的值,那么会将默认值添加到所有的新记录;
(1)、创建表时添加默认值约束
>My SQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
>使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值,比如系统日期等:
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
OrderDate date DEFAULT GETDATE()

)
(2)、修改表时添加默认值约束
>MySQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
>SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'SANDNES'
(3)、撤销默认值约束
>MySQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT
>SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT

23、SQL CREATE INDEX (索引)语句
说明:CREATE INDEX 语句用于在表中创建索引;在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据;
功效:您可以在表中创建索引,以便更加快速高效地查询数据;用户无法看到索引,它们只能被用来加速搜索/查询;切记:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引;
CREATE INDEX 语法:CREATE INDEX index_name ON table_name (column_name);
CREATE UNIQUE INDEX 语法:表上创建一个唯一的索引;唯一的索引意味着两个行不能拥有相同的索引值;CREATE UNIQUE INDEX index_name ON table_name (column_name);
示例:CREATE INDEX PersonIndex ON Person (LastName DESC);

24、SQL 撤销索引、表以及数据库
说明:通过使用 DROP 语句,可以轻松地删除索引、表和数据库;
(1)、SQL DROP INDEX 语句:我们可以使用 DROP INDEX 命令删除表格中的索引;
>用于 Microsoft SQLJet (以及 Microsoft Access) 的语法:
DROP INDEX index_name ON table_name;
>用于 MS SQL Server 的语法:
DROP INDEX table_name.index_name;
>用于 IBM DB2 和 Oracle 语法:
DROP INDEX index_name;
>用于 MySQL 的语法:
ALTER TABLE table_name DROP INDEX index_name;
(2)、SQL DROP TABLE 语句:DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除);
DROP TABLE 表名称;
(3)、SQL DROP DATABASE 语句:DROP DATABASE 语句用于删除数据库;
DROP DATABASE 数据库名称;
(4)、SQL TRUNCATE TABLE 语句:使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据);
TRUNCATE TABLE 表名称;

25、SQL ALTER TABLE 语句
说明:ALTER TABLE 语句用于在已有的表中添加、修改或删除列;
语法:
>如需在表中添加列,请使用下列语法:
ALTER TABLE table_name
ADD column_name datatype
>要删除表中的列,请使用下列语法:
ALTER TABLE table_name 
DROP COLUMN column_name
切记:某些数据库系统不允许这种在数据库表中删除列的方式 (DROP COLUMN column_name);
>要改变表中列的数据类型,请使用下列语法:
ALTER TABLE table_name
ALTER COLUMN column_name datatype

26、SQL AUTO INCREMENT 字段
说明:Auto-increment 会在新记录插入表中时生成一个唯一的数字;我们通常希望在每次插入新记录时,自动地创建主键字段的值;我们可以在表中创建一个 auto-increment 字段;
语法:
1>MySql:MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务;默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1;要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:ALTER TABLE Persons AUTO_INCREMENT=100;
CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
2>SQL Server:MS SQL 使用 IDENTITY 关键字来执行 auto-increment 任务;默认地,IDENTITY 的开始值是 1,每条新记录递增 1;要规定 "P_Id" 列以 20 起始且递增 10,请把 identity 改为 IDENTITY(20,10);
CREATE TABLE Persons
(
P_Id int PRIMARY KEY IDENTITY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
3>Access:MS Access 使用 AUTOINCREMENT 关键字来执行 auto-increment 任务;默认地,AUTOINCREMENT 的开始值是 1,每条新记录递增 1;要规定 "P_Id" 列以 20 起始且递增 10,请把 autoincrement 改为 AUTOINCREMENT(20,10);
CREATE TABLE Persons
(
P_Id int PRIMARY KEY AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
4>Oracle:您必须通过 sequence 对象创建 auto-increment 字段(该对象生成数字序列);
请使用下面的 CREATE SEQUENCE 语法:
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
上面的代码创建名为 seq_person 的序列对象,它以 1 起始且以 1 递增。该对象缓存 10 个值以提高性能。CACHE 选项规定了为了提高访问速度要存储多少个序列值;
要在 "Persons" 表中插入新记录,我们必须使用 nextval 函数(该函数从 seq_person 序列中取回下一个值):
INSERT INTO Persons (P_Id,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')
上面的 SQL 语句会在 "Persons" 表中插入一条新记录。"P_Id" 的赋值是来自 seq_person 序列的下一个数字。"FirstName" 会被设置为 "Bill","LastName" 列会被设置为 "Gates"。

27、SQL VIEW(视图)
说明:视图是可视化的表;在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表;视图包含行和列,就像一个真实的表;视图中的字段就是来自一个或多个数据库中的真实的表中的字段;我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表;切记:数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响;
(1)、创建视图
>>SQL CREATE VIEW 语句
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
注释_视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据;
>>创建视图示例
提示_可以从某个查询内部、某个存储过程内部,或者从另一个视图内部来使用视图。通过向视图添加函数、join 等等,我们可以向用户精确地提交我们希望提交的数据;
CREATE VIEW [CurrentProductList] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No
视图查询_SELECT * FROM [CurrentProductList];
>>选取 Products 表中所有单位价格高于平均单位价格的产品:
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products) 
视图查询_SELECT * FROM [Products Above Average Price];
(2)、更新视图
语法_SQL CREATE OR REPLACE VIEW Syntax
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
示例_向 "Current Product List" 视图添加 "Category" 列:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No
(3)、撤销(删除)视图:可以通过 DROP VIEW 命令来删除视图;
SQL DROP VIEW Syntax
DROP VIEW view_name

28、SQL Date 函数
背景:当我们处理日期时,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配;只要数据包含的只是日期部分,运行查询就不会出问题。但是,如果涉及时间,情况就有点复杂了;
日期处理函数_MySQL Date 函数:NOW()返回当前的日期和时间;CURDATE()返回当前的日期;CURTIME()返回当前的时间;DATE()提取日期或日期/时间表达式的日期部分;EXTRACT()返回日期/时间的单独部分;DATE_ADD()给日期添加指定的时间间隔;DATE_SUB()从日期减去指定的时间间隔;DATEDIFF()返回两个日期之间的天数;DATE_FORMAT()用不同的格式显示日期/时间;
日期处理函数_SQL Server Date 函数:GETDATE()返回当前日期和时间;DATEPART()返回日期/时间的单独部分;DATEADD()在日期中添加或减去指定的时间间隔;DATEDIFF()返回两个日期之间的时间;CONVERT()用不同的格式显示日期/时间;
SQL Date 数据类型:MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:DATE - 格式YYYY-MM-DD;DATETIME - 格式: YYYY-MM-DD HH:MM:SS;TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS;YEAR - 格式 YYYY 或 YY;SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:DATE - 格式 YYYY-MM-DD;DATETIME - 格式: YYYY-MM-DD HH:MM:SS;SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS;TIMESTAMP - 格式: 唯一的数字;

29、SQL NULL 值
说明:NULL 值是遗漏的未知数据;默认地,表的列可以存放 NULL 值;
SQL NULL值:如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存;NULL 值的处理方式与其他值不同;NULL 用作未知的或不适用的值的占位符;切记:无法比较 NULL 和 0,它们是不等价的;
SQL的NULL值处理:必须使用 IS NULL 和 IS NOT NULL 操作符来判断是否为null;
SQL IS NULL:仅仅选取在 "Address" 列中带有 NULL 值的记录:SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NULL;
SQL IS NOT NULL:选取在 "Address" 列中不带有 NULL 值的记录:SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NOT NULL;

30、SQL NULL 函数
(1)、ISNULL() 函数:微软的 ISNULL() 函数用于规定如何处理 NULL 值;NVL(), IFNULL() 和 COALESCE() 函数也可以达到相同的结果;
示例:如果列值为NULL,则让它为 0;
SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder) FROM Products;如果有 "UnitsOnOrder" 值是 NULL,那么结果是 NULL;
>SQL Server / MS Access:SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0)) FROM Products;
(2)、NVL()函数
>Oracle 没有 ISNULL() 函数。不过,我们可以使用 NVL() 函数达到相同的结果:SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0)) FROM Products;
(3)、IFNULL() 和 COALESCE() 函数
>MySQL也拥有类似ISNULL()的函数不过它的工作方式与微软的 ISNULL()函数有点不同;在 MySQL 中,我们可以使用 IFNULL() 函数,就像这样:SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0)) FROM Products;或者我们可以使用 COALESCE() 函数,就像这样:SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
 FROM Products;

31、SQL 数据类型
说明:Microsoft Access、MySQL 以及 SQL Server 所使用的数据类型和范围;
(1)、Microsoft Access 数据类型:Text用于文本或文本与数字的组合,最多 255 个字符;Memo,Memo 用于更大数量的文本,最多存储 65,536 个字符,无法对 memo 字段进行排序,不过它们是可搜索的;Byte允许 0 到 255 的数字,1 字节;Integer,允许介于 -32,768 到 32,767 之间的数字,2 字节;Long允许介于-2,147,483,648 与 2,147,483,647 之间的全部数字,4字节;Single单精度浮点,处理大多数小数,4 字节;Double双精度浮点。处理大多数小数,8 字节;Currency,用于货币,支持 15 位的元,外加 4 位小数,您可以选择使用哪个国家的货币;8 字节;AutoNumber,AutoNumber字段自动为每条记录分配数字,通常从 1 开始,4 字节;Date/Time用于日期和时间8字节;Yes/No逻辑字段,可以显示为 Yes/No、True/False 或 On/Off,在代码中,使用常量 True 和 False (等价于 1 和 0),Yes/No字段中不允许Null值,1 比特;Ole Object可以存储图片、音频、视频或其他,BLOBs(Binary Large OBjects)最多1GB;Hyperlink包含指向其他文件的链接,包括网页;Lookup Wizard允许你创建一个可从下列列表中进行选择的选项列表,4 字节;
(2)、MySQL 数据类型:在 MySQL 中,有三种主要的类型:文本、数字和日期/时间类型;A、Text 类型:CHAR(size)保存固定长度的字符串(可包含字母、数字以及特殊字符),在括号中指定字符串的长度,最多 255 个字符;VARCHAR(size)保存可变长度的字符串(可包含字母、数字以及特殊字符),在括号中指定字符串的最大长度,最多 255 个字符,如果值的长度大于 255,则被转换为 TEXT 类型;TINYTEXT存放最大长度为 255 个字符的字符串;TEXT存放最大长度为 65,535 个字符的字符串;BLOB用于 BLOBs (Binary Large OBjects),存放最多 65,535 字节的数据;MEDIUMTEXT存放最大长度为 16,777,215个字符的字符串;MEDIUMBLOB用于 BLOBs (Binary Large OBjects),存放最多 16,777,215 字节的数据;LONGTEXT存放最大长度为 4,294,967,295 个字符的字符串;LONGBLOB用于 BLOBs (Binary Large OBjects),存放最多 4,294,967,295 字节的数据;ENUM(x,y,z,etc.)允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值,如果列表中不存在插入的值,则插入空值,这些值是按照你输入的顺序存储的,可以按照此格式输入可能的值:ENUM('X','Y','Z');SET与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值;B、Number 类型:TINYINT(size),-128 到 127 常规,0 到 255 无符号*,在括号中规定最大位数;SMALLINT(size),-32768 到767 常规。0 到 65535 无符号*,在括号中规定最大位数;MEDIUMINT(size),-8388608 到 8388607 普通,0 to 16777215 无符号*,在括号中规定最大位数;INT(size),-2147483648 到2147483647 常规,0 到 4294967295 无符号*,在括号中规定最大位数;BIGINT(size),-9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*,在括号中规定最大位数;FLOAT(size,d)带有浮动小数点的小数字,在括号中规定最大位数,在 d 参数中规定小数点右侧的最大位数;DOUBLE(size,d)带有浮动小数点的大数字,在括号中规定最大位数,在 d 参数中规定小数点右侧的最大位数;DECIMAL(size,d)作为字符串存储的 DOUBLE 类型,允许固定的小数点;C、Date 类型:DATE()日期,格式:YYYY-MM-DD,支持的范围是从 '1000-01-01' 到 '9999-12-31';DATETIME()日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS,支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59';TIMESTAMP()时间戳,TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储,格式:YYYY-MM-DD HH:MM:SS,支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC;TIME()时间,格式:HH:MM:SS,支持的范围是从 '-838:59:59' 到 '838:59:59';YEAR()2 位或 4 位格式的年,4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069;切记,即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD;
(3)、SQL Server 数据类型:A、Character 字符串:char(n)         固定长度的字符串。最多 8,000 个字符;varchar(n)可变长度的字符串。最多 8,000 个字符;varchar(max)可变长度的字符串,最多 1,073,741,824 个字符;text可变长度的字符串,最多 2GB 字符数据;B、Unicode 字符串:nchar(n)固定长度的 Unicode 数据。最多 4,000 个字符;nvarchar(n)可变长度的 Unicode 数据,最多 4,000 个字符;nvarchar(max)         可变长度的 Unicode 数据。最多 536,870,912 个字符;ntext可变长度的 Unicode 数据。最多 2GB 字符数据;C、Binary 类型:bit 允许 0、1 或 NULL;binary(n)         固定长度的二进制数据。最多 8,000 字节;varbinary(n)可变长度的二进制数据。最多 8,000 字节;varbinary(max)可变长度的二进制数据,最多 2GB 字节;image可变长度的二进制数据。最多 2GB;D、Number 类型:tinyint允许从 0 到 255 的所有数字,1 字节;smallint,允许从 -32,768 到 32,767 的所有数字,2 字节;int允许从 -2,147,483,648 到 2,147,483,647 的所有数字,4 字节;bigint允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字,8 字节;decimal(p,s)固定精度和比例的数字,允许从 -10^38 +1 到 10^38 -1 之间的数字,p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值,默认是 18,s 参数指示小数点右侧存储的最大位数,s 必须是 0 到 p 之间的值,默认是 0,5-17 字节;numeric(p,s)固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字,p 参数指示可以存储的最大位数(小数点左侧和右侧),p 必须是 1 到 38 之间的值,默认是 18,s 参数指示小数点右侧存储的最大位数,s 必须是 0 到 p 之间的值,默认是 0,5-17 字节;smallmoney介于 -214,748.3648 和 214,748.3647 之间的货币数据,4 字节;money介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据,8 字节;float(n)从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据,参数 n 指示该字段保存 4 字节还是 8 字节,float(24) 保存 4 字节,而 float(53) 保存 8 字节,n 的默认值是 53,4 或 8 字节;real从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据,4 字节;E、Date 类型:datetime从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒,8 bytes;datetime2从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒,6-8 bytes;smalldatetime从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟,4 bytes;date仅存储日期,从 0001 年 1 月 1 日 到 9999 年 12 月 31 日,3 bytes;time仅存储时间,精度为 100 纳秒,3-5 bytes;datetimeoffset与datetime2 相同,外加时区偏移,8-10 bytes;timestamp存储唯一的数字,每当创建或修改某行时,该数字会更新,timestamp 基于内部时钟,不对应真实时间,每个表只能有一个 timestamp 变量;F、其他数据类型:sql_variant存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp;uniqueidentifier存储全局标识符 (GUID);xml存储 XML 格式化数据,最多 2GB;cursor存储对用于数据库操作的指针的引用;table存储结果集,供稍后处理;

32、SQL 服务器 - RDBMS
说明:现代的 SQL 服务器构建在 RDBMS 之上;DBMS - 数据库管理系统(Database Management System),数据库管理系统是一种可以访问数据库中数据的计算机程序;DBMS 使我们有能力在数据库中提取、修改或者存贮信息;不同的 DBMS 提供不同的函数供查询、提交以及修改数据;
RDBMS - 关系数据库管理系统(Relational Database Management System),关系数据库管理系统 (RDBMS) 也是一种数据库管理系统,其数据库是根据数据间的关系来组织和访问数据的;20 世纪 70 年代初,IBM 公司发明了 RDBMS;RDBMS 是 SQL 的基础,也是所有现代数据库系统诸如 Oracle、SQL Server、IBM DB2、Sybase、MySQL 以及 Microsoft Access 的基础;

33、SQL 函数
说明:SQL 拥有很多可用于计数和计算的内建函数;
语法:内建 SQL 函数的语法是,SELECT function(列) FROM 表;
类型:在 SQL 中,基本的函数类型和种类有若干种,函数的基本类型是Aggregate 函数、Scalar 函数;
(1)、合计函数(Aggregate functions):Aggregate 函数的操作面向一系列的值,并返回一个单一的值;如果在 SELECT 语句的项目列表中的众多其它表达式中使用 SELECT 语句,则这个 SELECT 必须使用 GROUP BY 语句;
A、MS Access 合计函数:AVG(column)返回某列的平均值;COUNT(column)返回某列的行数(不包括 NULL 值);COUNT(*)返回被选行数;FIRST(column)返回在指定的域中第一个记录的值;LAST(column)返回在指定的域中最后一个记录的值;MAX(column)返回某列的最高值;MIN(column)返回某列的最低值;STDEV(column);STDEVP(column);SUM(column)返回某列的总和;VAR(column);VARP(column);
B、 SQL Server合计函数:AVG(column)返回某列的平均值;BINARY_CHECKSUM;CHECKSUM;CHECKSUM_AGG;COUNT(column)返回某列的行数(不包括NULL值);COUNT(*) 返回被选行数;COUNT(DISTINCT column)返回相异结果的数目;FIRST(column)返回在指定的域中第一个记录的值(SQLServer2000 不支持);LAST(column)返回在指定的域中最后一个记录的值(SQLServer2000 不支持);MAX(column)返回某列的最高值;MIN(column)返回某列的最低值;STDEV(column);STDEVP(column);SUM(column)返回某列的总和;VAR(column);VARP(column);
(2)、Scalar 函数,Scalar 函数的操作面向某个单一的值,并返回基于输入值的一个单一的值;
A、MS Access Scalar 函数:UCASE(c)将某个域转换为大写;LCASE(c)将某个域转换为小写;MID(c,start[,end])从某个文本域提取字符;LEN(c)         返回某个文本域的长度;INSTR(c,char)返回在某个文本域中指定字符的数值位置;LEFT(c,number_of_char)返回某个被请求的文本域的左侧部分;RIGHT(c,number_of_char)返回某个被请求的文本域的右侧部分;ROUND(c,decimals)对某个数值域进行指定小数位数的四舍五入;MOD(x,y)返回除法操作的余数;NOW()返回当前的系统日期;FORMAT(c,format)改变某个域的显示方式;DATEDIFF(d,date1,date2)用于执行日期计算;

34、SQL AVG 函数
说明:AVG 函数返回数值列的平均值。NULL 值不包括在计算中;
语法:SELECT AVG(column_name) FROM table_name;
示例:SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders);

35、SQL COUNT() 函数
说明:COUNT() 函数返回匹配指定条件的行数;
语法:COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):SELECT COUNT(column_name) FROM table_name;COUNT(*) 函数返回表中的记录数:SELECT COUNT(*) FROM table_name;COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:SELECT COUNT(DISTINCT column_name) FROM table_name;注意,COUNT(DISTINCT) 适用于 ORACLE 和 Microsoft SQL Server,但是无法用于 Microsoft Access;

36、SQL FIRST() 函数
说明:FIRST() 函数返回指定的字段中第一个记录的值;可使用 ORDER BY 语句对记录进行排序;
语法:SELECT FIRST(column_name) FROM table_name;

37、SQL LAST() 函数
说明:LAST() 函数返回指定的字段中最后一个记录的值;可使用 ORDER BY 语句对记录进行排序;
语法:SELECT LAST(column_name) FROM table_name;

38、SQL MAX() 函数
说明:MAX 函数返回一列中的最大值。NULL 值不包括在计算中;
语法:SELECT MAX(column_name) FROM table_name;MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值;

39、SQL MIN() 函数
说明:MIN 函数返回一列中的最小值。NULL 值不包括在计算中;
语法:SELECT MIN(column_name) FROM table_name;MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值;

40、SQL SUM() 函数
说明:SUM 函数返回数值列的总数(总额);
语法:SELECT SUM(column_name) FROM table_name;

41、SQL GROUP BY 语句
说明:合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句;
语法:SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

42、SQL HAVING 子句
说明:在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用;
语法:SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
示例_查找订单总金额少于 2000 的客户:
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000
示例_查找客户 "Bush" 或 "Adams" 拥有超过 1500 的订单总金额:
SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Bush' OR Customer='Adams'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500

43、SQL UCASE() 函数
说明:UCASE 函数把字段的值转换为大写;
语法:SELECT UCASE(column_name) FROM table_name;

44、SQL LCASE() 函数
说明:LCASE 函数把字段的值转换为小写;
语法:SELECT LCASE(column_name) FROM table_name;

45、SQL MID() 函数
说明:MID 函数用于从文本字段中提取字符;
语法:SELECT MID(column_name,start[,length]) FROM table_name;
参数:column_name必需,要提取字符的字段;start必需,规定开始位置(起始值是 1);length可选,要返回的字符数,如果省略,则 MID() 函数返回剩余文本;

46、SQL LEN() 函数
说明:LEN 函数返回文本字段中值的长度;
语法:SELECT LEN(column_name) FROM table_name;

47、SQL ROUND() 函数
说明:ROUND 函数用于把数值字段舍入为指定的小数位数;
语法:SELECT ROUND(column_name,decimals) FROM table_name;
参数:column_name必需,要舍入的字段;decimals必需,规定要返回的小数位数;

48、SQL NOW() 函数
说明:NOW 函数返回当前的日期和时间;注意,如果您在使用 Sql Server 数据库,请使用 getdate() 函数来获得当前的日期时间;
语法:SELECT NOW() FROM table_name;

49、SQL FORMAT() 函数
说明:FORMAT 函数用于对字段的显示进行格式化;
语法:SELECT FORMAT(column_name,format) FROM table_name;
参数:column_name必需,要格式化的字段;format必需,规定格式;

50、SQL 快速参考
(1)、AND / OR
SELECT column_name(s) FROM table_name WHERE condition AND|OR condition;
(2)、ALTER TABLE (add column)
ALTER TABLE table_name ADD column_name datatype;
(3)、ALTER TABLE (drop column)
ALTER TABLE table_name DROP COLUMN column_name;
(4)、AS (alias for column)
SELECT column_name AS column_alias FROM table_name;
(5)、AS (alias for table)
SELECT column_name FROM table_name  AS table_alias;
(6)、BETWEEN
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;
(7)、CREATE DATABASE
CREATE DATABASE database_name;
(8)、CREATE INDEX
CREATE INDEX index_name ON table_name (column_name);
(9)、CREATE TABLE
CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
.......
)
(10)、CREATE UNIQUE INDEX
CREATE UNIQUE INDEX index_name ON table_name (column_name);
(11)、CREATE VIEW
CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition;
(12)、DELETE FROM DELETE FROM table_name (Note: Deletes the entire table!!);or DELETE FROM table_name WHERE condition;
(13)、DROP DATABASE
DROP DATABASE database_name;
(14)、DROP INDEX
DROP INDEX table_name.index_name;
(15)、DROP TABLE
DROP TABLE table_name;
(16)、GROUP BY
SELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1;
(17)、HAVING
SELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1 HAVING SUM(column_name2) condition value;
(18)、IN
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,..);
(19)、INSERT INTO INSERT INTO table_name VALUES (value1, value2,....);or INSERT INTO table_name
(column_name1, column_name2,...) VALUES (value1, value2,....);
(20)、LIKE
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;
(21)、ORDER BY
SELECT column_name(s) FROM table_name ORDER BY column_name [ASC|DESC];
(22)、SELECT
SELECT column_name(s) FROM table_name;
(23)、SELECT *
SELECT * FROM table_name;
(24)、SELECT DISTINCT
SELECT DISTINCT column_name(s) FROM table_name;
(25)、SELECT INTO(used to create backup copies of tables)
SELECT * INTO new_table_name FROM original_table_name;or SELECT column_name(s) INTO new_table_name FROM original_table_name;
(26)、TRUNCATE TABLE (deletes only the data inside the table)
TRUNCATE TABLE table_name;
(27)、UPDATE
UPDATE table_name SET column_name=new_value [, column_name=new_value] WHERE column_name=some_value;
(28)、WHERE
SELECT column_name(s) FROM table_name WHERE condition;

后续:ADO学习,ADO 是一种从网站访问数据库中数据的编程接口;ADO 使用 SQL 来查询数据库中的数据;

你可能感兴趣的:(SqlServer)