▼テーブルの変更
alter table <テーブル名> CHANGE <古いカラム名> <新しいカラム名> <型情報>;
▼SQL Server時間単位で解析
select
day(update_date),
DATEPART (hour,update_date),
count(*) from event_log
group by day(update_date),DATEPART (hour,update_date)
order by 1,2
▼MySQL 3→12
SQL>show processlist;
SQL>show full processlist;
select name, type, value from V$SYSTEM_PARAMETER where name = 'processes' or name='sessions'
select count(*) as SESSION_CNT from v$session where username = 'ユーザ名';
▼SQL Server
select * from sys.dm_exec_sessions where login_name='ユーザ名';
チューニング
SQLServer
キャッシュを削除
ID 日付 データ
1 1/1 AAA
2 1/1 BBB
3 1/2 CCC
これを日付でグループ化すると
1/1 2
1/2 1
になる。
この種類の数を知りたい場合は
select count(distinct(日付)) from
でOK。
CREATE TABLE TEST_CNT(
VAR1 varchar(10) PRIMARY KEY,
VAR2 varchar(10),
VAR3 varchar(10));
INSERT INTO TEST_CNT VALUES ('1','A1','B1');
INSERT INTO TEST_CNT VALUES ('2','A1','B1');
INSERT INTO TEST_CNT VALUES ('3','A1','B2');
INSERT INTO TEST_CNT VALUES ('4','A1','B2');
INSERT INTO TEST_CNT VALUES ('5','A2','B1');
INSERT INTO TEST_CNT VALUES ('6','A2','B1');
INSERT INTO TEST_CNT VALUES ('7','A2','B2');
INSERT INTO TEST_CNT VALUES ('8','A2','B2');
SELECT VAR2,VAR3 FROM TEST_CNT GROUP BY VAR2,VAR3;
●MySQL
SELECT COUNT(DISTINCT VAR2, VAR3) FROM TEST_CNT;
●Oracle
SELECT COUNT(DISTINCT VAR2 || VAR3) FROM TEST_CNT;
●SQL Server
SELECT COUNT(DISTINCT VAR2 + VAR3) FROM TEST_CNT;
●共通
SELECT COUNT(*) FROM (SELECT COUNT(*) AS CNT FROM TEST_CNT GROUP BY VAR2,VAR3) TEST_CNT;
※「SELECT COUNT(*) AS CNT」にする必要がある。「 AS CNT」が無いとSQL Serverでエラーになる。(Oracle,MySQLはOK)
※最後のに「TEST_CNT」を追加する必要がある。追加しない場合は、MySQL,SQL Serverでエラーになる。(OracleはOK)
最後のに「AS TEST_CNT」を追加するとOracleでエラーになるので、「AS」は不要。
★第二弾フラグあり
CREATE TABLE TEST_CNT2(
VAR1 varchar(10) PRIMARY KEY,
VAR2 varchar(10),
VAR3 varchar(10),
FLG varchar(1));
INSERT INTO TEST_CNT2 VALUES ('1','A1','B1','0');
INSERT INTO TEST_CNT2 VALUES ('2','A1','B1','0');
INSERT INTO TEST_CNT2 VALUES ('3','A1','B2','1');
INSERT INTO TEST_CNT2 VALUES ('4','A1','B2','1');
INSERT INTO TEST_CNT2 VALUES ('5','A2','B1','1');
INSERT INTO TEST_CNT2 VALUES ('6','A2','B1','0');
INSERT INTO TEST_CNT2 VALUES ('7','A2','B2','0');
INSERT INTO TEST_CNT2 VALUES ('8','A2','B2','1');
SELECT VAR2,VAR3 FROM TEST_CNT2 WHERE FLG = '1' GROUP BY VAR2,VAR3;
SELECT COUNT(*) FROM (SELECT COUNT(*) AS CNT FROM TEST_CNT2 WHERE FLG='1' GROUP BY VAR2,VAR3) TEST_CNT;
INSERT/UPDATE
MySQL
「on duplicate key update」
create table a1 (
id int primary key,
memo1 varchar(10),
memo2 varchar(10))
insert into a1 values (1,'c','C')
on duplicate key update
memo1 ='c',
memo2='C'
SQL Server
UPSERT MERGE
merge into a1 using (select 4 as id1) as a2 on a1.id1 = a2.id1
when matched then update set memo2='d', memo3='D'
when not matched then insert values (4,'d','D');
最終更新:2012年11月29日 11:15