《SQL 必知必會》全解析

来源:https://www.cnblogs.com/cunyu1943/archive/2023/06/07/17462724.html
-Advertisement-
Play Games

> 不要哀求,學會爭取。若是如此,終有所獲。 > > 原文:https://mp.weixin.qq.com/s/zbOqyAtsWsocarsFIGdGgw ## 前言 你是否還在煩惱 SQL 該從何學起,或者學了 SQL 想找個地方練練手?好巧不巧,最近在工作之餘登上牛客,發現了牛客不知道啥時候 ...


不要哀求,學會爭取。若是如此,終有所獲。

原文:https://mp.weixin.qq.com/s/zbOqyAtsWsocarsFIGdGgw

前言

你是否還在煩惱 SQL 該從何學起,或者學了 SQL 想找個地方練練手?好巧不巧,最近在工作之餘登上牛客,發現了牛客不知道啥時候上線了SQL 必知必會的練習題。

《SQL 必知必會》作為麻省理工學院、伊利諾伊大學等眾多大學的參考教材,由淺入深地講解了SQL的基本概念和語法。涉及數據的排序、過濾和分組,以及表、視圖、聯結、子查詢、游標、存儲過程和觸發器等內容。實例豐富,方便查閱,可以說作為一個 CRUD BOY/GIRL 必讀書目。

想著正好給它刷一遍,然後將自己刷題的一些想法總結下,於是有了今天這篇文章,希望能給需要的小伙伴一點點幫助。

SQL1 從 Customers 表中檢索所有的 ID

描述

現有表Customers如下:

cust_id
A
B
C

問題

編寫 SQL 語句,從 Customers 表中檢索所有的 cust_id。

示例答案

返回 cust_id 列的內容

cust_id
A
B
C

示例

DROP TABLE IF EXISTS `Customers`;

CREATE TABLE IF NOT EXISTS `Customers`(
    cust_id VARCHAR(255) DEFAULT NULL
);

INSERT `Customers` VALUES ('A'),('B'),('C');

解答

考察最簡單的查詢語句,因為 Customers 表中僅有 cust_id 一列,所以我們可以使用以下兩種解答方式。

  • 第一種方式,選擇特定列進行輸出,這也是我們在工作中更加推薦使用的一種方式,將需要輸出的列名全部描述出來。
SELECT cust_id FROM Customers;
  • 第二種方式,使用 * 對錶中所有列進行輸出,因為 Customers 表中僅有一列,所以可以使用該方式。但在日常工作中,就算查詢結果列中包含了資料庫表的所有欄位,也不要直接使用 *.
SELECT * FROM Customers;

SQL2 檢索併列出已訂購產品的清單

描述

表OrderItems含有非空的列prod_id代表商品id,包含了所有已訂購的商品(有些已被訂購多次)。

prod_id
a1
a2
a3
a4
a5
a6
a7

問題

編寫SQL 語句,檢索併列出所有已訂購商品(prod_id)的去重後的清單。

示例

DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(
	prod_id VARCHAR(255) NOT NULL COMMENT '商品id'
);
INSERT `OrderItems` VALUES ('a1'),('a2'),('a3'),('a4'),('a5'),('a6'),('a6')

解答

要對結果去重,可以使用 DISTINCT 關鍵字。使用時,在後邊跟上需要去重的欄位即可保證這些去重欄位的查詢結果不重覆。

SELECT DISTINCT prod_id FROM OrderItems;

此外還可以使用 GROUP BY 關鍵字,改關鍵字支持在去重的同時,同步返回其他欄位的信息。

SELECT prod_id FROM OrderItems GROUP BY prod_id;

SQL3 檢索所有列

描述

現在有 Customers 表(表中含有列 cust_id 代表客戶 id,cust_name 代表客戶姓名) 。

cust_id cust_name
a1 andy
a2 ben
a3 tony
a4 tom
a5 an
a6 lee
a7 hex

問題

需要編寫 SQL語句,檢索所有列。

示例結果

返回所有列 cust_id 和 cust_name。

cust_id cust_name
a1 andy
a2 ben
a3 tony
a4 tom
a5 an
a6 lee
a7 hex

示例

DROP TABLE IF EXISTS `Customers`;
CREATE TABLE IF NOT EXISTS `Customers`(
	cust_id VARCHAR(255) NOT NULL COMMENT '客戶id',
	cust_name VARCHAR(255) NOT NULL COMMENT '客戶姓名'
);
INSERT `Customers` VALUES ('a1','andy'),('a2','ben'),('a3','tony'),('a4','tom'),('a5','an'),('a6','lee'),('a7','hex');

解答

類似於第一題,最簡單的查詢語句,只不過相比第一題多了一列,所以同樣可以使用兩種方式。

  • 使用 * 表示所有列。
SELECT * FROM Customers;
  • 將需要列印出的列詳細列出。
SELECT cust_id, cust_name FROM Customers;

SQL4 檢索顧客名稱並且排序

描述

有表 Customers,cust_id 代表客戶 id,cust_name 代表客戶姓名。

cust_id cust_name
a1 andy
a2 ben
a3 tony
a4 tom
a5 an
a6 lee
a7 hex

問題

從 Customers 中檢索所有的顧客名稱(cust_name),並按從 Z 到 A 的順序顯示結果。

示例結果

返回客戶姓名 cust_name

cust_name
tony
tom
lee
hex
ben
andy
an

示例

DROP TABLE IF EXISTS `Customers`;
CREATE TABLE IF NOT EXISTS `Customers`(
	cust_id VARCHAR(255) NOT NULL COMMENT '客戶id',
	cust_name VARCHAR(255) NOT NULL COMMENT '客戶姓名'
);
INSERT `Customers` VALUES ('a1','andy'),('a2','ben'),('a3','tony'),('a4','tom'),('a5','an'),('a6','lee'),('a7','hex');

解答

要對資料庫中的數據進行排序,需要使用關鍵字 ORDER BY。此外,預設情況下,SQL 中列的結果預設是正序排列的,即實際情況下以下語句執行結果是一樣的。

SELECT cust_name FROM Customers;
SELECT cust_name FROM Customers ORDER BY cust_name ASC;

而要對查詢結果逆序輸出,則需要用到 DESC 關鍵字,表示逆序輸出。

SELECT cust_name FROM Customers ORDER BY cust_name DESC;

SQL5 對顧客ID和日期排序

描述

有 Orders 表

cust_id order_num order_date
andy aaaa 2021-01-01 00:00:00
andy bbbb 2021-01-01 12:00:00
bob cccc 2021-01-10 12:00:00
dick dddd 2021-01-11 00:00:00

問題

編寫 SQL 語句,從 Orders 表中檢索顧客 ID(cust_id)和訂單號(order_num),並先按顧客 ID 對結果進行排序,再按訂單日期倒序排列。

示例答案

返回 2 列,cust_id 和 order_num

cust_id order_num
andy bbbb
andy aaaa
bob cccc
dick dddd

示例解析

首先根據 cust_id 進行排列,andy 在 bob 和 dick 前,再根據 order_date 進行排列,訂單號 bbbb 的訂單時間是 "2021-01-01 12:00:00" 大於訂單號 aaaa 的時間 "2021-01-01 00:00:00"

示例

DROP TABLE IF EXISTS `Orders`;
CREATE TABLE IF NOT EXISTS `Orders` (
  `cust_id` varchar(255) NOT NULL COMMENT '顧客 ID',
  `order_num` varchar(255) NOT NULL COMMENT '訂單號',
  `order_date` timestamp NOT NULL COMMENT '訂單時間'
);
INSERT INTO `Orders` VALUES ('andy','aaaa','2021-01-01 00:00:00'),
('andy','bbbb','2021-01-01 12:00:00'),
('bob','cccc','2021-01-10 12:00:00'),
('dick','dddd','2021-01-11 00:00:00');

解答

要對列進行排序,則需要使用 ORDER BY 關鍵字,此外就是正序和倒序輸出。

  • ASC:正序輸出,也是預設輸出的情況。
  • DESC:倒序輸出。
SELECT cust_id, order_num FROM Orders ORDER BY cust_id, order_date DESC;

SQL6 按照數量和價格排序

描述

假設有一個 OrderItems 表

quantity item_price
1 100
10 1003
2 500

問題

編寫 SQL 語句,顯示 OrderItems 表中的數量(quantity)和價格(item_price),並按數量由多到少、價格由高到低排序。

示例答案

返回 quantity 和 item_price

示例

DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems` (
  `quantity` INT(64) NOT NULL COMMENT '數量',
  `item_price` INT(64) NOT NULL COMMENT '訂單價格'
);
INSERT INTO `OrderItems` VALUES (1,100),
(10,1003),
(2,500);

解答

同樣是查詢語句,要對查詢結果進行排序,則需要使用 ORDER BY 關鍵字,最後則是需要註意是正序還是倒序,題目中由多到少和由高到低都是屬於倒序,所以需要使用關鍵字 DESC

SELECT quantity, item_price FROM OrderItems ORDER BY quantity DESC, item_price DESC;

SQL7 檢查SQL語句

描述

有 Vendors 表

vend_name
海底撈
小龍坎
大龍燚

問題

下麵的 SQL 語句有問題嗎?嘗試將它改正確,使之能夠正確運行,並且返回結果根據 vend_name 逆序排列

SELECT vend_name, 
FROM Vendors 
ORDER vend_name DESC;

示例展示

返回 vend_name

vend_name
海底撈
小龍坎
大龍燚

示例

DROP TABLE IF EXISTS `Vendors`;
CREATE TABLE IF NOT EXISTS `Vendors` (
  `vend_name` VARCHAR(255) NOT NULL COMMENT 'vend名稱'
);
INSERT INTO `Vendors` VALUES ('海底撈'),
('小龍坎'),
('大龍燚');

解答

SELECT vend_name, FROM Vendors ORDER vend_name DESC;

主要存在兩處錯誤,首先是選取需要展示的列 vend_name 後,後面並沒有跟上需要展示的其他列,所以此處多了一個 ,。另外,對選取列進行排序使用的關鍵字是 ORDER BY,而題目中只是給出了 ORDER,忘記了 BY,所以會導致查詢結果錯誤。針對這兩處錯誤改正後,得到的正確的語句如下所示。

SELECT vend_name FROM Vendors ORDER BY vend_name DESC;

SQL8 返回固定價格的產品

描述

有表 Products

prod_id prod_name prod_price
a0018 sockets 9.49
a0019 iphone13 600
b0018 gucci t-shirts 1000

問題

從 Products 表中檢索產品 ID(prod_id)和產品名稱(prod_name),只返回價格為 9.49 美元的產品。

示例結果

返回 prod_id 和 prod_name

prod_id prod_name
a0018 sockets

示例

DROP TABLE IF EXISTS `Products`;
CREATE TABLE IF NOT EXISTS `Products` (
  `prod_id` VARCHAR(255) NOT NULL COMMENT '產品 ID',
  `prod_name` VARCHAR(255) NOT NULL COMMENT '產品名稱',
  `prod_price` DOUBLE NOT NULL COMMENT '產品價格'
);
INSERT INTO `Products` VALUES ('a0018','sockets',9.49),
('a0019','iphone13',600),
('b0019','gucci t-shirts',1000);

解答

查詢符合指定條件的數據,可以使用關鍵字 WHERE 對條件進行限制,然後就是對條件的實現,這裡可以使用兩種方式。

第一種,直接利用 =,既然條件是需要價格為 9.49 美元的產品,則我們將價格列設置為 prod_price = 9.49 即可。

SELECT prod_id, prod_name FROM Products WHERE prod_price = 9.49;

第二種,除開 = 之外,我們也可以使用 in,表示價格只要在指定的數據之中,我們將價格列設置為 in (9.49) 即可,但是此時要註意不要忽略 (),否則語句會報錯。

SELECT prod_id, prod_name FROM Products WHERE prod_price in (9.49);

SQL9 返回更高價格的產品

描述

Products 表

prod_id prod_name prod_price
a0018 sockets 9.49
a0019 iphone13 600
b0019 gucci t-shirts 1000

問題

編寫 SQL 語句,從 Products 表中檢索產品 ID(prod_id)和產品名稱(prod_name),只返回價格為 9 美元或更高的產品。

示例答案

返回 prod_id 商品 id 和 prod_name 商品名稱

prod_id prod_name
a0018 sockets
a0019 iphone13
b0019 gucci t-shirts

示例

DROP TABLE IF EXISTS `Products`;
CREATE TABLE IF NOT EXISTS `Products` (
`prod_id` VARCHAR(255) NOT NULL COMMENT '產品 ID',
`prod_name` VARCHAR(255) NOT NULL COMMENT '產品名稱',
`prod_price` DOUBLE NOT NULL COMMENT '產品價格'
);
INSERT INTO `Products` VALUES ('a0011','usb',9.49),
('a0019','iphone13',600),
('b0019','gucci t-shirts',1000);

解答

條件查詢語句,查詢格式:

SELECT [列名] FROM [表名] WHERE 判斷條件 …

既然判斷條件是要產品價格不低於 9 美元,則產品需要大於等於 9 美元,可以將產品價格設置為 prod_price >= 9 即可。

SELECT prod_id, prod_name FROM Products WHERE prod_price >= 9;

此外,我們還可以將 >= 拆分為兩個條件,一個是 prod_price > 9,而另一個則是 prod_price = 9,然後滿足任一條件即可,則利用關鍵字 OR 將兩個條件進行連接。

SELECT prod_id, prod_name FROM Products WHERE prod_price > 9 OR prod_price = 9;

SQL10 返回產品並且按照價格排序

描述

有 Products 表

prod_id prod_name prod_price
a0011 egg 3
a0019 sockets 4
b0019 coffee 15

問題

編寫 SQL 語句,返回 Products 表中所有價格在 3 美元到 6 美元之間的產品的名稱(prod_name)和價格(prod_price),然後按價格對結果進行排序

示例結果

返回商品名稱 prod_name 和商品價格 prod_price

prod_name prod_price
egg 3
sockets 4

註:不需要考慮商品價格相同的情況

示例

DROP TABLE IF EXISTS `Products`;
CREATE TABLE IF NOT EXISTS `Products` (
`prod_id` VARCHAR(255) NOT NULL COMMENT '產品 ID',
`prod_name` VARCHAR(255) NOT NULL COMMENT '產品名稱',
`prod_price` DOUBLE NOT NULL COMMENT '產品價格'
);
INSERT INTO `Products` VALUES ('a0011','egg',3),
('a0019','sockets',4),
('b0019','coffee',15);

解答

條件查詢,通過將條件拆分為 prod_price >= 3prod_price <= 6 兩個條件,然後利用關鍵字 AND 將兩個條件串聯起來,同時滿足兩個條件的數據則進行輸出。然後要對價格進行排序,則可以使用關鍵字 ORDER BY

SELECT prod_name, prod_price FROM Products WHERE prod_price >= 3 AND prod_price <=6 ORDER BY prod_price;

除開上述將兩個條件拆分開然後利用關鍵字 AND 串聯起來之外,其實 SQL 還提供了關鍵字 BETWEEN … AND …,可以將滿足介於兩者之間的數進行篩選輸出。

SELECT prod_name, prod_price FROM Products WHERE prod_price BETWEEN 3 AND 6 ORDER BY prod_price;

SQL11 返回更多的產品

描述

OrderItems 表含有:訂單號 order_num,quantity 產品數量

order_num quantity
a1 105
a2 1100
a2 200
a4 1121
a5 10
a2 19
a7 5

問題

從 OrderItems 表中檢索出所有不同且不重覆的訂單號(order_num),其中每個訂單都要包含 100 個或更多的產品。

示例結果

返回訂單號列 order_num

order_num
a1
a2
a4

示例

DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(
	order_num VARCHAR(255) NOT NULL COMMENT '商品訂單號',
	quantity VARCHAR(255) NOT NULL COMMENT '商品數量'
);
INSERT `OrderItems` VALUES ('a1','105'),('a2','1100'),('a2','200'),('a4','1121'),('a5','10'),('a2','19'),('a7','5')

解答

要篩選指定列中不重覆的數據,則需要使用關鍵字 DISTINCT。此外,要篩選出滿足指定條件的數據,則需要關鍵字 WHERE,然後根據題意,可以將條件寫到一起,也可以將條件進行拆分後用關鍵字 OR 並聯。

SELECT DISTINCT order_num FROM OrderItems WHERE quantity >= 100;
SELECT DISTINCT order_num FROM OrderItems WHERE quantity > 100 OR quantity = 100;

SQL12 檢索供應商名稱

描述

Vendors 表有欄位供應商名稱(vend_name)、供應商國家(vend_country)、供應商州(vend_state)

vend_name vend_country vend_state
apple USA CA
vivo CNA shenzhen
huawei CNA xian

問題

編寫 SQL 語句,從 Vendors 表中檢索供應商名稱(vend_name),僅返回加利福尼亞州的供應商(這需要按國家[USA]和州[CA]進行過濾,沒準其他國家也存在一個 CA)

示例答案

返回供應商名稱 vend_name

vend_name
apple

示例

DROP TABLE IF EXISTS `Vendors`;
CREATE TABLE IF NOT EXISTS `Vendors` (
  `vend_name` VARCHAR(255) NOT NULL COMMENT 'vend名稱',
  `vend_country` VARCHAR(255) NOT NULL COMMENT 'vend國家',
  `vend_state` VARCHAR(255) NOT NULL COMMENT 'vend州'
);
INSERT INTO `Vendors` VALUES ('apple','USA','CA'),
('vivo','CNA','shenzhen'),
('huawei','CNA','xian');

解答

既然要篩選出加利福利亞州的提供商,則首要條件是滿足 vend_state = 'CA'。另外,除開美國有加利福利亞州之外,有可能其他國家也有加利福利亞州,所以需要對國家也進行限定,設置條件為 vend_country = 'USA'。然後用關鍵字 AND 將條件串聯,滿足這兩個條件的數據則進行輸出。

SELECT vend_name FROM Vendors WHERE vend_country = 'USA' AND vend_state = 'CA';

SQL13 檢索併列出已訂購產品的清單

描述

OrderItems 表包含了所有已訂購的產品(有些已被訂購多次)。

prod_id order_num quantity
BR01 a1 105
BR02 a2 1100
BR02 a2 200
BR03 a4 1121
BR017 a5 10
BR02 a2 19
BR017 a7 5

問題

編寫 SQL 語句,查找所有訂購了數量至少 100 個的 BR01、BR02 或 BR03 的訂單。你需要返回 OrderItems 表的訂單號(order_num)、產品 ID(prod_id)和數量(quantity),並按產品 ID 和數量進行過濾。

示例答案

返回商品 id prod_id、訂單 order_num、數量 quantity。

order_num prod_id quantity
a1 BR01 105
a2 BR02 1100
a2 BR02 200
a4 BR03 1121

示例解析

返回的結果中,數量滿足大於等於 100,且滿足 prod_id 是 "BR01",“BR02”,“BR03" 中的任意一個。

示例

DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(

	prod_id VARCHAR(255) NOT NULL COMMENT '商品號',
	order_num VARCHAR(255) NOT NULL COMMENT '商品訂單號',
	quantity INT(255) NOT NULL COMMENT '商品數量'
);
INSERT `OrderItems` VALUES ('BR01','a1','105'),('BR02','a2','1100'),('BR02','a2','200'),('BR03','a4','1121'),('BR017','a5','10'),('BR02','a2','19'),('BR017','a7','5')

解答

多條件查詢,將兩個條件進行拆分,然後將兩個查詢條件進行串聯即可。

數量滿足大於等於 100,則設置為 quantyty >= 100

產品 id 滿足 "BR01",“BR02”,“BR03” 中的任意一個,則使用關鍵字 in

SELECT order_num, prod_id, quantity FROM OrderItems WHERE quantity >= 100 AND prod_id IN ('BR01', 'BR02', 'BR03');

SQL14 返回所有價格在 3 美元到 6 美元之間的產品的名稱和價格

描述

有表 Products

prod_id prod_name prod_price
a0011 egg 3
a0019 sockets 4
b0019 coffee 15

問題

編寫 SQL 語句,返回所有價格在 3 美元到 6 美元之間的產品的名稱(prod_name)和價格(prod_price),使用 AND 操作符,然後按價格對結果進行升序排序

示例結果

返回商品名稱 prod_name 和商品價格 prod_price

prod_name prod_price
egg 3
sockets 4

註:不需要考慮價格相同時的排序問題

示例

DROP TABLE IF EXISTS `Products`;
CREATE TABLE IF NOT EXISTS `Products` (
`prod_id` VARCHAR(255) NOT NULL COMMENT '產品 ID',
`prod_name` VARCHAR(255) NOT NULL COMMENT '產品名稱',
`prod_price` INT(255) NOT NULL COMMENT '產品價格'
);
INSERT INTO `Products` VALUES ('a0011','egg',3),
('a0019','sockets',4),
('b0019','coffee',15);

解答

兩個條件,首先是價格介於 3 到 6 美元,則可以使用關鍵字 BETWEEN … AND …。另外,按價格升序排序,則使用關鍵字 ORDER BY

SELECT prod_name, prod_price FROM Products WHERE prod_price BETWEEN 3 AND 6 ORDER BY prod_price;

題目中指定需要使用關鍵字 AND,則需要將價格條件替換成 prod_price >= 3prod_price <= 6 兩個條件,然後將其串聯。

SELECT prod_name, prod_price FROM Products WHERE prod_price >= 3 AND prod_price <= 6 ORDER BY prod_price;

SQL15 糾錯2

描述

供應商表 Vendors 有欄位供應商名稱 vend_name、供應商國家 vend_country、供應商省份 vend_state

vend_name vend_country vend_state
apple USA CA
vivo CNA shenzhen
huawei CNA xian

問題

修改正確下麵 sql,使之正確返回

SELECT vend_name 
FROM Vendors 
ORDER BY vend_name 
WHERE vend_country = 'USA' AND vend_state = 'CA';

示例結果

結果返回 vend_name

vend_name
apple

示例

DROP TABLE IF EXISTS `Vendors`;
CREATE TABLE IF NOT EXISTS `Vendors` (
  `vend_name` VARCHAR(255) NOT NULL COMMENT 'vend名稱',
  `vend_country` VARCHAR(255) NOT NULL COMMENT 'vend國家',
  `vend_state` VARCHAR(255) NOT NULL COMMENT 'vend州'
);
INSERT INTO `Vendors` VALUES ('apple','USA','CA'),
('beef noodle king','USA','CA'),
('vivo','CNA','shenzhen'),
('huawei','CNA','xian');

解答

主要是一處錯誤,搞錯了關鍵字 WHEREORDER BY 的先後順序,正確的 SQL 語句格式為:

SELECT [列名] FOMR [表名] WHERE [條件] ORDER BY [列名];
SELECT vend_name FROM Vendors WHERE vend_country = 'USA' AND vend_state = 'CA' ORDER BY vend_name;

SQL16 檢索產品名稱和描述(一)

描述

Products表

prod_name prod_desc
a0011 usb
a0019 iphone13
b0019 gucci t-shirts
c0019 gucci toy
d0019 lego toy

問題

編寫 SQL 語句,從 Products 表中檢索產品名稱(prod_name)和描述(prod_desc),僅返回描述中包含 toy 一詞的產品名稱

示例結果

返回產品名稱和產品描述

prod_name prod_desc
c0019 gucci toy
d0019 lego toy

示例

DROP TABLE IF EXISTS `Products`;
CREATE TABLE IF NOT EXISTS `Products` (
`prod_name` VARCHAR(255) NOT NULL COMMENT '產品 ID',
`prod_desc` VARCHAR(255) NOT NULL COMMENT '產品名稱'
);
INSERT INTO `Products` VALUES ('a0011','usb'),
('a0019','iphone13'),
('b0019','gucci t-shirts'),
('c0019','gucci toy'),
('d0019','lego toy');

解答

模糊查詢,主要產品描述中含有 toy 一詞,就需要返回這時候需要用到模糊查詢關鍵字 LIKE 然後是通配符,題目中並沒有明確說明 toy 前後包含多少個字元,所以用 %

SELECT prod_name, prod_desc FROM Products WHERE prod_desc LIKE '%toy%'

SQL17 檢索產品名稱和描述(二)

描述

Products 表

prod_name prod_desc
a0011 usb
a0019 iphone13
b0019 gucci t-shirts
c0019 gucci toy
d0019 lego toy

問題

編寫 SQL 語句,從 Products 表中檢索產品名稱(prod_name)和描述(prod_desc),僅返回描述中未出現 toy 一詞的產品,最後按”產品名稱“對結果進行排序。

示例結果

返回產品名稱和產品描述

prod_name prod_desc
a0011 usb
a0019 iphone13
b0019 gucci t-shirts

示例

DROP TABLE IF EXISTS `Products`;
CREATE TABLE IF NOT EXISTS `Products` (
`prod_name` VARCHAR(255) NOT NULL COMMENT '產品 ID',
`prod_desc` VARCHAR(255) NOT NULL COMMENT '產品名稱'
);
INSERT INTO `Products` VALUES ('a0011','usb'),
('a0019','iphone13'),
('b0019','gucci t-shirts'),
('c0019','gucci toy'),
('d0019','lego toy');

解答

這題就是 16 題的反面,那我們只要對 16 的查詢語句進行取反即可,此時添加一個關鍵字 NOT 即可。此外,還需要按“產品名稱”對結果排序,使用關鍵字 ORDER BY 即可。但是需要註意 WHEREORDER BY 關鍵字的先後順序。

SELECT prod_name, prod_desc FROM Products WHERE prod_desc NOT LIKE '%toy%' ORDER BY prod_name;

SQL18 檢索產品名稱和描述(三)

描述

Products 表

問題

編寫 SQL 語句,從 Products 表中檢索產品名稱(prod_name)和描述(prod_desc),僅返回描述中同時出現 toy 和 carrots 的產品。有好幾種方法可以執行此操作,但對於這個挑戰題,請使用 AND 和兩個 LIKE 比較。

prod_name prod_desc
a0011 usb
a0019 iphone13
b0019 gucci t-shirts
c0019 gucci toy
d0019 lego carrots toy

示例結果

返回產品名稱和產品描述

prod_name prod_desc
d0019 lego carrots toy

示例

DROP TABLE IF EXISTS `Products`;
CREATE TABLE IF NOT EXISTS `Products` (
`prod_name` VARCHAR(255) NOT NULL COMMENT '產品 ID',
`prod_desc` VARCHAR(255) NOT NULL COMMENT '產品名稱'
);
INSERT INTO `Products` VALUES ('a0011','usb'),
('a0019','iphone13'),
('b0019','gucci t-shirts'),
('c0019','gucci toy'),
('d0019','lego carrots toy');

解答

題目中明確要求使用 LIKEAND 關鍵字,那麼可以將條件拆分為兩個模糊查詢,一個是描述中含有 toy 的產品,一個是描述中含有 carrots 的產品,然後利用關鍵字 AND 將兩個條件串聯就可以了。

SELECT prod_name, prod_desc FROM Products WHERE prod_desc LIKE '%toy%' AND prod_desc LIKE '%carrots%';

SQL19 檢索產品名稱和描述(四)

描述

Products 表

prod_name prod_desc
a0011 usb
a0019 iphone13
b0019 gucci t-shirts
c0019 gucci toy
d0019 lego toy carrots

問題

編寫 SQL 語句,從 Products 表中檢索產品名稱(prod_name)和描述(prod_desc),僅返回在描述中以先後順序同時出現 toy 和 carrots 的產品。提示:只需要用帶有三個 % 符號的 LIKE 即可。

示例結果

返回產品名稱和產品描述

prod_name prod_desc
d0019 lego toy carrots

示例

DROP TABLE IF EXISTS `Products`;
CREATE TABLE IF NOT EXISTS `Products` (
`prod_name` VARCHAR(255) NOT NULL COMMENT '產品 ID',
`prod_desc` VARCHAR(255) NOT NULL COMMENT '產品名稱'
);
INSERT INTO `Products` VALUES ('a0011','usb'),
('a0019','iphone13'),
('b0019','gucci t-shirts'),
('c0019','gucci toy'),
('d0019','lego toy carrots ');

解答

題目中已經進行了提示,要查詢產品描述中以先後順序同時出現 toycarrots 的產品,但沒有說他們兩者之間存在的字元以及 toy 前面和 carrots 後邊所包含的字元,那麼需要使用通配符 % ,得到最終的結果 %toy%carrots%

SELECT prod_name, prod_desc FROM Products WHERE prod_desc LIKE '%toy%carrots%';

SQL20 別名

描述

別名的常見用法是在檢索出的結果中重命名錶的列欄位(為了符合特定的報表要求或客戶需求)。有表 Vendors 代表供應商信息,vend_id 供應商 id、vend_name 供應商名稱、vend_address 供應商地址、vend_city 供應商城市。

vend_id vend_name vend_address vend_city
a001 tencent cloud address1 shenzhen
a002 huawei cloud address2 dongguan
a003 aliyun cloud address3 hangzhou
a003 netease cloud address4 guangzhou

問題

編寫 SQL 語句,從 Vendors 表中檢索 vend_id、vend_name、vend_address 和 vend_city,將 vend_name 重命名為 vname,將 vend_city 重命名為 vcity,將 vend_address 重命名為 vaddress,按供應商名稱對結果進行升序排序。

示例結果

返回 vend_id 供應商 id、vname 供應商名稱、vaddress 供應商地址、vcity 供應商城市。

vend_id vname vaddress vcity
a003 aliyun cloud address3 hangzhou
a002 huawei cloud address2 dongguan
a003 netease cloud address4 guangzhou
a001 tencent cloud address1 shenzhen

示例

DROP TABLE IF EXISTS `Vendors`;
CREATE TABLE IF NOT EXISTS `Vendors` (
  `vend_id` VARCHAR(255) NOT NULL COMMENT '供應商id',
  `vend_name` VARCHAR(255) NOT NULL COMMENT '供應商名稱',
  `vend_address` VARCHAR(255) NOT NULL COMMENT '供應商地址',
  `vend_city` VARCHAR(255) NOT NULL COMMENT '供應商城市'
);
INSERT INTO `Vendors` VALUES ('a001','tencent cloud','address1','shenzhen'),
('a002','huawei cloud','address2','dongguan'),
('a003','aliyun cloud','address3','alibaba');

解答

SQL 中,要對列取別名,需要用到關鍵字 AS,使用格式如下:

列名 AS 別名

通過對題目中的三個欄位取別名,然後使用 ORDER BY 關鍵字,按照供應商名稱列對結果進行升序排序。

SELECT vend_id, vend_name AS vname, vend_address AS vaddress, vend_city AS vcity FROM Vendors ORDER BY vend_name;

此外,AS 其實可要可不要,你也可以寫成以下的方式,在列名之後跟上別名即可,實現的效果和上面語句一致。

SELECT vend_id, vend_name vname, vend_address vaddress, vend_city vcity FROM Vendors ORDER BY vend_name;

SQL21 打折

描述

我們的示例商店正在進行打折促銷,所有產品均降價 10%。Products 表包含 prod_id產品 id、prod_price 產品價格

問題

編寫 SQL語句,從 Products 表中返回 prod_id、prod_price 和 sale_price。sale_price 是一個包含促銷價格的計算欄位。提示:可以乘以 0.9,得到原價的 90%(即 10%的折扣)

示例結果

返回產品 id prod_id、產品價格 prod_price、銷售價格 sale_price

prod_id prod_price sale_price
a0011 9.49 8.541
a0019 600 540
b0019 1000 900

示例解析

sale_price 的價格是 prod_price 的 90%

示例

DROP TABLE IF EXISTS `Products`;
CREATE TABLE IF NOT EXISTS `Products` (
`prod_id` VARCHAR(255) NOT NULL COMMENT '產品 ID',
`prod_price` DOUBLE NOT NULL COMMENT '產品價格'
);
INSERT INTO `Products` VALUES ('a0011',9.49),
('a0019',600),
('b0019',1000);

解答

此題考察了取別名以及如何在 SQL 中直接使用算數運算,sale_price 不是表中的數據,而是通過 prod_price 而來,所以需要通過關鍵字 AS 來進行取別名,最終的實現語句如下。

SELECT prod_id, prod_price, prod_price * 0.9 AS sale_price FROM Products;

SQL22 顧客登錄名

描述

我們的商店已經上線了,正在創建顧客賬戶。所有用戶都需要登錄名,預設登錄名是其名稱和所在城市的組合。

給出 Customers 表 如下:

cust_id cust_name cust_contact cust_city
a1 Andy Li Andy Li Oak Park
a2 Ben Liu Ben Liu Oak Park
a3 Tony Dai Tony Dai Oak Park
a4 Tom Chen Tom Chen Oak Park
a5 An Li An Li Oak Park
a6 Lee Chen Lee Chen Oak Park
a7 Hex Liu Hex Liu Oak Park

問題

編寫 SQL 語句,返回顧客 ID(cust_id)、顧客名稱(cust_name)和登錄名(user_login),其中登錄名全部為大寫字母,並由顧客聯繫人的前兩個字元(cust_contact)和其所在城市的前三個字元(cust_city)組成。提示:需要使用函數、拼接和別名。

示例結果

返回顧客 id cust_id,顧客名稱 cust_name,顧客登錄名 user_login

cust_id cust_name user_login
a1 Andy Li ANOAK
a2 Ben Liu BEOAK
a3 Tony Dai TOOAK
a4 Tom Chen TOOAK
a5 An Li ANOAK
a6 Lee Chen LEOAK
a7 Hex Liu HEOAK

示例解析

例如,登錄名是 ANOAK(Andy Li,居住在 Oak Park)

示例

DROP TABLE IF EXISTS `Customers`;
CREATE TABLE IF NOT EXISTS `Customers`(
	cust_id VARCHAR(255) NOT NULL COMMENT '客戶id',
	cust_name VARCHAR(255) NOT NULL COMMENT '客戶姓名',
	cust_contact VARCHAR(255) NOT NULL COMMENT '客戶聯繫人',
	cust_city VARCHAR(255) NOT NULL COMMENT '客戶城市'
);
INSERT `Customers` VALUES ('a1','Andy Li','Andy Li','Oak Park'),('a2','Ben Liu','Ben Liu','Oak Park'),('a3','Tony Dai','Tony Dai','Oak Park'),('a4','Tom Chen','Tom Chen','Oak Park'),('a5','An Li','An Li','Oak Park'),('a6','Lee Chen','Lee Chen','Oak Park'),('a7','Hex Liu','Hex Liu','Oak Park');

解答

根據題意以及示例結果,可以看到登錄名全是大寫,所以需要用到函數 upper(),然後需要將顧客聯繫人前兩個字元和所在城市的前三個字元相拼接,則需要用到函數 concat(),再接著就是需要從 cust_namecust_city 中截取字元串,則需要用到 substring(),最後則是通過將字元串拼接轉換之後取別名為 user_login,需要用到關鍵字 AS。以上提到的三個函數用法如下:

  • upper(字元串):將字元串中所有字元轉換為大寫。
  • substring(字元串, 起始位置, 截取的字元數),需要註意的是起始位置是從 1 開始的。
  • concat(字元串 1, 字元串 2, 字元串 3, …)
SELECT cust_id, cust_name, upper(concat(substring(cust_name, 1, 2), substring(cust_city, 1, 3))) AS user_login FROM Customers;

SQL23 返回 2020 年 1 月的所有訂單的訂單號和訂單日期

描述

Orders 訂單表

order_num order_date
a0001 2020-01-01 00:00:00
a0002 2020-01-02 00:00:00
a0003 2020-01-01 12:00:00
a0004 2020-02-01 00:00:00
a0005 2020-03-01 00:00:00

問題

編寫 SQL 語句,返回 2020 年 1 月的所有訂單的訂單號(order_num)和訂單日期(order_date),並按訂單日期升序排序

【示例結果】

返回訂單號 order_num,和 order_date 訂單時間

order_num order_date
a0001 2020-01-01 00:00:00
a0003 2020-01-01 12:00:00
a0002 2020-01-02 00:00:00

示例解析

a0001、a0002、a0003 時間屬於 2020 年 1 月

示例

DROP TABLE IF EXISTS `Orders`;
CREATE TABLE IF NOT EXISTS `Orders`(
	order_num VARCHAR(255) NOT NULL COMMENT '訂單號',
	order_date TIMESTAMP NOT NULL COMMENT '訂單日期'
);
INSERT `Orders` VALUES ('a0001','2020-01-01 00:00:00'),
('a0002','2020-01-02 00:00:00'),
('a0003','2020-01-01 12:00:00'),
('a0004','2020-02-01 00:00:00'),
('a0005','2020-03-01 00:00:00');

解答

其實我們依然可以將本題看做模糊查詢,只要訂單日期滿足對應條件即可,可以使用關鍵字 WHERE … LIKE … 來實現。

SELECT order_num, order_date FROM Orders WHERE order_date LIKE '2020-01%' ORDER BY order_date;

此外,SQL 中也提供了對於日期的操作函數 date_format(),用於返回日期的一部分。

SELECT order_num, order_date FROM Orders WHERE date_format(order_date, '%Y-%m') = '2020-01' ORDER BY order_date;

另外,我們還可以單獨提取出日期中的年份和月份,然後將兩個條件串聯,篩選出同時滿足兩個條件的數據。

SELECT order_num, order_date FROM Orders WHERE year(order_date) = 2020 AND month(order_date) = 1 ORDER BY order_date;

SQL24 確定已售出產品的總數

描述

OrderItems 表代表售出的產品,quantity 代表售出商品數量。

quantity
10
100
1000
10001
2
15

問題

編寫 SQL 語句,確定已售出產品的總數。

示例結果

返回 items_ordered 列名,表示已售出商品的總數。

items_ordered
11128

示例

DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(
	quantity INT(16) NOT NULL COMMENT '商品數量'
);
INSERT `OrderItems` VALUES (10),(100),(1000),(10001),(2),(15);

解答

考察求和函數以及取別名兩個知識點,取別名需要關鍵字 AS,而且可要可不要。

而求和函數則是 SUM(列名) ,它會統計列中所有記錄的綜合。

SELECT SUM(quantity) items_ordered FROM OrderItems;

SQL25 確定已售出產品項 BR01 的總數

描述

OrderItems 表代表售出的產品,quantity 代表售出商品數量,產品項為 prod_id。

quantity prod_id
10 AR01
100 AR10
1000 BR01
10001 BR010

問題

修改創建的語句,確定已售出產品項(prod_id)為 "BR01" 的總數。

示例結果

返回商品項已訂購訂單數

items_ordered
1000

示例解析

已訂購商品 BR01 的數量 quantity 為 1000。

示例

DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(
	quantity INT(16) NOT NULL COMMENT '商品數量',
	prod_id VARCHAR(255) NOT NULL COMMENT '商品項'
);
INSERT `OrderItems` VALUES (10,'AR01'),(100,'AR10'),(1000,'BR01'),(10001,'BR010');

解答

主要考察的知識點:

  • 求和函數:SUM()
  • 取別名:AS
  • 條件查詢:WHERE

需要註意的是 SQL 語句中關鍵字的先後順序,否則可能會導致語句出錯。

SELECT SUM(quantity) AS items_ordered FROM OrderItems WHERE prod_id = 'BR01';

SQL26 確定 Products 表中價格不超過 10 美元的最貴產品的價格

描述

Products 表

prod_price
9.49
600
1000

問題

編寫 SQL 語句,確定 Products 表中價格不超過 10 美元的最貴產品的價格(prod_price)。將計算所得的欄位命名為 max_price。

示例結果

返回 max_price

max_price
9.49

示例解析

返回十元以下最高價格 max_price。

示例

DROP TABLE IF EXISTS `Products`;
CREATE TABLE IF NOT EXISTS `Products` (
`prod_price` DOUBLE NOT NULL COMMENT '產品價格'
);
INSERT INTO `Products` VALUES (9.49),
(600),
(1000);

解答

考察知識點:

  • 條件查詢:使用關鍵字 WHERE,將產品價格不超過 10 美元的產品篩選出來。
  • MAX(列名):找出列中的最大值。
  • 取別名:通過關鍵字 AS 將不超過 10 美元的產品中價格最高的記錄篩選出來後重命名。
SELECT MAX(prod_price) AS max_price FROM Products WHERE prod_price <= 10;

SQL27 返回每個訂單號各有多少行數

描述

OrderItems 表包含每個訂單的每個產品

order_num
a002
a002
a002
a004
a007

問題

編寫 SQL 語句,返回每個訂單號(order_num)各有多少行數(order_lines),並按 order_lines 對結果進行升序排序。

示例結果

返回訂單號 order_num 和對應訂單號的行數 order_lines

order_num order_lines
a004 1
a007 1
a002 3

示例解析

訂單號 a002 有 3 行訂單記錄也是最多的訂單號故排在最後一位返回,相同訂單行數的訂單無需過多處理。

示例

DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(
	order_num VARCHAR(255) NOT NULL COMMENT '商品訂單號'
);
INSERT `OrderItems` VALUES ('a002'),('a002'),('a002'),('a004'),('a007');

解答

考察知識點:

  • COUNT(列名):返回指定列的值的數目。
  • AS:取別名。
  • GROUP BY:根據指定列或者表達式的值將行進行分組。
  • ORDER BY:根據尾隨的列名進行排序,ASC 表示正序,也是預設排序,DESC 表示倒序。
SELECT order_num, COUNT(order_num) AS order_lines FROM OrderItems GROUP BY order_num ORDER BY order_lines;

SQL28 每個供應商成本最低的產品

描述

有Products表,含有欄位prod_price代表產品價格,vend_id代表供應商id

vend_id prod_price
a0011 100
a0019 0.1
b0019 1000
b0019 6980
b0019 20

問題

編寫 SQL 語句,返回名為 cheapest_item 的欄位,該欄位包含每個供應商成本最低的產品(使用 Products 表中的 prod_price),然後從最低成本到最高成本對結果進行升序排序。

示例結果

返回供應商 id vend_id 和對應供應商成本最低的產品 cheapest_item。

vend_id cheapest_item
a0019 0.1
b0019 20
a0011 100

示例解析

例如 b0019 成本最低的價格是 20,且最後根據成本價格排序返回依次是 a0019、b0019、a0011。

示例

DROP TABLE IF EXISTS `Products`;
CREATE TABLE IF NOT EXISTS `Products` (
`vend_id` VARCHAR(255) NOT NULL COMMENT '供應商ID',
`prod_price` DOUBLE NOT NULL COMMENT '產品價格'
);
INSERT INTO `Products` VALUES ('a0011',100),
('a0019',0.1),
('b0019',1000),
('b0019',6980),
('b0019',20);

解答

要找出各個供應商中成本最低的產品,則需要通過關鍵字 GROUP BY 來進行分組,然後藉助函數 MIN() 找出 prod_price 中最小的值,接著取別名為 cheapest_item,最後則是按照找出的各供應商中的成本最低產品 cheapest_item 利用關鍵字 ORDER BY 進行升序排序。

SELECT vend_id, MIN(prod_price) AS cheapest_item FROM Products GROUP BY vend_id ORDER BY cheapest_item;

SQL29 返回訂單數量總和不小於100的所有訂單的訂單號

描述

OrderItems 代表訂單商品表,包括:訂單號order_num 和訂單數量 quantity。

order_num quantity
a1 105
a2 1100
a2 200
a4 1121
a5 10
a2 19
a7 5

問題

請編寫 SQL 語句,返回訂單數量總和不小於 100 的所有訂單號,最後結果按照訂單號升序排序。

示例結果

返回 order_num 訂單號。

order_num
a1
a2
a4

示例解析

訂單號 a1、a2、a4 的 quantity 總和都大於等於 100,按順序為 a1、a2、a4。

示例

DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(
	order_num VARCHAR(255) NOT NULL COMMENT '商品訂單號',
	quantity INT(255) NOT NULL COMMENT '商品數量'
);
INSERT `OrderItems` VALUES ('a1',105),('a2',200),('a4',1121),('a5',10),('a7',5);

解答

條件查詢,只是此時不再是過濾指定的行,而是需要過濾分組,所以這個時候不能再使用關鍵字 WHERE,而是需要使用到關鍵字 HAVING,它通常是和關鍵字 GROUP BY 連用。另外需要註意的是各個關鍵字之間的先後順序,先是 GROUP BY,緊接著是 HAVING,最後才是 ORDER BY

SELECT order_num FROM OrderItems GROUP BY order_num HAVING SUM(quantity) >= 100 ORDER BY order_num;

SQL30 計算總和

描述

OrderItems表代表訂單信息,包括欄位:訂單號 order_num 和 item_price 商品售出價格、quantity 商品數量。

order_num item_price quantity
a1 10 105
a2 1 1100
a2 1 200
a4 2 1121
a5 5 10
a2 1 19
a7 7 5

問題

編寫 SQL 語句,根據訂單號聚合,返回訂單總價不小於 1000 的所有訂單號,最後的結果按訂單號進行升序排序。

提示:總價 = item_price 乘以 quantity

示例結果

order_num total_price
a1 1050
a2 1319
a4 2242

示例

DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(
	order_num VARCHAR(255) NOT NULL COMMENT '商品訂單號',
	item_price INT(16) NOT NULL COMMENT '售出價格',
	quantity INT(16) NOT NULL COMMENT '商品數量'
);
INSERT `OrderItems` VALUES ('a1',10,105),('a2',1,1100),('a2',1,200),('a4',2,1121),('a5',5,10),('a2',1,19),('a7',7,5);

解答

以上幾題都已經將知識點講過了,這題只是綜合運用,主要涉及如下:

  • SUM():對同一產品的總價求和。
  • AS:取別名。
  • GROUP BY:按照列進行分組。
  • HAVING:與 GROUP BY 聯合使用從而實現條件過濾。
  • ORDER BY:按列進行排序。
SELECT order_num, SUM(item_price * quantity) AS total_price FROM OrderItems GROUP BY order_num HAVING total_price >= 1000 ORDER BY order_num;

SQL31 糾錯3

描述

OrderItems 表含有 order_num 訂單號

order_num
a002
a002
a002
a004
a007

問題

將下麵代碼修改正確後執行

SELECT order_num, COUNT(*) AS items 
FROM OrderItems 
GROUP BY items 
HAVING COUNT(*) >= 3 
ORDER BY items, order_num;

示例結果

返回訂單號 order_num 和出現的次數 items

order_num items
a002 3

示例解析

由於訂單號 a002 出現了三次,所以返回3

示例

DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(
	order_num VARCHAR(255) NOT NULL COMMENT '商品訂單號'
);
INSERT `OrderItems` VALUES ('a002'),('a002'),('a002'),('a004'),('a007');

解答

最主要的錯誤在於 GROUP BY 後邊跟著的是統計結果,其次在於 HAVING 後邊的 COUNT() 其實是可以不用再次計算的,可以直接利用已經統計出的結果。第二處不算錯誤,但是改了之後能提高 SQL 語句所執行的效率。

SELECT order_num, COUNT(*) AS items FROM OrderItems GROUP BY order_num HAVING COUNT(*) >= 3 ORDER BY items, order_num;
SELECT order_num, COUNT(*) AS items FROM OrderItems GROUP BY order_num HAVING items >= 3 ORDER BY items, order_num;

SQL32 返回購買價格為 10 美元或以上產品的顧客列表

描述

OrderItems 表示訂單商品表,含有欄位訂單號:order_num、訂單價格:item_price;Orders 表代表訂單信息表,含有顧客 id:cust_id 和訂單號:order_num

OrderItems 表

order_num item_price
a1 10
a2 1
a2 1
a4 2
a5 5
a2 1
a7 7

Orders表

<
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大家好,我是god23bin。歡迎來到《**一分鐘學一個 Linux 命令**》系列,今天需要你花兩分鐘時間來學習下,因為今天要講的是兩個命令,`mv` 和 `cp` 命令。 ...
  • # CentOS7 本地光碟鏡像rpm包 ## 一、前言 > rpm包的下載方式 > > - 通過本地光碟鏡像下載rpm,centos7.iso鏡像文件,內置了絕大多數軟體的rpm包(本文章即演示如何配置本地rpm) > > - 線上下載rpm包,有很多軟體的官網,以及第三方軟體倉庫,會提供下載功能 ...
  • 基本語法格式: Location block 的基本語法形式是: location [=|~|~*|^~|@] pattern { ... } [=|~|~*|^~|@] 被稱作 location modifier ,這會定義 Nginx 如何去匹配其後的 pattern ,以及該 pattern ...
  • MCU:STM32F429ZIT6 開發環境:STM32CubeMX+MDK5 外購了一個SPI介面的SD Card模塊,想要實現SD卡存儲數據的功能。 首先需要打開STM32CubeMX工具。輸入開發板MCU對應型號,找到開發板對應封裝的MCU型號,雙擊打開(圖中第三)。 此時,雙擊完後會關閉此界 ...
  • MCU:STM32F103VET6 開發環境:STM32CubeMX+MDK5 實現USB的虛擬串口不需要去理解USB的底層驅動,只需要STM32CubeMX去配置生成工程即可。在野火的指南者中,是沒有這一類的視頻和示例的,博主使用這款開發板實現USB虛擬串口。 首先需要打開STM32CubeMX工 ...
  • ## 前言 本篇文章主要介紹的關於本人從剛工作到現在使用Sql一些使用方法和經驗,從最基本的SQL函數使用,到一些場景的業務場景SQL編寫。 ## SQL基礎函數使用 ### 1.欄位轉換 CASE WHEN 意義: If(a==b) a=c; 用法: 1, CASE 欄位 WHEN 欄位結果1 T ...
  • [TOC] ## 概述 Hive查看執行計劃的命令中還有兩個不怎麼常用但很重要的命令,接下來詳細介紹一下。 有一個問題:**如何在hiveSQL執行之前就探查到這段邏輯的血緣依賴關係?** hive血緣是很多生產級數倉必須要提供的功能,大多數解決方案都是**使用hive hooks的方法通過SQL執 ...
  • # 基本概念 ## 簡介 Kafka 最初是由 LinkedIn 即領英公司基於 Scala 和 Java 語言開發的分散式消息發佈-訂閱系統,現已捐獻給Apache 軟體基金會。其具有高吞吐、低延遲的特性,許多大數據實時流式處理系統比如 Storm、Spark、Flink等都能很好地與之集成。 總 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...
order_num cust_id
a1 cust10
a2 cust1
a2