MySQL面试题 | 附答案解析(十四)
接上篇!!!
5. 什么是子查詢
(1)QL語句的查詢結果做為另一條查詢語句的條件或查詢結果
(2)SQL語句嵌套使用,內部的SQL查詢語句稱為子查詢。
6. 子查詢的三種情況
(1)詢是單行單列的情況:結果集是一個值,父查詢使用:=、 <、 > 等運算符
– 查詢工資最高的員工是誰?
select * from employee where salary=(select max(salary) from employee);
(2)詢是多行單列的情況:結果集類似于一個數組,父查詢使用:in 運算符
– 查詢工資最高的員工是誰?
select * from employee where salary=(select max(salary) from employee);
(3)是多行多列的情況:結果集類似于一張虛擬表,不能用于where條件,用于select子句中做為子表
– 1) 查詢出2011年以后入職的員工信息
– 2) 查詢所有的部門信息,與上面的虛擬表中的信息比對,找出所有部門ID相等的員工。
select * from dept d, (select * from employee where join_date > ‘2011-1-1’) e where e.dept_id = d.id;
– 使用表連接:select d., e. from dept d inner join employee e on d.id = e.dept_id where e.join_date > ‘2011-1-1’
7. mysql中 in 和 exists 區別
mysql中的in語句是把外表和內表作hash 連接,而exists語句是對外表作loop循環,每次loop循環再對內表進行查詢。一直大家都認為exists比in語句的效率要高,這種說法其實是不準確的。這個是要區分環境的。
(1)果查詢的兩個表大小相當,那么用in和exists差別不大。
(2)如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in。
(3)not in 和not exists:如果查詢語句使用了not in,那么內外表都進行全表掃描,沒有用到索引;而not extsts的子查詢依然能用到表上的索引。所以無論那個表大,用not exists都比not in要快。
8. varchar與char的區別
char的特點
(1)har表示定長字符串,長度是固定的;
(2)如果插入數據的長度小于char的固定長度時,則用空格填充;
(3)因為長度固定,所以存取速度要比varchar快很多,甚至能快50%,但正因為其長度固定,所以會占據多余的空間,是空間換時間的做法;
(4)char來說,最多能存放的字符個數為255,和編碼無關
varchar的特點
(1)varchar表示可變長字符串,長度是可變的;
(2)插入的數據是多長,就按照多長來存儲;
(3)varchar在存取方面與char相反,它存取慢,因為長度不固定,但正因如此,不占據多余的空間,是時間換空間的做法;
(4)對于varchar來說,最多能存放的字符個數為65532總之,結合性能角度(char更快)和節省磁盤空間角度(varchar更小),具體情況還需具體來設計數據庫才是妥當的做法。
9. varchar(50)中50的涵義
最多存放50個字符,varchar(50)和(200)存儲hello所占空間一樣,但后者在排序時會消耗更多內存,因為order by col采用fixed_length計算col長度(memory引擎也一樣)。在早期 MySQL 版本中, 50 代表字節數,現在代表字符數。
10. int(20)中20的涵義
是指顯示字符的長度。20表示最大顯示寬度為20,但仍占4字節存儲,存儲范圍不變;不影響內部存儲,只是影響帶 zerofill 定義的 int 時,前面補多少個 0,易于報表展示
11. mysql為什么這么設計
對大多數應用沒有意義,只是規定一些工具用來顯示字符的個數;int(1)和int(20)存儲和計算均一樣;
12. mysql中int(10)和char(10)以及varchar(10)的區別
(1)(10)的10表示顯示的數據的長度,不是存儲數據的大小;chart(10)和varchar(10)的10表示存儲數據的大小,即表示存儲多少個字符。
int(10) 10位的數據長度 9999999999,占32個字節,int型4位
char(10) 10位固定字符串,不足補空格 最多10個字符
varchar(10) 10位可變字符串,不足補空格 最多10個字符
(2)char(10)表示存儲定長的10個字符,不足10個就用空格補齊,占用更多的存儲空間
(3)varchar(10)表示存儲10個變長的字符,存儲多少個就是多少個,空格也按一個字符存儲,這一點是和char(10)的空格不同的,char(10)的空格表示占位不算一個字符
13. FLOAT和DOUBLE的區別是什么?
(1)FLOAT類型數據可以存儲至多8位十進制數,并在內存中占4字節。
(2)DOUBLE類型數據可以存儲至多18位十進制數,并在內存中占8字節。
14. drop、delete與truncate的區別
三者都表示刪除,但是三者有一些差別:
15. UNION與UNION ALL的區別?
(1)用UNION ALL,不會合并重復的記錄行
(2)效率 UNION 高于 UNION ALL
最后,小編分類整理了許多java進階學習材料和BAT面試給熱愛IT行業的你,如果需要資料的請轉發此文章后再私聊小編回復【java】就能領取2019年java進階學習資料和BAT面試題以及《Effective Java》(第3版)電子版書籍。也可以加群:712263501領取海量學習資料進行學習。
總結
以上是生活随笔為你收集整理的MySQL面试题 | 附答案解析(十四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个qq群好听的名字。
- 下一篇: MySQL面试题 | 附答案解析(十五)