datagrid如何获取一行数据中的某个字段值_SQL中常见的面试题
大家在面試數(shù)據(jù)分析崗或其他崗位的時候,時常會被問到一些SQL題,我今天就將常被問到的一些SQL題及答案整理下,給大家做個參考!
案例所使用的表為:
(一)各種連接函數(shù)的區(qū)別?
(1)inner join
內(nèi)連接。返回兩個表的交集。根據(jù)兩個表共有的列來匹配其中的行,強調(diào)只有兩個表中共有的行對應(yīng)的行才能匹配出來。
SELECT 查詢結(jié)果tips:inner可以省略不寫,可以連接后再去重,但是這么做的話,執(zhí)行下來比較低,我們一般在做表連接之前,先去重。
(2)left join
左連接。以左表為基準(zhǔn),若右表中的對應(yīng)行不滿足條件,則結(jié)果會將右表中的這些值以null的形式匹配進來。(right join就是以右表為基準(zhǔn),和left join是相對應(yīng)的)
SELECTtips:如果需要的是左表獨有的數(shù)據(jù),可以使用where條件來過濾掉為null的值。
(3)cross join
交叉連接,結(jié)果是笛卡爾積,就是第一個表符合查詢條件的行數(shù)乘以第二個表中符合查詢的行數(shù)。
部分截圖(4)full join(MySQL中沒有,所以我沒實現(xiàn))
全連接。若左表有的數(shù)據(jù),而右表中沒有,而右表中有的數(shù)據(jù),而左表中沒有,這種情況會在結(jié)果中以空值的形式匹配出來。
tips:雖然MySQL中不支持全連接,但是可以使用union all來實現(xiàn)的。
(二)排序窗口函數(shù)?
row_number()、rank()、dense_rank(),這三個函數(shù)的作用都是返回相應(yīng)規(guī)則的排序序號。
(1)row_number()
為查詢出來的每一行記錄都會生成一個序號,依次排序且不會重復(fù)。
語法:row_number() over(partition by 字段1 order by 字段2) # 字段1是分組的字段名稱
(2)rank()
使用rank函數(shù)來生成序號,over子句中排序字段值相同的序號是一樣的,后面字段值不相同的序號將跳過相同的排名排下一個,rank函數(shù)生成的序號有可能是不連續(xù)的,即排名可能為1,1,3,是跳躍式排名,有兩個第一名時接下來就是第三名。
語法:rank() over(partition by 字段1 order by 字段2)
(3)dense_rank()
dense_rank函數(shù)在生成序號時是連續(xù)的,當(dāng)出現(xiàn)相同排名時,將不跳過相同排名號,有兩個第一名時仍跟著第二名,即排名為1,1,2這種。
語法:dense_rank() over(partition by 字段1 order by 字段2)
(三)on和where的區(qū)別?
數(shù)據(jù)庫在連接多張表返回記錄的時候,都會生成一個中間臨時表。
(1)內(nèi)連接:使用on或者where沒有區(qū)別,過濾條件放在on或where中,其返回的結(jié)果是一樣的。
(2)外連接(以左連接為例):
a. on是在生成臨時表時使用的條件,不管on的條件是否為真,都會返回左表中的全部記錄。
b. where是在臨時表生成之后,再對臨時表進行過濾的條件,這時已經(jīng)沒有l(wèi)eft join的含義了,條件不為真的就全部過濾掉。
(四)主鍵和外鍵的區(qū)別?
(1)主鍵:是一張表中能夠確定一條記錄的唯一標(biāo)志(數(shù)據(jù)庫中的一條記錄中有若干個屬性,若某個屬性組具有唯一標(biāo)識一條記錄的特性,那么該屬性組就可以作為一個主鍵)。
(2)外鍵:用于和另外一張表進行關(guān)聯(lián)。例如,A字段是A表中的主鍵,那么出現(xiàn)在B表中的A字段能夠作為B表的外鍵,實現(xiàn)A,B表的連接查詢。
(五)如何連接多個select?
草莓女孩:SQL中如何連接多個select??zhuanlan.zhihu.com(六)字符串常見操作函數(shù)?
草莓女孩:SQL中的字符串常見操作函數(shù)?zhuanlan.zhihu.com(七) IN/EXIST的聯(lián)系和區(qū)別?
這部分內(nèi)容我寫在了一個??途W(wǎng)上的SQL題里了
草莓女孩:??途W(wǎng)每日一練SQL題——使用含有關(guān)鍵字EXISTS查找未分配具體部門的員工的所有信息?zhuanlan.zhihu.com(八)數(shù)據(jù)傾斜是什么?怎么解決?
大量相同的key被分配到同一個區(qū)內(nèi),一個節(jié)點承受著巨大的壓力,而其他節(jié)點計算完畢后一直在等這個忙碌的節(jié)點,拖累了整體的計算時間,效率非常低。
如何解決?
- 使用小表在左,大表在右的,使用/ + map join(table) / 連接,假設(shè)表A為小表,B為大表
- 連接之前先用group by去重,盡量避免使用distinct
- 如果是由空值導(dǎo)致的數(shù)據(jù)傾斜,需要先過濾掉空值
最后,給大家推薦個寫簡歷的好網(wǎng)站wondercv(不是應(yīng)聘設(shè)計類的工作,簡歷模板不用太花哨,重要的是內(nèi)容要豐富),我都是直接在上面修改的,很方便!
超級簡歷?www.wondercv.com總結(jié)
以上是生活随笔為你收集整理的datagrid如何获取一行数据中的某个字段值_SQL中常见的面试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奖学金c语言程序,奖学金 (C语言代码)
- 下一篇: linux win10 时间同步服务器,