読者です 読者をやめる 読者になる 読者になる

kharuka2016のブログ

日々の出来事を書き留めておくブログ

MCP70-461対策(No.5)

テクノロジー sql mcp

【前提条件】

Microsoft SQL Server 2012 (SP3-CU7) (KB3205051) - 11.0.6579.0 (X64)

1.テストテーブルを作成します。

create table [REF70-461.FLASH.8602-OrderDetails]
(
ListPrice money NOT NULL,
Quantity int NOT NULL
)

create table [REF70-461.FLASH.8602-Customers]
(
CustomerID int NOT NULL PRIMARY KEY,
FirstName nvarchar(20) NOT NULL,
LastName nvarchar(20) NOT NULL
)

create table [REF70-461.FLASH.8602-Orders]
(
OrderID int NOT NULL PRIMARY KEY,
Orderdate Datetime NOT NULL,
CustomerID int NOT NULL
)

2.テーブルにデータを入れ、結果を確認します。

insert into [REF70-461.FLASH.8602-OrderDetails] values(\1000,100)
insert into [REF70-461.FLASH.8602-OrderDetails] values(\5000,10)
insert into [REF70-461.FLASH.8602-OrderDetails] values(\10000,100)
insert into [REF70-461.FLASH.8602-OrderDetails] values(\100,10000)
insert into [REF70-461.FLASH.8602-OrderDetails] values(\1000,1000)
go

insert into [REF70-461.FLASH.8602-Customers] values(1,'tanaka','atarou')
insert into [REF70-461.FLASH.8602-Customers] values(2,'sato','btarou')
insert into [REF70-461.FLASH.8602-Customers] values(3,'nakamura','ctarou')
insert into [REF70-461.FLASH.8602-Customers] values(4,'suzuki','dtarou')
insert into [REF70-461.FLASH.8602-Customers] values(5,'saitou','etarou')
go

insert into [REF70-461.FLASH.8602-Orders] values(1,'2017-03-13 22:53:00',1)
insert into [REF70-461.FLASH.8602-Orders] values(2,'2017-03-12 22:53:00',2)
insert into [REF70-461.FLASH.8602-Orders] values(3,'2017-03-11 22:53:00',3)
insert into [REF70-461.FLASH.8602-Orders] values(4,'2015-03-10 22:53:00',4)
insert into [REF70-461.FLASH.8602-Orders] values(5,'2017-02-09 22:53:00',3)
insert into [REF70-461.FLASH.8602-Orders] values(6,'2017-03-08 22:53:00',4)
insert into [REF70-461.FLASH.8602-Orders] values(7,'2016-03-09 22:53:00',5)
insert into [REF70-461.FLASH.8602-Orders] values(8,'2017-03-12 22:53:00',1)
insert into [REF70-461.FLASH.8602-Orders] values(9,'2017-03-11 22:53:00',2)
insert into [REF70-461.FLASH.8602-Orders] values(10,'2017-01-13 22:53:00',1)
go

select * from [REF70-461.FLASH.8602-OrderDetails]
select * from [REF70-461.FLASH.8602-Customers]
select * from [REF70-461.FLASH.8602-Orders]
go

結果

ListPrice             Quantity
--------------------- -----------
1000.00               100
5000.00               10
10000.00              100
100.00                10000
1000.00               1000

(5 行処理されました)

CustomerID  FirstName            LastName
----------- -------------------- --------------------
1           tanaka               atarou
2           sato                 btarou
3           nakamura             ctarou
4           suzuki               dtarou
5           saitou               etarou

(5 行処理されました)

OrderID     Orderdate               CustomerID
----------- ----------------------- -----------
1           2017-03-13 22:53:00.000 1
2           2017-03-12 22:53:00.000 2
3           2017-03-11 22:53:00.000 3
4           2015-03-10 22:53:00.000 4
5           2017-02-09 22:53:00.000 3
6           2017-03-08 22:53:00.000 4
7           2016-03-09 22:53:00.000 5
8           2017-03-12 22:53:00.000 1
9           2017-03-11 22:53:00.000 2
10          2017-01-13 22:53:00.000 1

(10 行処理されました)

3.以下の条件を満たすテーブルを作成します。

  • 結果をディスクに書き込む。

  • 各行の ListPrice と Quantity の積を格納する LineItemTotal という新しい列がある。

  • コードでオブジェクト区切り文字を使用しない。

  • LineItemTotal はテーブルの最後の列として保存される必要があります。

CREATE TABLE [REF70-461.FLASH.8602-SalesOrderDetails]
(
ListPrice money not null,
Quantity int not null,
LineItemTotal as (ListPrice * Quantity) PERSISTED
);
go

計算列は、PERSISTED とマークされていない限り、テーブルに物理的に保存されない仮想列です。

参考:

CREATE TABLE (Transact-SQL)

[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

参考:

ORDER BY 句 (Transact-SQL)

テーブルの計算列の指定