一、char、varchar的區別是什麼?面試
varchar是變長而char的長度是固定的。若是你的內容是固定大小的,char的性能會更好。sql
二、tinyint、smallint、int、bigint,float、double佔用字節數?性能
tinyint:1個字節 smallint:2個字節,int:4個字節,bigint:8個字節.net
float:4個字節,double:8個字節code
三、varchar(50)和varchar(100)的區別blog
varchar(50)最多存儲50個字節,varchar(100)最多存儲100個字節,存儲hello字符串所佔的內存是同樣的,但後者在排序時會消耗更多內存。排序
四、int(20)中20的含義索引
是指顯示字符的長度,不影響內部存儲,只是當定義了ZEROFILL時,前面補多少個 0內存
五、如下語句是否會應用索引:SELECT * FROM users WHERE YEAR(adddate) < 2007;字符串
不會,由於條件中使用運算,就不能使用索引了
六、一個6億的表a,一個3億的表b,經過外鍵tid關聯,你如何最快的查詢出知足條件的第50000到第50200中的這200條數據記錄。
狀況一:若是A表TID是自增加,而且是連續的,B表的ID爲索引
select * from a,b where a.tid = b.id and a.tid>50000 limit 200;
狀況二:若是A表的TID不是連續的,那麼就須要使用覆蓋索引.TID要麼是主鍵,要麼是輔助索引,B表ID也須要有索引。
select * from b , (select tid from a limit 50000,200) a where b.id = a .tid;
八、Student(S,Sname,Sage,Ssex) 學生表 Course(C,Cname,T) 課程表 SC(S,C,score) 成績表 Teacher(T,Tname) 教師表 查詢沒學過「葉平」老師課的同窗的學號、姓名
SELECT Student.S, Student.Sname FROM Student WHERE S NOT IN ( SELECT DISTINCT (SC.S) FROM SC, Course, Teacher WHERE SC.C = Course.C AND Teacher.T = Course.T AND Teacher.Tname = ’葉平’ );
九、隨機取出10條數據
SELECT * FROM users WHERE id >= ( (SELECT MAX(id) FROM users) - (SELECT MIN(id) FROM users) ) * RAND() + (SELECT MIN(id) FROM users) LIMIT 10 -- 如下寫法確定不得分,效率不高 SELECT * FROM users order by rand() LIMIT 10
更多sql面試題:https://blog.csdn.net/c910118/article/details/78909726