0% found this document useful (0 votes)
71 views

SQL Course

The document provides information about database concepts including: 1) It describes three categories of data models - conceptual, logical, and physical - which are used in database design. 2) It defines database schema as the structure and organization of a database and database state as the current data in the database. 3) It explains what a database management system (DBMS) is and some of its core functions like transforming business processes into a database structure, supporting SQL, managing transactions, and protecting and backing up the database.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
71 views

SQL Course

The document provides information about database concepts including: 1) It describes three categories of data models - conceptual, logical, and physical - which are used in database design. 2) It defines database schema as the structure and organization of a database and database state as the current data in the database. 3) It explains what a database management system (DBMS) is and some of its core functions like transforming business processes into a database structure, supporting SQL, managing transactions, and protecting and backing up the database.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 183

SQL COURSE

A database is an organized
collection of data whose content
must be quickly and easily

Accessed - Managed - Updated


Categories of data models
• Conceptual: Identify and describe the main objects to create a global view of the data, with little
detail.

• Logical: Construct a model of the data using a specific model, but without consideration for the
actual database system that will eventually store the data and run the application.

• Physical: Design a model for implementing the logical model that considers the RDBMS to be
used. During this phase, you’ll describe tables, indexes, and so on. The physical model is built on
tables.
Database schema & database state
• A database schema or an intention gives a description of the database. This
can be considered as a blueprint of a database and gives a list of fields in the
database with their data types. In other words, it describes the organization
and structure of data in a database system, along with the relationships
mapped between the entities.

• A database state provides the present state of the database and its data. It
can be considered as an extension of the database schema. When a
database is newly defined, the corresponding database state is empty.
Factors that affect a database state are entering, deleting or modifying
information in the database.
Example of Database Schema
Example of Database State
WHAT IS DATABASE MANAGEMENT SYSTEM?
The database management system (DBMS) is the software that interacts
with end users, applications, and the database itself to capture and
analyze the data.
The DBMS software additionally encompasses the core facilities
provided to administer the database.
The sum total of the database, the DBMS and the associated
applications can be referred to as a "database system".
Often the term "database" is also used to loosely refer to any of the
DBMS, the database system or an application associated with the
database.
DBMS Languages

Data Definition Language (DDL)

Data Manipulation Language (DML)

Data Control Language (DCL)

Transaction Control Language (TCL)

Data Query Language (DQL)


DBMS is a software to allow users interact with
database

USER DBMS DATABASE


DBMS Functions:
• Transform Business process to DB
• Support SQL for users read, write
• Manage transactions
• Protection and backup DB
• Manage users roles
•Applications: – It can be considered as a user-friendly web page where the
user enters the requests. Here he simply enters the details that he needs and
presses buttons to get the data.
•End User: – They are the real users of the database. They can be developers,
designers, administrators, or the actual users of the database.
•DDL: – Data Definition Language (DDL) is a query fired to create database,
schema, tables, mappings, etc in the database. These are the commands
used to create objects like tables, indexes in the database for the first time. In
other words, they create the structure of the database.
•DDL Compiler: – This part of the database is responsible for processing the
DDL commands. That means this compiler actually breaks down the
command into machine-understandable codes. It is also responsible for
storing the metadata information like table name, space used by it, number of
columns in it, mapping information, etc.
•DML Compiler: – When the user inserts, deletes, updates or retrieves the
record from the database, he will be sending requests which he understands
by pressing some buttons. But for the database to work/understand the
request, it should be broken down to object code. This is done by this
compiler. One can imagine this as when a person is asked some question,
how this is broken down into waves to reach the brain!
•Query Optimizer: – When a user fires some requests, he is least bothered
how it will be fired on the database. He is not all aware of the database or its
way of performance. But whatever be the request, it should be efficient
enough to fetch, insert, update, or delete the data from the database. The
query optimizer decides the best way to execute the user request which is
received from the DML compiler. It is similar to selecting the best nerve to
carry the waves to the brain!
Stored Data Manager: – This is also known as Database Control System. It is one of the main central systems of the
database. It is responsible for various tasks
It converts the requests received from query optimizer to machine-understandable form. It makes actual requests inside
the database. It is like fetching the exact part of the brain to answer.
It helps to maintain consistency and integrity by applying the constraints. That means it does not allow
inserting/updating / deleting any data if it has child entry. Similarly, it does not allow entering any duplicate value into
database tables.
It controls concurrent access. If there are multiple users accessing the database at the same time, it makes sure, all of
them see correct data. It guarantees that there is no data loss or data mismatch happens between the transactions of
multiple users.
It helps to back up the database and recovers data whenever required. Since it is a huge database and when there is any
unexpected exploit of the transaction, and reverting the changes is not easy. It maintains the backup of all data so that it
can be recovered.
Data Files: – It has the real data stored in it. It can be stored as magnetic tapes, magnetic disks, or optical disks.
Compiled DML: – Some of the processed DML statements (insert, update, delete) are stored in it so that if there are
similar requests, it will be re-used.
Data Dictionary: – It contains all the information about the database. As the name suggests, it is the dictionary of all the
data items. It contains a description of all the tables, view, materialized views, constraints, indexes, triggers, etc.
DATABASE TYPES

• Flat file database


• Hierarchical database
• Relational database
• Dimensional database
• Two dimensional database
FLAT FILE DATABASE • Store as csv, text files
HIERACHICAL
DATABASE

Data retrieval is difficult as


whole tree needs to query
starting from the root node
Follow structure of data
flat file tables

RELATIONAL Add relationships


DATABASE between multiple tables

Each record gets a


unique
RELATIONAL DATABASE

• Follow structure of data flat file tables


• Add relationships between multiple
tables
• Each record gets a unique identifier key
DIMENTIONAL DATABASE

Dimensional Modeling (DM) is a data


structure technique optimized for data
storage in a Data warehouse. The purpose
of dimensional modeling is to optimize
the database for faster retrieval of data.
OLAP & OLTP
OLAP OLTP
Applications - Report - Transactional data
Structure - Star schema, Snowflake schema - 3NF

DMS RDMS
Normalization

• Store only the minimal amount of information.


• ensure data dependencies make sense (only storing related
data in a table)

• Remove redundancies.
• eliminate redundant data (for example, storing the same data in
more than one table) and
Examples of Normalization

• customer information is stored


redundantly, wasting storage space

• update (changing address of Galler)


require changing multiple rows

• need to break up large table to


smaller tables : normalization
Examples of Normalization
• Only redudancy in custNo;
custName,custAddress and
creditRat stored once

• any update to address is


confined to a single row in
customer table

• delete an order doesn’t


lead to side effect
DeNormalization
Distinguish the difference between normalization and denormaliztion
PID PNAME Color Color Brand Brand Cate Cate Cust No Cust Payment Id Payment Invoice Amount Store Id Store
ID Name ID Name Id Name Name Name No Name

1 Coca #Cl1 Red #Br1 Cocaco 293 F&B 101020 Kan 102 Mono #1288 12023033 12 HCM
Thung la

2 Bia Tiger #Cl1 Blue #Br1 Tiger 293 F&B 292922 Huy 102 Mono #1288 12023033 12 HCM

1 Coca #Cl1 Red #Br1 Cocaco 293 F&B 101020 Kan 102 Mono #1288 12023033 12 HCM
Thung la

PID PNAME ColorID Brand ID Cust No Cust Name Payment Payment Store Id Store Cate Id Cate Name
Id Name Name
293 Food &
1 Coca #Cl1 #Br1 101020 Kan 102 Mono 12 HCM Bevarage
Thung
293 Food &
2 Bia Tiger #Cl1 #Br1 292922 Huy 102 Mono 12 HCM Bevarage

1 Coca #Cl1 #Br1 101020 Kan 102 Mono 12 HCM 293 Food &
Thung Bevarage

PID Cate Cust Payment Invoice Amount Store Id


Color Color Brand Brand
ID Name ID Name Select * from tbl where Id No Id No

#Br1 Cocacola pname = ‘Coca’ and cust_name = 1 293 10102 102 #1288 12023033 12
#Cl1 Red
‘Huy’ and payment_name = ‘momo’ 2 293 29292 102 #1288 12023033 12
#Cl1 Blue #Br1 Tiger
and color =‘red’ and brand = ‘Tiger’
#Cl1 Red #Br1 Cocacola and store = ‘hcm’ 1 293 10102 102 #1288 12023033 12
Denormalize the Normalized Databases
Using pre-joined tables

To pre-join tables, you need to add a


non-key column to a table.

This way, you can dodge joining tables


and therefore speed up queries.

Yet you must ensure that the


denormalized column gets updated
every time the master column value is
altered.
Denormalize the Normalized Databases
Keeping details with the master

There can be cases when the number of


detail records per master is fixed or
when detail records are queried with
the master. In these cases, you can
denormalize a database by adding
detail columns to the master table

Example
All users have 2 storage “message” and
“file” to keep their data.
Denormalize the Normalized Databases
Adding short-circuit keys

If a database has over three levels of


master detail and you need to query
only records from the lowest and
highest levels, you can denormalize
your database by creating short-circuit
keys that connect the lowest-level
grandchild records to higher-level
grandparent records.
The Zero Form - No room for growth & wasting space
First Form
• Primary key has 2 or
more columns
combined

Benefits: Now we can have infinite phone numbers or company addresses for
each contact
Drawback: Now we have to type in everything over and over again. This leads to
inconsistency, redundancy and wasting space. Thus, the second normal form
Second Form
• Create separate tables for sets
of values that apply to multiple
records.

• Relate the tables with a foreign


key.

• Primary key has only 1 column


Third Form
• Eliminate fields that do not depend on the
primary key.

• Not depend on transitively changing


Ex: change name has to change gender
OLAP


-
-

-
-
-

-


IS A SYSTEM INCLUDING PROCESS, TECH, DATA PRESENTATIONS
DATA WAREHOUSE DEFINITION

A data warehouse is a system that retrieves and consolidates data


periodically from the source systems into a dimensional or normalized
data store.

It usually keeps years of history and is queried for business intelligence


and other analytical activities.

It is typically updated in batch, not every time a transaction happens


in the source system
GIỚI THIỆU BIGQUERY
Overview
Các nội dung chủ yếu:

- HV biết các tạo data set, upload cơ sở dữ liệu vào data warehouse
- Bảng và các kiểu dữ liệu chính trong SQL
- Chọn vùng dữ liệu
- Các chức năng saved queries, query history, save result
- Lọc dữ liệu với WHERE
Syntax conventions
• Upper or Lower insensitive
• Write keyword Upper case letters
• White-space insensitive
• Use ; for terminator
ĐĂNG NHẬP VÀO
BIGQUERY UI
BẮT ĐẦU SỬ DỤNG BIGQUERY
● Step 1: Truy cập vào trang web:
https://console.cloud.google.com/bigquery?project và chọn Đặng nhập
BẮT ĐẦU SỬ DỤNG BIGQUERY
● Step 2: Đăng nhập bằng tài khoản Google
BẮT ĐẦU SỬ DỤNG BIGQUERY
● Sau đó bạn sẽ được dẫn và BigQuery UI
TẠO PROJECT VÀ
THÊM DATASET
Tạo Project
TẠO PROJECT
- Step 1: Trong giao diện BigQury UI, chọn vào phần chọn project
- Step 2: Chọn New Project
TẠO PROJECT
- Step 3: Đặt tên cho Project và
chọn Create
Thêm Dataset
vào Project
Thêm Dataset vào Project
- Step 1: Trong cửa sổ BigQuery UI, chọn project muốn tạo dataset
- Step 2: Chọn Create Dataset
Thêm Dataset vào Project
- Step 3: Điền tên cho project
- Step 4: Chọn location cho project
BẢNG VÀ CÁC KIỂU DỮ
LIỆU
TẠO TABLE
- Step 1: Trong giao diện BigQuery UI, chọn project, sau đó chọn dataset muốn thêm
bảng vào.
- Step 2: Chọn New Project
TẠO PROJECT
- Step 3: Điền thông tin của bảng, chi
tiết cột trong bảng. Sau đó nhấn
Create Table

❖ Lưu ý: Ở phần tạo cột của bảng,


mỗi cột sẽ có định dạng kiểu dữ liệu
riêng. Phần này sẽ được giới thiệu
ở phần sau.
CÁC KIỂU DỮ LIỆU
Tên Loại dữ liệu Mô tả Ví dụ

Integer INT64 Giá trị số nguyên 1; 2; 3

Floating point FLOAT64 Giá trị số thực xấp xỉ 1,123; 2,223

Numeric NUMERIC GIá trị số thực chính xác.

Boolean BOOL Chỉ chứ giá trị “Đúng” hoặc


“Sai”

String STRING Chuỗi ký tự (Unicode) a; abc; abcdef

Geography GEOGRAPHY Toạ độ các điểm trên Trái


Đất
CÁC KIỂU DỮ LIỆU
Tên Loại dữ liệu Mô tả Ví dụ

Bytes BYTES Dãy giá trị chỉ gồm số “0” và 1000111000


“1”

Date DATE Gía trị ngày, tháng ,năm 2020-02-25; 2020-2-25


theo format
YYYY-(M)M-(D)D

Date / time DATETIME Giá trị ngày, tháng, năm, 2020-02-25 16:59:50
giờ, phút, giây theo format:
YYYY-(M)M-(D)D
(H)H:(Mi)Mi:(S)S

Time TIME Giá trị giờ, phút, giây theo 16:59:50


format: (H)H:(Mi)Mi:(S)S
TARGET
Sau khi hoàn thành section này các bạn
sẽ biết được:
● Xây dựng tập dữ liệu từ public data
hoặc từ dữ liệu cá nhân.
● Chọn các phần dữ liệu cần thiết cho
quá trình truy vấn.
OUTLINE

1. Sử dụng public data.


2. Upload data
3. Chọn một hoặc nhiều cột
4. Chọn có điều kiện ngoại trừ
GIỚI THIỆU PUBLIC DATASET

Google cung cấp rất nhiều tập


dữ liệu mẫu về nhiều lĩnh vực
khác nhau để đáp ứng nhu cầu
thực hành của khách hàng.
SỬ DỤNG PUBLIC DATASET
- Step 1: Ở phần Navigation
Panel Chọn Add Data

- Step 2: Sau đó chọn Explore


public dataset
SỬ DỤNG PUBLIC DATASET
- Sau đó bạn sẽ được chuyển
hướng vào kho dữ liệu của
google

- Step 3: Chọn vào dataset mà


bạn muốn mở
SỬ DỤNG PUBLICDATASET
- Step 4: Chọn View Dataset
SỬ DỤNG PUBLICDATASET
- Sau đó 1 Project chứa data
set bạn vừa chọn sẽ được
tạo,
TẠO DATASET TỪ
SHEET HOẶC DỮ
LIỆU CÁ NHÂN
TẠO DATASET TỪ SHEET HOẶC DỮ LIỆU CÁ NHÂN
Để sử dụng dataset từ bảng dữ liệu cá nhân,
trước tiên các bạn phải tự tạo Project và
Dataset, sau đó mới tạo các bảng bên trong
dataset bằng dữ liệu cá nhân.

Giả sử ta có 1 project “project-test-269202”,


trong đó có 1 dataset “Test_dataset”. Bây giờ
ta sẽ tiến hành tạo bảng từ các dữ liệu upload.
TẠO DATASET TỪ SHEET HOẶC DỮ LIỆU CÁ
NHÂN
- Step 1: Trong dataset ta nhấp vào Create Table
TẠO DATASET TỪ SHEET HOẶC DỮ LIỆU CÁ NHÂN
- Step 2: Ở phần Source, chọn Upload để tải
file lên hoặc Drive để sử dụng các file
Google Sheet.
- Step 3: Sau khi điền đầy đủ thông tin, nhấn
Create Table để tạo.
CHỌN VÙNG
DỮ LIỆU
TARGET
Sau khi hoàn thành section này các bạn sẽ biết được:
● Cách sử dụng câu truy vấn cơ bản (SELECT ).
● Sử dụng được SELECT EXECEPT
● Sử dụng được hàm CAST
Chọn dữ liệu từ một
hoặc nhiều cột
CHỌN DỮ LIỆU TỪ MỘT HOẶC NHIỀU CỘT
Để chọn dữ liệu từ một cột hoặc nhiều cột trong bảng ta dùng syntax:

SELECT column_name(s) FROM table_name

Ở ví dụ bên phải, mình


muốn chọn 3 cột
InvoiceNo, StockCode
và Quantity từ bảng
data_test
CHỌN DỮ LIỆU TỪ MỘT HOẶC NHIỀU CỘT
Để chọn tất cả dữ liệu trong bảng ta dùng syntax:

SELECT * FROM table_name

Ở ví dụ bên phải,
mình chọn tất cả
các cột từ bảng
data_test
Chọn dữ liệu từ tất cả
cột ngoại trừ...
CHỌN DỮ LIỆU TỪ MỘT HOẶC NHIỀU CỘT
Để chọn dữ liệu từ bảng ngoại trừ các cột tuỳ chọn ta dùng syntax:

SELECT * EXCEPT column_name(s) FROM table_name

Ở ví dụ bên phải, mình


muốn chọn tất cả cột
trừ cột InvoiceNo,
StockCode từ bảng
data_test
CHUYỂN ĐỔI KIỂU DỮ LIỆU
Để thay đổi kiểu dữ liệu của một cột, ta chọn:

SELECT *, CAST(column_name AS ... ) FROM table_name

Ở ví dụ bên phải, mình


muốn chọn tất cả cột và
muốn lấy Avg_position theo
kiểu Số thực (Integer), từ
bảng GA_01
LỌC DỮ LIỆU
LỌC DỮ LIỆU

Để chọn dữ liệu trong bảng với điều kiện lọc:

SELECT column_name(s) FROM ‘table_name’ WHERE [condition is true]


LỌC DỮ LIỆU
Lọc dữ liệu dạng số :

- Đối với dữ liệu dạng số, các điều


kiện lọc phổ biến nhứ
- lớn hơn: >
- bé hơn: <
- lớn hơn hoặc bằng: >=
- bé hơn hoặc bằng: <=
- bằng: =
- không bằng: !=

- Ở ví dụ bên phải là câu lệnh dùng


để lọc các hàng có Impressions lớn
hơn 3000
LỌC DỮ LIỆU
Lọc dữ liệu dạng thời gian:

- Đối với dữ liệu dạng thời gian, các


điều kiện lọc cũng tương tự như dữ
liệu dạng số:
- Chọn các ngày sau ngày điều
kiên: >
- Chọn các ngày trước ngày
điều kiện: <
- Bắt đầu từ ngày: >=
- Đến ngày <=
- bằng: =
- không bằng: !=
LỌC DỮ LIỆU
Lọc dữ liệu dạng boolean:

- Đối với dữ liệu dạng boolean, giá trị dữ liệu có dạng true hoặc false vì vậy câu lệnh lọc có 2
dạng phổ biến:

SELECT column_name(s) FROM ‘table_name’ WHERE condition column = TRUE

SELECT column_name(s) FROM ‘table_name’ WHERE condition column = FALSE


Exercise Buổi 1
Học viên sử dụng:
https://docs.google.com/spreadsheets/d/1wtA_kjsPKElVs5462OPVCoqd-WIaGfQ8TEudgtkmNMA/edit#gid=0
(MKT_01) để làm cơ sở dữ liệu cho thực hành.

1. Lấy toàn bộ dữ liệu của bảng MKT_01


2. Lấy ra 100 dòng của bảng MKT_01
3. Chọn toàn bộ bảng MKT_01, nhưng bỏ ra cột Campaign_ads_name, Placement_URL, Ad_type (Chỉ chọn 500
dòng và lấy từ 2019-05-01 đến 2019-07-01)
4. Chuyển đổi TimeStamp thành Date
5. Chọn toàn bộ dữ liệu có Cost > 200000, Cost < 200000, Cost trong khoảng 200000 - 300000 & Có Date
trong khoảng 2019-05-01 đến 2019-06-01
6. Chọn dữ liệu từ bảng MKT_01, có Cost # 300000
7. Chọn dữ liệu từ bảng MKT_01, có Date không phải là ngày 2019-07-09 và 2019-06-01
Chọn dữ liệu từ bảng MKT_01, có Campaign_ads_ID là 1917978903, 1917129835, 1917120641
Chọn dữ liệu từ bảng MKT_01, có Campaign_ads_ID không phải là 1917978903
10. Chọn dữ liệu từ bảng MKT_01, có Campaign_ads_name có chứa ‘SEM’,
11. Chọn dữ liệu từ bảng MKT_01, có Campaign_ads_name có chứa ‘GDN’
12. Chọn dữ lệu từ bảng MKT_01, có Ad_group_name không chứa ‘May 17’
Buổi 2
Overview
Các nội dung chủ yếu:

- Lọc dữ liệu với dữ liệu kiểu text


- Cách kết hợp điều kiện lọc (Với AND và OR)
- Sắp xếp kết quả lọc
- Học viên biết được các nhóm dữ liệu và sắp xếp dữliệu
- Học viên có thể nhóm dữ liệu theo điều kiện
- Học viên có thể sử dụng được một số hàm thống kê cơ bản để
thống kê dữ liệu
- Học viên có thể vận dụng được cấu trúc Subquery
LỌC DỮ LIỆU
Lọc dữ liệu dạng chữ

- Đối với dữ liệu dạng chữ, ta vẫn có


thể sử dụng các toán tử như các loại
dữ liệu trên như:
- giống : =
- khác : != hoặc <>

-Ví dụ như hình bên phải mìnhmuốn


lọc ra những dòng có Keywords là
Financial Industry

-Để thuận tiện cho việc lọc ta nên sử dụng hàm LOWER() để chuyển các giá trị trong cột lọc về chữ
thường. Ví dụ như:

WHERE LOWER(Keywords) = ‘financial industry’


LỌC DỮ LIỆU
Lọc dữ liệu dạng chữ:

- Có những trường hợp, ta không biết


chính xác chuỗi giá trị kí tự mà chỉ nhớ
1 phần trong chuỗi thì ta có thể dùng
lệnh LIKE để lọc ra các dòng chứa giá
trị đó. Ta dùng dấu % để xác định vị trí
của phần ta biết trongchuỗi dữ liệu. Ví
dụ như:
- ‘abc%’ : cụm từ abc nằm ở đầu
- ‘%abc%’ : cụm từ abc nằm ởgiữa
- ‘%abc’: cụm từ abc nằm ởcuối
MỘT VÀI BỘ LỌC DỮ LIỆU
MỘT VÀI BỘ LỌC DỮ LIỆU
Bộ lọc IN()

- Bộ lọc IN() giúp lọc ra những dòng dữ


liệu chứa những giá trị nằm trong dấu
ngoặc(). Các giá trị này được ngăn cách
bằng dấu phẩy.

- Ở ví dụ bên phải, ta muốn lấy các dòng


có Campaign_ads_ID: 1917939744,
1917978903
MỘT VÀI BỘ LỌC DỮ LIỆU
Bộ lọc NOT

- Bộ lọc NOT giúp lọc ra những dòng dữ


liệu không thoả điều kiện ra đặt ra.

- Ở ví dụ bên phải, chúng ta không lấy


các dòng có Campaign_ads_ID:
1917939744, 1917978903 . Kết quả
lọc sẽ không bao gồm các dòng có
Campaign_ads_ID bằng 1917939744
hoặc 1917978903.
MỘT VÀI BỘ LỌC DỮ LIỆU
Bộ lọc BETWEEN

- Bộ lọc BETWEEN...AND… giúp chúng


ta lọc những giá trị nằm trong 1 khoảng
xác định

- Ở ví dụ bên phải, ta muốn lấy các dòng


có Cost nằm trong khoảng từ 300,000
và 400,000.
KẾT HỢP ĐIỀU KIỆN LỌC
KẾT HỢP ĐIỀU KIỆN LỌC
Kết hợp điều kiện AND

- Câu lệnh AND sẽ trả ra các kết


quả thoả tất cả các điều kiệnlọc.
-

- Ở ví dụ bên phải, ta muốn lấy các


dòng có Campaign_ads_ID
không phải 1917939744 hoặc
1917978903 và giá trị trong cột
Campaign_name là ‘fox’.
- Trong trường hợp này, lệnh
QUERY trả về 13 kết quả thỏa
mãn điều kiện.
KẾT HỢP ĐIỀU KIỆN LỌC
Kết hợp điều kiện OR

Câu lệnh OR sẽ trả ra các kết quả thoả một


trong trong các điều kiện lọc (cái này hoặccái
kia).
a.

Ở ví dụ bên phải, ta muốn lấy các dòng có


Campaign_ads_ID không phải 1917939744
hoặc 1917978903 và giá trị trong cột
Campaign_name là ‘fox’.

Trong trường hợp này, lệnh QUERY trả về


869 kết quả thỏa mãn điềukiện.
SẮP XẾP KẾT QUẢ LỌC
SẮP XẾP KẾT QUẢ LỌC
Sắp xếp kết quả lọc bằng lệnh

- Trong những trường hợp cần thiết,


chúng ta có thể sắp xếp kết quả lọc
bằng cách kết hợp lệnh ORDER BY sau
lệnh lọc WHERE .

- Ở ví dụ bên phải, ta muốn lấy cácdòng


có Cost nằm trong khoảng từ 100,000
và 200,000 và sắp xếp theo chiều giá
trị giảm dần của Cost.
SẮP XẾP KẾT QUẢ LỌC
Sắp xếp kết quả lọc bằng lệnh

- Trong những trường hợp cần thiết,


chúng ta có thể sắp xếp kết quả lọc
bằng cách kết hợp lệnh ORDER BY sau
lệnh lọc WHERE .

- Ở ví dụ bên phải, ta muốn lấy cácdòng


có Cost nằm trong khoảng từ 100,000
và 200,000 và sắp xếp theo chiều giá
trị giảm dần của Cost.
NHÓM VÀ SẮP XẾP
NHÓM VÀ SẮP XẾP
Trong 1 số trường hợp như tính tổng số
lmpressions theo từng project, chúng ta phải
nhóm các sản phẩm đó vào một mã hoá đơn,
sau đó tính tổng số lượng. Việc nhóm được
thực hiện bằng câu lệnh GROUP BY.

Như ở ví dụ bên phải, ta thực hiện tính


Impressions theo project vì vậy chúng ta tính
SUM(Impressions) và GROUP BY project.
Sau đó chúng ta có thể sắp xếp bằng lệnh
ORDER BY cột tiêu chí
NHÓM VÀ SẮP XẾP
Chúng ta cũng có thể nhóm dữ liệu theo nhiều
cột.

Ở ví dụ bên phải ta muốn tính Impressions


theo các ngày, ta tính SUM(Impressions) và
GROUP BY Date, Project. Sau đó ta sắp xếp
giá trị trả về theo chiều tăng dần của Date.
NHÓM VÀ SẮP XẾP
Ngoài việc sử dụng tên cột để thực hiện các
thao tác nhóm và sắp xếp, ta có thể sử dụng
số thứ tự của cột đó để khai báo. Điều này
giúp làm việc với BigQuery được dễ dàng
hơn.

Ta sử dụng là ví dụ ở trên. Trong phần


SELECT, Date đứng thứ 1, sau đó là Project
đứng thứ 2. Ta thử thay đổi tên của các cột
này bằng số thứ tự của chúng trong câu lệnh
GROUP BY và ORDER BY, kết quả không
thay đổi.
NHÓM DỮ LIỆU
VỚI ĐIỀU KIỆN
NHÓM DỮ LIỆU VỚI ĐIỀU KIỆN
Trong khi nhóm dữ liệu, ta cũng có thể kết
hợp với các điều kiện lọc bằng cách thêm lện h
HAVING vào phía sau lệnh GROUP BY.

Ở ví dụ bên phải, ta sự dụng lại ví dụ ở phần


trên, tuy nhiên ở đây ta chỉ muốn xem những
ngày có Impressions lớn hơn 1,000. Ta thêm
câu lệnh HAVING Impressions > 1,000 vào
sau lệnh GROUP BY.
MỘT SỐ HÀM THỐNG KÊ
THÔNG DỤNG
ĐẾM SỐ LƯỢNG GIÁ TRỊ TRONG CỘT
Để đếm số lượng giá trị trong 1 cột, ta sử dụng câu
lệnh COUNT() theo mẫu sau:

SELECT COUNT(column_name)

FROM ‘table_name’

Hoặc số lượng hàng trong 1 bảng theo mẫu sau:

SELECT COUNT(*)

FROM ‘table_name’
ĐẾM SỐ LƯỢNG GIÁ TRỊ TRONG CỘT
Để đếm số lượng các giá trị riêng biệt trong 1 cột,
ta sử dụng thêm điều kiện DISTINCT vào câu lệnh
COUNT() theo mẫu sau:

SELECT COUNT(DISTINCT column_name)

FROM ‘table_name’

Ngoài ra ta cũng có thể chọn những giá trị riêng


biệt trong cột bằng cách sử dụng điều kiệt
DISTINCT sau SELECT

SELECT DISTINCT column_name Ở ví dụ trên ta có thể thấy có tổng cộng 23 dòng trong
cột InvoiceNo tuy nhiên chỉ có 4 giá trị riêng biệt.
FROM ‘table_name’
HÀM TÍNH TỔNG
Để tính tổng của những giá trị trong 1
cột, ta sử dụng câu lệnh SUM() theo
mẫu sau:

SELECT SUM(column_name)

FROM ‘table_name’
HÀM TÍNH TRUNG BÌNH
Để tính trung bình của những giá trị
trong 1 cột, ta sử dụng câu lệnhAVG()
theo mẫu sau:

SELECTAVG(column_name)

FROM ‘table_name’
HÀM LẤY GIÁ TRỊ NHỎ NHẤT VÀ LỚNNHẤT

Để lọc ra giá trị nhỏ nhất trong cột ta


dùng hàm min theo mẫu sau:

SELECT MIN(column_name)

FROM ‘table_name’

Ngược lại, để chọn giá trị lớn nhất


trong cột ta dùng hàm min theo mẫu
sau:

SELECT MAX(column_name)

FROM ‘table_name’
HÀM LẤY PHƯƠNG SAI VÀ ĐỘ LỆCH CHUẨN

Để tính phương sai của tập giá trị trong 1


cột ra sử dung hàm VAR_POP() theo
mẫu:

SELECT VAR_POP(column_name)

FROM ‘table_name’

Tượng tự, để tính độ lệch chuẩn của giá


trị trong 1 cột ta sử dụng hàm
STDEV_POP():

SELECT STDDEV_POP(column_name)

FROM ‘table_name’
Subquery
Subquery (Truy vấn con)

Để kết hợp các bảng dữ liệu với nhau


Subquery cung cấp một cách khác để trả lại
dữ liệu từ nhiều bảng gọi.

Khi một câu lệnh SELECT được sử dụng


trong một câu lệnh khác, câu lệnh SELECT
bên trong được gọi là truy vấn con
(subquery).

Cơ bản một truy vấn con có thể được sử


dụng ở bất cứ nơi đâu mà một biểu thức có
thể được sử dụng (sau SELECT, FROM,
WHERE..) với số lượng không giới hạn.
Subquery (Truy vấn con)
Ví du: Bạn cần lấy ra tất cả dữ liệu của GA_02 có Campaign_Ads_ID
nằm trong bảng KPIs_GA

>> SELECT * FROM GA_01 WHERE Campaign_Ads_ID IN


(SELECT Campaign_Ads_ID FROM KPIs_GA)
Subquery with Comparison Operators
Đôi khi bạn cần so sánh các chỉ số của bảng nàyso với bảng
khác.

Subquery hỗ trợ mục đích này.

Ví dụ, bạn cần lấy ra dữ liệu từ bảng GA_01 có CR >KPIs_CR ở


bảng KPI_OVERALL

>> SELECT * FROM GA_01 WHERE CR > (SELECT


AVG(KPIs_CR FROM KPI_OVERALL)
Exercise Buổi 2
Học viên sử dụng:
https://docs.google.com/spreadsheets/d/11t-zFM5asHQ4uYvT1ygkAC4RjkTHnZf8vbSu-R9_Igw/edit?usp=drive_web&ouid=10593
1960053376267539 và
https://docs.google.com/spreadsheets/d/10bIrSgFjLS_4aoADzwUbMFdvRz6fHWFszMoOK5bEZO4/edit?usp=drive_web&ouid=105
931960053376267539 (GA_02 và KPIs_GA) để làm cơ sở dữ liệu cho thực hành.

1. Sử dụng bảng GA_02, chọn ra Campaign_ads_ID không phải là 1917939744 và 1917978903, có Campaign_ads_name là
‘wolf’, có Impressions nằm trong khoảng 500 - 1000.
2. SD GA_02M, lấy ra những project sau: Cassandra hoặc LA Bee One hoặc Galinburg, có Ad type là Image Ad hoặc
Expanded text ad, có Date trong khoảng 2019-06-01 đến 2019-07-03, Có CR lớn hơn 0.15. Sắp xếp theo thứ tự giảm dần
của Cost.
3. Báo cáo hiệu quả của project thông qua các chỉ số Cost, Impressions, Clicks, Conversions, Video Views, CR, CTR, CPC,
CPM.
4. Chọn ra những project có số Campaign_ads_name xuất hiện 3 lần và có Impressions lớn hơn150,000.
5. Chọn ra những project - lấy ra những chỉ số ở câu 3, có CR hơn KPIs - CR, có Impressions nhỏ hơn số Impressions trung
bình trên mỗi Keyword.
Buổi 3
Overview
Các nội dung chủ yếu:

- Hiểu được tầm quan trọng của CTE (Common Table Expression)
- Ghép bảng (Dùng LEFT, RIGHT, INNER JOIN VÀ UNION)
- Có thể hiểu được và vận dụng IF
- Có thể hiểu được và vận dụng CASE
- Xuất dữ liệu sang Google Data Studio
- Connect trực tiếp từ Google Data Studio đến Bigquery
CTE (Common Table
Expression)
CTE
Hiểu đơn giản, CTE là một nơi,
chúng ta lưu trữ dữ liệu được try
xuất một các tạm thời trong bộ
nhớ dưới một cái tên để có thể
dùng về sau.

Lệnh With chính là cú pháp


chúng ta sử dụng CTE trong SQL Nguồn: Data Fun
CTE
WITH S1 AS (SELECT Date, Project, sum(Cost) AS Cost, COUNT(
Campaign_ads_name) NumberAds, sum(impressions) AS impressions, SUM(Clicks) AS
Clicks, SUM(Video_views) Video_views
- Trở lại ví dụ, chúng cần tạo dữ liệu
tạm thời từ 2 bảng là GA_02 và FROM `robotic-gasket-242306.SQLTraining.GA_02` GROUP BY 1, 2),
GA_KPIs.
- Chúng ta sẽ xử lý lại dữ liệu từ bảng S2 AS (SELECT Date, Project, SUM(budget) budget, SUM(Impressions_kpis)
Impressions_kpis, SUM(clicks_kpis) clicks_kpis FROM
GA_0001 và GA_KPIs qua các chức `robotic-gasket-242306.SQLTraining.KPIs_GoogleAds`
năng như GROUP BY để làm sạch dữ
GROUP BY 1,2)
liệu - Dùng để phục vụ cho việc ghép
bảng - Nếu phát sinh nhu cầu SELECT Date, Project, NumberAds, Cost, impressions, Clicks, Video_views FROM S1

#SELECT Date, Project, budget, Impressions_kpis, clicks_kpis FROM S2


CTE

Một số lưu ý khi dùng CTE

- Giữa các CTE được ngăn cách nhau


bởi dấu “ , ”.
- Chỉ dùng WITH một lần duy nhất và
WITH được viết ở đầu câu truy vấn.
THU GỌN ĐỊA CHỈ
BẢNG
THU GỌN ĐỊA CHỈ BẢNG
Khi làm việc với BigQuery, nhất là làm việc
với bảng, việc gọi tên một bảng dữ liệu là
rất dài dòng. Syntax để gọi 1 bảng trong
BigQuery phải tuân theo quy tắcsau:

‘tên project . tên dataset . tên bảng’

Vì vậy để thuận tiện cho việc làm việc với


bảng, ta nên gán 1 tên mới ngắn hơn cho
bảng. Như ví dụ bên phải, tagán cho địa chỉ
test_table2 là table2, và tương tự table 1
cho địa chỉ của test_table. Từ đó, thao tác
với bảng trở nên đơn giản hơn
GHÉP BẢNG
RELATIONSHIPS

Mỗi EmployeeID xuất hiện 1 lần trong bảng


RELATIONSHIPS
RELATIONSHIPS
GHÉP BẢNG
Trong trường hợp ta muốn kết nối dữ liệu từ
hai hay nhiều bảng trong cơ sở dữ liệu lại với
nhau hoặc cần truy vấn các cột dữ liệu từ
nhiều bảng khác nhau để trả về trong cùng
một tập kết quả, bạn cần dùng lệnh JOIN,
SQL sẽ tạo ra một bảng tạm thời chứa dữ liệu
kết quả từ JOIN.

Có ba dạng JOIN chính:

- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- CROSS JOIN
- FULL JOIN
- SELF JOIN
GHÉP BẢNG
LEFT JOIN
KPIs_GoogleAds
Giống như phép toán giao tập hợp, INNER
JOIN ghép các dòng dữ liệu ở 2 bảng có 2
khóa giống nhau.

Ở ví dụ bên phải, ta tạo ra bảng mới gồm có


Date, Project, Budget, impressions_kpis,
clicks_kpis, ctr_kpis, cpc_kpis, cpm_kpis
được lấy từ bảng KPIs_GoogleAds.
GHÉP BẢNG
LEFT JOIN
GA_02

Cùng với Cost, impressions, clicks,


video_views, conversion, cr ở bảngGA_02
GHÉP BẢNG
LEFT JOIN
The Result
Kết quả trả về các cột của bảng
KPIs_GoogleAds cộng với các cột của bảng
GA_02 thông qua các khóa chính là Date và
Project

Syntax:

SELECT Col1, Col2, Col3,..FROM bang_01

LEFT JOIN bang_02

ON [Primary key]
GHÉP BẢNG
RIGHT JOIN

Tương tự như LEFT JOIN, RIGHT JOIN trả về tất The Result
cả giá trị của bảng số 2 và những giá trị có cùng
khoá chung ở bảng số 1. Nếu không có giá trị
phù hợp sẽ thể hiện NULL.

Ở ví dụ bên phải, ta tạo ra bảng phụ gồm có


Project, Cost, impressions, clicks, video_views,
conversion, cr ở bảng GA_02 RIGHT JOIN với
impressions_kpis, clicks_kpis, ctr_kpis, cpc_kpis,
cpm_kpis được lấy từ bảng KPIs_GoogleAds.

Sử dụng Project làm khoá chung.


GHÉP BẢNG
RIGHT

Kết quả trả về các cột của bảng GA_02 cộng The Result
với các cột của bảng KPIs_GoogleAds thông
qua khóa chính là Project

Syntax:

SELECT Col1, Col2, Col3,..FROM bang_01

RIGHT JOIN bang_02

ON [Primary key]
GHÉP BẢNG
INNER JOIN

Giống như phép toán giao tập hợp, INNER


JOIN ghép các dòng dữ liệu ở 2 bảng có 2
khóa giống nhau.

Ở ví dụ bên phải, ta tạo ra bảng phụ gồmcó


Project, Cost, impressions, clicks,
video_views, conversion, cr ở bảng GA_02
RIGHT JOIN với impressions_kpis,
clicks_kpis, ctr_kpis, cpc_kpis, cpm_kpis
được lấy từ bảng KPIs_GoogleAds.

Sử dụng Project làm khoá chung.


GHÉP BẢNG
UNION

Giống như phép toán giao tập hợp,UNION


được dùng để kết hợp 2 hoặc nhiều lệnh
SELECT.

Mỗi SELECT trong UNION phải có cùng số


cột trong bộ kết quả với kiểu dữ liệu tương
ứng.

Ở ví dụ bên phải, chúng ta muốn tạo một


bảng mới gồm có campaign_ads_name,
project, Channel, budget, KPIs_Impressions,
KPIs_Clicks, KPIs_Video Views từ 2 bảng là
GA_KPIs và FB_KPIs.
HÀM ĐIỀU KIỆN IF
HÀM ĐIỀU KIỆN IF()
Khi muốn kiểm tra một điều kiện là đúng
hay sai, ta sử dụng hàm IF() theo mẫu:

IF( điều kiện, giá trị khi điều kiện đúng,giá


trị khi điều kiện sai)

Như ví dụ bên phải, ta thử test cột


CustomerID, nếu khách hàng có ID là
17850 thì kết quả trả là “old”, còn lại là
“new”
HÀM ĐIỀU KIỆN IF()

Ở 1 ví dụ nâng cao hơn, ta muốn phân loại


project là Good hay Warning! (Cost:
300,000-500,000 → Good, Warning!),
đồng thời ta cũng phân loại impressions,
dựa trên tiêu chí:

- 1000 - 2000 >> Group 1


- 2000 - 3000 >> Group 2
- Còn lại là Group 3
HÀM ĐIỀU KIỆN CASE
HÀM ĐIỀU KIỆN CASE
Một điểm yếu của hàm IF() là chỉ trả về 2 trường hợp là đúng hoặc sai. Trong những trường hợp như
phân loại khách hàng thành nhiều nhóm, chúng ta cần môt câu lệnh điều kiện cho nhiều trường hợp.
Câu lệnh CASE là một giải pháp. Cú pháp hoàn chỉnh của 1 lệnh CASE như sau:

CASE

WHEN điều kiện 1 THEN giá trị 1

WHEN điều kiện 2 THEN giá trị 2

ELSE giá trị 3

END
HÀM ĐIỀU KIỆN CASE

Như ví dụ bên phải, ở bảng GA_02, ta muốn


phân loại project dựa trên Conversion Rate
(CR):

- Trong khoảng 0.1 đến 0.15 >> ‘Good’


- Lớn hơn 0.15 >> ‘Excellent’
- Còn lại: ‘Bad’

Thêm vào đó, chúng ta muốn chuyểnđổi


chi phí QC sang VNĐ (Vì có những
campaign chạy bằng $USD).
XUẤT DỮ LIỆU SANG
GOOGLE SHEET VÀ FILE
CSV
XUẤT DỮ LIỆU SANG GOOGLE SHEET VÀ CSV

Để xuất kết quả Query, đầu tiên chúng ta


nhấn vào SAVE RESULTS, sau đó chọn
dạng file chúng ta muốn xuất ra. Một vài
định dạng thường gặp có thể kể đếnnhư:

CSV(Google Drive): File CSV được lưu


trên Google Drive.

CSV(local file): File CSV được lưu về máy


tính.

Google Sheets: lưu bảng vào file Google


Sheet, Sheet này được lưu trên Google
Drive
LINK DỮ LIỆU SANG
GOOGLE DATA STUDIO
LINK DỮ LIỆU SANG GOOGLE DATA STUDIO

Google Data Studio là một công cụ rất tốt


trong việc khám phá dữ liệu. Vì vậyBigQuery
hỗ trợ một đường dẫn nhanh chóng để link
kết quả Query sang Google Data Studio.

Chỉ cần chọn Explore Data và chọn vào


Explore with Data Studio, dữ liệu của bạn sẽ
được kết nối đến Google Data Studio.
Exercise Buổi 3
Học viên sử dụng:
https://docs.google.com/spreadsheets/d/15fVmoxxBb9SS2WAv95c7PU1bU4MTqY9i_UyZ3Q1eQ4g/edit?usp=sharing (FB Ads) để
làm cơ sở dữ liệu cho thực hành.

1. Tạo ra 2 CTE từ GA_02 và FB Ads, đặt tên là S1 và S2, Nhóm theo Date, Project - Sau đó Query S1, S2. Hint: FB chưa có
project, dùng CASE..WHEN..LIKE từ Campaign_ads_name để lấy ra Project (Các project là: Cassandra, Galinburg, LA Bee
One, Fox, Wolf, Funlus Phoenix, Royal Never Give Up).
2. Ghép bảng GA_02 vs KPIs_Google Ads (dùng LEFT JOIN, RIGHT JOIN, INNER JOIN). Hint: Tạo ra 2 CTE Nhóm theo Date,
Project, sau đó dùng LEFT JOIN,... (Primary keys: Date, Project)
3. Dùng UNION để kết hợp dữ liệu, Chọn ra: Date, Project, Channel, Cost, Impressions, Clicks, Conversion. Hint: Sử dụng kết
của của Câu 1.
4. Sử dụng CTE để nhóm bảng GA_02, Lấy ra Project, Cost (VND), Impressions, Clicks, Video Views, Conversions. Sau đó,
dùng LEFT JOIN với bảng KPIs_Google Ads để tạo 1 bảng mới gồm có Project, Cost (VND), Impressions, Clicks, Video
Views, Budget, KPIs Cost, KPIs Impressions, KPIs Clicks, KPIs Video Views.
Mini Project
Học viên sử dụng thêm các sheets: Age & Gender, Device, Day of week để phục vụ cho
thực hành.

Yêu cầu: Làm sạch dữ liệu từ GA_02, kết hợp với KPIs_Google Ads để phục vụ cho
visualization.

Dashboard tham khảo:


https://datastudio.google.com/open/1Ac03ykjwqMXxsXriaT8dAXKsK29xzJK2.
DATA FRAME SELECT
first_name,
last_name,
grade,
AVG(grade) OVER() avg_grade
FROM
students;
DATA FRAME
SELECT
first_name,
last_name,
grade,
RANK() OVER (ORDER BY grade) grade_rank
FROM
students;
DATA FRAME

SELECT
first_name,
last_name,
grade,
DENSE_RANK() OVER (ORDER BY grade) grade_rank
FROM
students;
DATA FRAME

SELECT
s.first_name,
s.grade,
s.sport_id,
FIRST_VALUE (s.grade) OVER
(PARTITION BY s.sport_id
ORDER BY s.grade
) first_grade
FROM
students s;
DATA FRAME
SELECT
s.first_name,
s.sport_id,
s.grade,
LAG (s.grade) OVER (
ORDER BY s.grade
) lag_grade
FROM
students s;
CONVERT COLUMN1 TO COLUMN2

select [product_name1] as mix


from BikeStores.dbo.sql_advanced
union all
select [product_name2] as mix
from BikeStores.dbo.sql_advanced

select [product_name1] as mix


from BikeStores.dbo.sql_advanced
union
select [product_name2] as mix
from BikeStores.dbo.sql_advanced
Query Processing
” select id, sum(sale) as total_sale from orders where id = 2 group by id"

select
Identifier(id)
Identifier(sum) Select
( *
Identifier(sum) From
) Identifier(sale)
AS Where
Identifier(total_sale) Identifier(sale)
"SELECT * FROM b WHERE a > 0;" FROM INOp(IN)
Identifier(sum) (
select Identifier(orders) Select
* where Identifier(id)
from Identifier(id) FROM
Identifier(b) CompareOp(=) Identifier(users)
where IntLit(2) Where
Identifier(a) Group Identifier(status)
CompareOp(>) By CompareOp(=)
IntLit(0) Identifier(id) IntLit(0)
; )

select * from sale where user_id in (select id from users where status = 0)
"SELECT * FROM b WHERE a > 0;"
“SELECT * FROM b WHERE a > 0 ORDER BY a;”

SELECT sum(v)
FROM
(SELECT t1.id,
1 + 2 + t1.value AS v
FROM t1
JOIN t2
WHERE t1.id = t2.id
AND t2.id > 5000)
tmp
FULL OUTER JOIN
with UNION
Optimization Statement
Optimization Statement (cont)
Optimization Statement (cont)
Optimization Statement (cont)

You might also like