sql总结

Sql基本语法
一数据库
1创建新数据库
Create database database_name;
2删除数据库
Drop database database_name;
3选择数据库
Use database
二表的操作
1创建数据表
Create table table_name(
属性名 数据类型,
属性名 数据类型,
.
.
属性名 数据类型
);
提示:在字符串类型存储汉字的过程中假如出现,在查询过程中汉字结果为???,解决办法,在建表的时候将编码改为Chinese_PRC_CI_AS.未修改前的编码是SQL_Latin1_General_cp1_CI_AS.
例子:adress varchar(255) COLLATE Chinese_PRC_CI_AS
Not null,

2删除表(alter table )
Drop table table_name

3修改表(ALTER TABLE)(修改名称rename,增加add,删除drop)
修改表名称
ALTEL TABLE old-table-name RENAME new-table-name
增加字段
ALTER TABLE table-name
ADD 属性名 属性类型 (默认字段是在最后一个位置,想要在第一个位置,在 ADD 属性名 属性类型 first。
想放在任意字段,在ADD 属性名 属性类型
After 属性名)
删除字段
ALTER TABLE table_name DROP 属性名
更改字段
ALTER TABLE table-name CHANGE 旧属性名 新属性名 旧数据类型

三 数据操作
1.插入数据 (insert into …values)
INSERT INTO table-name(属性1,属性2.。。。。,属性)
VALUES(值1,值2.。。。。,值)
省略模式
INSERT INTO table-name
VALUES(值1,值2.。。。。,值)
(插入的数量应该和表中属性的数量一样)
插入多条数据
INSERT INTO table-name(属性1,属性2.。。。。,属性)
VALUES(值1,值2.。。。。,值),
(值1,值2.。。。。,值),
(值1,值2.。。。。,值);
2更新数据(updata …set…where)
数据单独更新
UPDATE table_name
SET 属性=值
WHERE 已存在的属性=已存在的值

多个数据更新
UPDATE table-name
SET 属性=值
WHERE 已存在的属性 <已存在的值

全部数据更新
UPDATE table_name
SET 属性=值

四 删除数据(delete from)
1.单条数据删除
DELETE FROM table_name
WHERE 属性=已存在到值
2多条数据删除
DELETE FROM table-name
WHERE 属性<某个值
3全部删除
DELETE FROM table-name

这个delete from table-name 和 drop table-name的区别,drop这个是删除全部,把表结构也删除了,delete这个只是删除表中的数据删除,没有把表结构也删除。

五基本查询语法
0.Select用法

查询某列 SELECT 列名称 FROM 表名称
查询表所有 SELECT * FROM 表名称

1.DISTINCT 用于返回唯一 不同的值

         SELECT  DISTINCT 列名称 FROM 表名称

2.WHERE用法,有条件地从表中选取数据
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
运算符有
= 等于 <> 不等于 > 大于 < 小于

= 大于等于 <=小于等于 between在某个范围内
Like搜索某种模式

文本值要加单引号,数值不要加单引号

3.OR&AND,可在where子句中把两个或者多个条件结合起来。AND,条件1,2都成立,显示一条数据。 条件一,二只要一个成立,则OR运算符显示一条数据。
4.ORDER BY根据指定的列对结果进行排序。
Select company,count from apple order by count

5.inser into values
6.update set where= 值
7delete from where = 值

8.TOP子句,用于规定返回记录的数目
Select top number/percent column_name(s) from table-name
9.like用于where 子句中搜索列中指定模式。
Select column_name(s)
from table_name
Where column like pattern

10.通配符,在sql中可以代替一个或者多个字符,必须要和like运算符使用。
%代表零或者多个字符。
_仅代表一个字符SELECT * FROM Persons
WHERE City LIKE 'Ne%

[]字符列中的任意单一字符
SELECT * FROM Persons
WHERE FirstName LIKE ‘_eorge’
[!]/[^]不在字符列中的任意单一字符
[!] /[^]不在字符列中的任意字符SELECT * FROM Persons
WHERE City LIKE ‘[ALN]%’

11.IN操作符允许我们在where子句中规定多个值。
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,…)

12.操作符between…and 会选取会介于两个值之间的数据范围。
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2

13.AS,可以为列名称和表名称指定别名。
表的指定列名
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName=‘Adams’ AND p.FirstName=‘John’

列的指定列名

SELECT LastName AS Family, FirstName AS Name
FROM Persons

14.Join,根据两个或者多个表中的列之间的关系,从这些表中查询数据。

  可以不用join查询2个表

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P

使用join查询2个表

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM PersonsINNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行

三表连接
Join …on…on…

15.left join 会从左表那返回所有行,即使右表中没有匹配的行。即是列出左表所有行,即是没有匹配到数据。右连接同理。

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

Full join只要某个表存在匹配,full join 就会返回行。
Join至少有一行存在匹配才会返回行。

16.union操作符用于合并两个或多个select语句结果集。UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL

SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

. 17.select into 可用于表的备份复件
SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。
SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。

SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename

SELECT *INTO Persons IN ‘Backup.mdb’
FROM Persons

SELECT *INTO Persons_backup
FROM Persons

SQL SELECT INTO 实例 - 带有 WHERE 子句
我们也可以添加 WHERE 子句。
下面的例子通过从 “Persons” 表中提取居住在 “Beijing” 的人的信息,创建了一个带有两个列的名为 “Persons_backup” 的表:
SELECT LastName,FirstnameINTO Persons_backup
FROM PersonsWHERE City=‘Beijing’

SQL SELECT INTO 实例 - 被连接的表
从一个以上的表中选取数据也是可以做到的。
下面的例子会创建一个名为 “Persons_Order_Backup” 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息:
SELECT Persons.LastName,Orders.OrderNoINTO Persons_Order_BackupFROM PersonsINNER JOIN OrdersON Persons.Id_P=Orders.Id_P

六约束,限制加入表的数据类型

1.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)
)

2unique约束
UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

单个约束
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)
)

多个约束
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)
)

当表已建好,可以用修改表语句进行约束。
Alter add

ALTER TABLE PersonsADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)

撤销约束
ALTER TABLE PersonsDROP CONSTRAINT uc_PersonID

3.primary key
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。

单个行约束
CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

多个行进行主键约束
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)
)

建好表之后单个行
ALTER TABLE PersonsADD PRIMARY KEY (Id_P)

建好表之后,多个行
ALTER TABLE PersonsADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)

撤销约束
ALTER TABLE PersonsDROP CONSTRAINT pk_PersonID

4外键约束
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
Persons" 表:
Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
“Orders” 表:
Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
请注意,“Orders” 中的 “Id_P” 列指向 “Persons” 表中的 “Id_P” 列。
“Persons” 表中的 “Id_P” 列是 “Persons” 表中的 PRIMARY KEY。
“Orders” 表中的 “Id_P” 列是 “Orders” 表中的 FOREIGN KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的动作。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

不命名外键名字
CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)

命名外键名称

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)
)

建表之后的外键约束

ALTER TABLE OrdersADD CONSTRAINT fk_PerOrders
FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)

外键撤销

ALTER TABLE OrdersDROP CONSTRAINT fk_PerOrders

5.check约束,用于限制列中的值的范围

如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

单行约束
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)
)

对多行进行约束

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’)
)

对已经存在的进行约束

ALTER TABLE PersonsADD CHECK (Id_P>0)

对已经存在的表的多行进行约束

Alter table person add constraint chk_Persons check (id_p>0 and city=’shenzhen’)

撤销check约束

Alter table Person drop constraint chk_Person

6.default约束,DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT ‘Sandnes’
)

表建好之下建约束
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT ‘SANDNES’

撤销约束

ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT

七索引

您可以在表中创建索引,以便更加快速高效地查询数据。
用户无法看到索引,它们只能被用来加速搜索/查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name)

CREATE INDEX PersonIndex
ON Person (LastName)

CREATE INDEX PersonIndex
ON Person (LastName, FirstName)

SQL CREATE UNIQUE INDEX 语法
在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name
ON table_name (column_name)

撤销索引

DROP INDEX table_name.index_name

八自动创建主键的值
AUTO INCREMENT 字段
我们通常希望在每次插入新记录时,自动地创建主键字段的值。
我们可以在表中创建一个 auto-increment 字段。
CREATE TABLE Persons
(P_Id int PRIMARY KEY IDENTITY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

9视图

什么是视图?
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
注释:数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。

创建视图的语法
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

更新视图

CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No

撤销视图

DROP VIEW view_name

10.时间函数

SQL Server Date 函数
下面的表格列出了 SQL Server 中最重要的内建日期函数:
函数 描述
GETDATE() 返回当前日期和时间
DATEPART() 返回日期/时间的单独部分
DATEADD() 在日期中添加或减去指定的时间间隔
DATEDIFF() 返回两个日期之间的时间
CONVERT() 用不同的格式显示日期/时间

SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:
DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: 唯一的数字

11.null值
NULL 值是遗漏的未知数据。
默认地,表的列可以存放 NULL 值。

我们如何仅仅选取在 “Address” 列中带有 NULL 值的记录呢?
我们必须使用 IS NULL 操作符:
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL

我们如何选取在 “Address” 列中不带有 NULL 值的记录呢?
我们必须使用 IS NOT NULL 操作符:
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL

SQL Server 数据类型
Character 字符串:
数据类型 描述 存储
char(n) 固定长度的字符串。最多 8,000 个字符。 n
varchar(n) 可变长度的字符串。最多 8,000 个字符。  
varchar(max) 可变长度的字符串。最多 1,073,741,824 个字符。  
text 可变长度的字符串。最多 2GB 字符数据。  
Unicode 字符串:
数据类型 描述 存储
nchar(n) 固定长度的 Unicode 数据。最多 4,000 个字符。  
nvarchar(n) 可变长度的 Unicode 数据。最多 4,000 个字符。  
nvarchar(max) 可变长度的 Unicode 数据。最多 536,870,912 个字符。  
ntext 可变长度的 Unicode 数据。最多 2GB 字符数据。  
Binary 类型:
数据类型 描述 存储
bit 允许 0、1 或 NULL  
binary(n) 固定长度的二进制数据。最多 8,000 字节。  
varbinary(n) 可变长度的二进制数据。最多 8,000 字节。  
varbinary(max) 可变长度的二进制数据。最多 2GB 字节。  
image 可变长度的二进制数据。最多 2GB。  
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 字节
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 变量。  
其他数据类型:
数据类型 描述
sql_variant 存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp。
uniqueidentifier 存储全局标识符 (GUID)。
xml 存储 XML 格式化数据。最多 2GB。
cursor 存储对用于数据库操作的指针的引用。
table 存储结果集,供稍后处理。

11函数

SQL 拥有很多可用于计数和计算的内建函数。

内建 SQL 函数的语法是:
SELECT function(列) FROM 表

合计函数(Aggregate functions)
Aggregate 函数的操作面向一系列的值,并返回一个单一的值。
注释:如果在 SELECT 语句的项目列表中的众多其它表达式中使用 SELECT 语句,则这个 SELECT 必须使用 GROUP BY 语句!

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)

SQL AVG() 语法定义和用法
AVG 函数返回数值列的平均值。NULL 值不包括在计算中。

SELECT AVG(column_name) FROM table_name

SELECT AVG(OrderPrice) AS OrderAverage FROM Orders

SQL COUNT() 语法
SQL COUNT(column_name) 语法
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):

SELECT COUNT(column_name) FROM table_name

SQL COUNT(DISTINCT column_name) 语法
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name

3.FIRST() 函数
FIRST() 函数返回指定的字段中第一个记录的值。
提示:可使用 ORDER BY 语句对记录进行排序。

SQL FIRST() 语法
SELECT FIRST(column_name) FROM table_name

4.LAST() 函数
LAST() 函数返回指定的字段中最后一个记录的值。
提示:可使用 ORDER BY 语句对记录进行排序。
SQL LAST() 语法
SELECT LAST(column_name) FROM table_name

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

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

7.SUM() 函数
SUM 函数返回数值列的总数(总额)。
SQL SUM() 语法
SELECT SUM(column_name) FROM table_name

8.合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句。
GROUP BY 语句
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。

SQL GROUP BY 语法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operato

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

9.HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
SQL HAVING 语法
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

实例
SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer=‘Bush’ OR Customer=‘Adams’
GROUP BY Customer
HAVING SUM(OrderPrice)>1500

10.UCASE() 函数
UCASE 函数把字段的值转换为大写。
SQL UCASE() 语法
SELECT UCASE(column_name) FROM table_name

11.LCASE() 函数
LCASE 函数把字段的值转换为小写。
SQL LCASE() 语法
SELECT LCASE(column_name) FROM table_name

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

SELECT MID(City,1,3) as SmallCity FROM Persons

13.LEN() 函数
LEN 函数返回文本字段中值的长度。
SQL LEN() 语法
SELECT LEN(column_name) FROM table_name

14.ROUND() 函数
ROUND 函数用于把数值字段舍入为指定的小数位数。
SQL ROUND() 语法
SELECT ROUND(column_name,decimals) FROM table_name
参数 描述
column_name 必需。要舍入的字段。
decimals 必需。规定要返回的小数位数。

15.FORMAT() 函数
FORMAT 函数用于对字段的显示进行格式化。
SQL FORMAT() 语法
SELECT FORMAT(column_name,format) FROM table_name
参数 描述
column_name 必需。要格式化的字段。
format 必需。规定格式。
SQL FORMAT() 实例
我们拥有下面这个 “Products” 表:
Prod_Id ProductName Unit UnitPrice
1 gold 1000 g 32.35
2 silver 1000 g 11.56
3 copper 1000 g 6.85
现在,我们希望显示每天日期所对应的名称和价格(日期的显示格式是 “YYYY-MM-DD”)。
我们使用如下 SQL 语句:
SELECT ProductName, UnitPrice, FORMAT(Now(),‘YYYY-MM-DD’) as PerDate
FROM Products
结果集类似这样:
ProductName UnitPrice PerDate
gold 32.35 12/29/2008
silver 11.56 12/29/2008
copper 6.85 12/29/2008

12存储过程

存储过程是SQL语句和控制语句的预编译集合,保存在数据库里,可由应用程序调用执行,而且允许用户声明变量、逻辑控制语句及其他强大的编程功能。
SQL Serve存储过程主要分为:
1.无参存储过程
2.有参存储过程
3.有参有输出存储过程

1.无参数存储过程
创建存储过程

create proc(proc是创建存储过程的关键字) 存储过程名
as
需要执行的操作

调用存储过程
Exec 存储过程名字
使用exec关键字后面加上存储过程名调用存储过程
删除存储过程

Drop proc 存储过程名称

2有参存储过程
创建有参存储过程很简单,和无参的类似,只不过是在定义的时候存储过程名后面要跟上一对小括号里面定义参数,变量名在前,变量类型在后,多个参数要以“,”分开。

Create proc 存储名称
( ----------变量名称 数据类型
@名称 类型
as
需要的操作

   调用存储过程

Exec 存储过程名称 对应类型参数

 删除存储过程

Drop proc 存储过程名称

例子
创建
Create proc cp_select_ name
( @name nvarchar(50))
as
select * from [dbo].[books]
where name=@name

    调用

Exec cp_select_name ‘水浒传’

删除存储过程

3有参有输出过程
所谓有输出的存储过程就是把变量传递给这个存储过程之后,经过处理可以改变这个变量的值

创建存储过程

Create proc 存储过程名称
( @变量 数据类型
@变量 数据类型 out)
as
操作过程

   调用存储过程

--------------定义一个变量用来接收参数
Declare @变量 数据类型 -------(是新的变量,参考c语言中的实参和形参)
Exec 存储过程名称 ‘非输出变量的值’ ,@输出的变量名称 out
Print @输出参数

     删除存储过程

Drop proc 存储过程名称

例子
Create proc cp_create_book_byname
(@name varchar(20),
@recorRows int out)
as
Select * from [dbo].[books] where name like ‘%’+@name+’%’

Select @recorRows=count(*) from [dbo].[books] where name like ‘%’+@name+’%’

12.游标

查询语句可能返回多条记录,如果数据量非常大,需要使用游标来逐条读取查询结果集中的记录。应用程序可以根据需要滚动或浏览其中的数据。

游标是SQL server的一种访问机制,它允许用户对每一行的数据进行单独的处理,从而减低系统开销和潜在的的阻隔因素。

什么是游标?

游标是一种处理数据的方法h,主要用于存储过程,触发器,和T_SQL语句中们使结果集的内容可用于其它T_SQL语句。在查看或处理结果集中向前或向后浏览数据的功能。类似与C语言中的指针,它可以指向结果集中的任意位置,当要对结果集进行逐条单独处理时,必须声明一个指向该结果集中的游标变量。

游标的基本操作(与表,数据库存储过程等等不一样删除游标直接drop name)不要游标这单词。
一声明游标
二打开游标
三读取游标中的数据
四关闭游标
五释放游标

Declare cursor_name cursor
select * from table_name
open cursor_name
Fetch next from cursor_name
While @@fetch_STATUS=0
Begin
Fetch next from cursor_name
End
Close cursor_name
Deallocate cursor_name
例子
USE sample_db;create TABLE fruits(
f_id int IDENTITY(1,1) PRIMARY KEY,–水果id
s_id int not null, --供应商id
f_name varchar(255) not null,–水果名称
f_price decimal(8,2) not null --水果价格);insert into fruits (s_id,f_name,f_price)
values
(101,‘apple’,5.8),
(102,‘blackberry’,6.8),
(105,‘orange’,4.5),
(102,‘banana’,3.5),
(103,‘lemon’,8.0),
(104,‘grape’,7.6),
(101,‘melon’,10.5);
–1.声明名称为cursor_fruit的游标
USE sample_db;GODECLARE cursor_fruit CURSOR FORSELECT f_name,f_price FROM fruits;
–2.打开游标
OPEN cursor_fruit;
–3.读取游标中的数据
–【例】使用名称为cursor_fruit的光标,检索fruits表中的记录,输入如下:
USE sample_db;GOFETCH NEXT FROM cursor_fruit WHILE @@FETCH_STATUS=0BEGIN
FETCH NEXT FROM cursor_fruitEND;
–4.关闭关闭名称为cursor_fruit的游标
CLOSE cursor_fruit
–5.释放游标
DEALLOCATE cursor_fruit;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值