數據庫相關練習題、筆試題


 

【快來免費打卡學習】參與方式 

本文文末評論區打卡,需要登錄才可以打卡以及查看其他人的打卡記錄

 

關系數據庫(比如mysql)

練習1:常見sql筆試30題(增、刪、改、查):https://www.cnblogs.com/uncleyong/p/14758383.html

 

練習2:以mysql為例,單表插入1萬條數據,建表的語句:create table test(id int, name varchar(20));

要求:至少兩種方案

參考答案一(存儲過程,不傳參&傳參):

-- @Author  : ren168632201
-- @Blog    : https://www.cnblogs.com/uncleyong/


-- 方式一,不傳參
DELIMITER //
CREATE PROCEDURE insert_data_to_test()
BEGIN
SET @i=1;
WHILE @i<=10000 DO
	INSERT INTO test(id,name) VALUES(@i,CONCAT("user",@i));
	SET @i=@i+1;
END WHILE; 
END //
DELIMITER ;

call insert_data_to_test()



-- 方式一,傳參
DELIMITER //
CREATE PROCEDURE insert_data_to_test2(in n int)
BEGIN
SET @i=1;
WHILE @i<=n DO
	INSERT INTO test(id,name) VALUES(@i,CONCAT("user",@i));
	SET @i=@i+1;
END WHILE; 
END //
DELIMITER ;

call insert_data_to_test2(10000)

  

參考答案二(py):https://www.cnblogs.com/uncleyong/p/10938993.html

 

練習3:

 

參考答案:

select distinct t1.id,t1.name 
form company_org t1,company_org t2 
where t1.id!=t2.id and t1.name=t2.name 
order by t1.name desc;


select t1.sku_code,sum(stock_quantity) 
from stock_inquiry t1
group by t1.sku_code
having sum(stock_quantity) >0;


select t2.sku_code,t1.name,t3.stock_inquiry 
form company_org t1,sku t2,stock_inquiry t3
where t1.id=t2.org_id and t2.sku_code=t3.sku_code and t3.stock_quantity is not null;

 

練習4:一個sql題,查詢出grade不一樣的人的所有記錄

表stu

 

 

參考答案(基於mysql):

方式一:

select * from stu 
	where name in (
		select tt.name from (
			Select t.code,t.name,t.grade  from stu t  group by t.code,t.name,t.grade having count(*)=1) tt);

方式二:

select distinct  s.* from stu s  join(
		select t.code,t.name,t.grade 
		from stu t 
		group by t.code,t.name,t.grade 
		having count(*)=1) s2
where  s.code = s2.code and s.name=s2.name;

 

方式三:(oracle中下面方式寫會報錯)

 

其它參考答案:

 

練習5:

 

select a.id, b.name, a.course, a.score from A a 
join B b on a.id= b.id 
join (select course, max(score) as maxs from A a join B b on a.id= b.id where class= "二班" group by course) c on a.course = c.course and a.score=c.maxs 
where b.class="二班";

 

練習6:

表info有3個字段(name,age,sal),年齡相同的有多個人,查詢出相同年齡里面,sal最大的記錄。說明:要求是多個年齡一樣的排重,取sal最大的即可

select * from info group by age order by sal asc;

 

表info有3個字段(name,age,sal),年齡相同的有多個人,查詢出相同年齡里面,sal最大的記錄,展示name和sal字段。說明:要求是多個年齡一樣的排重,取sal最大的即可

select t.name,t.sal from (select * from info group by age order by sal asc) t;

 

練習7:mysql語法順序如下,那么其執行順序是?

參考答案:

from
where
group by
having
select
distinct
order by
limit

 

練習8:其它

InnoDB行鎖實現方式?參考:https://mp.weixin.qq.com/s/jPGjfV65wPzli6KGCjnW-A

innodb如何解決幻讀?

什么是回表?

B-樹的不足?

B+樹如何解決了B-樹的不足?

哪些情況,創建了索引也用不上?

什么是聚集索引、索引覆蓋、索引下推?

輔助索引的葉子節點為什么不存儲數據的指針地址?

InnoDB、MyISAM的優缺點?

事務的隔離級別有哪些?分別解決什么問題?

MVCC的原理?

主從復制原理?

什么是自動索引?

在數據庫表里設置完整性約束時,該表會被系統自動創建索引

  

mysql查詢緩存,結果存儲方式是?

mysql8以下的版本

執行過的sql語句及其結果以key-value的形式緩存在內存中。key是查詢語句,value是查詢結果;如果sql在緩存的key中找到,那么對應的value會被直接返回給客戶端。


8開始,mysql去掉了查詢緩存

  

 

非關系數據庫(比如redis)

練習1:redis批量刪除以qzcsbj開頭的key

練習2:什么是緩存穿透、緩存擊穿、緩存雪崩?

練習3:談談你對分布式鎖的了解

 

原文:https://www.cnblogs.com/uncleyong/p/15874340.html

更多筆試題:https://www.cnblogs.com/uncleyong/p/11119489.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM