资源描述
,*,All rights reserved 2004,Beijing CItynet Technology,数据库应用开发,一、SQL server SQL语言概要,二、如何读懂数据库设计图,三、如何使用SQL Server企业管理器、查询分析器,四、.NET中对于数据库访问提供的对象(熟悉DataSet、DataTable、DataRow对象),五、使用Sql Helper并创建DBAccess实现数据库封装,六、如何使用DBAccess提供的方法,目录,一、SQL语言概要,一、数据类型,二、SQL语句,数据类型,Char和Varchar,char和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。,所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充。,text存储可变长度的非Unicode数据,最大长度为231-1(2,147,483,647)个字符。,数据类型,Nchar、Nvarchar,nvarchar、nchar从名称上看只是多了个字母“n”,它表示存储的是Unicode数据类型的字符。,字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。,可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。,数据类型,DateTime,datetime:从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。,数据类型,BigInt、Int、SmallInt、TinyInt,bigint:从-263(-9223372036854775808)到263-1(9223372036854775807)的整型数据。int:从-231(-2,147,483,648)到231-1(2,147,483,647)的整型数据。smallint:从-215(-32,768)到215-1(32,767)的整数数据。tinyint:从0到255的整数数据。,Bit,bit:1或0的整数数据。,数据类型,Decimal/Numeric、Floact、Real,decimal和numeric,这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p之间的值,默认小数位数是0。,float和real,float:从-1.79308到1.79308之间的浮点数字数据。real:从-3.4038到3.4038之间的浮点数字数据。在SQL Server中,real的同义词为float(24)。,SQL语句,Select语句,Insert语句,Update语句,Delete语句,其他常用的 SQL语句,SELECT ALL|DISTINCT FROM ,n,WHERE,Partial Syntax,1 SELECT Statement,Select List,WHERE,FROM,指定列,employeeid,lastname,firstname,title,1,Davolio,Nancy,Sales Representative,2,Fuller,Andrew,Vice President,Sales,3,Leverling,Janet,Sales Representative,4,Peacock,Margaret,Sales Representative,5,Buchanan,Steven,Sales Manager,6,Suyama,Michael,Sales Representative,7,King,Robert,Sales Representative,8,Callahan,Laura,Inside Sales Coordinator,9,Dodsworth,Anne,Sales Representative,USE northwind,SELECT employeeid,lastname,firstname,title,FROM employees,GO,WHERE 过滤行,employeeid,lastname,firstname,title,5,Buchanan,Steven,Sales Manager,USE northwind,SELECT employeeid,lastname,firstname,title,FROM employees,WHERE employeeid=5,GO,修改列名,1)SELECT au_fname,au_lname,city,state,,phone AS Telephone FROM authors,-推荐使用,2)SELECT au_fname,au_lname,city,state,,Telephone=phone FROM authors,3)SELECT au_fname,au_lname,city,state,,phone Telephone FROM authors,更改表名,1)SELECT a.*from authors as a,2)SELECT a.*from authors a,3)select b.*from,(select*from authors)as b,Insert,单行数据,INSERT VALUES,多行数据,INSERTSELECT,SELECT INTO,插入部分数据,使用默认插入数据,插入单行数据,语法,INSERT INTO 表名 列名序列,VALUES(值序列),例子,USE northwindINSERT INTO orders(ID,quantity,note),VALUES(1,10,NewOrder),GO,DELETE,语法,DELETE FROM 表名,WHERE 删除条件,例子,USE northwindDELETE from orders,GO,USE northwind,UPDATE products,SET unitprice=(unitprice*1.1),GO,Update,语法,UPDATE 表名 SET 列名=常量值|表达式,WHERE 更新条件,例子,其他有用的SQL,删除重复行,限制返回行数,IN(NOT IN),LIKE,IS NULL,查询结果排序,ISNULL()函数,联合查询,1、删除重复行SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。,使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。2、限制返回的行数使用TOP n PERCENT选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。例如:SELECT TOP 2*FROM testtableSELECT TOP 20 PERCENT*FROM testtable,NOT IN(项1,项2),模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR,1、范围运算符例:age BETWEEN 10 AND 30相当于age=10 AND age=302、列表运算符例:country IN(Germany,China)3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。,空值判断符例 WHERE age IS NULL,逻辑运算符:优先级为NOT、AND、OR,(四)查询结果排序,使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为:,ORDER BY column_name ASC|DESC,n,其中ASC表示升序,为默认值,DESC为降序。例如:,SELECT*FROM usertableORDER BY age desc,userid ASC另外,可以根据表达式进行排序。,ISNULL(check_expression,replacement_value),参数check_expression将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。replacement_value在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。返回类型返回与 check_expression 相同的类型。注释如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。示例A.将 ISNULL 与 AVG 一起使用下面的示例查找所有书的平均价格,用值$10.00 替换 titles 表的 price 列中的所有 NULL 条目。USE pubsGOSELECT AVG(ISNULL(price,$10.00)FROM titlesGO下面是结果集:-14.24(1 row(s)affected)B.使用 ISNULL下面的示例为 titles 表中的所有书选择书名、类型及价格。如果一个书名的价格是 NULL,那么在结果集中显示的价格为 0.00。USE pubsGOSELECT SUBSTRING(title,1,15)AS Title,type AS Type,ISNULL(price,0.00)AS PriceFROM titlesGO,二、联合查询,内连接,左连接,右连接,关键词inner join、left join、right join,Join,用途:,当你要从两个或者以上的表中选取结果集时,你就会用到JOIN。,例:,“Employees”表中的数据如下,(其中ID为主键):,ID Name,01 Hansen,Ola,02 Svendson,Tove,03 Svendson,Stephen,04 Pettersen,Kari,“Orders”表中的数据如下:,ID Product,01 Printer,03 Table,03 Chair,用Employees的ID和Orders的ID相关联选取数据:,SELECT Employees.Name,Orders.Product,FROM Employees,Orders,WHERE Employees.ID=Orders.ID,返回结果:,Name Product,Hansen,Ola Printer,Svendson,Stephen Table,Svendson,Stephen Chair,或者你也可以用JOIN关键字来完成上面的操作:,SELECT Employees.Name,Orders.Product,FROM Employees,INNER JOIN Orders,ON Employees.ID=Orders.ID,INNER JOIN的语法:,SELECT field1,field2,fi
展开阅读全文