sql子查詢面試題

2021-02-14 猴子數據分析

這是《從零學會sql》系列課程第4節課《複雜查詢》的練習題,也是常考常考的面試題。

 

題目來自sqlzoo的子查詢題目。網址:

https://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial/zh

這部分題目使用的是world表:世界國家信息表

表列名含義:

name:國家名稱

continent:該國家屬於哪個洲

area:面積

population:人口

gdp:國內

1.列出符合條件的國家名稱,條件:國家認可大於俄羅斯(Russia)的人口

【知識點】標量子查詢

select name from world where population > (select population from world where name = 'Russia');

2.列出歐洲每個國家的人均GDP,其中人均GDP要高於英國(United Kingdom)

【知識點】比較運算符(人均GDP=人口/gdp),邏輯運算符(and),標量子查詢

select name from worldwhere continent = 'Europe' and gdp/population >(select gdp/population from worldwhere name='United Kingdom');

3.在阿根廷(Argentina)和澳大利亞(Australia)所在的洲份中的國家有哪些?查找出國家名稱和洲名稱,並按國家名稱排序

【知識點】在運算符in裡使用子查詢

select name, continent from worldwhere continent in(select continent from worldwhere name='Argentina' or name='Australia')order by name;

4.查找符合下麵條件的國家名稱和人口:國家的人口比加拿大(Canada)的多,但比波蘭(Poland)的少

【知識點】在運算符between裡使用標量子查詢,這裡用between查找出的範圍邊界值包括了邊界值,所以要+1,和-1去掉邊界值

比如範圍是 1=<x<=10,(其中1是加拿大人口,10是波蘭人口),為了不包括邊界值,需要去掉兩個邊界值,變成 1+1=<x<= (10-1)

select name, population from worldwhere population between(select population from worldwhere name='Canada')+1 and(select population from worldwhere name='Poland')-1;

5.德國(Germany)在歐洲(Europe)國家的人口最多。奧地利(Austria)擁有德國總人口的11%。

查找歐洲的國家名稱和每個國家的人口,其中人口以德國人口的百分比來顯示人口數

【知識點】標量子查詢,字符串連接函數concat,浮點數保留多少位round函數

select name, concat(round(population*100/(select population from world where name='Germany')), '%') AS population from worldwhere continent = 'Europe';

6.哪些國家的GDP比歐洲(Europe)的全部國家都要高呢?  (有些國家的記錄中,GDP是空值NULL,沒有填入資料)

【知識點】all的用法,子查詢,條件中gdp>0用來去掉空值的情況

select name from worldwhere gdp > all(select gdp from worldwhere continent = 'Europe' and gdp > 0);

7.在每一個州中找出最大面積的國家,查找出洲, 國家名字,面積。 (有些國家的記錄中,面試是空值NULL,沒有填入資料)

【知識點】all的用法,關聯子查詢

select continent, name, area from world as xwhere area >= all(select area from world as ywhere y.continent=x.continentand area>0);

8.列出洲份名稱和國家名稱,其中每個洲只取出一個國家(條件:該國家排序在這個洲的首位)

【知識點】all的用法,關聯子查詢

select continent, name from world as xwhere name <= all(select name from world as ywhere y.continent=x.continent);

9.找出符合條件的洲和國家名稱,條件:該洲中的全部國家人口都有少於或等於 25000000 人口)

select name, continent, population from world as xwhere 25000000 >= all(select population from world as ywhere y.continent=x.continent);

10.有些國家的人口是同洲份的所有其他國的3倍或以上。列出這些國家的名稱和洲

select name, continent from world as xwhere population > all(select 3*population from world as ywhere y.continent=x.continent and x.name <> y.name);

如果上面的sql 寫成下面是錯誤的:

all可以與=、>、>=、<、<=、<>結合起來使用,分別表示等於、大於、大於等於、小於、小於等於、不等於all裡面的所有數據。

如果是兩個數字比較,a > 3b 等價於 a/3 > b 。但是,在mysql裡all得到的不是一個數字,是一個集合,也就是得到的是n行數據,所以不能寫a > 3all(b),語法只能是 a/3 > all(b)

all與子查詢的語法如下:

select 列名1 from 表名1 where 列名1 > all (子查詢);

推薦:常見面試題:我們為什麼要選擇你?

相關焦點

  • SQL語句面試題目:一般查詢和高級子查詢(上)
    通過兩條 sql 查詢:[sql] view plain copy select manager_id   from employees   where lower(last_name) = 'chen'      select *   from employees
  • 手撕SQL | 必知必會5道SQL面試題
    愛數據曉輝 | 作者愛數據學院8月SQL月考題 | 來源附本次sql請根據各小題的需求,用代碼實現【行列轉換】以下為兩張表,一張是考生成績表、一張為考生信息表,請用一條SQL 語句實現,以下查詢結果核心語句、聯結、子查詢、分析函數、控制函數等語句的掌握以及sql技能綜合運用的能力考察同學們的審題是否細緻、考查理解業務的能力將業務需求
  • 常見的SQL優化面試題
    現在面試過程中,除了開發的基礎,面試官通常還會問SQL優化的方面,SQL優化也能體現出來平時對資料庫的理解和技術的高低。現在就總結了幾個,希望對大家有幫助。1.在表中建立索引,優先考慮where.group by使用到的欄位。
  • 如何學習SQL語言
    為了幫助剛畢業找工作,或者想轉行成為數據分析師工作的朋友,我會用下面內容教會你怎樣用最快速、最容易理解的方式學會資料庫和SQL,並使用SQL進行數據分析:1.入門2.簡單查詢3.匯總分析4.複雜查詢5.多表查詢6.求職面試題7.檢驗SQL的學習效果第1部分:入門學習以下內容:1)了解資料庫的基本概念
  • SQL之 子查詢
    z子查詢就是將一個查詢(子查詢)的結果作為另一個查詢(主查詢)的數據來源或判斷條件的查詢
  • 這些SQL技能你都會嗎? 經典SQL面試題送給你(附答案)
    儘管面試官虐我千百遍,我還待他如初戀。
  • SQL面試50題——思路解答與分類整理(中)窗口函數與子查詢
    *, dense_rank() over (partition by cid order by cscore desc) as 排名 from score) as t1where 排名 <= 3;查詢各科成績前三名,是典型TopN問題窗口函數只能用在select後面,不能用在where後面,所以要先寫子查詢,並且子查詢產生的表需要有命名,
  • SQL今日一題(15):子查詢
    ,就是如果存在多個員工相同第二大薪水的情況怎麼辦,所以這裡用子查詢來嵌套一下,解決這個問題。題目描述2查找當前薪水(to_date='9999-01-01')排名第二多的員工編號emp_no、薪水salary、last_name以及first_name,你可以不使用order by完成嗎和上一題不同的是,這一題多了一個employees表要連接,同時不能用order bysalaries表
  • 一道簡單的sql語句題
    結果才發現,數據分析崗位大多注重的是資料庫的能力,比如sql語句的考察,hive的考察,以及一些運營思維的考察,所以第一次面試就很悲劇啦,不過題目還是很有代表性的。其他的不寫了,這裡只分享一個關於sql的題目。1、問題引出現在有兩個數據表,一個數據表記錄司機的信息,比如司機id,司機姓名,司機註冊時間等等,一個數據表記錄一天的訂單情況,比如訂單ID,訂單司機id,訂單時間。
  • 大數據分析工程師面試集錦3-SQL/SparkSql/HiveQL
    答:ALTER TABLE Products DROP COLUMN vend_phone;PS:諸如以上題4題5題6,面試官要麼會直接問你怎麼新加一個欄位,怎麼刪除一個欄位,這種只需你口頭回答的題型,要麼就會給個示例,讓你實際書寫一下。
  • 圖解面試題:SQL存儲過程有什麼用?
    面試中有時候會問:存儲過程有什麼用?看了今天的知識,你就知道如何回答了。1.存儲過程是什麼?
  • mysql經典面試題(2019年整理)
    mysql經典面試題(2019年整理)MySQL資料庫開發規範MYSQL如何優化?mysql經典面試題(2019年整理)mysql的sql語句優化方法面試題總結Mysql的引擎有哪些?支持事物麼?DB儲存引擎有哪些?
  • 程式設計師經典面試題,為什麼簡單的sql查詢,會這麼慢!
    舉個例子,如果我們的某一個狀態有1,2,3,4四個值,我們想要篩選不等於4的,如果我們的sql寫的是status !=4,那麼無法使用索引。如果想要使用到索引,那麼我們只能夠status in (1,2,3) 或者 status < 4。 也有可能我們使用索引的時候沒有遵循最左匹配原則,例如所以的欄位是1,2,3,我們的查詢條件只有3,那麼這個索引無法被使用到。
  • SparkSQL 50道練習題
    5.查詢Score表中的最高分的學生學號和課程號。(子查詢或者排序)6.查詢每門課的平均成績。7.查詢Score表中至少有5名學生選修的並以3開頭的課程的平均分數。8.查詢分數大於70,小於90的Sno列。9.查詢所有學生的Sname、Cno和Degree列。10.查詢所有學生的Sno、Cname和Degree列。11.查詢所有學生的Sname、Cname和Degree列。
  • Python也能寫SQL,組合查詢~
    sql.sqldf("""select 電影類型,avg(累計票房) as '平均票房/萬' from df             group by 電影類型 having avg(累計票房)>20000             order by 累計票房 desc;""")
  • 幾道常見的SQL面試題,看你能答對幾道?
    點擊關註上方「SQL資料庫開發」,設為「置頂或星標」,第一時間送達乾貨收集了幾道比較常見的SQL面試題1.用一條SQL 語句 查詢出每門課都大於80 分的學生姓名2.  刪除除了自動編號不同, 其他都相同的學生冗餘信息 3.一個叫 team 的表,裡面只有一個欄位name, 一共有4 條紀錄,分別是a,b,c,d, 對應四個球對,現在四個球對進行比賽,用一條sql
  • mysql的查詢、子查詢及連接查詢
    1、where型子查詢(把內層查詢結果當作外層查詢的比較條件)FROM goods WHERE goods_id IN (SELECT MAX(goods_id) FROM goods GROUP BY cat_id);2、from型子查詢(把內層的查詢結果當成臨時表,供外層sql再次查詢。
  • 幾個SQL在線刷題的網站
    寫完SQL直接回車就是提交,如果正確會自動進入下一題。另外還有一個加分項,它有自己配套的B站視頻(同樣免費)。牛客網採用的是employees資料庫,共61道題。牛客網作為大家一直推薦的SQL刷題網站做的還是很不錯的,既可以檢查SQL基礎語法的掌握,又可以及時反饋結果是否正確。
  • 初中級必須知道的MYSQL經典面試題
    資料庫作為一位JAVA工程師,不論你是初級程式設計師,還是中級程式設計師,高級程式設計師,MYSQL面試題是一定會問的,這個是考驗你對資料庫了解的深度和廣度。在我們平時面試過程中,那些mysql面試題是經常被問到的呢?你有哪些問題是不會的呢?
  • hibernate面試題
    * hibernate 面試題小集1.hibernate面試題及答案1.在資料庫中條件查詢速度很慢的時候,如何優化?1.建索引2.減少表之間的關聯3.優化sql,儘量讓sql很快定位數據,不要讓sql做全表查詢,應該走索引,把數據量大的表排在前面4.簡化查詢欄位,沒用的欄位不要,已經對返回結果的控制,儘量返回少量數據2.在hibernate中進行多表查詢,每個表中各取幾個欄位,也就是說查詢出來的結果集並沒有一個實體類與之對應,如何解決這個問題?