SQL-Tool-LX2018

--创表示例

create table testtab(
   id int primary key identity(20180,1),   -- identity 是自增  (起始值,每次增值)   -- primary key 主键唯一,且不能为空
   name varchar(20),  --字段设置唯一值(unique)(可为空)    -- name varchar(20)  unique
   phone varchar(20),
   age int,
   birth date      --时间2018-05-24    datetime(yy-mm-dd(hh-mm-ss))
);

--插

insert  into  testtab values('LX','15066668888',20,'2018-5-24');  --向表中插入数据   (默认对应列)

insert  into  testtab(name,phone,age,birth) values('LX','15066668888',20,'2018-5-24');  --向表中插入数据   (一一对应列)

--结构相同的子表

create table testtabson(
   id int primary key identity(20180,1),
   name varchar(20),
   phone varchar(20),
   age int,
   birth date
);

--插表数据到子表(这种方法,可以用,简单易懂易操作;另一种是用数据库直接生成脚本,然后改下表名就可以了(就不示例了,想实践可联系我,也可查资料))

insert into testtabson (name,phone,age,birth)
select name,phone,age,birth
from testtab

--更新(修改)

update testtab set age=18 where id=1

--删除

drop table testtab  --注意:要删除表,要确定表是其他表的外键,是,则删不掉的,必须找到关联的主表,删除后再删该表;或者删除外键后,再删除表

delete from testtab where id=1  --删除该行数据

--查(方法很多,多总结,也就那么几种常用的)

select * from testtab  --最简单查最全(“*”表的所有字段)

select  age from testtab where id=1  --查询满足条件的

select age as a from testtab   --查询结果改列名    as可改列名 可改表名(连表时用,很简洁)  --注意:虚拟存在,其实表结构(列名,表名)并没有修改,我是这样理解的;真正的修改是alter,后面会有示咧。

select name from testtab where age is null   --查询age是空的name行  (不,请加not)

select name, 'sex' as 男 from testtab  --常量  “sex”也是虚拟的字段,“男”是列值

select top 2 name from testtab  --查询name的前两条

select top 20 percent name from testtab   --查询name的20%

select * from where (not)in(all,any,exist)  age>(select *....)   where子查询,简单说一下,因为查询方式很多,就看你想要的是什么结果,还可以和聚合函数,分组,排序联合用;但结构差不多是这样的。

select SQnumber,t.score from(select Row_number() over(order by score desc)SQnumber,a.id,a.score from MP_partyscore a join MP_partymemberdata b on a.id=b.id)t where id=      满足条件的分数排名(上次自己遇到的问题)  这个其实也不复杂,难得想。

--排序

select name from testtab order by id desc  --降序   升序(asc)

--“喜欢”才像

select * from testtab where name like 'L%'    --注意:“like”只能查字符串,“%”代表省略的

--两者之间

select * from testtab where age between 18 and 20  

  --在里面(in)

select name from testtab where age in (20,18,16)    --“in“括号里可换成查询语句,就是子查询了

--分组查询(gruop by 搭配having)

select id,count(name) as a from testtab group by id having id>20185   --group by要在聚合函数(count(),avg(),sum())中使用,having增加限制条件

--连表(现在就要用as来简化)

select * from testtab as a join testtabson as b on a.id=b.id    --不加inner默认是内联  (left outer 左外  right outer 右外  当然也不列外,有左右内连)

--字段类型

image  存储图片

bit  bool数字类型  默认true或false 值默认1或0  插入任何数字类型(除默认外)都显示值1,只有true和false以字符串的格式可插入,显示对应默认值1或0  (不能理解也没啥,bit不常用)

money  自然是存钱的咯,而且精度高

float  存储数字,单精度    小数,存进去是啥就是啥  可与数字类型比较,做运算

decimal   精确数字型   如:decimal(5,2)   共五位数,保留两位小数

text  字符型,存储大量的非统一编码型字符数据

--转换类型

--convert(数据类型[(长度)],表达式[格式])

select convert(nvarchar,name) return  name    参数1:想要转成的数据类型;参数2:可以是表的列名,也可以是自定义参数值    注意:字符串转数字类型,要保证字符串是数字类型;通俗的说是:字符串转换后就必须是数字。
select N’年龄:’+convert(nvarchar,20)    加N编码汉字,不然数据库会不显示完整的汉字(可以说是乱码)

select convert(nvarchar ,getdate(),120)          返回 2018-05-25 12:22:21    getdate() 获取当前时间   也可以替换成某表的时间列字段(记得加上属于那个表哟) 120是固定值   如select convert(nvarchar,birth,120) from testtab
select convert(nvarchar(10) ,getdate(),120)   返回 2018-05-25    类型长度 截取想要的格式    还有其他的方法,改变固定值120,也可以达到不同的格式(111);百度一下,日期格式的转换,你就知道了。

--cast

select cast(20 as nvarchar)   return  20  同理convert
select N’年龄:’+cast(20 as nvarchar)   return  年龄:20

--截取(left,right,substring)

--left,right

--直接上示咧:left(‘love’,2)  参数一:要截取的字符串;参数二:从左往右截取两个   示咧:return  lo  同样参数一可以换成表的列字段  如:select left(name,1) from testtab   right与之类似,不过是从右往左罢了。

--substring

select substring('love20',2,2) 参数一:要截取的字符串;参数二:起始位置2开始截包含2(下标,索引从1开始);参数三:截取的长度。感觉是不是要高大上一点点。  return ov

--alter

--修改表字段类型

alter table testtab alter column age varchar(20)   注意:float转int有数据值时会失败,float可以和decimal间互转,decimal记得表明范围,否则默认为保留整数部分

--给表增加字段

alter table testtab add love varchar(20)

--给表删除字段

alter table testtab drop column love

--给表添加唯一键

alter table testtab add constraint uni unique (name,phone)   注意:如果表已经有数据(重复),修改会失败  uni自定义约束名

--给表添加主键

alter table testtabso add constraint pk_s primary key (id)    注意:限制id要不为空  pk_s自定义主键名,一张表有且仅有一个主键存在

--给表添加外键

alter table testtabson add constraint fk_sid foreign key (sid) references testtab(id);  注意:要分清楚究竟谁是谁的外键,再来关联,关联字段要匹配

--删除(主,外,唯一)键

alter table 表名 drop constraint 自定义名(如pk_s,fk_sid,uni)

--触发器(我觉得挺实用的,在一些表间有关联时,经常用,而且要同时保证数据,这触发器,就是神器了,只是我说的太LOW)

create trigger tri_cfq_del
on testtab
for delete  
as
insert into testtabson(name,phone,age,birth)      注意:删除和插入在 搭配使用时,要用for 在之前就插入;如果说是插入的插入,after和for都可以;字段可多可少,根据需求来;还有就是delete对应deleted,insert对应insertd  说着逗累,上列子
select name,phone,age,birth from deleted                                      update  更新也差不多,就不多说了,有问题可私聊我,或者查资料。删除触发器,drop trigger tri_cfq_del       as后面的T-SQL语句,可根据需要修改,仅供参考。

--执行这个语句,就会触发    delete from testtab where id=20181

create trigger tri_cfq_ins
on testtab
for(after) insert
as
insert into testtabson(name,phone,age,birth)
select name,phone,age,birth from inserted

--同理   insert into testtab values('520','15066668888',20,'2018-5-24');
--存储过程

declare @a int
declare @sum int
set @a=1
set @sum=0
while @a<=100
begin
    set @sum+=@a
    set @a+=1
end
print @sum

待完善,会持续更新,关注俺,你逗会发现,其实我也很懒的,只是偶尔装B

第一次

猜你喜欢

转载自www.cnblogs.com/LX2018/p/LX2018.html