1. 程式人生 > >SQL進階基礎(面試基礎)—Part 2

SQL進階基礎(面試基礎)—Part 2

前言

本文原題及實驗資料均出自: http://www.cnblogs.com/edisonchou/p/3886801.html,但本文是基於SQL Server的訓練模型,經過筆者的簡單改動,現用於訓練SQL/HQL。本文只針對DML語句進行訓練,原文中還有很多DDL訓練,如有興趣,可自行訓練。

本題用到下面三個關係表:

CARDS 借書卡。 ID卡號,NAME 姓名,CLASS 班級

BOOKS 圖書。 ID書號,NAME 書名,AUTHOR 作者,PRICE 單價,QUANTITY 庫存冊數

BORROW 借書記錄。 PK沒卵用的列,CARDID 借書卡號,BOOKID 書號,RDATE 還書日期

備註:限定每人每種書只能借一本;庫存冊數隨借書、還書而改變。

測試表構建及插入測試資料

本文中涉及的所有SQL均在MYSQL中進行測試,將建表語句以及插入資料語句匯入MYSQL本地庫中即可

題目、答案及講解

(1)找出借書超過2本的讀者(包含2本),輸出借書卡號及所借圖書冊數

SELECT
cardId ,COUNT(bookId)
FROM
borrow
GROUP BY cardId
HAVING COUNT(bookId)>=2


##解題思路
按卡號分組,統計每個人借了多少書
過濾掉2本以下的人

(2) 查詢借閱了"水滸"一書的讀者,輸出姓名及班級

SELECT crd.`name`,crd.class
FROM
(SELECT cardId 
FROM
borrow
WHERE
bookId=
(SELECT
id
FROM
books 
WHERE `name`='水滸'))crdid,cards crd
WHERE crdid.cardId=crd.id


##解題思路
首先找到水滸的書號。從borrow表過濾出借了水滸的卡號。
兩表關聯,獲取學生姓名,班級

(3)查詢目前為止未還圖書,輸出借閱者(卡號)、書號及還書日期

SELECT brw.cardId,brw.bookId,brw.returnDate
FROM
borrow brw
WHERE brw.returnDate<CURDATE()

##解題思路
本題就是用還書日期和系統當前日期進行對比。
還書日期小於系統當前日期,目的是輸出截止到現在還未還書的。
掌握MYSQL CURDATE()獲得當前時間函式

 (4)查詢書名包括"網路"關鍵詞的圖書,輸出書號、書名、作者

SELECT id,`name`,author
FROM
books
WHERE
`name` LIKE '%網路%'


##解題思路
模糊查詢,網路前後都要有萬用字元

(5)查詢現有圖書中價格最高的圖書,輸出書名及作者

SELECT `name`,author
FROM
books
WHERE
price=
(SELECT MAX(price) FROM books)


##解題思路
從books表中把最高價格查出來。
過濾掉不等於這個價錢的即可

(6)查詢當前借了"計算方法"但沒有借"計算方法習題集"的讀者,輸出其借書卡號,並按卡號降序排序輸出

SELECT cardId
FROM
borrow
WHERE bookId= 
(SELECT id
FROM
books
WHERE `name` = '計算方法')
and cardId NOT IN
(SELECT cardId
FROM
borrow
WHERE
bookId =
(SELECT id
FROM
books
WHERE `name` ='計算方法習題集'))
ORDER BY cardId DESC


##解題思路
首先要查出《計算方法習題集》和《計算方法》對應的bookid,
然後通過書號可以分別查出卡號,
最後過濾掉把買了《計算方法習題集》的卡號即可

(7)將"計科一班"班同學所借圖書的還期都延長一週

UPDATE
borrow
SET returnDate=DATE_ADD(returnDate,INTERVAL 7 DAY)
WHERE cardId IN
(SELECT id
FROM
cards 
WHERE class='計科一班')


##解題思路
UPDATE語句格式:UPDATE 表名 SET 列 = 值 WHERE 列=條件
本文中考點如何將日期增加一週,要用到DATE_ADD()函式
首先查出計科一班卡號,將此值設為條件,按格式套用即可

(8)從BOOKS表中刪除當前無人借閱的圖書記錄

DELETE FROM books 
WHERE id NOT IN
(SELECT DISTINCT bookId
FROM
borrow)


##解題思路
DEL語句格式:DELETE FROM 表 WHERE 列 = '條件'

從borrow找出借過的書,套用格式過濾掉即可

(9)查詢當前同時借有"計算方法"和"組合數學"兩本書的讀者,輸出其借書卡號,並按卡號升序排序輸出

SELECT cardId FROM borrow WHERE bookId=
(SELECT id
FROM
books
WHERE `name`='計算方法')
AND cardId IN
(SELECT cardId FROM borrow WHERE bookId=
(SELECT id
FROM
books
WHERE `name`='組合數學'))


##解題思路

首先分別檢視兩本書對應的Bookid,然後查出其對應cardid,
讀了計算方法的CID,也在讀了組合數學的CID中的號則證明, 兩本都讀了

作者:唐辰(資料界小白)

相關推薦

SQL基礎面試基礎Part 2

前言 本文原題及實驗資料均出自: http://www.cnblogs.com/edisonchou/p/3886801.html,但本文是基於SQL Server的訓練模型,經過筆者的簡單改動,現用於訓練SQL/HQL。本文只針對DML語句進行訓練,原文中還有很多DDL訓

Linq To Sql系列用object的動態查詢與保存log篇

directory ont 簡單 lambda表達式 bind add dbo 所有 生成 動態的生成sql語句,根據不同的條件構造不同的where字句,是拼接sql 字符串的好處。而Linq的推出,是為了彌補編程中的 Data != Object 的問題。我們又該如何實現

Oracle PL/SQL程式設計第五彈:包的技術

包過載 包過載實際上就是對包中的子程式的過載,之前我們已經對子程式的過載做過介紹,這裡簡單看下程式碼。 定義包規範: CREATE OR REPLACE PACKAGE emp_action_pkg_overload IS --定義一個增加新員工

Oracle PL/SQL程式設計第十五彈:動態SQL語句

理解動態SQL語句 動態SQL語句基礎 動態SQL語句不僅是指SQL語句是動態拼接而成的,更主要的是SQL語句所使用的物件也是執行時期才建立的。出現這種功能跟PL/SQL本身的早起繫結特性有關,早PL/SQL中,所有的物件必須已經存在於資料庫中才能執行,

Pod控制器應用kubernetes service

kubernetes service是強依賴CoreDNS或者是kube-dns功能 node network節點網路 pod network pod網路 cluster network service ip kube-proxy元件是監控apiservice和service 資源變動的資訊,通

spring cloud消費者feign

一、Feign簡介 Feign是一個宣告式的偽Http客戶端,它使得寫Http客戶端變得更簡單。使用Feign,只需要建立一個介面並註解。它具有可插拔的註解特性,可使用Feign 註解和JAX-RS註解。Feign支援可插拔的編碼器和解碼器。Feign預設集成了Ribbon,並和Eureka結合,

Less迴圈等用法MD.6

有幾天沒更新我的漫島系列了哈,設定十一月底完成漫島的第一版,時間挺緊迫的,另外,大家能看到的漫島的部分頁面,就截止到個人中心了,其餘的先不給看了。 由於知識雜又多,記不過來,像less稍微複雜一點的語法,每次我還得查一查文件,所以把平時遇到的比較不常規的用法記錄下來,隨時查閱。

Redis核心技術主從複製

Redis主從複製 分析:主從複製:容錯。 思考:主從複製,需要至少2臺redis服務。一臺主機器(讀寫),一臺從機器(備份,讀)。          模擬2個redis服務:          建立2個redis服務,2個redis服務埠不相同。 建立redis

【讀書2】【2014】基於MATLAB的雷達訊號處理基礎第二版——接收機(2)

圖1.10對該問題進行了描述。 Figure 1.10 illustrates the problem. 圖1.10 (a)圖1.9中接收機的I通道只測量相位θ(t) 的餘弦值;(b)Q通道只測量相位θ(t) 的正弦值。(a) The Ichannel of the recei

Python 用法 持續更新

裝飾器(Decorator) Python 的裝飾器是任何可呼叫物件(callable object),用於修改函式(Function)或類(Class)。按照用途可分為: 函式裝飾器 類裝飾器 裝飾器的介面定義可概括為: 接收某個函式或類的引用作為引數; 修改該函式或類並返回

IDEA Window 安裝破解與使用超全

IDEA 全稱 IntelliJ IDEA,是java語言開發的整合環境,IntelliJ在業界被公認為最好的java開發工具之一,尤其在智慧程式碼助手、程式碼自動提示、重構、J2EE支援、各類版本工具(git、svn、github等)、JUnit、CVS整合、程式碼分析、

爬蟲技術 -- 學習十一【補充】獲取html中meta標籤中的content的內容

但是meta標籤中的content內容的抓取,沒有提及到! 上網搜尋了下,發現很少提及,所以寫篇隨筆,備忘一下! 還是在HtmlAgillityPack搭配ScrapySharp的環境下,具體如何配置點選上一篇連結。 例子:<meta name="keywords" content="召開新聞

Pandas——資料處理

目錄 以下所有的例子都匯入以下包 import pandas as pd from pandas import DataFrame,Series import numpy as np from

Redis核心技術Java開發

Jedis Jedis使用java語言開發的程式,用來連線redis服務java API。呼叫jedis 介面就可以操作redis服務。 建立java工程 建立java工程,匯入jar檔案。

最牛Java架構師路線年薪80W

1、原始碼分析專題 詳細介紹原始碼中所用到的經典設計思想,看看大牛是如何寫程式碼的,提升技術審美、提高核心競爭力。

Docker 入門Mac環境- part 2 容器container

username .py containe define 使用 soc _id nec 軟件 part-2 容器(container) 簡介 Docker架構有三個層面,從高到低如下: stack(棧) services(服務) containers(容器) 現在接觸的

吳恩達 深度學習 程式設計作業5-1Part 2

吳恩達 Coursera 課程 DeepLearning.ai 程式設計作業系列,本文為《序列模型》部分的第一週“迴圈神經網路”的課程作業——第二部分:字母級的語言模型:恐龍獸島。 Character level language model -

Oracle基礎pl/sql(分頁過程)

   編寫分頁過程         通過pl/sql實現分頁過程,再該過程中由簡單到難一步步深入,目的在於通過該案例熟悉pl/sql的各種儲存過程,包,遊標,如何在java中呼叫等內容的學習。    1、無返回值的儲存過程      例如 1、可以向book表新增書,  

Nodejs基礎5-6HTTP概念

code 數據 才會 cti 異步io 接口 tint 磁盤 資源 1、什麽是回調? 是異步編程最基本的方法,對於nodejs來說需要按順序執行異步邏輯的時候一般采用後續傳遞的方式,也就是將後續邏輯封裝在回調函數中作為起始函數的參數逐層去嵌套。通過這種方式來讓程序按照我們期

Python基礎8:python中的特性迭代,列表生成式,生成器,迭代器

python中還包括一些高階特性,以下簡單介紹。 迭代 定義:用for迴圈來遍歷物件的過程,叫做迭代。 作用物件:可迭代物件 如何判斷是否為可迭代物件:isinstance(xxx,Iterable),Iterable型別來源於collections模組。 應用場景: 1