---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
SQL语句(Structured Query Language)即结构化查询语言,是一种数据库查询和程序设计语言,是沟通服务器和客户端的专用语言。不同的DBMS(数据库管理系统)都统一使用SQL语法。
注意:
1、SQL语句中的字符串要用单引号引起来;
2、SQL语句中的关键字是不区分大小写的,但字符串值是区分大小写的。
SQL主要分为以下三种:
DDL:数据定义语言,create,alter,drop,declare;
DML:数据操纵语言,select,delete,update,insert;
DCL:数据控制语言,grant,,revoke,commit,rollback。
1、新建表 CREATETABLE
CREATE TABLE [dbo].[Person1]
(
Name nvarchar(50),
Age int,
Salary numeric(10,2)
)
2 、插入数据insertinto
insert into Person1(Name,Age,Salary) values('张三',20,5000)
3、更新数据update
1) 更新一个列
update Person1 set Age=30
2) 更新多个列
update Person1 set Name='Tom', Age=30
3) 更新其中一部分数据
update Person1 set Age=30 where Name='张三' --表示只更新Name是’张三’的那条记录。
4、删除delete、droptable
1) 删除数据
delete from Person1
2) 删除表
drop table Person1
Delete也可以带where子句来删除指定的数据,如:
delete from Person1 where Age>30
5、数据检索select
select * from Person1
select Name,Age from Person1
select Name as 姓名, Age as 年龄 from Person1 --as用在查询语句中时,用来重新指定返回的column 名字,给column起别名
6、聚合函数
聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用。SQL SERVER中的聚合函数有:
1)AVG:返回指定组中的平均值,空值被忽略。
select avg(Salary) from Employee group by E_Id
2)COUNT:返回指定组中项目的数量。
select count(E_Id) from Employee
3)MAX:返回指定数据的最大值。
select max(Salary) from Employee group by Age
4)MIN:返回指定数据的最小值。
select min(Salary) from Employee group by Age
5)SUM:返回指定数据的和,只能用于数字列,空值被忽略。
select sum(Salary) from Employee group by Age
6)COUNT_BIG:返回指定组中的项目数量,与COUNT函数不同的是COUNT_BIG返回bigint值,而COUNT返回的是int值。
selectcount_big(Salary)from Employee
7) BINARY_CHECKSUM:返回对表中的行或表达式列表计算的二进制校验值,用于检测表中行的更改。
select binary_checksum(Salary) from Employee group by E_Id
8)CHECKSUM_AGG:返回指定数据的校验值,空值被忽略。
select checksum_agg(binary_checksum(*)) from Employee group by E_Id
9)CHECKSUM:返回在表的行上或在表达式列表上计算的校验值,用于生成哈希索引。
10)STDEV:返回给定表达式中所有值的统计标准偏差。
select stdev(Salary) from Employee
11)STDEVP:返回给定表达式中的所有值的填充统计标准偏差。
select stdevp(Salary) from Employee
12)VAR:返回给定表达式中所有值的统计方差。
select var(Salary) from Employee
13)VARP:返回给定表达式中所有值的填充的统计方差。
select varp(Salary) from Employee
7、 数据排序orderby
select * from Person1 order by Age
order by column_name ASC --升序排列
order by column_name DESC --降序排列
order by子句位于select语句的末尾,它允许指定按照一个列或多个列进行排序,还可以指定排序方式,升序或降序
order by 子句要入在where子句之后,如:
select * from Person1 where Age>20 order by Age asc
8、通配符过滤like
1) 单字符匹配的通配符为半角状态下的下划线“_”,用它来匹配单个出现的字符。如:
select * from Person1 where Name Like'_om' --以任意一个字符开头,剩余部分为“om”的数据
2) 多个字符匹配的能配符为半角的百分号“%”,用它来匹配任意次数(零次或多次)出现的任意字符。如:
select * from Person1 where Name like'%n%' --检索中包含字母“n”的数据
9、空值处理 is null/is not null
在数据库中,一个列如果没有指定值,那么它的值就为null。与c#中的null不同的是,数据库中的null表示“不知道”,而不是没有。在数据库中,判断是否为空用“is null”或“is not null”。
如:
select * from Person1 where Name=null
select * from Person1 where Name!=null
以上两条语句执行后没有任何返回结果,正确的表达方式为:
select * from Person1 where Name is null
select * from Person1 where Name is not null
10、 多值匹配in
select * from Person1 where age in(20,25,30) --检索age为20或25或30的记录
select * from Person1 where age between 20 and 30 --检索age在20至30之间的
11、 数据分组group by
Group by子句放在where子句之后。没有出现在group by子句中的列是不能放到select语句后的列名列表中的(聚合函数除外)。
select Age,avg(Salary) from Person1 group by Age --正确
select Age,Salary from Person1 group by Age --错误,Salary不能出现在select列表中
12、 Having语句
在where子句中不能使用聚合函数,必须使用having,having要位于group by之后。
select Age,count(*) from Perosn
group by Age
having count(*)>1
注:having 中不能使用未参数分组的列,即having中能用的列和select中能用的列一样。如:
select Age,count(*) from Person1
group by Age
having Salary>3000
上面这条语句会报错,因为having中的Salary没有出现在group by子句中。
Having是对分组后的数据的过滤,而where是对原始数据进行过滤,所以having无法代替where。
137、 限制结果集行数top
select top 3*from Person1 order by Salary desc --按照Salary降序排列后取前3条记录
select top 3*from Person1 where Number not in(select top 5 Number from Person1 order by Salary desc) --查询的嵌套,按照工资降序排序后取从第6名开始之后的3条记录
top可以用于对数据进行分页显示的场合,比如网站信息的分页显示。
14、 联合结果集 union
使用原则:
每个结果集必须有相同的列数;
每个结果集的对应列的数据类型必须相兼容。
select Name,Age from Person1
union
select Name,Age from Person2
union 合并后的结果集默认是自动去重的,若不想去重,需在union后边加上all
select Name,Age from Person1
union all
select Name,Age from Person2
15、 日期函数
1) getdate():获取当前的日期时间
2) dateadd(datepart,number,date):计算增加后的日期
datepart:计量单位
number:增量
date:待计算的日期
如:
select dateadd(day,3,getdate()) --当前日期加3天
select dateadd(dd,-3,getdate()) --当前日期减3天
其它计量单位
计量单位 | 别名 | 备注 |
year | yy | 年份 |
quarter | | 季度 |
month | mm | 月份 |
day | dd | 日 |
week | wk | 周 |
hour | hh | 小时 |
minute | mi | 分 |
second | ss | 秒 |
1) datediff(datepart,startdate,enddate):计算两个日期之间的差值
select datediff(hh,getdate(),getdate()+10)
select datediff(hh,getdate(),dateadd(wk,1,getdate()))
2) datepart(datepart,date):获取日期的指定部分
select datepart(yy,getdate())
16、 类型转换函数
1) cast(expressionas datatype)
cast('123' as int) --把字符串‘123’转换为整型123
2) convert(datatype,express)
convert(datetime,'2008-1-1')
17、 空值处理函数
isnull(expression,value):如果expression不为空则返回expression,否则返回value。
select ISNULL(Name,'无名') as 姓名 from Person1 --如果Name为空则返回‘无名’,否则返回Name的值
18、 case函数
单值判断,相当于switch-case。
基本语法:
case expression
when value1 then return_expression1
when value2 then return_expression2
when value3 then return_expression3
else default_return
end
例:
select Name
(case level
when 1then'VIP'
when 2then'高级'
when 3then'普通'
else '类型错误'
end) as 姓名
from Customer
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net