一. 透視
列轉行,用case when 即可,也可用其提供的函式pivot
ps: 逆透視,行轉列,比較少用,不掌握
二 ,更新資料
update bl set bl.stockid = ids.stockid,bl.stockplaceid = ids.stockplaceid ,isinstorage =避免插入亂碼1from
w_sc$$barcodelabel bl
inner
join
t_combinationids ids on bl.uid = ids.barcodeid
insert三 ,刪除資料truncate --清楚記錄,id 不會增加into sys_user values(2,n'
蟈蟈',n'
唐寧街十號
',n'
歐巴馬的上鋪
','2017-11-16 20:45:05.603
')
delete --不清除記錄,id 會增加
四 聯接查詢
1.內連線:先笛卡爾積,然後根據指定的謂詞對結果進行過濾
select2.外連線: left outer join和left join的區別 --後者是前者的簡寫,e.empid,e.firstname,e.lastname,o.orderid
from hr.employees as
e
join sales.orders as
o
on e.empid=o.empid;
笛卡爾積 (m*n)→對結果過濾→新增外部行
通過例子來理解外聯結:根據客戶的客戶id和訂單的客戶id來對customers表和orders表進行聯接,並返回客戶和他們的訂單資訊。該查詢語句使用的聯接型別是左外連線,所以查詢結果也包括那些沒有發出任何訂單的客戶;
--另外,需要注意的是在對外聯結中非保留值得列值進行過濾時,不要再where子句中指定錯誤的查詢條件。left outer join
select
c.custid,c.companyname,o.orderid
from sales.customers asc
left
outer
join sales.orders aso
on c.custid=o.custid;
例如,下面請求返回在2023年2月12日下過訂單的客戶,以及他們的訂單。同時也返回在2023年2月12日沒有下過訂單的客戶。這是乙個典型的左外連線的案例,但是我們經常會犯這樣的錯誤:
select執行結果如下:c.custid,c.companyname,o.orderid,o.orderdate
from sales.customers as
c
left
outer
join sales.orders as
o
on c.custid=
o.custid
where o.orderdate=
'20070212
';
這是因為對於所有的外部行,因為它們在o.orderdate列上的取值都為null,所以where子句中條件o.orderdate='20070212'的計算結果為unknown,因此where子句會過濾掉所有的外部行。
我們應該將這個條件搬到on後邊:
select這下的執行結果如下:c.custid,c.companyname,o.orderid,o.orderdate
from sales.customers as
c
left
outer
join sales.orders as
o
on c.custid=
o.custid
and o.orderdate=
'20070212
';
五,子查詢。!!
(1)做為條件語句的子查詢
select(2)做為計算欄位的子查詢orderid
from
sales.orders
where empid in (select
e.empid
from hr.employees as
e
where e.lastname like n'
d%');
--② 如何實現連續聚合函式?在子查詢中連續計算上乙個訂單id
select
orderid, orderdate, empid, custid,
(select
max(o2.orderid)
from sales.orders as
o2where o2.orderid<
o1.orderid
) as
prevorderid
from sales.orders as o1;
--執行結果如下圖所示:連續聚合
select
orderyear, qty,
(select
sum(o2.qty)
from sales.ordertotalsbyyear aso2
where o2.orderyear<=o1.orderyear) as
runqty
from sales.ordertotalsbyyear as
o1order
by orderyear;
ps:通常情況下自連線比子查詢要快,但是對於不同的語句,我們需要進行嘗試一下
SQL基礎知識
本篇文章是講解sql的基礎知識,但也講得不全面,我只記錄了自己不懂的或者不熟悉的東西。一 在sql中簡單的查詢 1.重複的記錄 distinct 可以通過在選擇列表前的select語句中插入關鍵字distinct來消除重複的查詢結果記錄。比如 select distinct city from ci...
SQL基礎知識
sql作用 1.面向資料庫執行查詢 2.可從資料庫取回資料 3.可在資料庫中插入新的記錄 4.可更新資料庫中的資料 5.可從資料庫刪除記錄 6.可建立新資料庫 7.可在資料庫中建立新錶 8.可在資料庫中建立儲存過程 9.可在資料庫中建立檢視 10.可以設定表 儲存過程和檢視的許可權。資料庫操作語句 ...
SQL基礎知識
資料庫就是資料的倉庫,dbms資料庫管理系統同來對大資料的管理 檢索,就是對資料庫的管理。乙個dbms可以管理多個資料庫,這些不同的資料庫叫catalog或database,dbms允許把不同的database儲存在不同磁碟,每個資料庫中的表名不能相同。table 表,把不同型別的資料放到不同的區域...