こんにちは、ねこです。

自称プログラマのおばちゃんのブログです。いろいろあるよねぇ~。

Microsoft MCSA SQL Server 2016 (70-761)むぼーな挑戦15/Distinct vs. Group Byわかってるようでわかってない。

2019-11-27 15:16:03 | プログラム 勉強

結構わかってるようでわかってなかったのが、『DISTINCT』と『GroupBy』。

手短にメモっときます。

ベーステーブル

SQL base query

 

SELECT DISTINCT(origin)
FROM flight_delays;
 
SELECT origin
FROM flight_delays
GROUP BY origin;
 
両方ともこちらの結果を出します。

SQL DISTINCT clause

 

あと、『AVG』とか『SUM』『MIN』『MAX』『COUNT』なんかに『GroupBy』は必要なのか、などと今更わかんね、が出てきます。おはずかしい。。。

答えは『全体をターゲットにする場合、いりません。でもね、パーティションを区切ってその中でのAVGを出すのか、それとも全体のAVGを出すのかで違うから。この場合、「origin」で区切ってますね。』

SELECT AVG(depdelay)
FROM flight_delays;

SQL AVG function depdelay

SELECT
  AVG(depdelay),
  origin
FROM flight_delays
GROUP BY origin;

SQL GROUP BY example

なので、こちらの表がとっても理解に役立ちました。

SQL GROUP BY clause

 

にゃるほど。

 
 

Microsoft MCSA SQL Server 2016 (70-761)むぼーな挑戦15/FULL JOIN,CROSS JOIN,UNION, UNION ALL

2019-11-22 16:18:48 | 空手

ねこは思います。データベース開発なんかやってる人は頭が良いのでしょう、ねこのように「絵で描かなわからへぇーんっ」ていう人は少ないんじゃないでしょうか。

【FULL JOIN】

SQL FULL OUTER JOIN

 

【CROSS JOIN】

SQL Server CROSS JOIN example

 

【UNION】【UNION ALL】

 SQL Union All operator

あぁ、なんてわかりやすいんだ。。。

ではでは。


Microsoft MCSA SQL Server 2016 (70-761)むぼーな挑戦14/CTEの問題-お詫びと訂正。こっちが正しっ!

2019-11-22 16:00:58 | プログラム 勉強

すんません。多分いないと思いますが、いっしょに勉強してくれてる人、間違った内容を載せてました。

Microsoft MCSA SQL Server 2016 (70-761)むぼーな挑戦12/CTEの問題

こちらの「ググった中で大多数の答え」が正しいです。

この形式のCTEは『Recursive CTE』と言われるものです。

【Recursive CTE】

WITH cte_org AS(

    SELECT      
        staff_id,
        first_name,
        manager_id
        
    FROM      
        sales.staffs
    WHER Emanager_id IS NULL
    UNION ALL
    SELECT
        e.staff_id,
        e.first_name,
        e.manager_id
    FROM
        sales.staffse
        INNER JOIN cte_orgo
            ON o.staff_id=e.manager_id
)

SELECT
*
FROM
    cte_org;
 
SQL Server Recursive CTE query hierarchical data
 
CTEは『Derived Table』と似てますが、『WITH AS()』のなかで自分を呼び出せるんです。『赤色』の文字はお決まりなので、もしばらばらで組み立てる形式の問題があれば、『Recursive CTE』を疑ってかかてもよいでしょう。
 
ではでは。
 

Microsoft MCSA SQL Server 2016 (70-761)むぼーな挑戦13/RollupとCUBEわかったようで、わからん。

2019-11-20 16:12:55 | プログラム 勉強

ねこはですね、ただいまガンガン過去問解いてる最中なので、Netlifyなんかのブログがアップできてません。これから少しブログ全般を休憩するかもです。12月の最初の週にテストうけます!!!こうご期待!➡自分にですな。

Continent Country City SalesAmount
Asia India Baengalore 1000
Asia India Chennai 2000
Asia Japan Tokyo 3000
Asia Japan Osaka 700
NA USA Texas 2000
NA USA Pennsylvania 800
NA USA New York 3000
NA Canada Montreal 4000

【ROLLUP】

SELECT Continent, Country, City SUM(SalesAmount)
FROM Sales
GROUP ROLLUP(Continent, Country, City)

<結果>

Continent,Country, City
Continent, Country,
Continent
()

【CUBE】

SELECT Continent, Country, City SUM(SalesAmount)
FROM Sales
GROUP BY CUBE(Continent, Country, City)

<結果>

Continent, Country, City
Continent, Country,
Continent, City
Continent
Country, City
Country,
City
()


Microsoft MCSA SQL Server 2016 (70-761)むぼーな挑戦12/CASTとCONVERTちゃんとわかってなかった。。。

2019-11-18 13:07:26 | プログラム 勉強

先週より、本腰入れてずっと過去問に取り組んでます。

わかんなかったら、きちんとググってますが、まぁ、よく忘れていること。。。

では

【CAST/CONVERT】

いってみよー。

SELECT CAST(25.65 AS int);

---「25」返ってくる。

SELECT CAST('2017-08-25' AS datetime);

---「2017-08-25 00:00:00.000」返ってくる。

SELECT CAST(25.65 AS varchar);

---「25.65」返ってくる。

SELECT CONVERT(int, 25.65);

---「25」返ってくる。

SELECT CONVERT(varchar, 25.65);

---「25.65」返ってくる。

SELECT CONVERT(datetime, '2017-08-25');

---「2017-08-25 00:00:00.000」返ってくる。

 

【問題】

では、こんな問題が過去問にありました。

The query output window displays the following error message: Conversion failed when converting the varchar value "AB012" to data type int.
You need to resolve the error.

クエリ出力ウィンドウには、次のエラーメッセージが表示されます。varchar値 "AB012"をデータ型intに変換するときに、変換に失敗しました。
エラーを解決する必要があります。

Solution: You modify the Transact-SQL statement as follows:下記のステートメントを書き直してください。

Does the solution meet the goal?正解?不正解?

<答え>間違え


【噂になってる答え】

https://www.examtopics.com/discussions/microsoft/view/3884-exam-70-761-topic-1-question-128-discussion/

<答え>正解

なぜなら、『RegistrationNumber= varchar(5)のデータ型と述語の値も明示的にvarchar(5)にキャストされるため、エラーは発生しません。』ということらしいです。ねこにはわかりません。。。

なので検証してみました。


【検証!】

CREATE TABLE tblVehicleRegistration
(
VehicleID int,
RegistrationNumber varchar(5),
RegistrationDate date,
UserId int
)

INSERT INTO tblVehicleRegistration
VALUES
(1,'20012', GETDATE(),1)

SELECT UserId, RegistrationNumber, CAST(20012 as varchar(5)) as casted
FROM tblVehicleRegistration
WHERE RegistrationNumber = CAST(20012 as varchar(5))
AND RegistrationDate > '2016-01-01';

ってなわけで、正解はちゃんとCASTされます。

なんだか、お昼のこりもののスパゲッティをたべたら胸焼けがしてきた。。。

もう2時、走りにいってこようかな。。。