本文基于Mosh Hamedani 的SQL教學視訊,傳送門av71348135,視訊中用到的sql執行檔案在這裡cfk3 。那麼,我們就開始吧。(持續更新中)
1.The SELECT Statement
目标:查找sql_store資料庫的顧客表,要求按顧客名的字典序輸出顧客編号為1的顧客記錄
USE sql_store;
SELECT *
FROM customers
WHERE customer_id=1
ORDER BY first_name
注意:代碼第1行末尾的分号不能丢,否則無法執行,還要留意SELECT,WHERE,ORDER BY的先後順序。
2.The SELECT Clause
目标:查找顧客表,要求輸出顧客的姓、名、積分、折現系數,其中折現系數=(積分+10)*100
SELECT
first_name,
last_name,
points,
(points+10)*100 AS 'discount factor'
--DISTINCT state
注意:查找的各列之間用逗号隔開,建立的列要及時用AS命名,英文字母串要加單引号。代碼第6行以--開頭,這是SQL中注釋的标準寫法。取消注釋後,第6行代碼的意思是輸出顧客表中不同州的名稱。
3.The WHERE Clause
目标:查找訂單表,要求輸出2019年的所有訂單記錄
SELECT*
FROM orders
WHERE order_date>='2019-01-01'
注意:日期的格式要規範,即按照year-month-date的格式書寫,且加單引号。常用的比較符号有=, >, <, >=, <=, != 和<>,最後兩個符号表示的都是不等于。
4.The AND, OR, and NOT Operators
目标:查找顧客表,要求輸出出生在1990年1月1日後,或者積分大于1000的顧客記錄
WHERE birth_date>'1990-01-01' OR points>1000
--WHERE NOT(birth_date<='1990-01-01'AND points<=1000)
注意:為了保證邏輯正确,要适當添加括号,第4行在邏輯上與第3行是等同的。
5.The IN Operator
目标:查找顧客表,要求輸出位于弗吉尼亞州、佛羅裡達州或者佐治亞州的顧客記錄
WHERE state IN('VA','FL','GA')
6.The BETWEEN Operator
目标:查找顧客表,要求輸出在1990年1月1日和2000年1月1日之間出生的顧客記錄(包含端點)
WHERE birth_date BETWEEN '1990-01-01' AND '2000-01-01'
--WHERE birth_date >='1990-01-01' AND birth_date<='2000-01-01'
注意:在MYSQL的文法中,BETWEEN AND語句是包含端點的,不包含
QQ賬号購買平台端點的情形可按照第4行注釋來改寫。
7.The LIKE Operator
目标:查找顧客表,要求輸出位址包含TRAIL或AVENUE的顧客記錄
WHERE address LIKE '%TRAIL%' OR
address LIKE '%AVENUE%'
--% any number of characters
--_single character
注意:占位符%可表示任意長度的字母,而_表示一個字母。
8.The REGEXP Operator
目标:查找顧客表,要求輸出 1.姓ELKA或AMBUR的顧客 2.名以EY或ON結尾的顧客 3.名以MY開頭并且包含SE的顧客 4.名中包含B,且B之後是R或U(多行輸出寫在注釋裡)
WHERE first_name REGEXP 'elka|ambur'
--WHERE last_name REGEXP 'ey$|on$'
--WHERE last_name REGEXP '^my|se'
--WHERE last_name REGEXP 'b[ru]'
--^ beginning
--$ end
--| logical or
--[abcd]
--[a-h]