アットウィキロゴ

SQL

▼テーブルの変更
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;

Oracle
  • 設定の確認
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

キャッシュを削除

  • GROUP BYした結果の件数の取得方法
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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。