青島のしま〜Blue Islands〜


SQL Tips

オートナンバー型のメンバーを持つテーブルを作成する

  • Jet(MS Access)の場合,AUTOINCREMENTまたは,COUNTER (1,1)を指定する
  • MS SQL Serverの場合は, smallint AUTO_INCREMENTもしくは, smallint IDENTITY (1, 1)のように指定する(#(1, 1)は,(初期値,増加数))
  • CREATE TABLE ほげ (ID AUTOINCREMENT PRIMARY KEY,
                       NAME VARCHAR(50))
    

レコードの中から,最大値を得る

Select MAX(ID) From tablename
ちなみに,最近では,トップ10を取得することもできるようです.

Microsoft SQL Serverでコンソールから直接SQLを入力する

フリーで入れることの入れるMSDE(Microsoft Desktop Engine)では,付属の管理ツールがついていません.
Visual Studio上から,サーバーエクスプローラを使って,データベースを操作することはできるのですが,項目が多い場合などGUIで対話的に入力していくのは不便です.
そのため,SQLで一括データ操作をしたいところですが,
「osql.exe」もしくは「sqlcmd.exe」というツールを使えばSQLを入力することができます.

コマンドプロンプトから,以下のように実行します.

osql -E                   ←-Eは,統合Windows認証を使うという意味
1> use test              ←DBの指定
2> select * from Books   ←テーブルの中身の表示
3> go                    ←入力した命令を実行
SQL Server 2005 Expressでは,次のようにしないとエラーになります.
osql -S マシン名\SQLEXPRESS -E 
sqlcmdの場合は以下のようにします
sqlcmd -S .\SQLExpress
1> use test              ←DBの指定
2> select * from Books   ←テーブルの中身の表示
3> go                    ←入力した命令を実行

参考
http://www.uchukamen.com/Programming3/SetupMSDE/index.htm

sqlcmd(SQL Server)の使い方

データベースの一覧表示

> select name from sys.databases
> go

使用しているデータベースの切り替え

> use データベース名
> go

現在のデータベースのテーブルの一覧表示

> select name from sys.tables
> go

ADO.NET で SQL Server に接続する

ADO.NET で SQL Server に接続するには,System.Data.SqlClient.SqlConnection クラスの Open メソッドを使用します
    // 接続文字列を生成する
    string stConnectionString = "Data Source         = ServerName;"
                              + "Initial Catalog     = DB名;"
                              + "Integrated Security = True;";

    // SqlConnection の新しいインスタンスを生成する (接続文字列を指定)
    System.Data.SqlClient.SqlConnection hConnection = 
        new System.Data.SqlClient.SqlConnection(stConnectionString);

    // データベース接続を開く
    hConnection.Open();

    try {
        // 挿入,削除,更新処理
    }

    // データベース接続を閉じる (正しくは オブジェクトの破棄を保証する を参照)
    hConnection.Close();
    hConnection.Dispose();
参考: http://jeanne.wankuma.com/tips/sqlserver/open.html

SQL Serverのデータ型

参照: http://www.uchukamen.com/SQL2000/DataType.htm

Oracleでコンソールから直接SQLを入力する

Oracleには,sql*plusというツールがあるので,これを利用します.
コマンドプロンプトから,以下のように実行します.
(プログラムのメニューから実行することもできますが,コマンドプロンプトから呼び出したほうが使いやすいです)
sqlplus

ユーザ名とパスワードを指定して実行する場合はこのようにします.

sqlplus scott/tiger

SQL文を別ファイルに作っておいて,実行することもできます.

sqlplus @showTable.sql
ログインしてからも別ファイルを実行できます.
sqlplus
SQL> @showTable.sql;
SQL> @c:\home\sql\showTable.sql;  ←フルパスで指定する場合

sqlplusのコマンドは,以下のサイト参照
http://www.ne.jp/asahi/hishidama/home/tech/oracle/sqlplus.html#exp

OracleからCSV出力

set linesize 10000
set pagesize 0
set heading off
set feedback off
set trimspool on
set termout off
set colsep ','

spool OUT.csv
select * from tbTable1;
spool off
quit

操作関連(MS SQL Server)

テーブル作成

create table tbBook (
 id                INT NOT NULL,
 name              NVARCHAR(20)
);
参考: http://www.atmarkit.co.jp/fnetwork/rensai/sql10/sql1.html http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_k01.htm

テーブルの構成を一部変更する

項目を追加する
alter table tbTable1 add(
  新項目1 NVARCHAR(40)
);
項目長を変更する
alter table tbTable1 modify (
  name    NVARCHAR(60)
);

テーブルを削除する

drop table tbTable1;

操作関連(Oracle)

スキーマテーブル一覧表示

tabというテーブルは特殊な意味を持ちます.
select * from tab;

テーブルレイアウトを表示する

SQL> desc テーブル名;

ファイル出力

spool ファイル名;
...
...
spool off;

データの挿入

要素名を指定していれる場合
insert into table1 (
          ID,
          名前,
          更新日付,
          更新時間
        ) values (
          'a001',
          'hoge',
          '19990401',
          '111200'
        );
要素名を省略する場合は,すべての値を入れる
insert into table1 values (
          'a001',
          'hoge',
          '19990401',
          '111200'
          35,
          40,
          45,
        );

データの更新

update table1 set
          更新日付   = '19990403',
          更新時間   = '111600'
        where ID = 'a001'
一部項目のみの更新も可能

データの削除

delete from table1
          where ID = 'a001'

参考: http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_k10.htm


作成日: 2006年03月30日21時31日21秒
更新履歴
2008年07月22日 2008年02月08日 2008年02月06日 2008年02月05日 2007年10月25日 2006年12月20日 2006年12月19日 2006年12月05日 2006年09月20日 2006年06月18日 2006年06月12日 2006年04月22日 2006年03月30日 2006年02月28日 2006年02月23日 2006年02月18日 2006年01月13日 2005年12月21日