當前位置:首頁 » 編程語言 » sql常用面試題
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql常用面試題

發布時間: 2023-07-16 23:07:40

sql數據分析面試題

1、現有交易數據表user_goods_table,

老闆想知道每個用戶購買的外賣品類偏好分布,並找出每個用戶購買最多的外賣品類是哪個。

2、現有交易數據表user_sales_table,

老闆想知道支付金額在前20%的用戶。

3、現有用戶登錄表user_login_table,

老闆想知悔褲物道連續7天都登錄平台的重要用戶。

4、給定一張用戶簽到表user_attendence,表中包含三個欄位,分別是用戶ID:【user_id】碧液,日期:【date】,是否簽到:【is_sign_in】,0否1是。

4-1、計算截至當前(假設當前時間為2020-04-27),每個用戶已經連續簽到的天數:

要求輸出用戶ID【user_id】和連續簽到天數【recent_continuous_days】

4-2、計算有史以來 用戶最大連續簽到天數 :純培

要求輸出用戶ID【user_id】和最大連續簽到天數

❷ sql面試題

1,答
select * into B庫.table_b from A庫.table_a

2,答
select * into A庫.new_table from A庫.table_a left outer join B庫.table_b on A庫.table_a.name=B庫.table_b.name and A庫.table_a.Text=B庫.table_b.text

delete from A庫.table_a left outer join A庫.new_table on A庫.table_a.name=A庫.new_table.name and A庫.table_a.Text=A庫.new_table.text
delete from B庫.table_b left outer join A庫.new_table on b庫.table_b.name=A庫.new_table.name and b庫.table_b.Text=A庫.new_table.text

3 答

select * from (select top 10 * from (select top 100 * from 表 )as a) as b

4 答
select * into 表c from 表A
union all
select * into 表c from 表B

試試如果不對請指正。

❸ 關於sql的面試題求高手解答

1、select Sno,Sage from student where Sage<20;
2、select s.Sname,c.Cname,SC.grade from student s,course c, SC where s.Sno=SC.Sno and c.Cno=SC.Cno;
3、select 作者.作者姓名,圖書.圖書名,圖書.出版社 from 圖書,作者 where 圖書.作者編號=作者.作者編號 and 作者.作者編號 in (select 作者編號 from 作者 where 年齡<(select AVG(年齡) from 作者))

❹ sql 面試題

1. select s.title, count(p.id)
from 書表 s left join 評論 p on s.id=p.書表中的id
group by s.title

(注意:左外連接的作用是將評價數為0的書顯示出來.count(p.id)和count(*)的區別是count(p.id)不計入p.id為null的行)

2. select top 1 s.title, count(p.id)
from 書表 s left join 評論 p on s.id=p.書表中的id
group by s.title order by 2 desc

(以第2列倒序排序,取第1行)

❺ 軟體測試SQL面試題

資料庫,無外乎增刪改查:

增:

insert into A表 values (value1,value2,value3......)向A表中新增數據

刪:

delete from A表 ( where id=1) 刪除A表(刪除A表id=1的數據)如果刪除某個測試數據,記得加where條件,否則整張表的數據都被刪除,防止誤操作!不過,數據可以回滾找回。

truncate A表:清除表數據,數據無法回滾。

drop A表:整表結構刪除,即,這張表不存在了。

改:

update A表 set name='test' where id=1 修改id為1的name值為test

查:

1:左關聯和右關聯的區別?

答:左關聯( left join )左表為主,左表數據全部顯示,右表顯示關聯數據,無關聯顯示null,右關聯( right join )相反。

2:模糊查詢?

select * from A表 where name like ' %a% ' (name包含a字母)

查詢結果: a , a bc,b a c,bc a

select * from A表 where name like ' a% ' (name值以a字母開頭)

查詢結果: a , a bc

select * from A表 where name like ' %a ' (name值以a字母結尾)

查詢結果: a ,bc a

3:統計:count和sum

count統計表的 記錄數 ,sum統計某列數值 總和 。

select count(*) from A表

select count(1) from A表

select count(列名) from A表

區別:

count( * ): 所有記錄,包括null值

count( 1 ):所有記錄,包括null值

count( 列名 ):列名有值得記錄, 不包括null值

執行效率:

以前是count(1)比count(*)快,但現在count(*)底層演算法優化,查詢更快,所以推薦count(*)

統計有效數據的記錄,count(列名)

select sum(列名) from A表 計算列名數值總和。

舉例:

查詢A表中,姓王的用戶量

select count(*) from A where name like '王%'

Plus版

1:去重distinct,查詢不重復記錄的數據

必須放開頭

select distinct 列名 from 表名(查詢所有列名數據,去掉重復數據)

舉例:

表A,查詢考核等級grade,有哪些值

select distinct grade from A

2:分組group by,根據某個欄位分組

select 列名 from 表名 group by 列名,一般會配合聚合函數一起使用

舉例:

表A中,查詢考核等級grade欄位,不同值各多少人

select grade,count(*) from A group by grade

3:limit,查詢結果返回的數量,多用於分頁查詢

select * from 表名 limit i,n i代表查詢結果的索引值,默認從0開始,n返回查詢的結果數。

舉例:

訂單表A,查詢第21條到30條數據

select * from A limit 20,10

可能會問為什麼不能直接用id查詢?因為id不準確,可能存在id不連續的情況。如果某條數據被物理刪除了呢?

何為物理刪除和邏輯刪除?

物理 刪除 ,直接將某條數據,從表中刪除。

邏輯 刪除,僅通過某個欄位標記刪除,實際表中還存在。(比如:is_delete=1代表已刪除,is_delete=0未刪除)

4:排序order by 列名 asc(列名值升序排列)和order by 列名 desc(列名值降序排列)

舉例:

用戶表A,按照用戶id升序(select查詢默認根據主鍵升序,所以升序,不加order by也可以)

select * from A order by id asc同select *from A

用戶表A,按照新建時間倒序

select * from A order by create_time desc

5:in和between查詢某個范圍的數值

舉例:

in:查詢指定數值的數據

between:查詢某個范圍內的數據

舉例:

查詢表A中,id=1和id=10的數據

select * from A where id in(1,10)

查詢表A中,1月份新增的數據

select * from A where create_time between '2022-01-01' and '2022-01-31 23:59:59'

已知有如下4張表:

學生表:student(學號,學生姓名,出生年月,性別)

成績表:score(學號,課程號,成績)

課程表:course(課程號,課程名稱,教師號)

教師表:teacher(教師號,教師姓名)

准備練習數據

1)創建學生表(student)

2)創建成績表(score)

3)創建課程表(course)

4)教師表(teacher)

1)學生表添加數據

2)成績表添加數據

3)課程表添加數據

4)教師表添加數據

簡單查詢

查詢姓「猴」的學生名單

查詢姓名中最後一個字是「猴」字的學生名單

查詢姓名中帶「猴」字的學生名單

查詢姓「孟」老師的個數

匯總分析

1.匯總分析

查詢課程編號為「0002」的總成績

查詢選了課程的學生人數

2.分組

查詢各科成績的最高分和最低分, 以如下的形式顯示:課程號,最高分,最低分

查詢每門課程選修的學生數

3.分組結果的條件

查詢至少選修兩門課程的學生學號

查詢同名同姓學生名單並統計同名人數

分析:條件:怎麼算姓名相同?按姓名分組後人數大於等於2,因為同名的人數大於等於2,分析出這一點很重要

查詢不及格的課程並按課程號從大到小排列

查詢每門課程的平均成績,結果按平均成績升序排序,平均成績相同時,按課程號降序排列

檢索課程編號為「0004」且分數小於60的學生學號,結果按按分數降序排列

統計每門課程的學生選修人數(超過2人的課程才統計),要求輸出課程號和選修人數,查詢結果按人數降序排序,若人數相同,按課程號升序排序

查詢兩門以上不及格課程的同學的學號及其平均成績

第2步:再加上限制條件:

1)不及格課程

2)兩門以上[不及格課程]

4.查詢結構排序,分組的指定條件

查詢學生的總成績並進行排名

查詢平均成績大於60分的學生的學號和平均成績

復雜查詢

查詢課程成績小於60分學生的學號、姓名

【知識點】子查詢

1.翻譯成大白話

1)查詢結果:學生學號,姓名

2)查詢條件:所有課程成績 < 60 的學生,需要從成績表裡查找,用到子查詢

第1步,寫子查詢(所有課程成績 < 60 的學生)

第2步,查詢結果:學生學號,姓名,條件是前面1步查到的學號

查詢沒有學全所有課的學生的學號、姓名

查詢出只選修了兩門課程的全部學生的學號和姓名

查找1990年出生的學生名單

查詢本月過生日的學生

工作中會經常遇到這樣的業務問題:

如何找到每個類別下用戶最喜歡的產品是哪個?

如果找到每個類別下用戶點擊最多的5個商品是什麼?

這類問題其實就是常見的:分組取每組最大值、最小值,每組最大的N條(top N)記錄。

分組取每組最大值,按課程號分組取成績最大值所在行的數據

分組取每組最小值,按課程號分組取成績最小值所在行的數據

每組最大的N條記錄,查詢各科成績前兩名的記錄

第1步,查出有哪些組

我們可以按課程號分組,查詢出有哪些組,對應這個問題里就是有哪些課程號

第2步:先使用order by子句按成績降序排序(desc),然後使用limt子句返回topN(對應這個問題返回的成績前兩名)

第3步,使用union all 將每組選出的數據合並到一起

多表查詢

查詢所有學生的學號、姓名、選課數、總成績

查詢平均成績大於85的所有學生的學號、姓名和平均成績

查詢學生的選課情況:學號,姓名,課程號,課程名稱

❻ 面試題目(sql)

1、忍不住想說一句,因為第一題中的欄位類型是
【日期型】,而各種資料庫操作日期型數據有不同的方法,沒有一種共通的方法,所以脫離了資料庫而言沒有一種共通的sql。
2、select
ID,NAME,ADDRESS,PHONE,LOGDATE
from
T
where
ID
in(
select
ID
from
T
group
by
NAME
having
count(*)>1)
order
by
NAME;
3、delete
from
T
where
ID
not
in
(select
min(id)
from
T
group
by
name);
4、update
T
set
T.ADDRESS=(select
E.ADDRESS
from
E
where
E.NAME=T.NAME),
T.PHONE=(select
E.PHONE
from
E
where
E.NAME=T.NAME);
5、這個不同的資料庫也有不同的處理方法,不能脫離資料庫談了。
如:SqlServer或者access可以使用
top
oracle可以使用
rownum

---
以上,希望對你有所幫助。

❼ sql面試題

1、首先,將三個表建立一個視圖,可以直接在企業管理器裡面建,也可以將下面的代碼直接復制到查詢分析器裡面執行:
SELECT dbo.students.studentname, dbo.class.classname, dbo.score.course,
dbo.score.score
FROM dbo.class INNER JOIN
dbo.students ON dbo.class.classid = dbo.students.classid INNER JOIN
dbo.score ON dbo.students.studentid = dbo.score.studentid

2、然後,求 各科 班分數 最高的同學的名字,班級名稱,課程名稱,分數 ,代碼如下:

select classname as 班級,course as 學科,max(score) as 最高分,(select top 1 studentname from scoreview where classname=x.classname and course=x.course order by score desc) as 最好成績的學生 from scoreview x group by classname,course
------------
已經經過測試,你自己可以試試

❽ SQL資料庫面試題 急急急

a)select pname as '商品名',avg(qty) as 平均銷售量 from s,p,m where m.city='上海' and s.mno=m.mno and p.pno=s.pno,select p.Pno,p.pname,sum(s.qty)
from s left join p on s.pno=p.pno left join m on p.Mno=m.Mno
where m.city='上海市'
group by p.Pno,p.pname,p.city,p.color
b)、先刪除Sale表的外鍵PNO,再刪除gds表。

c)聯系:視圖(view)是在基本表之上建立的表,它的結構(即所定義的列)和內容(即所有數據行)都來自基本表,它依據基本表存在而存在。一個視圖可以對應一個基本表,也可以對應多個基本表。視圖是基本表的抽象和在邏輯意義上建立的新關系
區別:1、視圖是已經編譯好的sql語句。而表不是
2、視圖沒有實際的物理記錄。而表有。
3、表是內容,視圖是窗口
4、表只用物理空間而視圖不佔用物理空間,視圖只是邏輯概念的存在,表可以及時四對它進行修改,但視圖只能有創建的語句來修改
5、表是內模式,視圖是外模式
6、視圖是查看數據表的一種方法,可以查詢數據表中某些欄位構成的數據,只是一些SQL語句的集合。從安全的角度說,視圖可以不給用戶接觸數據表,從而不知道表結構。
7、表屬於全局模式中的表,是實表;視圖屬於局部模式的表,是虛表。
8、視圖的建立和刪除隻影響視圖本身,不影響對應的基本表。