SQL加、查、改、删、函数

USE lianxi
GO
create table student1
(
code int not null ,
name varchar(20),
sex char(4),
cid int not null,
yufen decimal(20,2),
shufen decimal(20,2),
yingfen decimal(20,2),
banji varchar(10),
dizhi varchar(10),
age int,
)
--添加信息
insert into student1 values(101,'张三','男',1111,80,30,70,'一班','淄博',18)
insert into student1 values(102,'李四','男',2222,70,30,70,'二班','滨州',23)
insert into student1 values(103,'王五','男',3333,80,80,70,'一班','淄博',32)
insert into student1 values(104,'张思','女',4444,80,30,90,'三班','青岛',26)
insert into student1 values(105,'李毅','男',5555,80,30,60,'二班','烟台',23)
insert into student1 values(106,'王琦','女',6666,80,40,70,'一班','淄博',18)
insert into student1 values(107,'张贴','男',7777,70,30,70,'四班','滨州',19)
insert into student1 values(108,'王一','女',8888,80,30,90,'一班','淄博',24)
insert into student1 values(109,'王毅','男',9999,80,60,70,'三班','烟台',26)
insert into student1 values(110,'李丽','女',11110,70,30,70,'二班','滨州',30)
go


--查询信息
--查询所有信息
select *from student1
--查询前三行信息
select top 3 *from student1
--查询一列信息
select name from student1
--查询两列信息
select name,banji from student1
--查询名字为王一的所有信息
select *from student1 where name='王一'
--查询名字为李丽的语文成绩
select yufen from student1 where name='李丽'
--查询名字为李丽和张思的语文成绩
select yufen from student1 where name in('李丽','张思')


--更改信息
--更改学号为107的年龄
update student1 set age=22 where code=107
select age from student1 where code=107


--删除信息
--删除名字为张贴的人的信息
delete from student1 where name='张贴'
select *from student1
insert into student1 values(107,'张贴','男',7777,70,30,70,'四班','滨州',19)

--模糊查询
--查询姓王的人的所有信息
select *from student1 where name like'王%'
--查询姓王的人的语数英成绩
select name, yufen as 语文成绩,shufen as 数学成绩,yingfen as 英语成绩 from student1 where name like'王%'
--查询年龄在20-30之间的人的信息
select *from student1 where age between 20 and 30
--查询地址是滨州或青岛的姓名
select name,dizhi from student1 where dizhi in('滨州','青岛')
--查询地址不是滨州、青岛的姓名
select name,dizhi from student1 where dizhi not in('滨州','青岛')
--查询不重名的人的信息
insert into student1 values(111,'张三','男',1111,80,30,70,'一班','淄博',18)
select distinct name from student1
delete from student1 where code=111
--查询地址是滨州,年龄在20-30之间的人的信息
select *from student1 where dizhi='滨州'and age between 20 and 30


--排序
--语文升序
select *from student1 order by yufen
--数学降序
select name,shufen from student1 order by shufen desc
--一班的语文降序
select *from student1 where banji='一班' order by shufen


--聚合函数
--平均数
select AVG(yufen) from student1
--计数
select COUNT(*) from student1
select count(distinct banji) from student1
--最大值
select MAX(shufen)from student1 where banji='一班'
--最小值
select Min(shufen)from student1 where banji='一班'
--求和
select sum(shufen)from student1 where banji='一班'


--分组
--班级分组
select banji from student1 group by banji
--每个班的语文平均分
select banji,AVG(yufen) from student1 group by banji
--每个班的语文大于50的人的个数
select banji,COUNT(*) from student1 where shufen>50 group by banji
--每个班的语文大于50的人的个数大于2个的班级
select banji,COUNT(*) from student1 where shufen>50 group by banji having COUNT(*)>0
--每个班的语文大于50的人的个数大于2个的班级,按个数降序排列
select banji,COUNT(*) from student1 where yingfen>50 group by banji having COUNT(*)>0 order by COUNT(*)


--数值函数
--绝对值
select abs(-9)
--四舍五入
select ROUND(3.14,1)
--平方
select SQUARE(2)
--开平方
select SQRT(4)
--取上限
select CEILING(3.14)
--取下限
select FLOOR(3.14)
--n次方
select POWER(4,3)
--转换数据类型
select CAST(1.23 as int)
select CONVERT(int,1.23)


--字符串函数
--字符串的拼接
select 'a'+'cc'+'ss'
--返回相似度0-4
select DIFFERENCE('asdfgh','asd')
--返回ASCII代码
select ASCII('a')
--将ASCII值转换为字符串
select CHAR(99)
--返回字符串的字符个数
select LEN('qwerty')
--去前空格
select LTRIM(' asd')
--去后空格
select RTRIM('asd ')
--替换
select REPLACE(name,'李丽','李丽丽') from student1
--复制
select REPLICATE('ad',2)
--反转字符串
select REVERSE('asdf')
--将小数转为字符串
select STR(3.14,3,1)
--在字符串中插入字符串
select STUFF('asdf',2,0,'df')
--打空格
select SPACE(4)
--字符串中第一次出现的索引号
select CHARINDEX('a','dsaf')
--左取字符串
select LEFT('qwert',3)
--右取字符串
select right('qwert',3)
--转大写
select UPPER('asd')
--转小写
select LOWER('ASD')

--日期函数
--@@DATEFIRST一周中的第一天, dw是星期几@@系统常量
SELECT @@DATEFIRST AS '1st Day', DATEPART(dw, GETDATE()) AS 'Today'
--返回是星期几
select DATEPART(WEEKDAY,'2012-2-2')
select DATEPART(month,'2012-2-2')
select DATEPART(DAY,'2012-2-2')
--获取当前时间
SELECT GETDATE()
--获取更精确的时间
select SYSDATETIME()
--获取指定日期的年
select YEAR('2010-1-11')
select datename(YEAR,'2013-2-3')
--获取指定日期的月
select month('2010-1-11')
select datename(month,'2013-2-3')
--获取指定日期的日
select day('2010-1-11')
select datename(day,'2013-2-3')
--判断日期格式
select ISDATE('2012-3-33')
--计算两个日期的差值
select DATEDIFF(year,'2013-2-2','2015-3-3')
--在指定日期上加年
select DATEADD(year,2,'2012-2-2')
--在指定日期上加月
select DATEADD(month,2,'2012-2-2')
--在指定日期上加日
select DATEADD(day,2,'2012-2-2')