【黑马程序员】5. 结构化查询语言(SQL)

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

SQL语句(Structured Query Language)即结构化查询语言,是一种数据库查询和程序设计语言,是沟通服务器和客户端的专用语言。不同的DBMS(数据库管理系统)都统一使用SQL语法。

注意:

      1SQL语句中的字符串要用单引号引起来;

      2SQL语句中的关键字是不区分大小写的,但字符串值是区分大小写的。

SQL主要分为以下三种:

DDL:数据定义语言,createalterdropdeclare

DML:数据操纵语言,selectdeleteupdateinsert

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、删除deletedroptable

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子句中不能使用聚合函数,必须使用havinghaving要位于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

qq

季度

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






 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值