---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
数据库
DBMS(DataBace Management Syetem)数据库管理系统
数据库中的概念:
Catalog (分类)又叫数据库DataBace,表空间TableSpace
Table:表
Column:列
Field:字段。
SQL语句是和DBMS交谈专用语句,不同DBMS都认SQL语句,SQL语句中字符串用单引号,单引号中字符串有大小写之分,其余SQL语句大小写不敏感。
创建表、删除表可手工完成,也可使用代码:创建表格create table t-person(id int not null,name nvarchar(50),age int null ) 删除表格drop table t-person1
Insert语句 insert into t-person(id,name,age)valuea(1,’Jim’,20)
SQL主要分为DDL(数据定义语言如carate table、drop table、Alert table)和DML(数据操纵语言如insert、delete、update等)
主键(PrimaryKey)是数据行的唯一标识,不会重复的列才能当主键。主键有两种:业务主键(有意义的字段,比如身份证号)逻辑主键(没意义,给程序看的)推荐使用逻辑主键
表间关联、外键(ForeignKey).
SQLServer 中主键常用的数据类型包括int(或bigint)+标识列(又称自动增长字段);uniqueidentifier(又称Guid、UUID). 其中int(或bigint)+标识列(又称自动增长字段)将选定的int类型的字段设为主键后,将此字段的“是标识列”设置为“是”,这样当添加行时,就能自动增加int字段的值,不用去设置。一个表只能设置一个标识列。
Guid算法生成一种唯一的标识,SQLSever中生成GUID的函数newid(), .Net中生成Guid方法:
Guid id=new Guid();
Console.WriteLine(id);//读出生成的GUID
Console.ReadKey();//点任意键结束程序执行
Int自增字段的优点:占空间小,无需开发人员干预,易读;缺点;效率低,数据导入导出很痛苦。
GUID优点,效率高,数据导入导出方便,缺点占空间大不易读。业界主流用GUID。
数据插入:int作为主键时,代码为insert into person3(name,age) values(‘lily’,38);其中ID作为主键,可以不设置,直接省略即可,其他不设置的列也可直接省略。
GUID作为主键,代码为 insert into person4 (id,name,age)values(newid();,’tom’,30);也可将GUID类型的主键的默认值设为newid()则可自动生成id。
数据更新:
Update person1 set age=30;//更新person1的age列,age列值都为30
Uptate person2 set age=20,name=’lucy’;//更新person2的age列和name列,age都为20,name都是lucy
Update person3 set age=age+1;//更新完后age列的值都加一
Update person4 set nickname=N’青年人’ where age>=20;//age大于等于20的,nickname变为“青年人”
Update person1 set nickname=N’二十岁’ where age=20;//age等于20的,nickname变为“二十岁”,其中等于在SQL语句中只用一个“=”。
数据删除:
Delete from person是指把表中数据全部删除
Drop table把表格删除
Delete from person where age>20//删除年龄大于二十的那一行
数据查询
Select fname as 姓名,fage as 年龄,fsalary as 月薪 from person
Where fsalary,5000;//查询月薪小于5000,并且列名分别改为姓名、月薪
Select 1+1 as 列1,getdate() as日期,newid() as 编号;//字段名非别为列1、日期、编号,第一行元素分别为2、当前日期、GUID编号
Select count(*) from person;// 计算person列表中有多少个元素
Selete max(fsalary) form person;//查询月薪最多人
Select min(fsalary) form person;//查询月薪最少的人
Select avg(faslary)from person;//查询月薪的平均值
Select aum(fage) from person;//查询年龄的平均值
Select count(*)from person
Where fsalary>=5000;//计算月薪大于等于5000的元素个数
排序
Select * form person // 取person中所有元素
Order by fsalary asc; //按月薪进行升序排列
Select * from person
Order by fsalary desc; //按月薪进行降序排列
Select * from person
Order by fage desc,fsalary asc; //所有行按年龄进行降序排列后,年龄相同的按月薪进行升序排列
Select * from person
Where fage>23
Order by fage desc,fsalary desc;//找出年龄大于23的项,将他们年龄按降序工资按降序排列
Select * from person
Where fname=’Tom’;//找到名称为Tom的项
Select * from person
Where fname like ‘-erry’;//找到名称里含有‘-erry’(“-”表示一个字符且必须为半角)的项
Select * from person
Where fname like ‘%n%’;//找到名称里含有‘%n%’(“%”表示多个字符且必须为半角)的项
Select * from person
Where fname like ‘DEV%’;// DEV%表示DEV后可有多个字符
Null用法
Select null+1; //输出为null,null的意思是不知道
Select ‘abc’+’123’;//输出为abc123
Select ‘’+’123’;//输出为123
Select null+’123’;//输出为null
Select * from person where fname=null;//查询不到任何数据因为null表示不知道
Select * from person where fname<>null;// 查询不到任何数据因为null表示不知道
Select * from person where fname is null;//查询到名称为null的项
Select * from person where fname is not null;//查询到名称不为null的项
Select *from person
Where fage=23 or fage=25 or fage=28;//查询年龄等于23或25或28的所有项
Select * from person
Where fage in (23,25,28);// 查询年龄等于23或25或28的所有项
Select * from person
Where fage>20 and fage<30;//查询年龄介于20到30之间的项
Select * from person
Where fage between 20 and 30; //查询年龄介于20到30之间的项
Select fage,count(*) from person
Where count(*)>1
Group by fage;//程序报错,因为聚合函数count(*)不能出现在where子句中
Select fage ,count(*) from person
Group by fage
Having count(*)>1; //在person按年龄进行分组,选取同一年龄且人数大于1的那些项,输出年龄以及这些年龄对应的人数count(*)用来计算人数;having是对分组后的数据进行数据。
Select fage,count(*) from person
Where salary>2000
Group by fage;//程序运行结果:person中选取月薪大于2000的项按年龄进行分组并将年龄和对应的人数输出。
Select fage,count(*) from person
Group by fage
Having salary>2000;//程序报错,having不能代替where
Select fage,fsalary,count(*) from person
Group by fage;//程序报错,因为同一年龄的项月薪肯定不同无法输出
Select fage,max(fsalary),count(*)from person
Group by fage;//程序运行结果,person中,按年龄进行分组,并将同一年龄的人数和月薪以及年龄输出
Select top3 * from person
Order by fslary desc;//person中按月薪降序排列并取前三输出
Select top3 * fromperson
Where fnumber not in (selete top 5 fnumber from person order by fsalary desc)
Order by fsalary desc;//按月薪排序,并取从第六名开始的三个项
Select distinct fdepartment from person;//查找person中所有部门(department)信息,并将重复的删除,只保留一个即可
Select distinct fdepartment,fsubcompany from person;//查找person中所有部门(department)和子公司(subcompany)信息,将部门和子公司那行都相同的项删除,保留一个即可
Select fname from person1
Union
Select fname from person2;//程序运行结果将person1和person2的name字段合并输出,但是相同的name被合并删除,只剩一条
Select fname from person1
Union all
Select fname from person2;//和上面程序运行结果不同的是相同的name不被合并删除,会重复出现
Select fnumber,fage,fdepartment from person1
Union
Select fidcardnumber,fage,’临时工,无部门’ from person2;
要合并的,需要列数相同,并且同一列数据类型相容
数字函数
Abs():求绝对值
Ceiling():舍入到最大整数 3.33->4, 2.89->3, -3.66->3
Floor():舍入到最小整数3.33->3, 2.89->2, -3.66->-4
Round;四舍五入,舍入到离我半径最近的数-3.66->-4
Select round(3.1415926,3);//结果为3.1420000代码中3表示精确度即小数点后位数
字符串函数
Len();计算字符串长度 Select len (‘abc’);程序结果为3,求字符串长度
Lower()upper()转大小写
Ltrim():去掉字符串左端空格
Rtrim():去掉字符串又端空格
去掉字符串两端空格ltrim(rtrim(‘ bb ’))
Substring(string,start-position,length) ;string主字符串start-position起始位置length长度
Select substring(‘abcdef111’,2,3);程序运行结果输出bcd
Select fname,substring(fname,2,2)from person;//运行结果:输出fname列,并输出substring(fname,2,2)列,fname字符创从每项第二个字符开始取两个字符的长度作为输出内容
日期函数
Getdate():取得当前时间
Dateadd(datepart,number,date),计算增加以后的日期。Datepart计量单位number:增量 date:待计算日期
Select dateadd(dey,-3,getdate());//输出当前日期之前三天的日期
Select dateadd(hh,1,getdate());//输出当前时间加一小时之后的事件
Datediff(datepart,startdate,enddate);计算两个日期之间的差额Datepart计量单位startdate:开始日期enddate:结束日期
Select dateiff(hh,getdate(),dateadd(day,-3,getdate()));//程序运行结果输出-72
输出不同工龄的员工数目:
Select datediff(year,findate,getdate()),count(*) from person
Group by datediff(year,findate,getdate());
Datepart(datepart,date):返回日期的一个特定部分。
输出每一年入职的职工数
Select datepart(year,findate),count(*) from person
Group by datapatr(year,findate);
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------