T-sql-quick-guide
T-SQL-概要
1970年代に、IBMとその後のSEQUELによって開発された構造化英語クエリ言語「SEQUEL」と呼ばれる製品は、構造化クエリ言語を表す「SQL」に名前が変更されました。
1986年に、SQLはANSI(米国規格協会)によって承認され、1987年に、ISO(国際標準化機構)によって承認されました。
SQLは、すべてのRDBMS製品に共通のデータベース言語である構造クエリ言語です。 さまざまなRDBMS製品ベンダーが、独自のRDBMS製品用にSQLを拡張することにより、独自のデータベース言語を開発しています。
T-SQLは、Microsoft製品であり、SQL言語の拡張機能であるTransact Structure Query Languageの略です。
例
MS SQL Server-SQL \ T-SQL
ORACLE-SQL \ PL-SQL
T-SQL-データ型
SQL Serverデータ型は、任意のオブジェクトのデータの種類を指定する属性です。 SQL Serverでは、各列、変数、および式に関連するデータ型があります。 これらのデータ型は、テーブルの作成中に使用できます。 要件に基づいて、テーブル列の特定のデータ型を選択できます。
SQL Serverには、使用するデータタイプの他のカテゴリを含む7つのカテゴリがあります。
正確な数値型
Type | From | To |
---|---|---|
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 |
bit | 0 | 1 |
decimal | -10^38 PLUS1 | 10^38 –1 |
numeric | -10^38 PLUS1 | 10^38 –1 |
money | -922,337,203,685,477.5808 | PLUS922,337,203,685,477.5807 |
smallmoney | -214,748.3648 | PLUS214,748.3647 |
数値と小数は固定精度とスケールのデータ型であり、機能的に同等です。
おおよその数値型
Type | From | To |
---|---|---|
Float | -1.79E PLUS 308 | 1.79E PLUS 308 |
Real | -3.40E PLUS 38 | 3.40E PLUS 38 |
日付と時刻のタイプ
Type | From | To |
---|---|---|
datetime(3.33 milliseconds accuracy) | Jan 1, 1753 | Dec 31, 9999 |
smalldatetime(1 minute accuracy) | Jan 1, 1900 | Jun 6, 2079 |
date(1 day accuracy. Introduced in SQL Server 2008) | Jan 1, 0001 | Dec 31, 9999 |
datetimeoffset(100 nanoseconds accuracy. Introduced in SQL Server 2008) | Jan 1, 0001 | Dec 31, 9999 |
datetime2(100 nanoseconds accuracy. Introduced in SQL Server 2008) | Jan 1, 0001 | Dec 31, 9999 |
time(100 nanoseconds accuracy. Introduced in SQL Server 2008) | 00:00:00.0000000 | 23:59:59.9999999 |
文字列
Sr.No | Type & Description |
---|---|
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文字列
Sr.No | Type & Description |
---|---|
1 |
nchar 最大長4,000文字の固定長Unicodeデータ。 |
2 |
nvarchar 最大4,000文字の可変長Unicodeデータ。 |
3 |
Nvarchar (max) 最大長が2 ^ 30 ^文字の可変長Unicodeデータ(SQL Server 2005で導入)。 |
4 |
ntext 最大長が1,073,741,823文字の可変長Unicodeデータ。 |
バイナリ文字列
Sr.No | Type & Description |
---|---|
1 |
binary 最大長が8,000バイトの固定長バイナリデータ。 |
2 |
varbinary 最大長が8,000バイトの可変長バイナリデータ。 |
3 |
varbinary(max) 最大長が2 ^ 31 ^バイトの可変長バイナリデータ(SQL Server 2005で導入)。 |
4 |
image 最大長が2,147,483,647バイトの可変長バイナリデータ。 |
その他のデータ型
- sql_variant -テキスト、ntext、およびタイムスタンプを除く、SQL Serverがサポートするさまざまなデータ型の値を格納します。
- timestamp -行が更新されるたびに更新されるデータベース全体の一意の番号を格納します。
- uniqueidentifier -グローバル一意識別子(GUID)を格納します。
- xml -XMLデータを保存します。 XMLインスタンスを列または変数に保存できます(SQL Server 2005で導入)。
- cursor -カーソルへの参照。
- table -後の処理のために結果セットを保存します。
- hierarchyid -階層内の位置を表すために使用される可変長のシステムデータ型(SQL Server 2008で導入)。
T-SQL-テーブルの作成
基本的なテーブルを作成するには、テーブルに名前を付け、その列と各列のデータ型を定義する必要があります。
SQL Serverの CREATE TABLE ステートメントは、新しいテーブルを作成するために使用されます。
構文
以下は、CREATE TABLEステートメントの基本的な構文です-
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns ));
CREATE TABLEは、データベースシステムに何をしたいかを伝えるキーワードです。 この場合、新しいテーブルを作成します。 テーブルの一意の名前または識別子は、CREATE TABLEステートメントの後に続きます。 次に、括弧内に、テーブルの各列とそれがどのようなデータ型であるかを定義するリストがあります。 次の例により、構文がわかりやすくなります。
既存のテーブルのコピーは、CREATE TABLEステートメントと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テーブルがあり、顧客に関連する必要な情報を保存するために使用できることがわかります。
T-SQL-テーブルの削除
SQL Serverの DROP TABLE ステートメントは、テーブル定義とそのテーブルのすべてのデータ、インデックス、トリガー、制約、およびアクセス許可の仕様を削除するために使用されます。
注-テーブルを削除すると、テーブルで使用可能なすべての情報も永久に失われるため、このコマンドの使用には注意が必要です。
構文
DROP TABLEステートメントの基本的な構文は次のとおりです-
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
T-SQL-INSERTステートメント
SQL Serverの INSERT INTO ステートメントを使用して、データベースのテーブルに新しいデータ行を追加します。
構文
INSERT INTOステートメントの2つの基本的な構文は次のとおりです。
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]
VALUES (value1, value2, value3,...valueN);
column1、column2、… columnNは、データを挿入するテーブル内の列の名前です。
テーブルのすべての列に値を追加する場合、SQLクエリで列名を指定する必要はありません。 ただし、値の順序がテーブルの列と同じ順序であることを確認してください。 以下は、SQL INSERT INTO構文です-
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];
T-SQL-SELECTステートメント
SQL Serverの 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
T-SQL-UPDATEステートメント
SQL Serverの UPDATE クエリは、テーブル内の既存のレコードを変更するために使用されます。
UPDATEクエリでWHERE句を使用して、選択した行を更新できます。更新しないと、すべての行が影響を受けます。
構文
以下は、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
T-SQL-DELETEステートメント
SQL Serverの 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テーブルにはレコードがありません。
T-SQL-WHERE句
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
次のコマンドは、給与が2000を超えるCUSTOMERSテーブルからID、名前、および給与フィールドを取得する例です。
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、名前、および給与フィールドを取得する例です。 上記の例のように、数値は引用符なしで指定する必要がありますが、すべての文字列は単一引用符( )内で指定する必要があることに注意することが重要です-
SELECT ID, NAME, SALARY
FROM CUSTOMERS
WHERE NAME = 'Hardik';
上記のコマンドは、次の出力を生成します。
ID NAME SALARY
5 Hardik 8500.00
T-SQL-LIKE句
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部分を示すいくつかの例です。
Sr.No | Statement & Description |
---|---|
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
T-SQL-ORDER BY句
MS SQL Serverの ORDER BY句は、1つ以上の列に基づいてデータを昇順または降順に並べ替えるために使用されます。 一部のデータベースは、デフォルトでクエリ結果を昇順で並べ替えます。
構文
ORDER BY句の基本的な構文は次のとおりです。
SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
ORDER BY句では複数の列を使用できます。 ソートに使用している列が何であれ、その列が列リストにあることを確認してください。
例
次のレコードを持つ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
T-SQL-GROUP BY句
SQL Serverの GROUP BY 句は、SELECTステートメントと連携して使用され、同一のデータをグループに配置します。
GROUP BY句は、SELECTステートメントのWHERE句に続き、ORDER BY句に先行します。
構文
GROUP BY句の基本的な構文は次のとおりです。 GROUP BY句は、WHERE句の条件に従う必要があり、ORDER BY句を使用する場合は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
各顧客の給与の合計額を知りたい場合、GROUP BYクエリは次のようになります。
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
各顧客の給与の合計額を知りたい場合、GROUP BYクエリは次のようになります。
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
T-SQL-DISTINCT句
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
T-SQL-テーブルの結合
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 SQL Serverの結合タイプ-
MS SQL Serverで利用可能な結合の種類があります-
- INNER JOIN -両方のテーブルに一致する行を返します。
- LEFT JOIN -右のテーブルに一致がない場合でも、左のテーブルからすべての行を返します。
- RIGHT JOIN -左のテーブルに一致がない場合でも、右のテーブルからすべての行を返します。
- FULL JOIN -いずれかのテーブルに一致する行を返します。
- SELF JOIN -これは、テーブルが2つのテーブルであるかのようにテーブルをそれ自体に結合するために使用され、MS SQL Serverステートメントで少なくとも1つのテーブルの名前を一時的に変更します。
- CARTESIAN JOIN -2つ以上の結合されたテーブルからのレコードのセットのデカルト積を返します。
T-SQL-サブクエリ
- サブクエリ*または*内部クエリ*または*ネストされたクエリ*は、別のSQL Serverクエリ内のクエリであり、WHERE句内に埋め込まれています。 サブクエリは、取得するデータをさらに制限する条件としてメインクエリで使用されるデータを返すために使用されます。
サブクエリは、SELECT、INSERT、UPDATE、およびDELETEステートメントとともに、=、<、>、> =、⇐、IN、BETWEENなどの演算子とともに使用できます。
サブクエリが従わなければならないいくつかのルールがあります-
- サブクエリは括弧で囲む必要があります。
- サブクエリには、SELECT句とFROM句を含める必要があります。
- サブクエリには、オプションのWHERE句、GROUP BY句、およびHAVING句を含めることができます。
- サブクエリにCOMPUTEまたはFOR BROWSE句を含めることはできません。
- ORDER BY句を含めることができるのは、TOP句が含まれている場合のみです。 *サブクエリは最大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
T-SQL-ストアドプロシージャ
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
T-SQL-トランザクション
- トランザクション*は、データベースに対して実行される作業単位です。 トランザクションとは、ユーザーが手動で実行する場合でも、何らかのデータベースプログラムで自動的に実行する場合でも、論理的な順序で実行される作業の単位またはシーケンスです。
トランザクションは、データベースに対する1つ以上の変更の伝播です。 たとえば、レコードを作成する場合、レコードを更新する場合、またはテーブルからレコードを削除する場合、テーブルでトランザクションを実行します。 データの整合性を確保し、データベースエラーを処理するには、トランザクションを制御することが重要です。
実際には、多くのSQLクエリを1つのグループにまとめ、トランザクションの一部としてそれらすべてをまとめて実行します。
トランザクションのプロパティ
トランザクションには、通常、頭字語ACIDで参照される次の4つの標準プロパティがあります-
- Atomicity -ワークユニット内のすべての操作が正常に完了することを保証します。それ以外の場合、トランザクションは失敗した時点で中止され、以前の操作は以前の状態にロールバックされます。
- 一貫性-トランザクションが正常にコミットされると、データベースの状態が適切に変更されるようにします。
- 分離-トランザクションが相互に独立して透過的に動作できるようにします。
- 耐久性-システム障害の場合に、コミットされたトランザクションの結果または効果が持続することを保証します。
トランザクション制御
トランザクションを制御するために使用される次のコマンドがあります-
- COMMIT -変更を保存します。
- ROLLBACK -変更をロールバックします。
- SAVEPOINT -ROLLBACKするトランザクションのグループ内にポイントを作成します。
- 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
次のコマンド例は、年齢= 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
次のコマンド例は、年齢= 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
SET TRANSACTIONコマンド
SET TRANSACTIONコマンドを使用して、データベーストランザクションを開始できます。 このコマンドは、後続のトランザクションの特性を指定するために使用されます。
構文
以下は、SET TRANSACTIONの構文です。
SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>
T-SQL-インデックス
- インデックス*は、データ検索を高速化するためにデータベース検索エンジンが使用できる特別なルックアップテーブルです。 簡単に言えば、*インデックス*はテーブル内のデータへのポインタです。 データベースのインデックスは、本の最後のインデックスに非常によく似ています。
たとえば、特定のトピックについて説明している本のすべてのページを参照する場合は、最初にインデックスを参照します。インデックスはすべてのトピックをアルファベット順にリストし、1つ以上の特定のページ番号を参照します。
インデックスは、SELECTクエリとWHERE句を高速化するのに役立ちますが、UPDATEおよびINSERTステートメントを使用すると、データ入力が遅くなります。 インデックスは、データに影響を与えずに作成または削除できます。
インデックスの作成には、CREATE INDEXステートメントが含まれます。これにより、インデックスに名前を付け、テーブルとインデックスを作成する列を指定し、インデックスが昇順か降順かを指定できます。
インデックスは、一意の制約と同様に一意にすることもできます。インデックスは、インデックスが存在する列または列の組み合わせの重複エントリを防止します。
CREATE INDEXコマンド
CREATE INDEXの基本的な構文は次のとおりです。
構文
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つ以上の列がある場合、複合インデックスが最適な選択になります。
暗黙的なインデックス
暗黙的なインデックスは、オブジェクトの作成時にデータベースサーバーによって自動的に作成されるインデックスです。 主キー制約と一意制約のインデックスが自動的に作成されます。
DROP INDEXコマンド
インデックスは、MS SQL SERVER DROPコマンドを使用して削除できます。 パフォーマンスが低下または改善される可能性があるため、インデックスを削除するときは注意が必要です。
構文
基本的な構文は次のとおりです。
DROP INDEX tablename.index_name
インデックスを回避する場合
インデックスはデータベースのパフォーマンスを向上させることを目的としていますが、回避する必要がある場合があります。 次のガイドラインは、インデックスの使用を再検討する必要がある場合を示しています-
- 小さいテーブルではインデックスを使用しないでください。
- 頻繁に大規模なバッチ更新または挿入操作が行われるテーブルには、インデックスを作成しないでください。
- 多数のNULL値を含む列にはインデックスを使用しないでください。
- 頻繁に操作される列にはインデックスを付けないでください。
T-SQL-関数
MS SQL Serverには、文字列または数値データの処理を実行する多くの組み込み関数があります。 以下は、すべての便利なSQL組み込み関数のリストです-
- link:/sql/sql-count-function [SQL Server COUNT関数] -SQL Server COUNT集計関数は、データベーステーブルの行数をカウントするために使用されます。
- link:/sql/sql-max-function [SQL Server MAX関数] -SQL Server MAX集計関数を使用すると、特定の列の最大(最大)値を選択できます。
- link:/sql/sql-min-function [SQL Server MIN関数] -SQL Server MIN集約関数を使用すると、特定の列の最小(最小)値を選択できます。
- link:/sql/sql-avg-function [SQL Server AVG関数] -SQL Server AVG集計関数は、特定のテーブル列の平均値を選択します。
- link:/sql/sql-sum-function [SQL Server SUM関数] -SQL Server SUM集計関数では、数値列の合計を選択できます。
- link:/sql/sql-sqrt-function [SQL Server SQRT関数] -これは、指定された数値の平方根を生成するために使用されます。
- link:/sql/sql-rand-function [SQL Server RAND関数] -これは、SQLコマンドを使用して乱数を生成するために使用されます。
- link:/sql/sql-concat-function [SQL Server CONCAT関数] -これは、複数のパラメーターを単一のパラメーターに連結するために使用されます。
- link:/sql/sql-numeric-functions [SQLサーバー数値関数] -SQLで数値を操作するために必要なSQL関数の完全なリスト。
- link:/sql/sql-string-functions [SQL Server文字列関数] -SQLで文字列を操作するために必要なSQL関数の完全なリスト。
T-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()
開始位置の値と長さの値に基づく文字列の一部は、特定の文字列の出力として送られます。
例
次のクエリは、「WOR」、「DIA」、「ING」の文字列を、指定された文字列「WORLD」の開始値と長さの値としてそれぞれ(1,3)、(3,3)、および(2,3)として示します。 、「インド」、「キング」。
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()
4文字(SOUNDEX)コードを返し、指定された2つの文字列の類似性を評価します。
例
次のクエリは、「Smith」、「Smyth」の文字列に対して「S530」を返します。
Select SOUNDEX('Smith'), SOUNDEX('Smyth')
差()
整数値は、指定された2つの式の出力として取得されます。
例
次のクエリは、「Smith」、「Smyth」式の4つを提供します。
Select Difference('Smith','Smyth')
注-出力値が0の場合、2つの式の間に弱いまたは類似性がないことを示します。
スペース()
文字列は、指定された数のスペースを持つ出力として送られます。
例
次のクエリは、「I LOVE INDIA」を返します。
Select 'I'+space(1)+'LOVE'+space(1)+'INDIA'
STUFF()
文字列式は、指定された文字列データの出力として、開始文字から指定された長さまで指定された文字に置き換えた後、出力されます。
例
次のクエリは、「ABCDEFGH」文字列データの「AIJKFGH」文字列を指定された開始文字ごとに、長さをそれぞれ2と4として、「IJK」を指定されたターゲット文字列として返します。
Select STUFF('ABCDEFGH', 2,4,'IJK')
STR()
文字データは、指定された数値データの出力として送られます。
例
次のクエリは、指定された長さ6と10進数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」位置を指定したため、指定された式からの最初の出現の開始位置が必要です。
例
次のクエリは、 'INDIA’に1を返します。
Select PATINDEX('I%','INDIA')
フォーマット()
指定された式は、指定された形式で出力されます。
例
次のクエリは、指定された形式に従って「D」が曜日名を参照するgetdate関数の「2015年11月16日月曜日」を返します。
SELECT FORMAT ( getdate(), 'D')
CONCAT()
単一の文字列は、指定されたパラメーター値を連結した後に出力されます。
例
次のクエリは、指定されたパラメーターの「A、B、C」を提供します。
Select CONCAT('A',',','B',',','C')
T-SQL-日付関数
以下は、MS SQL Serverの日付関数のリストです。
GETDATE()
現在の日付と時刻を返します。
構文
上記の機能の構文-
GETDATE()
例
次のクエリは、MS SQL Serverの現在の日付と時刻を返します。
Select getdate() as currentdatetime
DATEPART()
日付または時刻の一部を返します。
構文
上記の機能の構文-
DATEPART(datepart, datecolumnname)
例
- 例1 *-次のクエリは、MS SQL Serverの現在の日付の一部を返します。
Select datepart(day, getdate()) as currentdate
- 例2 *-次のクエリは、MS SQL Serverの現在の月の一部を返します。
Select datepart(month, getdate()) as currentmonth
DATEADD()
日付と時間間隔を加算または減算して、日付と時刻を表示します。
構文
上記の機能の構文-
DATEADD(datepart, number, datecolumnname)
例
次のクエリは、MS SQL Serverの現在の日時から10日後の日時を返します。
Select dateadd(day, 10, getdate()) as after10daysdatetimefromcurrentdatetime
DATEDIFF()
2つの日付の間の日付と時刻が表示されます。
構文
上記の機能の構文-
DATEDIFF(datepart, startdate, enddate)
例
次のクエリは、MS SQL Serverの2015-11-16と2015-11-11の日付の時間差を返します。
Select datediff(hour, 2015-11-16, 2015-11-11) as
differencehoursbetween20151116and20151111
CONVERT()
日付と時刻が異なる形式で表示されます。
構文
上記の機能の構文-
CONVERT(datatype, expression, style)
例
次のクエリは、MS SQL Serverで日付と時刻を異なる形式で返します。
SELECT CONVERT(VARCHAR(19),GETDATE())
SELECT CONVERT(VARCHAR(10),GETDATE(),10)
SELECT CONVERT(VARCHAR(10),GETDATE(),110)
T-SQL-数値関数
MS SQL Serverの数値関数は、数値データに適用でき、数値データを返します。
以下は、数値関数のリストと例です。
ABS()
絶対値は、数値式の出力として送られます。
例
次のクエリは絶対値を提供します。
Select ABS(-22)
ACOS()
アークコサイン値は、指定された数値式の出力として取得されます。
例
次のクエリは、アークコサイン値0を返します。
Select ACOS(0)
ASIN()
アークサイン値は、指定された数値式の出力として取得されます。
例
次のクエリは、アークサイン値0を返します。
Select ASIN(0)
日焼け()
アークタンジェント値は、指定された数値式の出力として取得されます。
例
次のクエリは、逆正接値0を返します。
Select ATAN(0)
ATN2()
4つの象限すべてのアークタンジェント値は、指定された数式の出力として取得されます。
例
次のクエリは、4つの象限すべての0のアークタンジェント値を提供します。
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()
最小値は、指定された式からの出力として取得されます。
例
次のクエリは、顧客テーブルから指定された「給与」式に対して「1500.00」を返します。
Select MIN(salary)from CUSTOMERS
MAX()
最大値は、指定された式からの出力として取得されます。
例
次のクエリは、顧客テーブルから指定された「給与」式に対して「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)