SQL入门(3)

--所以数据操作只有四种可能:

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

---一次性插入多条记录

--1select 字段列表/*  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'))

原文地址:https://www.cnblogs.com/pengJk/p/6322578.html