黑马程序员--SQL Server 基本语法、基础知识

时间:2020-12-27 00:51:16

-------------------------------------------- ASP.Net+Android+IO开发、.Net培训、期待与您交流! -----------------------------------

                                                         基本语法

Update tb_guid set name=’nihao’ where (age>20 and age <30) or age=40

这是复合的查询

Select * from tb_guid order by age asc,score desc

 

Select age,count(*) from tb_guid group byage

注意的是:前面的查询的内容不允许有在GROUP BY中没有的字段!!!!!!!!!!!!

但是这样是可以的

Select age,avg(salary),count(*) fromtb_guid group by age///这一句是正确

注意聚合函数:不可以存在于Where子句中:除非存在于Having子句中

Having是对分组后信息的过滤,能用的列与select中的列是一样的!!!!!!!!!!!

为数据库添加某个列

Alter tabledb_DB add Category  varchar(10);

select distinct name,agefrom tb_guid

是为了防止数据的重复 而且注意的是:distinct是针对 整个 查询 的数据的 例如 这个是过滤 name , age 全部都 相同 的数据

Union:是将两查询 结果合并为一

Select num,name,age,partment  from  tb_1

Union

Select  num,name,age,’临时工,无部门’  from  tb_2

弥补字段的不足(以上的代码)

 

Union:有数据丢失的风险(也就是自动合并重复的数据)

解决方法,措施为:UnionAll(防止重复行的合并)

所以一般用union时不要丢掉这个all

而且 Union的要求是上下的列数要相同,上下的列的类型要相容

一般写报表时会用到这种方法:

Select ‘正式员工最高年龄’,MAX(age)  from t_employee

Union all

Select ‘正式员工最低年龄’,MIN(age)  from t_employee

Union all

Select ‘临时工最高年龄’,MAX(age)  from t_Tempemployee

Union all

Select ‘临时工最低年龄’,MIN(age)  from t_Tempemployee

 

Select   number,salary from  t_employee

Union

Select  ‘工资合计’,sum(salary)  from  t_employee

 

 

Ltrim(rtrim(‘  aa  ’)):代表去掉两侧的空格

Select DateAdd(day,3,getdate()):表示在当前日期的基础上再加上三天

 

Day  dd,d 

Week wk,ww 当年度的第几周

Weekday dw,w 星期几

Hour hh 小时

Minute mi,n 

Quarter qq,q 季度

Month mm,m 月份

Dayofyear dy,y 当年度的第几天

 

 

 

DATEDIFF(datepart,startdate,enddate):计算两个日期之间的差额,datepart为计量单位,可取值参考

Select fname,findate, DateDiff(year,findate,getdate()) from  t_1 //表示选出员工的的入职总时间(按年计)

接上面的:并且按入职总时间分组

Select DateDiff(year,findate,getdate()) , count(*) from  t_1

Group by

DateDiff(year,findate,getdate())

 

 

DatePart(datepart,date):返回一个日期的特定部分

Select DatePart(year,getdate()) 

 

Select DatePart(year,fdate) ,count(*) from  tb_1

Group by

DatePart(year,fdate)

类型转换函数

CAST(expression  as data_type)

CONVERT(data_type,expression)

Select fidnumber,

RIGHT(number,3)  as 后三位

Cast(RIGHT(number,3)  AS interger) + 1  as 后三位加1

(后三位的整数形式加1

 

Convert(integer,right(number,3))  as 后三位

 

应用

Select cast(‘123’  as  int)+1, cast(‘2009-02-02’  as datetime),

Convert(datetime,’2009-01-02’),Convert(varchar(50),123)

 

Select DatePart(year,cast(‘2008-01-01’  as  datetime))

 

流控函数

执行备注中的代码

ISNULL(expression,value):如果expression不为空则返回expression,否则返回value,

Select isnull(fname,’佚名’)  as 姓名  from  tb_1

 

CASE函数:

 

Case expression

When value1 then  returnvalue1

Else defaultreturnvalue

End

 

 

应用:(背景是这个表中有两个列fname,level)

Select fname,

(

Case level

When 1 then ‘普通客户

When 2 then ‘会员

Else ‘未知客户类型

end

) as 客户类型

From tb_1

 

 

带有范围的那种:

Select fname,

(

Case       //注意此处的没有了上面的条件

When leve<20 then ‘普通客户

When level>=20 then ‘会员

Else ‘未知客户类型

end

) as 客户类型

From  tb_1

练习应用

Select name,

Sum(

Case score

When N’’  then  1

Else 0

End) as 胜,

Sum(

Case score

Where N’’  then  1

Else 0

end) as 

from tb_1

group by  name

以上的注意事项及心得

注意:汉字前面一般都要加个N

心得:数据查询考题时,不要去想着一步就是实现

先一点一点的去实现

步骤:1:看有几个列 以及每个列的列名(然后查出这几个列)

      2:查询时针对于每个列的特点,各自做一些调整

     --------

                                                   基础知识

DBMS :数据库管理系统

MYSQL.MSSQLServer一般说数据库实际上是数据库管理系统

SQL《》SQLServer<>MSSQLServer

除了Access.SQLServerCE等文件型数据库之外,大部分数据库都需要数据库服务器才能运行 

Catalog分类,又叫数据库DataBasse,表空间TableSpace,不同类的数据应该放到不同的数据库中

业务主键:使用有业务意义的字段做主键()

逻辑主键:使用没有任何业务意义的字段做主键(完全给程序看的,业务人员不会看的数据)

DDL:数据定义语言(Create Table,Drop Table

DML:数据操作语言(Select ,Insert

MYSQL:速度快,但是限制性不严格;

SQLServer中两种常用的主键数据类型,INT+标识列,

Uniqueidentifier又称Guid,UUID

Guid算法是一种可以产生唯一标识的高效算法,它使用网卡MAC。地址。纳秒级时间、、芯片ID码等算出来的,这样保证每次生成的GUID永远不会重复,无论是同一个计算机上的还是不同计算机,

INT自增字段的优点,占用空间小,无需开发人员干预、易读。缺点:效率低,数据导入导出的时候很痛苦,

GUID的优点,:效率高,数据导入导出方便,缺点占用空间大。不易读

 

Select  newid()   SQL  语句

 

Guid id= Guid.NewGuid(); C#代码中的会产生一个GUID的代码

Guid的用法:

   1:建一个ID列数据类型为uniqueidentifier,并且将其设置为主键

   2:插入一条数据;代码:insertinto dbo.Tb_Guid(Id,Name)values(newid(),'daafd')

然后也可以为ID列设置一个默认值为newid():其中newid()是用来生成Guid的

注意:利用GuId显示的数据是与插入顺序无关的!!!!!!!!!!!

 

在数据库中的NULL表示不知道

 C#中的NULL表示不指向任何对象

 

Select Null+2  执行结果为 NULL “不知道”+2:还是不知道

所以select *from tb_guid where name = NULL将会是什么也查不出来

Select * from tb_guid where id in(21,22,23)

Select* form tb_guid where id between 21 and 2

 

数据库函数:

ABS:求绝对值

CEILING:舍入到最大整数,

Floor:舍入到最小整数

Round:四舍五入,舍入到“离我半径最近的数”例如-3.61Round值为-4

注意Round有两个参数 Round(s1,s2)其中的s2表示精度例如s2=0代表0个小数(也就是保留的位数)

Select len(‘abc’):结果为3

Lower(),upper(),代表大小写的转换

LTRIM():代表去掉左侧的空格

Rtrim():代表去年右侧的空格

 

 

 

 

-------------------------------------------- ASP.Net+Android+IO开发、.Net培训、期待与您交流! -----------------------------------