❶ 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、視圖的建立和刪除隻影響視圖本身,不影響對應的基本表。