黑马程序员-MSSQLServer学习日记

本文详细介绍了SQLServer中的数据库管理概念,包括DBMS、表、列、字段和SQL语句。讨论了创建和删除表的语法,主键、外键的概念及数据类型。讲解了插入、更新和删除数据的操作,以及查询语句的使用,如排序、筛选和聚合函数。此外,还提到了数据类型的选择,如int和GUID的优缺点。最后,探讨了各种字符串、日期和数字函数的用法。

---------------------- 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-personid,name,agevaluea(1,’Jim’,20)

SQL主要分为DDL(数据定义语言如carate tabledrop tableAlert table)和DML(数据操纵语言如insertdeleteupdate等)

主键(PrimaryKey)是数据行的唯一标识,不会重复的列才能当主键。主键有两种:业务主键(有意义的字段,比如身份证号)逻辑主键(没意义,给程序看的)推荐使用逻辑主键

表间关联、外键(ForeignKey.

SQLServer 中主键常用的数据类型包括int(或bigint+标识列(又称自动增长字段);uniqueidentifier(又称GuidUUID). 其中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;//更新person1age列,age列值都为30

Uptate person2 set age=20,name=’lucy’;//更新person2age列和name列,age都为20name都是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 fsalary5000//查询月薪小于5000,并且列名分别改为姓名、月薪

 

Select 1+1 as 1getdate() as日期,newid() as 编号;//字段名非别为列1、日期、编号,第一行元素分别为2、当前日期、GUID编号

Select count(*) from person;//  计算person列表中有多少个元素

Selete max(fsalary) form person;//查询月薪最多人

Select min(fsalary) form person;//查询月薪最少的人

Select avgfaslaryfrom 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;  //输出为nullnull的意思是不知道

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;//查询年龄等于232528的所有项

Select * from person

Where fage in (23,25,28);// 查询年龄等于232528的所有项

Select * from person

Where fage>20 and fage<30;//查询年龄介于2030之间的项

Select * from person

Where fage between 20 and 30; //查询年龄介于2030之间的项

 

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;//程序运行结果将person1person2name字段合并输出,但是相同的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培训、期待与您交流! ----------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值