1 Drop Delete Truncate三者之間的區(qū)別和聯(lián)系
drop刪除整張表,包括表結(jié)構(gòu)和表數(shù)據(jù)。用法 drop table 表名
truncate表示清空數(shù)據(jù),不會刪除表結(jié)構(gòu)。truncate table 表名
delete表示刪除數(shù)據(jù),不會刪除表結(jié)構(gòu)。delete from 表名 where 列名 = 值,
那么,truncate和delete的區(qū)別:
? ? ? ? ? ? truncate屬于 DDL(數(shù)據(jù)定義語言)語句,操作立即生效,原數(shù)據(jù)不放到 rollback segment 中,不能回滾,操作不觸發(fā) trigger。由DBA所使用。不產(chǎn)生日志信息
? ? ? ? ? ? delete 語句是 DML (數(shù)據(jù)庫操作語言)語句,這個操作會放到 rollback segment 中,事務(wù)提交之后才生效。開發(fā)人員日常使用較為頻繁。產(chǎn)生數(shù)據(jù)的binlog日志。
?
一般來說執(zhí)行效率:drop > truncate > delete。
2 SQL查詢語句中的Limit關(guān)鍵詞的用法。
select _column,_column from _table [where Clause] [limit N][offset M] select * : 返回所有記錄
limit N : 返回 N 條記錄
offset M : 跳過 M 條記錄, 默認(rèn) M=0, 單獨(dú)使用似乎不起作用
limit N,M : 相當(dāng)于 limit M offset N , 從第 N 條記錄開始, 返回 M 條記錄
以下表示均為找表table_a的前5行數(shù)據(jù)。
1 select * from table_a limit 5; --> limit n; 表示前n行數(shù)據(jù)
2 select * from table_a limit 0, 5; --> limit m , n ;表示第m+1,到第m+ n行的n條數(shù)據(jù)
3 select * from table_a limit 5 offset 5; --> limit n offset m ; 表示的是偏移m行,從第m+1到第n行的n條數(shù)據(jù)。
常見的分頁查詢
select * from _table limit (page_number-1)*lines_perpage, lines_perpage
或
select * from _table limit lines_perpage offset (page_number-1)*lines_perpage
3. where group by和Having的先后順序
SELECT cust_name, COUNT() AS num
FROM Customers
WHERE cust_email IS NOT NULL
GROUP BY cust_name
HAVING COUNT() >= 1;
having:
having 用于對匯總的 group by 結(jié)果進(jìn)行過濾。 having 一般都是和 group by 連用。?
having vs where:
where:過濾過濾指定的行,后面不能加聚合函數(shù)(分組函數(shù))。where 在group by 前。 having:過濾分組,一般都是和 group by 連用,不能單獨(dú)使用。having 在 group by 之后
執(zhí)行順序: where---->group by---->Having ,聚合函數(shù)只能用在Having, select
此外:order by 和 where的順序,先where - order by
完整的順序:Where, Group By, Having, Order by
?
4.SQL語句中Like通配符%和下劃線_的用法
% :表示任意0個或多個字符,可匹配任意類型和長度的字符。
_ :?表示任意單個字符。
注意:如果要搜索 字符中有下劃線的,需要對_進(jìn)行轉(zhuǎn)義
- select * from t where x like '%\_%' escape ''; 搜索中間含有下劃線的查詢條件,通過escape進(jìn)行轉(zhuǎn)義。
- Like對應(yīng)的否定是NOT LIKE (類似于判斷字符串是否為空,IS NULL / IS NOT NULL)
5.內(nèi)連接 外連接 之間的關(guān)系
ON 和 WHERE 的區(qū)別:
連接表時(shí),SQL 會根據(jù)連接條件生成一張新的臨時(shí)表。ON 就是連接條件,它決定臨時(shí)表的生成。
WHERE 是在臨時(shí)表生成以后,再對臨時(shí)表中的數(shù)據(jù)進(jìn)行過濾,生成最終的結(jié)果集,這個時(shí)候已經(jīng)沒有 JOIN-ON 了。所以總結(jié)來說就是:SQL 先根據(jù) ON 生成一張臨時(shí)表,然后再根據(jù) WHERE 對臨時(shí)表進(jìn)行篩選。
如果不加任何修飾詞,只寫 JOIN,那么默認(rèn)為 INNER JOIN。
對于 INNER JOIN 來說,還有一種隱式的寫法,稱為 “隱式內(nèi)連接”,也就是沒有 INNER JOIN 關(guān)鍵字,使用 WHERE 語句實(shí)現(xiàn)內(nèi)連接的功能。
隱式內(nèi)連接
select c.cust_name, o.order_num
from Customers c, Orders o
where c.cust_id = o.cust_id
order by c.cust_name;
顯式內(nèi)連接
select c.cust_name, o.order_num
from Customers c
inner join Orders o
using(cust_id)
order by c.cust_name;
6.IN 和EXISTS查詢的區(qū)別
1 IN后面的子查詢返回的結(jié)果集是單個列表值的集合;而EXISTS所跟的是查詢的結(jié)果集
2 IN是先進(jìn)行內(nèi)部查詢,再根據(jù)結(jié)果進(jìn)行外部查詢;而EXISTS則從外部表開始遍歷每一行,判斷其是否滿足條件
3 IN主要的查詢效率是依賴于外表的索引,而EXISTS的查詢效率是依賴于內(nèi)表的索引。
4 因此,當(dāng)子查詢結(jié)果集較大,而外表較小時(shí),EXISTS的性能較好;文章來源:http://www.zghlxwxcb.cn/news/detail-742052.html
當(dāng)子查詢結(jié)果集較小,而外部表較大的時(shí)候。IN的性能較好文章來源地址http://www.zghlxwxcb.cn/news/detail-742052.html
到了這里,關(guān)于JAVA-軟開-常見八股文(2)-數(shù)據(jù)庫相關(guān)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!