T-SQL-クイックガイド

1970年代に、IBMによって開発された構造化英語クエリ言語である「SEQUEL」と呼ばれる製品が、後にSEQUELの名前が「SQL」に変更されました。これは構造化クエリ言語の略です。

1986年にSQLはANSI(米国規格協会)によって承認され、1987年にISO(国際標準化機構)によって承認されました。

SQLは、すべてのRDBMS製品に共通のデータベース言語である構造クエリ言語です。さまざまなRDBMS製品ベンダーが、独自のRDBMS製品用にSQLを拡張することにより、独自のデータベース言語を開発しています。

T-SQLは、Microsoft製品であり、SQL言語の拡張であるTransact Structure QueryLanguageの略です。

MS SQL Server-SQL \ T-SQL

ORACLE-SQL \ PL-SQL

SQL Serverデータ型は、任意のオブジェクトのデータ型を指定する属性です。SQL Serverでは、各列、変数、および式に関連するデータ型があります。これらのデータ型は、テーブルの作成時に使用できます。要件に基づいて、テーブル列の特定のデータ型を選択できます。

SQL Serverは、使用するデータ型の他のカテゴリを含む7つのカテゴリを提供します。

正確な数値タイプ

タイプ から
bigint -9,223,372,036,854,775,808 9,223,372,036,854,775,807
int -2,147,483,648 2,147,483,647
smallint -32,768 32,767
tinyint 0 255
ビット 0 1
10進数 -10 ^ 38 +1 10 ^ 38 –1
数値 -10 ^ 38 +1 10 ^ 38 –1
お金 -922,337,203,685,477.5808 +922,337,203,685,477.5807
smallmoney -214,748.3648 +214,748.3647

数値と小数は固定精度とスケールのデータ型であり、機能的には同等です。

おおよその数値タイプ

タイプ から
浮く -1.79E + 308 1.79E + 308
リアル -3.40E + 38 3.40E + 38

日付と時刻のタイプ

タイプ から

datetime(3.33ミリ秒の精度)

1753年1月1日 9999年12月31日

smalldatetime(1分精度)

1900年1月1日 2079年6月6日

date(1日の精度。SQLServer2008で導入)

0001年1月1日 9999年12月31日

datetimeoffset(100ナノ秒の精度。SQLServer2008で導入)

0001年1月1日 9999年12月31日

datetime2(100ナノ秒の精度。で導入されました SQL Server 2008

0001年1月1日 9999年12月31日

time(100ナノ秒の精度。で導入されました SQL Server 2008

00:00:00.0000000 23:59:59.9999999

文字列

シニア番号 タイプと説明
1

char

最大長が8,000文字の固定長の非Unicode文字データ。

2

varchar

最大8,000文字の可変長の非Unicodeデータ。

3

Varchar (max)

最大長が231文字の可変長の非Unicodeデータ(SQL Server 2005で導入)。

4

text

最大長が2,147,483,647文字の可変長の非Unicodeデータ

Unicode文字列

シニア番号 タイプと説明
1

nchar

最大長が4,000文字の固定長Unicodeデータ。

2

nvarchar

最大4,000文字の可変長Unicodeデータ。

3

Nvarchar (max)

2つの最大長を有する可変長Unicodeデータ30(SQL Server 2005で導入された)文字。

4

ntext

最大長が1,073,741,823文字の可変長Unicodeデータ。

バイナリ文字列

シニア番号 タイプと説明
1

binary

最大長が8,000バイトの固定長のバイナリデータ。

2

varbinary

最大長が8,000バイトの可変長バイナリデータ。

3

varbinary(max)

2つの最大長を有する可変長のバイナリデータ31(SQL Server 2005で導入された)バイト。

4

image

最大長が2,147,483,647バイトの可変長バイナリデータ。

その他のデータ型

  • sql_variant − text、ntext、timestampを除く、SQLServerでサポートされているさまざまなデータ型の値を格納します。

  • timestamp −行が更新されるたびに更新されるデータベース全体の一意の番号を格納します。

  • uniqueidentifier −グローバル一意識別子(GUID)を格納します。

  • xml−XMLデータを格納します。XMLインスタンスを列または変数に格納できます(SQL Server 2005で導入)。

  • cursor −カーソルへの参照。

  • table −後で処理するために結果セットを保存します。

  • hierarchyid −階層内の位置を表すために使用される可変長のシステムデータ型(SQL Server 2008で導入)。

基本テーブルの作成には、テーブルに名前を付け、その列と各列のデータ型を定義することが含まれます。

SQLServer CREATE TABLE ステートメントは、新しいテーブルを作成するために使用されます。

構文

以下は、CREATETABLEステートメントの基本的な構文です。

CREATE TABLE table_name( 
   column1 datatype, 
   column2 datatype, 
   column3 datatype, 
   ..... 
   columnN datatype, 
   PRIMARY KEY( one or more columns ));

CREATE TABLEは、データベースシステムに何をしたいかを伝えるキーワードです。この場合、新しいテーブルを作成する必要があります。テーブルの一意の名前または識別子は、CREATETABLEステートメントの後に続きます。次に、括弧内に、テーブルの各列とそれがどのような種類のデータ型であるかを定義するリストがあります。次の例を使用すると、構文がより明確になります。

既存のテーブルのコピーは、CREATETABLEステートメントとSELECTステートメントの組み合わせを使用して作成できます。詳細については、別のテーブルを使用したテーブルの作成で確認できます。

この例では、IDを主キーとしてCUSTOMERSテーブルを作成します。NOTNULLは、このテーブルにレコードを作成するときにこれらのフィールドをNULLにできないことを示す制約です。

CREATE TABLE CUSTOMERS( 
   ID   INT              NOT NULL, 
   NAME VARCHAR (20)     NOT NULL, 
   AGE  INT              NOT NULL, 
   ADDRESS  CHAR (25) , 
   SALARY   DECIMAL (18, 2),        
   PRIMARY KEY (ID));

SQLサーバーによって表示されるメッセージを確認することで、テーブルが正常に作成されたかどうかを確認できます。それ以外の場合は、次のコマンドを使用できます。

exec sp_columns CUSTOMERS

上記のコマンドは、次の出力を生成します。

TABLE_QUALIFIER   TABLE_OWNER   TABLE_NAME   COLUMN_NAME   DATA_TYPE   TYPE_NAME
   PRECISION   LENGTH SCALE   RADIX   NULLABLE   REMARKS   COLUMN_DEF   SQL_DATA_TYPE 
   SQL_DATETIME_SUB   CHAR_OCTET_LENGTH   ORDINAL_POSITION   IS_NULLABLE   SS_DATA_TYPE
   
TestDB    dbo    CUSTOMERS   ID        4    int      10   4    0      10     0
   NULL   NULL   4   NULL    NULL      1    NO       56 
   
TestDB    dbo    CUSTOMERS   NAME      12   varchar  20   20   NULL   NULL   0
   NULL   NULL   12   NULL   20        2    NO       39
  
TestDB    dbo    CUSTOMERS   AGE       4    int      10   4    0      10     0
   NULL   NULL   4   NULL    NULL      3    NO       56 
 
TestDB    dbo    CUSTOMERS   ADDRESS   1    char     25   25   NULL   NULL   1
   NULL   NULL   1   NULL    25   4    YES  39  

TestDB    dbo    CUSTOMERS   SALARY    3    decimal  18   20   2      10     1
   NULL   NULL   3   NULL    NULL      5    YES      106

これで、顧客に関連する必要な情報を格納するために使用できるCUSTOMERSテーブルがデータベースで使用可能であることがわかります。

SQLServer DROP TABLE ステートメントは、テーブル定義と、そのテーブルのすべてのデータ、インデックス、トリガー、制約、およびアクセス許可の仕様を削除するために使用されます。

Note −このコマンドを使用するときは注意が必要です。テーブルが削除されると、テーブルで使用可能なすべての情報も永久に失われるためです。

構文

以下は、DROPTABLEステートメントの基本的な構文です。

DROP TABLE table_name;

最初にCUSTOMERSテーブルを確認してから、データベースから削除します-

Exec sp_columns CUSTOMERS;

上記のコマンドは、次の表を示しています。

TABLE_QUALIFIER   TABLE_OWNER   TABLE_NAME   COLUMN_NAME   DATA_TYPE   TYPE_NAME
   PRECISION   LENGTH SCALE   RADIX   NULLABLE   REMARKS   COLUMN_DEF   SQL_DATA_TYPE 
   SQL_DATETIME_SUB   CHAR_OCTET_LENGTH   ORDINAL_POSITION   IS_NULLABLE   SS_DATA_TYPE
   
TestDB    dbo    CUSTOMERS   ID        4   int        10   4    0      10     0
   NULL   NULL   4   NULL    NULL      1   NO         56 
   
TestDB    dbo    CUSTOMERS   NAME      12  varchar    20   20   NULL   NULL   0
   NULL   NULL   12   NULL   20        2   NO         39
  
TestDB    dbo    CUSTOMERS   AGE       4   int        10   4    0      10     0
   NULL   NULL   4   NULL    NULL      3   NO         56 
 
TestDB    dbo    CUSTOMERS   ADDRESS   1   char       25   25   NULL   NULL   1
   NULL   NULL   1   NULL    25        4   YES        39  

TestDB    dbo    CUSTOMERS   SALARY   3   decimal     18   20   2      10     1
   NULL   NULL   3   NULL    NULL     5   YES         106

CUSTOMERSテーブルはデータベースで利用できるので、削除しましょう。以下はそのためのコマンドです。

DROP TABLE CUSTOMERS; 
Command(s) completed successfully.

上記のコマンドでは、行は取得されません。

Exec sp_columns CUSTOMERS; 
No rows\data will be displayed

SQLServer INSERT INTO ステートメントは、データベース内のテーブルにデータの新しい行を追加するために使用されます。

構文

以下は、INSERTINTOステートメントの2つの基本的な構文です。

INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]   
VALUES (value1, value2, value3,...valueN);

ここで、column1、column2、... columnNは、データを挿入するテーブル内の列の名前です。

テーブルのすべての列に値を追加する場合は、SQLクエリで列名を指定する必要はありません。ただし、値の順序がテーブルの列と同じ順序であることを確認してください。以下はSQLINSERTINTO構文です-

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

次のステートメントは、CUSTOMERSテーブルに6つのレコードを作成します-

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );
  
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );  

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );  

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 ); 
 
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );  

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (6, 'Komal', 22, 'MP', 4500.00 );

構文

次のように2番目の構文を使用して、CUSTOMERSテーブルにレコードを作成できます。

INSERT INTO CUSTOMERS VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );

上記のすべてのステートメントは、CUSTOMERSテーブルに次のレコードを生成します-

ID  NAME       AGE         ADDRESS              SALARY 
1   Ramesh     32          Ahmedabad            2000.00 
2   Khilan     25          Delhi                1500.00 
3   kaushik    23          Kota                 2000.00 
4   Chaitali   25          Mumbai               6500.00 
5   Hardik     27          Bhopal               8500.00 
6   Komal      22          MP                   4500.00 
7   Muffy      24          Indore               10000.00

別のテーブルを使用して1つのテーブルにデータを入力する

別のテーブルに最初のテーブルにデータを入力するために必要なフィールドのセットがある場合は、別のテーブルに対してSELECTステートメントを使用してデータをテーブルに入力できます。以下は構文です-

INSERT INTO first_table_name  
   SELECT column1, column2, ...columnN  
      FROM second_table_name 
      [WHERE condition];

SQLサーバー SELECTステートメントは、結果テーブルの形式でデータを返すデータベーステーブルからデータをフェッチするために使用されます。これらの結果テーブルはresult-sets

構文

SELECTステートメントの基本的な構文は次のとおりです-

SELECT column1, column2, columnN FROM table_name;

ここで、column1、column2 ...は、値をフェッチするテーブルのフィールドです。フィールドで使用可能なすべてのフィールドをフェッチする場合は、次の構文を使用できます-

SELECT * FROM table_name;

次のレコードを持つCUSTOMERSテーブルについて考えてみます-

ID  NAME       AGE       ADDRESS             SALARY 
1   Ramesh     32        Ahmedabad           2000.00 
2   Khilan     25        Delhi               1500.00 
3   kaushik    23        Kota                2000.00 
4   Chaitali   25        Mumbai              6500.00 
5   Hardik     27        Bhopal              8500.00 
6   Komal      22        MP                  4500.00 
7   Muffy      24        Indore              10000.00

次のコマンドは例です。これは、CUSTOMERSテーブルで使用可能な顧客のID、名前、および給与フィールドをフェッチします。

SELECT ID, NAME, SALARY FROM CUSTOMERS;

上記のコマンドは、次の出力を生成します。

ID  NAME          SALARY 
1   Ramesh        2000.00 
2   Khilan        1500.00 
3   kaushik       2000.00 
4   Chaitali      6500.00 
5   Hardik        8500.00 
6   Komal         4500.00 
7   Muffy         10000.00

CUSTOMERSテーブルのすべてのフィールドをフェッチする場合は、次のクエリを使用します-

SELECT * FROM CUSTOMERS;

上記により、以下の出力が生成されます。

ID  NAME       AGE       ADDRESS              SALARY 
1   Ramesh     32        Ahmedabad            2000.00 
2   Khilan     25        Delhi                1500.00 
3   kaushik    23        Kota                 2000.00 
4   Chaitali   25        Mumbai               6500.00 
5   Hardik     27        Bhopal               8500.00 
6   Komal      22        MP                   4500.00 
7   Muffy      24        Indore               10000.00

SQLServer UPDATE クエリは、テーブル内の既存のレコードを変更するために使用されます。

WHERE句をUPDATEクエリとともに使用して、選択した行を更新できます。そうしないと、すべての行が影響を受けます。

構文

以下は、WHERE句を使用したUPDATEクエリの基本構文です。

UPDATE table_name 
SET column1 = value1, column2 = value2...., columnN = valueN 
WHERE [condition];

ANDまたはOR演算子を使用して、N個の条件を組み合わせることができます。

次のレコードを持つCUSTOMERSテーブルについて考えてみます-

ID  NAME       AGE       ADDRESS             SALARY 
1   Ramesh     32        Ahmedabad           2000.00 
2   Khilan     25        Delhi               1500.00 
3   kaushik    23        Kota                2000.00 
4   Chaitali   25        Mumbai              6500.00 
5   Hardik     27        Bhopal              8500.00 
6   Komal      22        MP                  4500.00 
7   Muffy      24        Indore              10000.00

次のコマンドは、IDが6 −の顧客のADDRESSを更新する例です。

UPDATE CUSTOMERS 
SET ADDRESS = 'Pune' 
WHERE ID = 6;

CUSTOMERSテーブルには次のレコードが含まれるようになります-

ID  NAME       AGE       ADDRESS             SALARY 
1   Ramesh     32        Ahmedabad           2000.00 
2   Khilan     25        Delhi               1500.00 
3   kaushik    23        Kota                2000.00 
4   Chaitali   25        Mumbai              6500.00 
5   Hardik     27        Bhopal              8500.00 
6   Komal      22        Pune                4500.00 
7   Muffy      24        Indore              10000.00

CUSTOMERSテーブルのすべてのADDRESS列とSALARY列の値を変更する場合は、WHERE句を使用する必要はありません。UPDATEクエリは次のようになります-

UPDATE CUSTOMERS 
SET ADDRESS = 'Pune', SALARY = 1000.00;

CUSTOMERSテーブルには次のレコードが含まれるようになります。

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Pune             1000.00 
2   Khilan     25        Pune             1000.00 
3   kaushik    23        Pune             1000.00 
4   Chaitali   25        Pune             1000.00 
5   Hardik     27        Pune             1000.00 
6   Komal      22        Pune             1000.00 
7   Muffy      24        Pune             1000.00

SQLServer DELETE クエリは、テーブルから既存のレコードを削除するために使用されます。

選択した行を削除するには、DELETEクエリでWHERE句を使用する必要があります。そうしないと、すべてのレコードが削除されます。

構文

以下は、WHERE句を使用したDELETEクエリの基本構文です。

DELETE FROM table_name 
WHERE [condition];

ANDまたはOR演算子を使用して、N個の条件を組み合わせることができます。

次のレコードを持つCUSTOMERSテーブルについて考えてみます-

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00

次のコマンドは、IDが6 −の顧客を削除する例です。

DELETE FROM CUSTOMERS 
WHERE ID = 6;

CUSTOMERSテーブルには次のレコードが含まれるようになります。

ID  NAME       AGE       ADDRESS              SALARY 
1   Ramesh     32        Ahmedabad            2000.00 
2   Khilan     25        Delhi                1500.00 
3   kaushik    23        Kota                 2000.00 
4   Chaitali   25        Mumbai               6500.00 
5   Hardik     27        Bhopal               8500.00 
7   Muffy      24        Indore               10000.00

CUSTOMERSテーブルからすべてのレコードを削除する場合は、WHERE句を使用する必要はありません。DELETEクエリは次のようになります-

DELETE FROM CUSTOMERS;

CUSTOMERSテーブルにはレコードがなくなります。

MS SQL Server WHERE 句は、単一のテーブルからデータをフェッチするとき、または複数のテーブルと結合するときに条件を指定するために使用されます。

指定された条件が満たされた場合にのみ、テーブルから特定の値を返します。WHERE句を使用してレコードをフィルタリングし、必要なレコードのみをフェッチする必要があります。

WHERE句は、SELECTステートメントで使用されるだけでなく、UPDATE、DELETEステートメントなどでも使用されます。これらについては、以降の章で説明します。

構文

以下は、WHERE句を使用したSELECTステートメントの基本構文です。

SELECT column1, column2, columnN  
FROM table_name 
WHERE [condition]

>、<、=、LIKE、NOTなどの比較演算子または論理演算子を使用して条件を指定できます。次の例で、この概念を明確にします。

次のレコードを持つCUSTOMERSテーブルについて考えてみます-

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00

次のコマンドは、salaryが2000より大きいCUSTOMERSテーブルからID、Name、およびSalaryフィールドをフェッチする例です。

SELECT ID, NAME, SALARY  
FROM CUSTOMERS 
WHERE SALARY > 2000;

上記のコマンドは、次の出力を生成します。

ID  NAME       SALARY 
4   Chaitali   6500.00 
5   Hardik     8500.00 
6   Komal      4500.00 
7   Muffy      10000.00

次のコマンドは、「Hardik」という名前の顧客のCUSTOMERSテーブルからID、Name、およびSalaryフィールドをフェッチする例です。上記の例のように、すべての文字列は一重引用符( '')で囲む必要がありますが、数値は引用符なしで指定する必要があることに注意してください。

SELECT ID, NAME, SALARY  
FROM CUSTOMERS 
WHERE NAME = 'Hardik';

上記のコマンドは、次の出力を生成します。

ID  NAME     SALARY 
5   Hardik   8500.00

MS SQL Server LIKE句は、ワイルドカード演算子を使用して値を類似の値と比較するために使用されます。LIKE演算子と組み合わせて使用​​される2つのワイルドカードがあります-

  • パーセント記号(%)
  • アンダースコア(_)

パーセント記号は、0文字、1文字、または複数文字を表します。アンダースコアは、単一の数字または文字を表します。記号は組み合わせて使用​​できます。

構文

以下は、%と_の基本的な構文です。

SELECT *\column-list FROM table_name 
WHERE column LIKE 'XXXX%' 
 
or   

SELECT *\column-list FROM table_name 
WHERE column LIKE '%XXXX%'  

or  

SELECT *\column-list FROM table_name 
WHERE column LIKE 'XXXX_'  

or  

SELECT *\column-list FROM table_name 
WHERE column LIKE '_XXXX'  

or  

SELECT  *\column-list FROM table_name 
WHERE column LIKE '_XXXX_'

ANDまたはOR演算子を使用して、N個の条件を組み合わせることができます。XXXXは、任意の数値または文字列値にすることができます。

以下は、 '%'および '_'演算子を使用した異なるLIKE句を持つWHERE部分を示すいくつかの例です。

シニア番号 ステートメントと説明
1

WHERE SALARY LIKE '200%'

200で始まる値を検索します

2

WHERE SALARY LIKE '%200%'

任意の位置に200がある値を検索します

3

WHERE SALARY LIKE '_00%'

2番目と3番目の位置に00がある値を検索します

4

WHERE SALARY LIKE '2_%_%'

2で始まり、長さが3文字以上の値を検索します

5

WHERE SALARY LIKE '%2'

2で終わる値を検索します

6

WHERE SALARY LIKE '_2%3'

2番目の位置に2があり、3で終わる値を検索します

7

WHERE SALARY LIKE '2___3'

2で始まり3で終わる5桁の数字の値を検索します

次のレコードを持つCUSTOMERSテーブルについて考えてみます。

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00

次のコマンドは例で、SALARYが200で始まるCUSTOMERSテーブルのすべてのレコードを表示します。

SELECT * FROM CUSTOMERS 
WHERE SALARY LIKE '200%';

上記のコマンドは、次の出力を生成します。

ID   NAME     AGE     ADDRESS       SALARY 
1    Ramesh   32      Ahmedabad     2000.00 
3    kaushik  23      Kota          2000.00

MS SQL Server ORDERBY句は、1つ以上の列に基づいて、データを昇順または降順で並べ替えるために使用されます。一部のデータベースソートクエリは、デフォルトで昇順になります。

構文

以下は、ORDERBY句の基本的な構文です。

SELECT column-list  
FROM table_name  
[WHERE condition]  
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

ORDERBY句では複数の列を使用できます。並べ替えに使用している列が何であれ、その列がcolumn-listに含まれていることを確認してください。

次のレコードを持つCUSTOMERSテーブルについて考えてみます-

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00

次のコマンドは例で、結果をNAMEとSALARYの昇順で並べ替えます。

SELECT * FROM CUSTOMERS 
   ORDER BY NAME, SALARY

上記のコマンドは、次の出力を生成します。

ID  NAME       AGE       ADDRESS           SALARY 
4   Chaitali   25        Mumbai            6500.00 
5   Hardik     27        Bhopal            8500.00 
3   kaushik    23        Kota              2000.00 
2   Khilan     25        Delhi             1500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00 
1   Ramesh     32        Ahmedabad         2000.00

次のコマンドは例で、結果をNAMEの降順で並べ替えます。

SELECT * FROM CUSTOMERS 
   ORDER BY NAME DESC

上記のコマンドは次の結果を生成します-

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00
7   Muffy      24        Indore             10000.00  
6   Komal      22        MP                 4500.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00
5   Hardik     27        Bhopal             8500.00
4   Chaitali   25        Mumbai             6500.00

SQLServer GROUP BY 句は、SELECTステートメントと連携して使用され、同一のデータをグループに配置します。

GROUP BY句は、SELECTステートメントのWHERE句の後に続き、ORDERBY句の前にあります。

構文

GROUPBY句の基本的な構文は次のとおりです。GROUP BY句は、WHERE句の条件に従う必要があり、ORDER BY句を使用する場合は、その前に配置する必要があります。

SELECT column1, column2 
FROM table_name 
WHERE [ conditions ] 
GROUP BY column1, column2 
ORDER BY column1, column2

CUSTOMERSテーブルに次のレコードがあるとします-

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Ahmedabad        2000.00 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00

各顧客の給与の合計額を知りたい場合は、以下がGROUPBYクエリになります。

SELECT NAME, SUM(SALARY) as [sum of salary] FROM CUSTOMERS 
   GROUP BY NAME;

上記のコマンドは、次の出力を生成します。

NAME        sum of salary 
Chaitali    6500.00 
Hardik      8500.00 
kaushik     2000.00 
Khilan      1500.00 
Komal       4500.00 
Muffy       10000.00 
Ramesh      2000.00

ここで、重複した名前を持つ次のレコードを持つ次のCUSTOMERSテーブルについて考えてみましょう。

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00 
2   Khilan     25        Delhi             1500.00 
3   kaushik    23        Kota              2000.00 
4   Chaitali   25        Mumbai            6500.00 
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00

各顧客の給与の合計額を知りたい場合は、以下がGROUPBYクエリになります。

SELECT NAME, SUM(SALARY) as [sum of salary] FROM CUSTOMERS 
   GROUP BY NAME

上記のコマンドは、次の出力を生成します。

NAME        sum of salary 
Hardik      8500.00 
kaushik     8500.00 
Komal       4500.00 
Muffy       10000.00 
Ramesh      3500.00

MS SQL Server DISTINCT キーワードをSELECTステートメントと組み合わせて使用​​して、重複するすべてのレコードを削除し、一意のレコードのみをフェッチします。

テーブルに複数の重複レコードがある場合があります。このようなレコードをフェッチするときは、重複するレコードをフェッチするのではなく、一意のレコードのみをフェッチする方が理にかなっています。

構文

以下は、重複レコードを排除するためのDISTINCTキーワードの基本構文です。

SELECT DISTINCT column1, column2,.....columnN  
FROM table_name 
WHERE [condition]

次のレコードを持つCUSTOMERSテーブルについて考えてみます。

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00

次のSELECTクエリが重複した給与レコードを返す方法を見てみましょう。

SELECT SALARY FROM CUSTOMERS 
   ORDER BY SALARY

上記のコマンドは、元のテーブルからの重複レコードである給与2000が2回来る次の出力を生成します。

SALARY 
1500.00 
2000.00 
2000.00 
4500.00 
6500.00 
8500.00 
10000.00

上記のSELECTクエリでDISTINCTキーワードを使用して、結果を確認してみましょう。

SELECT DISTINCT SALARY FROM CUSTOMERS 
   ORDER BY SALARY

上記のコマンドは、重複するエントリがない場合に次の出力を生成します。

SALARY 
1500.00 
2000.00 
4500.00 
6500.00 
8500.00 
10000.00

MS SQL Server Joins句は、データベース内の2つ以上のテーブルのレコードを結合するために使用されます。JOINは、それぞれに共通の値を使用して2つのテーブルのフィールドを結合するための手段です。

次の2つのテーブルについて考えてみます。(a)CUSTOMERSテーブルは次のとおりです。

ID  NAME       AGE       ADDRESS             SALARY 
1   Ramesh     32        Ahmedabad           2000.00 
2   Khilan     25        Delhi               1500.00 
3   kaushik    23        Kota                2000.00 
4   Chaitali   25        Mumbai              6500.00 
5   Hardik     27        Bhopal              8500.00 
6   Komal      22        MP                  4500.00 
7   Muffy      24        Indore              10000.00

(b)別のテーブルは次のようなORDERSです-

OID  DATE                       CUSTOMER_ID        AMOUNT 
100  2009-10-08 00:00:00.000    3                  1500.00 
101  2009-11-20 00:00:00.000    2                  1560.00 
102  2009-10-08 00:00:00.000    3                  3000.00 
103  2008-05-20 00:00:00.000    4                  2060.00

次のように、SELECTステートメントでこれら2つのテーブルを結合しましょう。

SELECT ID, NAME, AGE, AMOUNT 
   FROM CUSTOMERS, ORDERS 
   WHERE  CUSTOMERS.ID = ORDERS.CUSTOMER_ID 
OR 
SELECT A.ID, A.NAME, A.AGE, B.AMOUNT 
   FROM CUSTOMERS A inner join  ORDERS B on A.ID = B.Customer_ID

上記のコマンドは、次の出力を生成します。

ID   NAME      AGE    AMOUNT 
2    Khilan    25     1560.00 
3    kaushik   23     1500.00 
3    kaushik   23     3000.00 
4    Chaitali  25     2060.00

WHERE句で結合が実行されることに注意してください。=、<、>、<>、<=、> =、!=、BETWEEN、LIKE、NOTなど、いくつかの演算子を使用してテーブルを結合できます。それらはすべてテーブルの結合に使用できます。ただし、最も一般的な演算子は等号です。

MS SQLServerの結合タイプ-

MS SQLServerで使用できる結合にはさまざまな種類があります-

  • INNER JOIN −両方のテーブルに一致する場合に行を返します。

  • LEFT JOIN −右側のテーブルに一致するものがない場合でも、左側のテーブルからすべての行を返します。

  • RIGHT JOIN −左側のテーブルに一致するものがない場合でも、右側のテーブルからすべての行を返します。

  • FULL JOIN −テーブルの1つに一致する場合、行を返します。

  • SELF JOIN −これは、テーブルが2つのテーブルであるかのようにテーブルをそれ自体に結合するために使用され、MS SQLServerステートメントの少なくとも1つのテーブルの名前を一時的に変更します。

  • CARTESIAN JOIN −2つ以上の結合されたテーブルからのレコードセットのデカルト積を返します。

A sub-query または Inner query または Nested query別のSQLServerクエリ内のクエリであり、WHERE句内に埋め込まれています。サブクエリは、取得するデータをさらに制限するための条件としてメインクエリで使用されるデータを返すために使用されます。

サブクエリは、SELECT、INSERT、UPDATE、およびDELETEステートメントとともに、=、<、>、> =、<=、IN、BETWEENなどの演算子とともに使用できます。

サブクエリが従わなければならないいくつかのルールがあります-

  • サブクエリは括弧で囲む必要があります。

  • サブクエリには、SELECT句とFROM句を含める必要があります。

  • サブクエリには、オプションのWHERE、GROUP BY、およびHAVING句を含めることができます。

  • サブクエリにCOMPUTE句またはFORBROWSE句を含めることはできません。

  • TOP句が含まれている場合にのみ、ORDERBY句を含めることができます。

  • 最大32レベルのサブクエリをネストできます。

SELECTステートメントを使用したサブクエリ

構文

サブクエリは、SELECTステートメントで最も頻繁に使用されます。以下は基本的な構文です。

SELECT column_name [, column_name ] 
FROM   table1 [, table2 ] 
WHERE  column_name OPERATOR 
   (SELECT column_name [, column_name ] 
   FROM table1 [, table2 ] 
   [WHERE])

次のレコードを持つCUSTOMERSテーブルについて考えてみます。

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00

SELECTステートメントを使用して次のサブクエリを適用してみましょう。

SELECT *  
   FROM CUSTOMERS
   WHERE ID IN (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500)

上記のコマンドは、次の出力を生成します。

ID  NAME       AGE       ADDRESS          SALARY 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
7   Muffy      24        Indore           10000.00

INSERTステートメントを使用したサブクエリ

サブクエリは、INSERTステートメントでも使用できます。INSERTステートメントは、サブクエリから返されたデータを使用して、別のテーブルに挿入します。サブクエリで選択したデータは、文字、日付、または数値関数のいずれかを使用して変更できます。

構文

以下は基本的な構文です。

INSERT INTO table_name [ (column1 [, column2 ]) ] 
   SELECT [ *|column1 [, column2 ] 
   FROM table1 [, table2 ] 
   [ WHERE VALUE OPERATOR ]

CUSTOMERSテーブルと同様の構造を持つテーブルCUSTOMERS_BKPについて考えてみます。以下は、完全なCUSTOMERSテーブルをCUSTOMERS_BKPにコピーするための構文です。

INSERT INTO CUSTOMERS_BKP 
   SELECT * FROM CUSTOMERS  
   WHERE ID IN (SELECT ID FROM CUSTOMERS)

UPDATEステートメントを使用したサブクエリ

サブクエリは、UPDATEステートメントと組み合わせて使用​​できます。UPDATEステートメントでサブクエリを使用すると、テーブル内の単一または複数の列を更新できます。

構文

以下は基本的な構文です。

UPDATE table 
SET column_name = new_value 
[ WHERE OPERATOR [ VALUE ] 
   (SELECT COLUMN_NAME 
   FROM TABLE_NAME) 
   [ WHERE) ]

CUSTOMERSテーブルのバックアップであるCUSTOMERS_BKPテーブルが使用可能であると仮定します。

次のコマンド例は、AGEが27以上のすべての顧客のCUSTOMERSテーブルでSALARYを0.25倍更新します。

UPDATE CUSTOMERS 
   SET SALARY = SALARY * 0.25 
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP WHERE AGE >= 27 )

これは2つの行に影響し、最終的にCUSTOMERSテーブルには次のレコードが含まれます。

ID  NAME       AGE       ADDRESS             SALARY 
1   Ramesh     32        Ahmedabad           500.00 
2   Khilan     25        Delhi               1500.00 
3   kaushik    23        Kota                2000.00 
4   Chaitali   25        Mumbai              6500.00 
5   Hardik     27        Bhopal              2125.00 
6   Komal      22        MP                  4500.00 
7   Muffy      24        Indore              10000.00

DELETEステートメントを使用したサブクエリ

サブクエリは、上記の他のステートメントと同様に、DELETEステートメントと組み合わせて使用​​できます。

構文

以下は基本的な構文です。

DELETE FROM TABLE_NAME 
[ WHERE OPERATOR [ VALUE ] 
   (SELECT COLUMN_NAME 
   FROM TABLE_NAME) 
   [ WHERE) ]

CUSTOMERSテーブルのバックアップであるCUSTOMERS_BKPテーブルが使用可能であると仮定します。

次のコマンド例は、AGEが27以上のすべての顧客のCUSTOMERSテーブルからレコードを削除します。

DELETE FROM CUSTOMERS 
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP WHERE AGE >=27 )

これは2つの行に影響し、最終的にCUSTOMERSテーブルには次のレコードが含まれます。

ID  NAME       AGE       ADDRESS          SALARY 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00  
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00

MS SQL Server Stored procedure データベースにコードを保存することでコードを何度も作成する時間を節約し、パラメーターを渡すことで必要な出力を取得するために使用されます。

構文

以下は、ストアドプロシージャ作成の基本的な構文です。

Create procedure <procedure_Name> 
As 
Begin 
<SQL Statement> 
End 
Go

次のレコードを持つCUSTOMERSテーブルについて考えてみます。

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00

次のコマンドは、TestdbデータベースのCUSTOMERSテーブルからすべてのレコードをフェッチする例です。

CREATE PROCEDURE SelectCustomerstabledata 
AS 
SELECT * FROM Testdb.Customers 
GO

上記のコマンドは、次の出力を生成します。

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00 
2   Khilan     25        Delhi             1500.00 
3   kaushik    23        Kota              2000.00 
4   Chaitali   25        Mumbai            6500.00 
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00

A transactionデータベースに対して実行される作業単位です。トランザクションは、ユーザーが手動で行う場合でも、ある種のデータベースプログラムが自動的に行う場合でも、論理的な順序で実行される作業の単位またはシーケンスです。

トランザクションとは、データベースへの1つ以上の変更の伝播です。たとえば、レコードを作成したり、レコードを更新したり、テーブルからレコードを削除したりする場合は、テーブルでトランザクションを実行しています。データの整合性を確保し、データベースエラーを処理するには、トランザクションを制御することが重要です。

実際には、多くのSQLクエリをグループにまとめ、トランザクションの一部としてそれらすべてを一緒に実行します。

トランザクションのプロパティ

トランザクションには次の4つの標準プロパティがあり、通常は頭字語ACID-と呼ばれます。

  • Atomicity−ワークユニット内のすべての操作が正常に完了していることを確認します。それ以外の場合、トランザクションは失敗した時点で中止され、以前の操作は以前の状態にロールバックされます。

  • Consistency −トランザクションが正常にコミットされると、データベースの状態が適切に変更されるようにします。

  • Isolation −トランザクションが互いに独立して透過的に動作できるようにします。

  • Durability −システム障害が発生した場合でも、コミットされたトランザクションの結果または効果が持続することを保証します。

トランザクション制御

トランザクションを制御するために使用される次のコマンドがあります-

  • COMMIT −変更を保存します。

  • ROLLBACK −変更をロールバックします。

  • SAVEPOINT −ロールバックするトランザクションのグループ内にポイントを作成します。

  • SET TRANSACTION −トランザクションに名前を付けます。

トランザクション制御コマンドは、DMLコマンドのINSERT、UPDATE、およびDELETEでのみ使用されます。これらの操作はデータベースで自動的にコミットされるため、テーブルの作成中または削除中には使用できません。

MS SQL Serverでトランザクション制御コマンドを使用するには、「begin tran」でトランザクションを開始するか、トランザクションコマンドを開始する必要があります。そうしないと、これらのコマンドは機能しません。

COMMITコマンド

COMMITコマンドは、トランザクションによって呼び出された変更をデータベースに保存するために使用されるトランザクションコマンドです。このコマンドは、最後のCOMMITまたはROLLBACKコマンド以降のすべてのトランザクションをデータベースに保存します。

構文

以下は、COMMITコマンドの構文です。

COMMIT;

次のレコードを持つCUSTOMERSテーブルについて考えてみます。

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00 
2   Khilan     25        Delhi             1500.00 
3   kaushik    23        Kota              2000.00 
4   Chaitali   25        Mumbai            6500.00 
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00

次のコマンド例では、age = 25のテーブルからレコードを削除してから、データベース内の変更をコミットします。

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25 
COMMIT

その結果、テーブルから2つの行が削除され、SELECTステートメントは次の出力を生成します。

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00
3   kaushik    23        Kota              2000.00
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00

ROLLBACKコマンド

ROLLBACKコマンドは、データベースにまだ保存されていないトランザクションを元に戻すために使用されるトランザクションコマンドです。このコマンドは、最後のCOMMITまたはROLLBACKコマンドが発行されてからのトランザクションを元に戻すためにのみ使用できます。

構文

以下は、ROLLBACKコマンドの構文です。

ROLLBACK

次のレコードを持つCUSTOMERSテーブルについて考えてみます。

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00

次のコマンド例では、age = 25のテーブルからレコードを削除してから、データベース内の変更をロールバックします。

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25; 
ROLLBACK

その結果、削除操作はテーブルに影響を与えず、SELECTステートメントは次の結果を生成します。

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Ahmedabad        2000.00 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00

SAVEPOINTコマンド

SAVEPOINTは、トランザクション全体をロールバックせずにトランザクションを特定のポイントにロールバックできるトランザクション内のポイントです。

構文

以下は、SAVEPOINTコマンドの構文です。

SAVE TRANSACTION SAVEPOINT_NAME

このコマンドは、トランザクションステートメント間のSAVEPOINTの作成でのみ機能します。ROLLBACKコマンドは、トランザクションのグループを元に戻すために使用されます。

以下は、SAVEPOINTにロールバックするための構文です。

ROLLBACK TO SAVEPOINT_NAME

次の例では、CUSTOMERSテーブルから3つの異なるレコードを削除します。削除するたびにSAVEPOINTを作成する必要があります。これにより、いつでも任意のSAVEPOINTにロールバックして、適切なデータを元の状態に戻すことができます。

次のレコードを持つCUSTOMERSテーブルについて考えてみます-

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Ahmedabad        2000.00 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00

以下は一連の操作です-

Begin Tran 
SAVE Transaction SP1 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 1  
1 row deleted. 
SAVE Transaction SP2 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 2 
1 row deleted.
SAVE Transaction SP3 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 3 
1 row deleted.

3つの削除が行われましたが、考えを変えて、SP2として識別したSAVEPOINTにロールバックすることにしました。SP2は最初の削除後に作成されたため、最後の2つの削除は取り消されます-

ROLLBACK Transaction SP2 
Rollback complete.

SP2にロールバックしてから、最初の削除のみが行われたことに注意してください。

SELECT * FROM CUSTOMERS

6行が選択されました。

ID  NAME       AGE       ADDRESS          SALARY 
2   Khilan     25        Delhi        1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00

SETTRANSACTIONコマンド

SET TRANSACTIONコマンドを使用して、データベーストランザクションを開始できます。このコマンドは、後続のトランザクションの特性を指定するために使用されます。

構文

以下は、SETTRANSACTIONの構文です。

SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>

Indexesデータベース検索エンジンがデータ取得を高速化するために使用できる特別なルックアップテーブルです。簡単に言えば、indexテーブル内のデータへのポインタです。データベース内のインデックスは、本の最後にあるインデックスと非常によく似ています。

たとえば、特定のトピックについて説明している本のすべてのページを参照する場合は、最初にインデックスを参照します。インデックスには、すべてのトピックがアルファベット順にリストされてから、1つ以上の特定のページ番号が参照されます。

インデックスは、SELECTクエリとWHERE句を高速化するのに役立ちますが、UPDATEステートメントとINSERTステートメントを使用すると、データ入力が遅くなります。インデックスは、データに影響を与えることなく作成または削除できます。

インデックスの作成には、CREATE INDEXステートメントが含まれます。これにより、インデックスに名前を付けたり、テーブルとインデックスを作成する列を指定したり、インデックスが昇順か降順かを指定したりできます。

インデックスは、UNIQUE制約と同様に一意にすることもできます。この点で、インデックスは、インデックスが存在する列または列の組み合わせでのエントリの重複を防ぎます。

CREATEINDEXコマンド

以下は、CREATEINDEXの基本的な構文です。

構文

CREATE INDEX index_name ON table_name

単一列インデックス

単一列インデックスは、1つのテーブル列のみに基づいて作成されるインデックスです。以下は基本的な構文です。

構文

CREATE INDEX index_name 
ON table_name (column_name)

CREATE INDEX singlecolumnindex 
ON customers (ID)

一意のインデックス

一意のインデックスは、パフォーマンスだけでなく、データの整合性にも使用されます。一意のインデックスでは、重複する値をテーブルに挿入することはできません。以下は基本的な構文です。

構文

CREATE UNIQUE INDEX index_name 
on table_name (column_name)

CREATE UNIQUE INDEX uniqueindex 
on customers (NAME)

複合インデックス

複合インデックスは、テーブルの2つ以上の列のインデックスです。以下は基本的な構文です。

構文

CREATE INDEX index_name on table_name (column1, column2)

CREATE INDEX compositeindex 
on customers (NAME, ID)

単一列インデックスを作成するか複合インデックスを作成するかにかかわらず、クエリのWHERE句でフィルタ条件として非常に頻繁に使用する可能性のある列を考慮してください。

使用する列が1つだけの場合は、単一列のインデックスを選択する必要があります。WHERE句でフィルタとして頻繁に使用される列が2つ以上ある場合は、複合インデックスが最適です。

暗黙のインデックス

暗黙インデックスは、オブジェクトの作成時にデータベースサーバーによって自動的に作成されるインデックスです。主キー制約と一意の制約のインデックスが自動的に作成されます。

DROPINDEXコマンド

インデックスは、MS SQL SERVERDROPコマンドを使用して削除できます。パフォーマンスが低下または改善される可能性があるため、インデックスを削除するときは注意が必要です。

構文

以下は基本的な構文です。

DROP INDEX tablename.index_name

インデックスを避けるのはいつですか?

インデックスはデータベースのパフォーマンスを向上させることを目的としていますが、回避する必要がある場合があります。次のガイドラインは、インデックスの使用をいつ再検討する必要があるかを示しています。

  • 小さなテーブルではインデックスを使用しないでください。

  • 頻繁に大量のバッチ更新または挿入操作が行われるテーブルには、インデックスを付けないでください。

  • 多数のNULL値を含む列にインデックスを使用しないでください。

  • 頻繁に操作される列にはインデックスを付けないでください。

MS SQL Serverには、文字列または数値データの処理を実行するための多くの組み込み関数があります。以下は、すべての便利なSQL組み込み関数のリストです-

  • SQL Server COUNT Function − SQL Server COUNT集計関数は、データベーステーブルの行数をカウントするために使用されます。

  • SQL Server MAX Function − SQL Server MAX集計関数を使用すると、特定の列の最大(最大)値を選択できます。

  • SQL Server MIN Function − SQL Server MIN集計関数を使用すると、特定の列の最小(最小)値を選択できます。

  • SQL Server AVG Function − SQL Server AVG集計関数は、特定のテーブル列の平均値を選択します。

  • SQL Server SUM Function − SQL Server SUM集計関数を使用すると、数値列の合計を選択できます。

  • SQL Server SQRT Function −これは、指定された数の平方根を生成するために使用されます。

  • SQL Server RAND Function −これは、SQLコマンドを使用して乱数を生成するために使用されます。

  • SQL Server CONCAT Function −これは、複数のパラメーターを単一のパラメーターに連結するために使用されます。

  • SQL Server Numeric Functions −SQLで数値を操作するために必要なSQL関数の完全なリスト。

  • SQL Server String Functions −SQLで文字列を操作するために必要なSQL関数の完全なリスト。

MS SQL Serverの文字列関数は、文字列値に適用するか、文字列値または数値データを返します。

以下は、例を含む文字列関数のリストです。

ASCII()

ASCIIコード値は、文字式の出力として提供されます。

次のクエリは、指定された文字のASCIIコード値を提供します。

Select ASCII ('word')

CHAR()

文字は、指定されたASCIIコードまたは整数の出力として提供されます。

次のクエリは、指定された整数の文字を提供します。

Select CHAR(97)

NCHAR()

Unicode文字は、指定された整数の出力として提供されます。

次のクエリは、指定された整数のUnicode文字を提供します。

Select NCHAR(300)

CHARINDEX()

指定された検索式の開始位置は、指定された文字列式の出力として提供されます。

次のクエリは、指定された文字列式「KING」の「G」文字の開始位置を示します。

Select CHARINDEX('G', 'KING')

左()

指定された文字列の出力として指定された文字数になるまで、指定された文字列の左側の部分。

次のクエリは、指定された文字列「WORLD」に対して前述の4文字の「WORL」文字列を提供します。

Select LEFT('WORLD', 4)

正しい()

指定された文字列の右側の部分で、指定された文字数が指定された文字列の出力として表示されます。

次のクエリは、指定された文字列「INDIA」に対して前述の3文字の「DIA」文字列を提供します。

Select RIGHT('INDIA', 3)

SUBSTRING()

開始位置の値と長さの値に基づく文字列の一部は、特定の文字列の出力として提供されます。

次のクエリは、指定された文字列「WORLD」の開始値と長さの値として、それぞれ(1,3)、(3,3)、(2,3)で説明したように、「WOR」、「DIA」、「ING」文字列を提供します、「インド」および「キング」。

Select SUBSTRING ('WORLD', 1,3) 
Select SUBSTRING ('INDIA', 3,3) 
Select SUBSTRING ('KING', 2,3)

LEN()

指定された文字列式の出力として文字数が返されます。

次のクエリは、「HELLO」文字列式に5を与えます。

Select LEN('HELLO')

LOWER()

小文字の文字列は、特定の文字列データの出力として提供されます。

次のクエリは、「SQLServer」文字データの「sqlserver」を提供します。

Select LOWER('SQLServer')

アッパー()

大文字の文字列は、指定された文字列データの出力として提供されます。

次のクエリは、「SqlServer」文字データの「SQLSERVER」を提供します。

Select UPPER('SqlServer')

LTRIM()

文字列式は、先頭の空白を削除した後、特定の文字列データの出力として提供されます。

次のクエリは、「WORLD」文字データの「WORLD」を提供します。

Select LTRIM('   WORLD')

RTRIM()

文字列式は、末尾の空白を削除した後、特定の文字列データの出力として提供されます。

次のクエリは、「INDIA」文字データの「INDIA」を提供します。

Select RTRIM('INDIA   ')

REPLACE()

文字列式は、指定された文字のすべての出現箇所を指定された文字に置き換えた後、指定された文字列データの出力として提供されます。

次のクエリは、「INDIA」文字列データの「KNDKA」文字列を提供します。

Select REPLACE('INDIA', 'I', 'K')

REPLICATE()

繰り返し文字列式は、指定された回数の特定の文字列データの出力として提供されます。

次のクエリは、「WORLD」文字列データの「WORLDWORLD」文字列を提供します。

Select REPLICATE('WORLD', 2)

逆行する()

逆文字列式は、指定された文字列データの出力として提供されます。

次のクエリは、「WORLD」文字列データの「DLROW」文字列を提供します。

Select REVERSE('WORLD')

SOUNDEX()

指定された2つの文字列の類似性を評価するための4文字(SOUNDEX)コードを返します。

次のクエリは、「Smith」、「Smyth」文字列の「S530」を提供します。

Select SOUNDEX('Smith'), SOUNDEX('Smyth')

差()

整数値は、指定された2つの式の出力として提供されます。

次のクエリは、「Smith」、「Smyth」式に4を与えます。

Select Difference('Smith','Smyth')

Note −出力値が0の場合、2つの式の類似性が弱いかまったくないことを示します。

スペース()

文字列は、指定された数のスペースで出力されます。

次のクエリは「ILOVEINDIA」を提供します。

Select 'I'+space(1)+'LOVE'+space(1)+'INDIA'

STUFF()

文字列式は、開始文字から指定された長さまでを指定された文字に置き換えた後、指定された文字列データの出力として提供されます。

次のクエリは、指定された開始文字と長さに従って、「ABCDEFGH」文字列データの「AIJKFGH」文字列をそれぞれ2と4として、「IJK」を指定されたターゲット文字列として提供します。

Select STUFF('ABCDEFGH', 2,4,'IJK')

STR()

指定された数値データの出力として文字データが提供されます。

次のクエリは、指定された長さを6、小数を2に基づいて、指定された187.369の187.37を返します。

Select STR(187.369,6,2)

UNICODE()

整数値は、指定された式の最初の文字の出力として提供されます。

次のクエリは、「RAMA」式の82を返します。

Select UNICODE('RAMA')

QUOTENAME()

指定された文字列は、指定された区切り文字で出力されます。

次のクエリでは、区切り文字として二重引用符を指定したため、指定された「RAMA」文字列の「RAMA」が返されます。

Select QUOTENAME('RAMA','"')

PATINDEX()

「I」位置を指定したとおりに、指定された式から最初に出現する位置が必要です。

次のクエリは、「インド」に1を与えます。

Select PATINDEX('I%','INDIA')

フォーマット()

指定された式は、指定された形式の出力として提供されます。

次のクエリは、「D」が平日の名前を参照する指定された形式に従って、getdate関数の「2015年11月16日月曜日」を提供します。

SELECT FORMAT ( getdate(), 'D')

CONCAT()

指定されたパラメータ値を連結した後、単一の文字列が出力として返されます。

次のクエリは、指定されたパラメータの「A、B、C」を提供します。

Select CONCAT('A',',','B',',','C')

以下は、MS SQLServerの日付関数のリストです。

GETDATE()

現在の日付と時刻が返されます。

構文

上記の関数の構文-

GETDATE()

次のクエリは、MS SQLServerの現在の日付と時刻を返します。

Select getdate() as currentdatetime

DATEPART()

日付または時刻の一部を返します。

構文

上記の関数の構文-

DATEPART(datepart, datecolumnname)

Example 1 −次のクエリは、MS SQLServerの現在の日付の一部を返します。

Select datepart(day, getdate()) as currentdate

Example 2 −次のクエリは、MS SQLServerの当月の一部を返します。

Select datepart(month, getdate()) as currentmonth

DATEADD()

日付と時刻の間隔を加算または減算することにより、日付と時刻が表示されます。

構文

上記の関数の構文-

DATEADD(datepart, number, datecolumnname)

次のクエリは、MS SQLServerの現在の日付と時刻から10日後の日付と時刻を返します。

Select dateadd(day, 10, getdate()) as after10daysdatetimefromcurrentdatetime

DATEDIFF()

2つの日付の間の日付と時刻が表示されます。

構文

上記の関数の構文-

DATEDIFF(datepart, startdate, enddate)

次のクエリは、MS SQLServerの2015-11-16と2015-11-11の日付の時間差を返します。

Select datediff(hour, 2015-11-16, 2015-11-11) as 
differencehoursbetween20151116and20151111

CONVERT()

日付と時刻をさまざまな形式で表示します。

構文

上記の関数の構文-

CONVERT(datatype, expression, style)

次のクエリは、MS SQLServerで日付と時刻を異なる形式で返します。

SELECT CONVERT(VARCHAR(19),GETDATE()) 
SELECT CONVERT(VARCHAR(10),GETDATE(),10) 
SELECT CONVERT(VARCHAR(10),GETDATE(),110)

MS SQL Serverの数値関数は数値データに適用でき、数値データを返します。

以下は、例を含む数値関数のリストです。

ABS()

数値式の出力として絶対値が出力されます。

次のクエリは絶対値を示します。

Select ABS(-22)

ACOS()

アークコサイン値は、指定された数式の出力として提供されます。

次のクエリでは、アークコサイン値が0になります。

Select ACOS(0)

ASIN()

アークサイン値は、指定された数式の出力として提供されます。

次のクエリでは、アークサイン値が0になります。

Select ASIN(0)

日焼け()

アークタンジェント値は、指定された数式の出力として提供されます。

次のクエリでは、アークタンジェント値が0になります。

Select ATAN(0)

ATN2()

4つの象限すべてのアークタンジェント値は、指定された数式の出力として提供されます。

次のクエリは、0の4つの象限すべてのアークタンジェント値を示します。

Select ATN2(0, -1)

次のレコードを持つCUSTOMERSテーブルについて考えてみます。

ID  NAME       AGE       ADDRESS             SALARY 
1   Ramesh     32        Ahmedabad           2000.00 
2   Khilan     25        Delhi               1500.00 
3   kaushik    23        Kota                2000.00 
4   Chaitali   25        Mumbai              6500.00 
5   Hardik     27        Bhopal              8500.00 
6   Komal      22        MP                  4500.00 
7   Muffy      24        Indore              10000.00

の間に()

指定された2つの式の間に値が存在する場合、それらは出力として提供されます。

次のクエリは、次の出力を提供します。

SELECT salary from customers where salary between 2000 and 8500

出力

salary 
2000.00 
2000.00 
6500.00 
8500.00 
4500.00

MIN()

最小値は、指定された式からの出力として取得されます。

次のクエリは、customersテーブルから指定された「salary」式に対して「1500.00」を提供します。

Select MIN(salary)from CUSTOMERS

MAX()

最大値は、指定された式からの出力として取得されます。

次のクエリは、customersテーブルから指定された「salary」式に対して「10000.00」を提供します。

Select MAX(salary)from CUSTOMERS

SQRT()

指定された数式の平方根が出力として表示されます。

次のクエリは、指定された4つの数式に対して2を返します。

Select SQRT(4)

PI()

PI値が出力されます。

次のクエリは、PI値に3.14159265358979を提供します。

Select PI()

天井()

指定された値は、次に高い値である小数点以下を四捨五入した後に出力として返されます。

次のクエリは、指定された123.25値に対して124を返します。

Select CEILING(123.25)

床()

指定された値は、式以下の小数を丸めた後に出力として返されます。

次のクエリは、指定された123.25値に対して123を提供します。

Select FLOOR(123.25)

ログ()

指定された式の自然対数が出力として返されます。

次のクエリは、指定された1つの値に対して0を返します。

Select LOG(1)