-------------------------------------------- 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.61的Round值为-4
注意Round有两个参数 Round(s1,s2)其中的s2表示精度例如s2=0代表0个小数(也就是保留的位数)
Select len(‘abc’):结果为3
Lower(),upper(),代表大小写的转换
LTRIM():代表去掉左侧的空格
Rtrim():代表去年右侧的空格
-------------------------------------------- ASP.Net+Android+IO开发、.Net培训、期待与您交流! -----------------------------------