記錄下平時寫的稍微複雜點的sql
#說明 a b是一對多關係 乙個a有多個b 查詢a中已有b的且狀態不是11020403的a資料
select * from a where id not
in(select id from b where cp_status <> '11020403'
group
by id) and id in (select id from b group
by id)
--exists和1
in效果相同
select * from a
where
exists(select
1from b where id=a.id)
andnot
exists (select
1from b where id=a.id and cp_status<>'11020403')
sql執行時間
declare
@v_a datetime;
declare
@v_b datetime;
set@v_a=
getdate()
;select * from
a;set
@v_b = getdate()
;select
datediff(ms,@v_a,@v_b) as '用時/毫秒'
發現exists比in要快那麼一點
#儲存過程裡的賦值語句,當結果有多條時,賦值的是最後一條的值
select @v_new_name = param_name from qlc_tintparam where param_value = '3'
當用group by後想查結果的條數,發現count(*)是計算每組的條數
用select count(distinct trade_no) from b 能得到組數
#sqlserver中可用case when來實現結果轉換
(case when a.verify_state = 0
then n'未核對'
when a.verify_state = 1
then n'已核對'
else n'核對有誤'
end) as verify_state_nam
--判斷是否有欄位 來加欄位
if not exists(select
1from syscolumns where id = object_id('abcd') and name = 'flow_id')
alter
table abcd add flow_id int
null
go--新增檢視
ifexists (select
1from sysobjects where name = 'v_qlc')
drop
view v_qlc
gocreate
view v_qlc
as
#插入資料並返回主鍵
strsql = "insert
into tablename (name) values (@name);
select @@identity
"
select d.*, (select
cast(list_id as nvarchar(30))+','
where a.loan_id = b.loan_id and a.contract_id = c.contract_id and a.deal_flag = 1
and a.problem_id ='ue3df3a1063411e8a3be2c337a1a91d6'
and b.product_id = d.product_id and a.contract_id = d.contract_id and a.trade_no = d.trade_no and a.acc_date = d.acc_date
for xml path('')) list_id_str from
(select b.product_id, a.contract_id, a.trade_no, a.acc_date, isnull(c.toll_flag,0) as toll_flag ,sum(isnull(a.acc_money,0)) acc_money,sum(isnull(a.tax_base,0)) tax_base,sum(isnull(a.tax,0)) tax
where a.loan_id = b.loan_id and a.contract_id = c.contract_id and a.problem_id = 'ue3df3a1063411e8a3be2c337a1a91d6'
group
by b.product_id, a.contract_id, a.trade_no, a.acc_date,c.toll_flag) d
– for xml path(」)) list_id_str ,能得到不groupby 參與的字串集合 sql語句集合
新增注釋 給資料庫表新增注釋 comment on table 表名 is 注釋 給表字段新增注釋 comment on column 表名.欄位名 is 注釋 修改表結構 增加字段 alter table 使用者名稱 如果需要 表名 add 欄位名 資料型別 修改字段型別 alter table ...
SQL 語句集合
where 子句 操作符 描述 等於 不等於 where 子句 大於 小於 大於等於 小於等於 between 在某個範圍內 like 搜尋某種模式 備註 在某些版本的 sql 中,操作符 可以寫為 sql 使用單引號來環繞文字值 大部分資料庫系統也接受雙引號 如果是數值,請不要使用引號。例如 如果...
SQL語句 操作集合
保留小數字數 select cast 列名as 數值型別,如decimal,numeric等 長度,小數點後位數 列名 from 表名 例 select cast sid as decimal 18,2 sid from user case 用法 單條件 select case xx when nu...