SQL Server 数据库基本知识点一、数据类型二、常用语句 (用到的数据库Northwind)查询语句简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。
它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下面的语句查询Customers 表中公司名称为“Alfreds Futterkiste”的ContactName字段和Address字段。
SELECT ContactName, AddressFROM CustomersWHERE CompanyName='Alfreds Futterkiste'(一) 选择列表选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
1、选择所有列例如,下面语句显示Customers表中所有列的数据:SELECT *FROM Customers2、选择部分列并指定它们的显示次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如:SELECT ContactName, AddressFROM Customers3、更改列标题在选择列表中,可重新指定列标题。
定义格式为:列标题 as 列名列名列标题如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:SELECT ContactName as 联系人名称, Address as地址FROM Customers4、删除重复行SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。
使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。
SELECT DISTINCT(Country)FROM Customers5、限制返回的行数使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT 时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
例如:SELECT TOP 2 *FROM CustomersSELECT TOP 20 PERCENT *FROM Customers(二)FROM子句FROM子句指定SELECT语句查询及与查询相关的表或视图。
在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。
例如在Orders和Customers表中同时存在CustomerID列,在查询两个表中的CustomerID时应使用下面语句格式加以限定:select * from Orders,Customerswhere Orders.CustomerID =Customers.CustomerID在FROM子句中可用以下两种格式为表或视图指定别名:表名 as 别名表名别名select * from Orders as a,Customers as bwhere a.CustomerID =b.CustomerIDSELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。
例如:select * from Customers where CustomerID in (select CustomerID from Orders where EmployeeID=4)此例中,将SELECT返回的结果集合给予一别名CustomerID,然后再从中检索数据。
(三) 使用WHERE子句设置查询条件WHERE子句设置查询条件,过滤掉不需要的数据行。
例如下面语句查询年龄大于20的数据:select CustomerID from Orders where EmployeeID=4WHERE子句可包括各种条件运算符:比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<范围运算符(表达式值是否在指定的范围):BETWEEN…AND…NOT BETWEEN…AND…列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……)NOT IN (项1,项2……)模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=302、列表运算符例:country IN ('Germany','China')3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。
可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。
可使用以下通配字符:百分号%:可匹配任意类型和长度的字符插入语句语法:Insert into 表(字段1,字段2,….字段n) values(值1,值2,….值n)例如:Insert into Region(RegionID, RegionDescription)values(5,'Southern')更新语句语法:update 表 set 字段1 = 值1,字段2=值2,字段n=值n where 条件如:update Customers set ContactName='John',Address ='Avda. de la' where CustomerID='ALFKI'where 条件同查询语句删除语句语法:delete from 表 where 条件如:delete from Customers where CustomerID='ALFKI'where 条件同查询语句清空表:truncate table 表清空表中所有数据,表中如果有自增长字段,该字段在插入时会重新开始注意:由于更新语句与删除语句会更改表数据对公司业务主要表进行更新与删除操作时一定要先进行备份,然后进行操作备份语句select* into Customers20101019 from Customers目标表(Customers20101019)不存在时会自动创建三、存储过程优点:1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权语法CREATE PROC[ EDURE ] [ owner. ] procedure_name [ ; number ][ { @parameter data_type }[ VARYING ] [ = default ] [ OUTPUT ]] [ ,...n ][ WITH{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ][ FOR REPLICATION ]AS sql_statement [ ...n ]参数owner拥有存储过程的用户 ID 的名称。
owner 必须是当前用户的名称或当前用户所属的角色的名称。
procedure_name新存储过程的名称。
过程名必须符合标识符规则,且对于数据库及其所有者必须唯一。
;number是可选的整数,用来对同名的过程分组,以便用一条 DROP PROCEDURE 语句即可将同组的过程一起除去。
例如,名为 orders 的应用程序使用的过程可以命名为 orderproc;1、orderproc;2 等。
DROP PROCEDURE orderproc 语句将除去整个组。
如果名称中包含定界标识符,则数字不应包含在标识符中,只应在 procedure_name 前后使用适当的定界符。
@parameter过程中的参数。
在 CREATE PROCEDURE 语句中可以声明一个或多个参数。
用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值,或者该值设置为等于另一个参数)。
存储过程最多可以有 2.100 个参数。
使用 @ 符号作为第一个字符来指定参数名称。
参数名称必须符合标识符的规则。
每个过程的参数仅用于该过程本身;相同的参数名称可以用在其它过程中。
默认情况下,参数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。
data_type参数的数据类型。
除 table 之外的其他所有数据类型均可以用作存储过程的参数。
但是,cursor 数据类型只能用于 OUTPUT 参数。
如果指定 cursor 数据类型,则还必须指定VARYING 和 OUTPUT 关键字。
对于可以是 cursor 数据类型的输出参数,没有最大数目的限制。
VARYING指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。
仅适用于游标参数。
default参数的默认值。
如果定义了默认值,不必指定该参数的值即可执行过程。
默认值必须是常量或 NULL。
如果过程将对该参数使用 LIKE 关键字,那么默认值中可以包含通配符(%、_、[] 和 [^])。
OUTPUT表明参数是返回参数。
该选项的值可以返回给 EXEC[UTE]。
使用 OUTPUT 参数可将信息返回给调用过程。
Text、ntext 和 image 参数可用作 OUTPUT 参数。
使用 OUTPUT 关键字的输出参数可以是游标占位符。
如:CREATE PROCEDURE CustOrdersDetail @OrderID intASSELECT ProductName,UnitPrice=ROUND(Od.UnitPrice, 2),Quantity,Discount=CONVERT(int, Discount * 100),ExtendedPrice=ROUND(CONVERT(money, Quantity * (1 - Discount) * Od.UnitPrice), 2)FROM Products P, [Order Details] OdWHERE Od.ProductID = P.ProductID and Od.OrderID = @OrderIDGO四:游标:游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次以行或者多行前进或向后浏览数据的能力。