--所以数据操作只有四种可能:
1.新增:
insert into 表名(字段列表) values(值列表) --一次只能增加一条记录
1.如果没有确定字段列表,那么需要对所有列添加值
2.标识列不能人为插入值,它是系统自动生成的
3.如果字段有默认值或者可以为null,那么在值列表中可以写null/default
4.如果不想为有默认值的字段或者可以为null的字段赋值,也可以在字段列表中不指定这些字段
5.非空字段必须赋值
6.类型需要一致:
1.所有类型的值都可以包含在‘’以内
2.如果没有包含在‘’以内,那么:
1.如果是数值组成的字符串--OK
2.如果是非数值组成的字符串没有包含在‘’以内,就会报错
7.日期值必须包含在‘’以内,否则就得到默认值--1905-7-2
2.修改:
update 表 set 字段=新值,字段=新值 where 条件
1.修改的值不能违反表的完整性约束
3.删除
delete from 表名 where 条件
1.一条一条记录进行删除,每一条的删除会记录到日志文件中,效率低
2.标识列的值不会重新从种子值计算
3.会触发 delete触发器
truncate table 表名 --不能添加条件
1.一次性删除整个表的数据,日志文件的写入是最小化的
2.标识列会从种子重新计算
3.不会触发delete触发器
聚合函数:
max():必须有参数,但是参数的类型可以是任意的,如果对于数值凡比较大小,如果对于日期,也是比较大小,如果是字符串,就比较A-Z,如果是中文就比较它的拼音A-Z
min():与max一样
sum():必须有参数但是参数的类型必须是数值,不能是字符串或者日期
avg():与sum一样
count():与字段无关,与记录有关,所以参数可以是任意的
查询:
select(5) 字段列表 from(1)表列表 where(2) 源数据的筛选条件 group by(3) 分组字段列表 having(4) 分组结果集的筛选条件 order by(6)最终结果集的数据重排字段列表
1.between...and:对数值进行区间判断,相当于大于等于 小于等于,它的效率比关系运算符要高
2.in:指定一个具体的值的范围,要求值的类型需要一致
3.模糊查询:对字符串而言
通配符
1.%:代表任意个任意字符
2._:代表一个任意字符
3.[]:它代表具体的值或者范围,范围指定只能是a-z A-Z 0-9
3.[^]:不在指定的范围内,必须在[]中才有这个意义
模糊查询关键字:如果使用了通配符做模糊查询,就必须使用关键字:like /not like
类型转换:
cast(源数据 as 目标类型)
convert(目标类型,源数据,日期格式)-- 0-15 100-115
union:合并多个结果集:
1.列有数量一定一致
2.列的类型需要一致
3.union会去除重复记录,union all就不会去除,所有效率更高
--日期函数--
--GETDATE():获取当前系统日期
select GETDATE()
--DATEADD:能够在指定日期上增加指定的时间
select DATEADD(MM,2,GETDATE())
---查询出生已经年有学员信息-
select * from Student where BornDate<DATEADD(yyyy,-20,getdate())
--查询年龄超过岁的学员信息
--DATEDIFF():找出两个日期的差异
select studentname, DATEDIFF(yyyy,borndate,getdate()) as age from Student order by age desc
--DATENAME:日期中指定日期部分的字符串形式
select DATENAME(dw,GETDATE())
--DATEPART:可以得到指定的日期部分2014-4-11 10:47
select cast(DATEPART(yyyy,getdate()) as CHAR(4))+'-'+ cast(DATEPART(mm,getdate()) as CHAR(2))
select DATEPART(dd,getdate())
select DATEPART(hh,getdate())
select DATEPART(mi,getdate())
--查询年龄超过周岁的期班的学生信息。
select * from Student where ClassId=6 and DATEDIFF(yyyy,borndate,getdate())>20
select * from Student where ClassId=6 and BornDate<DATEADD(yyyy,-20,getdate())
--查询月份过生日的学生信息
select * from Student where DATEPART(mm,borndate) =1
--查询今天过生日的学生姓名及所在班级
select * from Student where DATEPART(mm,borndate) =DATEPART(mm,getdate()) and DATEPART(dd,borndate) =DATEPART(dd,getdate())
--查询学号为“”的学生Email的域名。
--新生入学,为其分配一个Email地址,规则如下:GZ+当前日期+4位随机数+@itcast.com
--数学函数--
--rand:随机数
select RAND()
--ABS
select ABS(-123242)
--CEILING:得到比当前数据大的最小整数
select CEILING(16*1.0/5)
--FLOOR:得到比当前数据小的最大整数
select FLOOR(1.99999)
--ROUND:四舍五入:只关注指定的小数位后一位
select ROUND(1.558,1)
--POWER():返回指定表达式的指定幂的值
select POWER(2,3)
--SQRT():返回指定浮点值的平方根
select SQRT(9)
--一次性插入多条记录--
use MySchool
insert into grade values(4,'工具')
insert into Grade (GradeName)
select 'aaa' union all --只有全部写了union all才不会去除重复记录
select 'aaa' union all
select 'aaa' union all
select 'aaa' union all
select 'bb' union all
select 'bb' --union 最后一句不需要加union all,在union里面不能写Default
select * from Grade
---一次性插入多条记录
--1。select 字段列表/* into 目的表 from 源表会生成一个与查询字段相同结构的新表,也就意味着新表不能先存在,它是系统生成的
select classname into newGrade from Grade
truncate table grade
--2. insert into 目的表名select * from 源表:目的表必须先存在,如果没有存在,就报错了
--select classname into Grade from newGrade
insert into Grade select * from newgrade
select * into newGrade from Grade
--使用select into from 生成的新表字段的属性都会消失,除了标识列属性之外
select * from newGrade
---字符串函数--
--1.CHARINDEX:第一个参数是需要查询的字符串,第二个是源字符串,第三个是开始查询的位置,从开始计算
select CHARINDEX('人民','中华人民共和国',4)
--2.LEN:得到指定字符的个数,与中英文无关
select LEN('中华人民aa')
--3.UPPER():将英文小写转换为大写LOWER()将大写转换为小写
select lower(UPPER('fgasdfasf'))
--4.LTRIM RTRIM,没有trim函数 Trim() TrimStart() TrimEnd();
SELECT ltrim(Rtrim(' dfg hjkl '))+'柘城s'
--5.REPLACE 替换,如果没有找到对应需要替换的,就返回原始字符串值
select REPLACE('中华人民共和国','人d民','公仆')
--6.RIGHT() LEFT():参数可以大于字符串的长度,但是不能是负值
select right('中华人民共和国',-10)
--7.
select SUBSTRING('中华sdsfdsf人民共和国',CHARINDEX('人民','中华sdsfdsf人民共和国'),2)
--STUFF
select STUFF('中华人民共和国',3,2,'dfasfasdfasd')
--wuhu0723@126.com
select CHARINDEX('@','wuhu0723@126.com')
select LEFT('wuhu0723@126.com',CHARINDEX('@','wuhu0723@126.com')-1)
select right('wuhu0723@126.com',len('wuhu0723@126.com')-CHARINDEX('@','wuhu0723@126.com'))