--創表示例 create table testtab( id int primary key identity(20180,1), -- identity 是自增 (起始值,每次增值) -- primary key 主鍵唯一,且不能為空 name varchar(20), --欄位設置唯一值(un ...
--創表示例
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
第一次