#前書き
SQL Serverを扱える人が周りにいないので何かあった時のためにまとめ。
書く前からOut of dateな感じがバリバリする…
当方のテーブルの列名は太古の昔の名残で全部大文字なので予約語は基本的に小文字でござい
#環境
Microsoft SQL Server 2014(2020/11現在)
- ちょっと古い
- FOR JSONが使えたらどんなに良かったか
#select
select.sql
--基本の文
select [列名1], [列名2] from [テーブル名1]
--その他
--テーブル結合系
inner join [テーブル名2] on [テーブル名1].[列名1] = [テーブル名2].[列名2] --内部結合
left join [テーブル名2] on [テーブル名1].[列名1] = [テーブル名2].[列名2] --左外部結合
right join [テーブル名2] on [テーブル名1].[列名1] = [テーブル名2].[列名2] --右外部結合
cross join [テーブル名2] --クロス結合
full join [テーブル名2] --完全外部結合
--抽出条件(グループ化前)
where [列名1] = [値]
and [列名1] like '[値]%' --ワイルドカード
or not [列名1] in ('[値]','[値]') --複数の値から抽出
--グループ化
group by [列名1]
--抽出条件(グループ化後)
having [列名1] = [値]
--並べ替え
order by [列名1] asc --昇順
, [列名2] desc; --降順
ちょっと特殊な使い方
selectでテーブル1から抽出したデータでテーブル2がcreateされる
select_into.sql
select * into [テーブル2]
from [テーブル1];
#insert
insert.sql
--挿入する値と列が一致している場合
insert into [テーブル名]
values ('[値]','[値]');
--挿入する値と列が一致していない場合
insert into [テーブル名]
([列1],[列2])
values ('[値]','[値]');
--select結果を挿入する場合
insert into [テーブル名1]
([列1],[列2])
select *
from [テーブル名2] ;
#update
update.sql
--指定した列のすべてのレコードを更新
update [テーブル名1]
set [列名] = [値]
--条件を指定して更新
update [テーブル名1]
set [列名] = [値]
where [列名] = [値];
--select結果を使って更新
update [テーブル名1]
set [テーブル名1].[列名1] = [テーブル名2][列名2]
, ...
from [テーブル名1]
inner join [テーブル名2] on [列名1] = [列名2];
#delete(&truncate)
delete.sql
--条件に当てはまるレコードを削除(where句を書かなければ全件削除)
delete from [テーブル名1]
where [列名1] = [値];
--その他の全件削除(基本こっち)
truncate table [テーブル名1];
#create
create.sql
--テーブル作成
create table [テーブル名](
[列名1] [型] [項目長]
, [列名2] [型] [項目長] not null --null不可
, [列名3] [型] [項目長] default [値] --初期値の設定
, primary key([列名1], [列名2])
);
--view作成
create view [ビュー名] as
select * from [テーブル名]; --クエリ
--ストアド作成
create procedure [ストアド名]
as
begin
begin try --この中のエラーでエラーが出るとcatchが呼ばれる
return(0)
end as try
begin catch
end as catch
--エラー後の処理
end as
ストアドについては長くなるので改めてまとめたい
#関数その他
others.sql
--日付取得
, getdate()
--表示形式変換
, convert(nvarchar, getdate(), 111) --111の部分を変えると形式が変わる
--型変換
, cast([列名] as varchar)
--ゼロパディング等
, format([列名],'0000')
--条件分岐
, case
when then
else
end as as
--文字列内検索
, charindex( 検索文字列, 検索対象文字列[, 位置 ] )
--文字切り取り
, substring([列名],1,1)
--列名取得
, col_name(object_id('[テーブル名]') , 列数 )
--レコードナンバー作成
, row_number() over (partition by [列名] order by [列名]desc)
--切り捨て
, floor([列名])
--切り上げ
, ceiling([列名])
--四捨五入
, round([列名],桁数)
とりあえず以上
全然書ききれないので今後追加したい