すばらしいSql文

2527 ワード

1.aテーブルにあると判断し、bテーブルにないレコード
select a.* from tbl1 a

left join tbl2 b on a.key = b.key

where b.key is null

inを用いても実現できるが,この方法の効率はもっと高い.
2.あるテーブルと同じ構造のテーブルを新規作成する
select * into b
from a where 1<>1
3.betweenの使用方法、betweenはクエリーデータの範囲を制限する時境界値を含んで、not betweenは含みません
select * from table1 where time between time1 and time2
select a,b,c,from table 1 where a not between数値1 and数値2
4.説明:TableBおよびTableCにないすべての行を含み、すべての重複行を除去して結果テーブルを生成する
(select a from tableA ) except (select a from tableB) except (select a from tableC)
5.表を初期化し、自己成長表のワード成長フィールドを1にすることができる
TRUNCATE TABLE table1
6.多言語設定データベースまたはテーブルまたはorder byのソートルール
--ユーザー・データベースのソート・ルールの変更
ater database dbname collate SQL_Latin1_General_CP1_CI_AS
--フィールドの並べ替え規則を変更する
alter table a alter column c2 varchar(50) collate SQL_Latin1_General_CP1_CI_AS
--姓の筆画順
select*fromテーブル名order by列名Collate Chinese_PRC_Stroke_ci_as
--ピンインの頭文字で並べ替え
select*fromテーブル名order by列名Collate Chinese_PRC_CS_AS_KS_WS
7.すべてのユーザー・データ・テーブルをリストします.
SELECT TOP 100 PERCENT o.name AS表名
FROM dbo.syscolumns c INNER JOIN
      dbo.sysobjects o ON o.id = c.id AND objectproperty(o.id, N'IsUserTable') = 1 AND
      o.name <> 'dtproperties' LEFT OUTER JOIN
      dbo.sysproperties m ON m.id = o.id AND m.smallid = c.colorder
WHERE (c.colid = 1)
ORDER BY o.name, c.colid
 
8.すべてのユーザーデータテーブルとそのフィールド情報をリストします.
SELECT TOP 100 PERCENT c.colid AS番号、o.name AS表名、c.name AS列名、
t.name ASタイプ、c.length AS長、c.isnullable AS許容空、
CAST(m.[value]AS Varchar(100))AS説明
FROM dbo.syscolumns c INNER JOIN
      dbo.sysobjects o ON o.id = c.id AND objectproperty(o.id, N'IsUserTable') = 1 AND
      o.name <> 'dtproperties' INNER JOIN
      dbo.systypes t ON t.xusertype = c.xusertype LEFT OUTER JOIN
      dbo.sysproperties m ON m.id = o.id AND m.smallid = c.colorder
ORDER BY o.name, c.colid
9.Left,right Joinのもう一つの簡潔な書き方
select*from a,b where a.id*=b.id--(*=LEFTJOIN相当)
select*from a,b where a.id=*b.id--(=*Right JOIN相当)
10.Update fromとdelete from
11.表中最小の未使用ID番号を得る
         SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1)
THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID
FROM Handle
WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)
12.ランダム取得記録
         SELECT TOP 10 * FROM T1 ORDER BY NEWID()