You are on page 1of 26

SQL Tutorial in Big Query

Các bước tiến hành để sử dụng :


- Đảm bảo trình duyệt đang ghi nhớ tài khoản gmail của bạn
- Vào trang chủ BigQuery : https://cloud.google.com/bigquery và nhấn vào mục Try
BigQuery Free

- Nếu có thông tin thẻ credit thì nên nhập vì bạn sẽ được miễn phí 300$ sử dụng trước khi
tính vào thẻ. Còn không thì làm theo cách tiếp theo
- Xoá phần chọn và chỉ giữ lại https://console.cloud.google.com để vào

- Sau khi vào thì ta chọn mục BigQuery > SQL Workspace
Các bước tiến hành tạo Dataset
- Chọn mục Select Project > New Project > Nhập SQL Tutorial > Create
- Sau đo chọn Project SQL Tutorial và nhấn create Dataset
Nhập tên DataSet là Sample Dataset > Create Dataset
Nhấn Create Table để tạo table

Chọn Upload Table from File


Sau đó check Auto Detect Schema và nhấn Create Table

Vậy ta đã có bảng pokemon trong data


Làm tương tự cho bảng Combat

Tiến hành các câu truy vấn SQL

Nhấn vào dấu + chọn Compose New Query


Truy vấn 1 :
SELECT *
FROM `sql-tutorial-351503.SampleDataset.Pokemon`

Nhấn vào JOB Information để biết thông tin truy vấn


Nhấn vào JSON để xem kết quả dưới dạng JSON

Nhấn vào Detail để xem time thực thi


Thử chạy 2 truy vấn cùng 1 Query :

SELECT *
FROM `sql-tutorial-351503.SampleDataset.Pokemon`;

SELECT *
FROM `sql-tutorial-351503.SampleDataset.Combat`
Nhấn vào View Result để thấy kết quả từng bảng

Nhấn váo Save Query để lưu truy vấn


Truy vấn 2 :

SELECT *
FROM `sql-tutorial-351503.SampleDataset.Pokemon` Pokemon
WHERE Pokemon.Type_1 = "Grass" AND Pokemon.HP > 50
Save View from the Query
Truy vấn từ View

SELECT *
FROM `sql-tutorial-351503.SampleDataset.GrassPokemonView`
Truy Vấn 3:
SELECT DISTINCT Type_1
FROM `sql-tutorial-351503.SampleDataset.Pokemon` Pokemon

SELECT COUNT(DISTINCT Type_1)


FROM `sql-tutorial-351503.SampleDataset.Pokemon` Pokemon
SELECT DISTINCT Type_1, Type_2
FROM `sql-tutorial-351503.SampleDataset.Pokemon` Pokemon
WHERE Pokemon.Legendary = True AND Type_2 IS NOT NULL
ORDER BY Type_1 ASC, Type_2 DESC

SELECT
MIN(HP) AS MIN_HP,
MAX(HP) AS MAX_HP,
ROUND(AVG(Attack),3) AS AVG_ATT,
STDDEV(Defense) AS STD_DEF,
POW(STDDEV(Defense), 2)
FROM `sql-tutorial-351503.SampleDataset.Pokemon` Pokemon
Truy Vấn 4:

SELECT First_pokemon, Count(Second_pokemon) AS NumberFight1


FROM `sql-tutorial-351503.SampleDataset.Combat` Combat
GROUP BY First_pokemon

SELECT Type_1, MIN(Speed) AS MinSpeed, MAX(Speed) AS MaxSpeed


FROM `sql-tutorial-351503.SampleDataset.Pokemon` Pokemon
WHERE Type_1 in ("Dragon", "Flying", "Psychic", "Poison")
GROUP BY Type_1
SELECT Type_1, Type_2, COUNT(Name) AS NumOfPokemon,
SUM(Pokemon.Sp__Atk) AS SUM_SPATK, AVG(Pokemon.Sp__Def) AS AVG_SPDEF, MIN(Name) AS
ExamplePokemon
FROM `sql-tutorial-351503.SampleDataset.Pokemon` Pokemon
WHERE Name LIKE "W%" AND Type_2 IS NOT NULL
GROUP BY Type_1, Type_2

SELECT Second_pokemon, Count(First_pokemon) AS NumberFight2


FROM `sql-tutorial-351503.SampleDataset.Combat` Combat
GROUP BY Second_pokemon
HAVING Count(First_pokemon) > 60
ORDER BY Second_pokemon

Truy Vấn 5

SELECT
SubQuery1.First_pokemon,
SubQuery1.NumberFight1,
SubQuery2.NumberFight2,
SubQuery1.NumberFight1 + SubQuery2.NumberFight2 AS TotalFight
FROM
(SELECT First_pokemon, Count(Second_pokemon) AS NumberFight1
FROM `sql-tutorial-351503.SampleDataset.Combat` Combat
GROUP BY First_pokemon ) SubQuery1
,
(SELECT Second_pokemon, Count(First_pokemon) AS NumberFight2
FROM `sql-tutorial-351503.SampleDataset.Combat` Combat
GROUP BY Second_pokemon) SubQuery2
WHERE SubQuery1.First_pokemon = SubQuery2.Second_pokemon

Save Views and Query


SELECT
SubQuery1.First_pokemon,
SubQuery1.NumberFight1,
SubQuery2.NumberFight2,
SubQuery1.NumberFight1 + SubQuery2.NumberFight2 AS TotalFight
FROM `sql-tutorial-351503.SampleDataset.FirstPokemonTable` SubQuery1,
`sql-tutorial-351503.SampleDataset.SecondPokemonTable` SubQuery2
WHERE SubQuery1.First_pokemon = SubQuery2.Second_pokemon

WITH WinTable AS
(
SELECT Winner AS WinPokemon, COUNT(*) AS TotalWin
FROM `sql-tutorial-351503.SampleDataset.Combat` Combat
GROUP BY Winner
)
SELECT
SubQuery1.First_pokemon,
SubQuery1.NumberFight1,
SubQuery2.NumberFight2,
SubQuery1.NumberFight1 + SubQuery2.NumberFight2 AS TotalFight,
SubQuery3.TotalWin,
SubQuery3.TotalWin / (SubQuery1.NumberFight1 + SubQuery2.NumberFight2) AS WinPercent
FROM `sql-tutorial-351503.SampleDataset.FirstPokemonTable` SubQuery1,
`sql-tutorial-351503.SampleDataset.SecondPokemonTable` SubQuery2,
WinTable SubQuery3
WHERE SubQuery1.First_pokemon = SubQuery2.Second_pokemon AND SubQuery3.WinPokemon =
SubQuery1.First_pokemon

WITH WinTable AS
(
SELECT Winner AS WinPokemon, COUNT(*) AS TotalWin
FROM `sql-tutorial-351503.SampleDataset.Combat` Combat
GROUP BY Winner
)
SELECT
SubQuery1.First_pokemon,
SubQuery1.NumberFight1,
SubQuery2.NumberFight2,
SubQuery1.NumberFight1 + SubQuery2.NumberFight2 AS TotalFight,
SubQuery3.TotalWin,
SubQuery3.TotalWin / (SubQuery1.NumberFight1 + SubQuery2.NumberFight2) AS WinPercent
FROM `sql-tutorial-351503.SampleDataset.FirstPokemonTable` SubQuery1
INNER JOIN `sql-tutorial-351503.SampleDataset.SecondPokemonTable` SubQuery2 ON SubQuery1.First_pokemon =
SubQuery2.Second_pokemon
INNER JOIN WinTable SubQuery3 ON SubQuery3.WinPokemon = SubQuery1.First_pokemon
SELECT
Combat.First_pokemon, Pokemon1.Name AS Name_Pokemon1, Pokemon1.Type_1 AS Type_Pokemon1,
Combat.Second_pokemon, Pokemon2.Name AS Name_Pokemon2, Pokemon2.Type_1 AS Type_Pokemon2,
Combat.Winner
FROM `sql-tutorial-351503.SampleDataset.Combat` Combat
LEFT JOIN `sql-tutorial-351503.SampleDataset.Pokemon` Pokemon1
ON Combat.First_pokemon = Pokemon1._
LEFT JOIN `sql-tutorial-351503.SampleDataset.Pokemon` Pokemon2
ON Combat.Second_pokemon = Pokemon2._
WHERE Pokemon1.Name IS NOT NULL and Pokemon2.Name IS NOT NULL

You might also like