天天看點

SQL學習筆記

本文基于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]