さてと、12時から勉強始めたので、今で1時間20分か。
CBTNugett のKaplanという会社(オンライン大学とかやってる)がつくったプレップテストを20問に絞ってやってみた。
これを考察していこうと思う。点数は驚異の50点!
おわた。
でも、驚くべきことは過去問とはほぼかけ離れた難しさでアール。なんでや。
【間違いの理由別考察】
1.読み落とし
パターン1「Which clauses should you luse to construct a common table expression for the Transact-SQL query?」
でこの「a common table expression」を読み落として一つチェックマークが抜けていた。
A) GROUP BY
B) INTO
C) OVER
D) WITH
E) HAVING
ここからだったら、問題読まなくても明らかにA,D,Eだ。Eのチェックを忘れていた。
2.忘れている
パターン1 DELETE Products output ProdID, Desciption, AltDescription, UnitPrice;
DELETE Products
OUTPUT DELETED.ProdID, DELETED.Description, DELETED.AltDescription, DELETED.UnitPrice;
では、OUTPUTについて。
<question id="1.2.3.51" type="SAMC">
<question>こんな感じでXMLの例がかいてあるけど、しっかり読まなくてもいいかなと思う</question>
<alternatives>
<option>tissue</option>
<option correct="true">cell</option>
<option>organism</option>
<option>organ</option>
<opton>system</option>
</alternatives>
</question>
You need to choose a data type for the table column and justify your choice to the database administrator.
The query must return only those products that have no matching sales orders, as well as those sales orders that are not matched to a product .
You create the following query to meet the objective:
USE NutexSales;
GO
SELECT p.Name, sod.SalesOrderID
FROM Production.Product p
OUTER JOIN Sales.SalesOrderDetail sod
ON p.ProductID = sod.ProductID
WHERE p.ProductID IS NULL
OR sod.ProductID IS NULL
ORDER BY p.Name
これは痛い。。。だいたい、「
WHERE p.ProductID IS NULL
OR sod.ProductID IS NULL
」を見た時点で、完全に『FULL OUTER JOIN』なのに、なぜ『FULL』をわすれたのか!!!おわてよし!
パターン2
To create this stored procedure, fill in the missing code that meets the stated requirements. (Do not use a BEGIN and END statements when writing this code.)
CREATE PROCEDURE CustRowsReturned @Count integer ASselect top @Count, Name from Customer
ORDER BY Name
<答え>
- SELECT TOP (@Count) Name FROM Customer
- SELECT TOP(@Count) Name FROM Customer
4.ふたを開けたらわかってなかった
パターン1
Which of the following statements are true?
確定的関数(Deterministic )は、特定の入力値のセットで呼び出され、データベースの状態が同じである場合、常に同じ結果を返します。 非決定的関数(Nondeterministic )は、アクセスするデータベースの状態が同じ場合でも、特定の入力値のセットで呼び出されるたびに異なる結果を返す場合があります。
たとえば、関数AVGは上記の条件が与えられると常に同じ結果を返しますが、現在の日時値を返すGETDATE関数は常に異なる結果を返します。
なんてことを書いてたけど、どうやらファンクションのターゲットにもよるようなことを書いてある。例えば、『CONVERT』のターゲットが『DATETIME』だったりしたら、非決定的関数(Nondeterministic )になるそうです。
だったら、もう覚えてしまおう!
【確定的関数(Deterministic )表】ーここにないのは、非決定的関数(Nondeterministic )だと思えばよいさ。
パターン2
『CROSS JOIN』と『FULL JOIN』、いっつも勘違いします。
『CROSS JOIN』Cartesian productはこちら。ぜーんぶのマッチングパターンを出すから、気を付けてね、のほうです。
『FULL JOIN』『FROM』で指定したベーステーブルのIDに対して、マッチしてようが、してまいが『FULL JOIN』したパターンが全部出てきます。でもCartesian productではないです。
Each instructor can teach several courses. The course schedule changes frequently as old courses are cancelled and new courses are made available. Some of the instructors whose courses have been cancelled may not be currently assigned to teach any courses. Some of the new courses may not have instructors assigned to them. To facilitate the assignment of instructors to courses, you must produce a report that will list all courses and all instructors. The courses for which no instructors are currently assigned should be grouped together.
これはもう、英語力がものを言いますな。全然わからんかった。絶対『LEFT JOIN』やと思った。
さて、読み方を考えてみよう。
『Each instructor can teach several courses』
➡こんな関係かな? instructor*->⁂courses
『Some of the instructors whose courses have been cancelled may not be currently assigned to teach any courses』
➡coursesが『NULL』の可能性があるな?
『Some of the new courses may not have instructors assigned to them』
➡おぉ、instructorが『NULL』と表示されるようにJOINさせなきゃならないのか。
『you must produce a report that will list all courses and all instructors』
➡ここかぁっ!『all courses』 と『all instructors』だ!ということは、両者『NULL』が含まれているテーブルであるということかな?
『The courses for which no instructors are currently assigned should be grouped together』
➡これは、ちょっとひっかけもあるかな。。。最後に『ORDER BY』でくくってやればよいだけのように思う。
<答え>
SELECT CourseID, Subject, i.InstructorID, FirstName, LastName
FROM Courses c FULL JOIN Instructors i
ON c.InstructorID = i.InstructorID
ORDER BY i.InstructorID
なぜなら、『FULL JOIN』はこんな感じになるからです。そう、どっちに『NULL』が入ってもよいのです。!!!でも、気を付けて、「CROSS JOIN」とは違うよ。
5.もう諦めなきゃならんレベル
パターン1
What is the most appropriate data type for the column that holds the resume content?
You run the following Transact-SQL statement:
CREATE PRIMARY XML INDEX PIdx_Customer_Demographics ON Customer(Demographics);
You need to create a secondary XML index for queries searching for the Active attribute value. The index should be named SIdx_Customer_Active. Which Transact-SQL statement should you use? (To answer, type the Transact-SQL statement in the textbox.)
XML_VALUE();
もちろん間違ってますがな。これが答え。
CREATE XML INDEX SIdx_Customer_Active ON Customer(Demographics) USING XML INDEX PIdx_Customer_Demographics FOR PATH
これは余裕があったら勉強しよう。。。
パターン3
The Verigon Company maintains the Customers table and the Orders table in a SQL Server 2016 application.
You need to create a historical table that contains data on orders placed during 2012.The table should aggregate (sum) the Amount column by month, so that the table would only contain twelve rows, regardless of the number of customers or orders placed. The sum of all the amounts ordered in January would be the first row, the sum of all the amounts ordered in February would be the second row, and so forth. No updates, insertions, or deletions would be performed on the data.
What object type most efficiently supports these requirements?
ここに書いてありました。
- An indexed view is physically stored ("materialised") on disk = requires memory
- ➡インデックス付きVIEWは物理的に名前がついて格納されているってことですね。
- A standard view is simply an expandable macro: there is no persistence of the data and the base tables are always used
- ➡普通のVIEWは、その場だけの処理で終わるようです。
それから、こちらの方のサイトがとってもわかりやすいので、参照させていただきました。ありがとうございます。(Microsoft.Docでは情報量多すぎ、読むの大変!)
インデックス付きのビューを作成するには以下の条件があります。
- CREATE VIEW ステートメント実行時、ANSI_NULLSオプションとQUOTED_IDENTIFIERオプションがONに設定されていること。
- ビューで参照するベーステーブルの作成時にもANSI_NULLSオプションがONに設定されていること。
- ビューが参照しているのはベーステーブルのみで、他のビュー参照していないこと
- ビューで参照されるすべてのベーステーブルは、ビューと同じデータベース内に存在し、ビューと同じ所有者であること。
- ビューはWITH SCHEMABINDINGオプションを使用して作成されていること。
- ビューで参照されるユーザ定義関数は、SCHEMABINDINGオプションを使用して作成済みであること。
- ビューでは、テーブルとユーザ定義関数について、スキマー名.オブジェクト名の2つの要素で構成される名前で参照すること。
- ビュー内の式で参照される関数は決定的であること。決定的であるとは、関数の引数に同じ値を渡した場合、常に同じ値が返される状態を指す。これに対して、GETDATEやNEWID関数は、実行する度に異なる値が返されるので非決定的関数と言える。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--ビューを作成する
CREATE VIEW [dbo].[ビュー名] WITH SCHEMABINDING
AS
SELECT COL001
,COL002
,COL003
,COL004
FROM dbo.TABLE_A
--クラスタ化インデックスを作成する
CREATE UNIQUE CLUSTERED INDEX PK_インデックス名
ON dbo.ビュー名 ( COL001,COL002 )
--非クラスタ化インデックスを作成する
CREATE NONCLUSTERED INDEX IDX_インデックス名
ON dbo.ビュー名 ( COL003,COL004 )
※コメント投稿者のブログIDはブログ作成者のみに通知されます