班級表
id class
1 一班
2 二班
學生表id student_name class_id
1 小明 1
2 小紅 1
3 小寶 2
4 小小 2
這種的會寫
select class , student_name from
student_name a
left join class b
on a.class_id=b.id
返回的實體類
class student_name
一班 小明
一般 小紅
二班 小寶
二班 小小
或者集合這種也會寫
一班: [ , ]
二班:[ ,]
返回的實體類
想要這樣的結果
返回的實體類
班級 學生
一班 小紅,小明
二班 小寶,小小
解決辦法 sql
select class_name ,group_concat(student_name)
from
student a
left join class b
on a.class_id=b.id
group by class_name
第二中方法:執行中不好用(參考)
** ;
for xml path 函式用法
一.for xml path 簡單介紹
select * from @hobby for xml path那麼還是首先來介紹一下for xml path ,假設現在有一張興趣愛好表(hobby)用來存放興趣愛好,表結構如下:
接下來我們來看應用for xml path的查詢結果語句如下:
結果:複製**
複製**1爬山
2游泳3美食
複製**
複製**
由此可見for xml path 可以將查詢結果根據行輸出成xml各式!
那麼,如何改變xml行節點的名稱呢?**如下:
select * from @hobby for xml path(『myhobby』)
結果一定也可想而知了吧?沒錯原來的行節點變成了我們在path後面括號()中,自定義的名稱,結果如下:
複製**
複製**1爬山
2游泳3美食
複製**
複製**
這個時候細心的朋友一定又會問那麼列節點如何改變呢?還記的給列起別名的關鍵字as嗎?對了就是用它!**如下:
select hobbyid as 『mycode』,hname as 『myname』 from @hobby for xml path(『myhobby』)
那麼這個時候我們列的節點名稱也會程式設計我們自定義的名稱 與結果如下:
複製**
複製**1爬山
2游泳3美食
複製**
複製**
噢! 既然行的節點與列的節點我們都可以自定義,我們是否可以構建我們喜歡的輸出方式呢?還是看**:
select 『[ 『+hname+』 ]』 from @hobby for xml path(』』)
沒錯我們還可以通過符號+號,來對字串型別欄位的輸出格式進行定義。結果如下:
[ 爬山 ][ 游泳 ][ 美食 ]
那麼其他型別的列怎麼自定義? 沒關係,我們將它們轉換成字串型別就行啦!例如:
select 『』,』[ 『+hname+』 ]』 from @hobby for xml path(』』)
好的 for xml path就基本介紹到這裡吧,更多關於for xml的知識請查閱幫助文件!
複製**接下來我們來看乙個for xml path的應用場景吧!那麼開始吧。。。。。。
二.乙個應用場景與for xml path應用
首先呢!我們在增加一張學生表,列分別為(stuid,sname,hobby),stuid代表學生編號,sname代表學生姓名,hobby列存學生的愛好!那麼現在表結構如下:
這時,我們的要求是查詢學生表,顯示所有學生的愛好的結果集,**如下:
複製**
select b.sname,left(stulist,len(stulist)-1) as hobby from (
select sname,
(select hobby+』,』 from student
where sname=a.sname
for xml path(』』)) as stulist
from student a
group by sname
) b複製**
複製**
結果如下:
分析: 好的,那麼我們來分析一下,首先看這句:
select hobby+』,』 from student
where sname=a.sname
for xml path(』』)
這句是通過for xml path 將某一姓名如張三的愛好,顯示成格式為:「 愛好1,愛好2,愛好3,」的格式!
那麼接著看:
複製**
複製**
select b.sname,left(stulist,len(stulist)-1) as hobby from (
select sname,
(select hobby+』,』 from student
where sname=a.sname
for xml path(』』)) as stulist
from student a
group by sname
) b複製**
複製**
剩下的**首先是將表分組,在執行for xml path 格式化,這時當還沒有執行最外層的select時查詢出的結構為:
可以看到stulist列裡面的資料都會多出乙個逗號,這時隨外層的語句:select b.sname,left(stulist,len(stulist)-1) as hobby 就是來去掉逗號,並賦予有意義的列明
HIVE子查詢轉換成連線
在hive中進行子查詢,經常會報不支援子查詢的錯誤,導致有些sql可能在mysql中可以使用但是在hive中卻無法使用,因此在hive中可以採用連線替換子查詢的方式。hive有一種連線方式,叫做左半連線,關鍵字為 left semi join,這種連線方式與左連線類似,但是屬於一種查詢的方式。教師表...
怎麼將Word轉換成PDF格式的
我們工作或者學習中常常遇到將word轉換成pdf檔案的問題,比如一些資料,不想被別人在文件上進行一些操作的時候,就可以考慮將word檔案轉換成pdf格式的。那麼如何才能很好的實現word原檔案轉換成pdf格式的呢?迅捷與迅捷pdf轉換器軟體版本類似,word轉換成pdf轉換器 依然保持了出色的wor...
pdf型別的文件怎麼轉換成txt
雖然說pdf文件的標準性給不少閱讀者提供了方便,但也給編輯文字者帶來了許多麻煩。回憶起當時畢業 設計的文段,簡直痛苦的要命。竟然傻到用print screen擷取畫面到畫圖板,再回粘到txt中,夠白了。最近接到公司內部的安排,要求將客戶傳來的資料轉成txt格式,為了能不被折磨,我花費了乙個晚上的時間...