--課程已於 2020 年 12 月更新--
課程說明
你是否對資料科學或是資料分析有興趣?
在這種情況下,你將不得不在工作中遇到資料庫。
但是如何與資料庫進行互動?
答案很簡單:SQL
SQL代表結構化查詢語言,這是用於組織資料庫,輸入資料並根據請求提取資料的主要工具之一。
在本課程中,你將學習如何在名為 PostgreSQL 受歡迎的 SQL 變種資料庫中創建查詢。
即使在您的工作場所,你正在使用不同的變種(例如Oracle,SQL Server或MySQL),你將發現在本課程中學習的技能很容易轉移。
但是有很多SQL課程在那裡,所以問題是:
什麼使這門課程脫穎而出?
本課程的獨特之處在於,除了學習SQL之外,你還將掌握資料庫設計的概念。
我們將涵蓋以下主題:
✅OLAP 與 OLTP 資料庫(線上分析處理和線上交易處理):你將準確了解這兩種資料庫的設計有何不同
✅資料庫正常化:我們將向你展示正常化背後的理論和我們一起練習如何逐步正常化資料庫
✅Schemas :資料庫中的 snowflake,star 和其他 schemas 之間有什麼區別,以及如何將它們用於符合你的利益
為什麼這麼重要?
✅了解資料庫的設計並不是資料科學家/分析師的必修技能。然而,這是一個巨大的附加價值。
✅這些技能將使你能夠更好地與資料庫進行互動,從而獲取結果並更快地從資料中提取洞察數據。
本課程是針對資料科學家和分析師設計的,所以如果你想推動你的資料科學生涯,那麼這個課程是為你設計的!
https://softnshare.com/sqldatabases/
sql server交易 在 91 敏捷開發之路 Facebook 的精選貼文
有在使用 MS SQL server 的朋友,如果有需要找到 identity 跳號的資料,可以參考一下新的寫法,查詢成本省很大。
#長知識
【SQL Tips】之【了解為何identity會發生不連續號碼與快速找出那些號碼是跳號】20171224
**identity保證唯一,不保證連續**
**使用SARG規則與SET BASED方式找出不連續號碼**
**最後那三種找出不連續的技巧,成本比如下
50%(SELF JOIN搭配NOT IN) : 32%(SELF JOIN搭配 OFFSET 函數) : 18%(LAG 函數) **
許多SQL Server開發人員經常會使用identity自動產生連續編號,然而該identity卻有一個特質是發生交易退回(rollback)則會產生跳號的狀況,以下的狀況就是identity碰到交易退回後所產生的跳號情況。
***
use tempdb
go
if object_id('tblNum') is not null
drop table tblNum
go
create table tblNum
(c1 int identity ,
c2 nvarchar(30) unique --防止重複
)
go
insert into tblNum(c2) values ('lewis1')
insert into tblNum(c2) values ('lewis2')
insert into tblNum(c2) values ('lewis3')
insert into tblNum(c2) values ('lewis3') --重複姓名就發生跳號
insert into tblNum(c2) values ('lewis5')
insert into tblNum(c2) values ('lewis5') --重複姓名就發生跳號
insert into tblNum(c2) values ('lewis5') --重複姓名就發生跳號
insert into tblNum(c2) values ('lewis8')
insert into tblNum(c2) values ('lewis9')
insert into tblNum(c2) values ('lewis10')
go
select * from tblNum
GO
--結果
c1 c2
1 lewis1
2 lewis2
3 lewis3
5 lewis5 <--發生跳號
8 lewis8 <--發生跳號
9 lewis9
10 lewis10
***
基本上單一執行INSERT UPDATE DELETE 就是一種隱性交易,上述的範例就是因為條件約束(constraint)的unique緣故,當輸入的文字發生重複的時候,就會自動退回交易,緊接著identity也隨之發生跳號的狀況。
當瞭解identity會有發生跳號的特質之後,接下來分享三種從SQL Server 2005開始使用的抓取跳號的範例,以及從SQL Server 2012開始支援的Windows Offset函數抓取跳號的技巧。這三種技巧都是使用set-based的方式,不使用WHILE迴圈去比對資料的連續性,值得一試。
**從SQL Server 2005支援的抓取跳號的技巧
--使用自我查詢產生搭配CTE
--使用SET BASED技巧取代迴圈處理
WITH DS AS (
SELECT DS1.* FROM tblNum as DS1 JOIN
tblNum as DS2
on DS1.c1 = DS2.c1+1 )
SELECT * FROM tblNum
WHERE c1 NOT IN (SELECT TOP(1) c1 FROM tblNum ORDER BY c1)
EXCEPT
SELECT * FROM DS
GO
**從SQL Server 2012支援的抓取跳號的技巧
--使用自我查詢產生搭配OFFSET
--使用SET BASED技巧取代迴圈處理
WITH DS AS (
SELECT DS1.* FROM tblNum as DS1 JOIN
tblNum as DS2
on DS1.c1 = DS2.c1+1 ),
DS2 AS (SELECT * FROM tblNum ORDER BY 1 OFFSET 1 ROW )
SELECT * FROM DS2
EXCEPT
SELECT * FROM DS
GO
**從SQL Server 2012支援的抓取跳號的技巧
--使用自我查詢產生搭配LAG的Windows Offset技巧
--使用SET BASED技巧取代迴圈處理
WITH DIFF AS (
select *,LAG(c1, 1,0) OVER ( ORDER BY c1) as previous
,c1 - LAG(c1, 1,0) OVER ( ORDER BY c1) as diff
from tblNum
)
SELECT c1,c2 FROM DIFF WHERE diff>1
GO
--結果就是 5/8 之前就發生跳號
c1 c2
5 lewis5
8 lewis8
最後那三種找出不連續的技巧,成本比如下
50%(SELF JOIN搭配NOT IN) : 32%(SELF JOIN搭配 OFFSET) : 18%(LAG)
sql server交易 在 軟體廚房 Facebook 的精選貼文
HammerDB 不只有可以對 SQL Server 做效能測量,還可以對 MySQL、Oracle、PostgreSQL、Redis...etc,如果手邊沒有比較好的資料庫效能量測工具的朋友,Open Source 的 HammerDB 可以考慮一下。
.
https://dotblogs.com.tw/supershowwei/2016/11/20/001205
#HammerDB #SQLServer