黑马程序员--SQLServer基础<二>SQL语句1

黑马程序员--SQL Server基础<二>SQL语句1

  大部分SQL语句是对所有数据库都通用的,但是有一些,在SQL Server中和其他数据库如SQLite等中的用法是有一些差异的。其中,需要注意的就是,SQL语句中字符串都是用单引号’’来引起来的,并不是双引号””;而且SQL语句中大小写是一样的,这里指的是执行语句,并不是要存储的数据。SQL语句分为DDL(数据定义语言)和DML(数据操作语言);DDL包含Create Table、Drop Table、Alter Table等,DML包含Select、insert、update等。

创建、删除修改表、添加数据:

  上面也提到,创建一个表所使用的SQL语句,即:Create table 表名(字段名 字段类型)如:

create table Person(Id int,Name nvarchar(50),Age int,Income int)

删除表的SQL语句为:drop table 表名 如:

drop table Person 即为把表Person删除掉

修改表的SQL语句为:alter table 表名 需要的操作 如:

Alter table Person Add Sex nvarchar(10)即为给Person表加了一个类型为nvarchar的Sex字段

给表里添加数据的SQL语句为,insert into 表名(列名) values (数据),这里字段名和后面的数据要对应起来。如:

insert into Person(Id,Name,Age,Income) values (01, N'王五',19,2000)

更新数据:

更新一个列:update 表名 set 列名 = 数据,如:

update Person set Name = N'赵立'即为把Person表的Name字段的数据都设为”赵立”

更新多个列:update 表名 set 列名1 = 数据,列名2 = 数据,如:

update Person2 set Name = N'赵立',Age = 30即为把Person表的Name字段的数据都设为”赵立”,Age字段的数据都设为30

删除数据:

我们前面提到了一个drop table,这个是整个删除表,而下面这个方法是根据条件来删除数据:

Delete from 表名 where 列名 条件,如:

delete from Person2 where Age >20即为把Person表里的只要是Age字段大于20的数据都删除

这里我们用到了where,下面我们就来说说where的用法。

Where的用法、having语句:

Where主要是起到限定条件的作用,如上例,删除数据,限定了条件Age大于20,里面也可以使用or(表示或者,类似于C#中的||)、and(表示并且,类似于C#的&&)、not(表示非,类似于C#中的!)等;如:

delete from Person2 where Age >20 and Age < 30表示把Person表里的Age大于20并且Age小于30的数据删除。

用where、and、or、in等还可以进行多值匹配,如:

select * from Person1 where Age in (20,30)与

select * from Person1 where Age = 20 or Age = 30 是一样的,均表示检索出Age为20和30的数据。再如:

select * from Person1 where Age >= 20 and Age <= 30与

select * from Person1 where Age between 20 and 30 是一样的,均表示检索出Age在20到30之间的数据。

说到where就不得不说下having,有的时候是需要用having而不能用where的,如:

select Age,COUNT(*) from Person2 group by Age Having COUNT(*) > 1

这里就表示对Age进行检索、并记数分组后,再检索出相同Age大于1的数据,having是对分组后的信息进行按条件过滤。而下面写法就是不对的:

select Age,COUNT(*) from Person2 where COUNT(*) > 1 group by Age

因为聚合函数是不能出现在where子句中的,我们这里说到了聚合函数,那下面就说说聚合函数。

聚合函数:对字段进行运算

Select count(*) from 表名 检索表里有几条数据,如:

select COUNT(*) from Person

Select max(列名) from  表名

select MAX(Age) from Person检索Age字段里的最大值

Select min(列名) from  表名

select MIN(Age) from Person检索Age字段里的最小值

Select avg(列名) from  表名

select AVG(Age) from Person检索Age字段里的平均值

Select sum(列名) from  表名

select SUM(Age) from Person检索Age字段的和

还有另外几种函数,如数字函数、字符串函数、日期函数、类型转换函数;

数字函数:对数字进行操作

Select ABS(列名) from 表名

select ABS(Age) from Person 检索Age字段的绝对值

select Ceiling(列名)from 表名

select CEILING(Age) from Person 检索Age字段,并舍入到最大整数

select Floor(列名)from 表名

select FLOOR(Age)from Person 检索Age字段,并舍入到最小整数

select Round(数字,精度)

select ROUND(3.1415926,2) 这个结果将会输出3.1400000

字符串函数:对字符串进行操作

Select Len(列名) from 表名

select LEN(Name) from Person 计算Name列里数据的长度

Select Lower(列名) from 表名

select LOWER(Name) from Person 将Name列里的数据转为小写

Select Upper(列名) from 表名

select Upper(Name) from Person 将Name列里的数据转为大写

Select Ltrim(列名) from 表名

select LTRIM(Name)from Person 将Name列里的数据左边空格去掉

Select Rtrim(列名) from 表名

select RTRIM(Name) from Person 将Name列里的数据右边空格去掉

Substring(‘字符串’,截取位置,截取长度)

select substring(Name,1,2)from Person 将Name列里的数据从索引1位置开始截取长度为2的数据

日期函数:

select GETDATE()获得当前日期

dateAdd(datepart,number,date),计算增加以后的日期,其中,datepart是计量单位(year,month,day等),number是增量,date是待计算的日期,如:

select DATEADD(DAY,3,GETDATE())表示给当前日期,加上3天

dateDiff(datepart,startdate,enddate),计算两个日期间的差额,其中datepart是计量单位,startdate是起始日期,enddate是结束日期,如:

select DATEDIFF(SECOND,'2013-04-21 11:42:05.870',GETDATE())表示计算两个时间差了多少秒

datePart(datepart,date),返回一个日期的特定部分,datepart是计量单位,date是待计算日期,如:

select DATEPART(DAY,GETDATE())表示返回当前日期的天

类型转换函数:

Cast(表达式 as 数据类型)、convert(数据类型,表达式),如:

Select cast('123456' as int),cast('2008-06-07' as datetime),

Convert(datetime,'2009-08-01'),convert(varchar(50),123)表示把字符串类型转换成int类型,把字符串类型转换为datetime类型,把int类型转换为varchar(50)类型

 以后我们接着说SQL语句。

posted @ 2013-04-21 20:25  帅大屋  阅读(186)  评论(0编辑  收藏  举报