sql的加减乘除运算_小白学sql(一)
最近在b站學習sql,在這里做筆記。感興趣的同學可以一起學習呀~
1. 基本介紹
sql_store是一個數據庫,而customers是數據庫中的一個表格。
1.1 如何選擇一個數據庫
最簡單的操作就是雙擊圖中的數據庫,另一種方式是輸入命令:
use sql_store;注:顯示為粗體的數據庫為當前選定的數據庫;輸入命令調用數據庫需要用“;”結束命令。
1.2 如何選擇一個表格
在選定數據庫后,需要選擇特定的表格:
(1)選擇表格所有的列
selcet * from customers(2)選擇表格特定的列
例如,選擇客戶的id以及姓氏的兩列:
select customer_id, first_name from customers1.3 如何選定特定條件的行
在選定表格之后,選擇客戶id為1的行:
where customer_id = 11.4 如何排序
例如,選定表格后,按照姓氏排序
order by first_name1.5 如何寫注釋
只需要"-- "
-- where customer_id = 11.6 語法順序
select * from customers where customer_id = 1 order by first_name最好的邏輯順序是select-from-where-order by
注:上述四行命令可以寫成一行,只需要用空格隔開,但分成四行更清晰直觀
2. select語句
select語句是用于調用所選表格的特定的列,因為數據庫的數據可能成千上萬,如果我們調用無關的列,將會浪費運行的時間和空間。
2.1 命令行排序決定輸出的排序
例如:
select first_name, last_name, points from customers返回結果如下
若將姓氏與名字調換順序,則
select last_name, first_name, points from customers返回結果如下
2.2 對列進行算術運算
例如我們需要得到“用戶積分×10+100”的列
select last_name, first_name, points,points * 10 + 100 from customers結果如下
注:選擇的四列也可寫成一行
(1)加減乘除基本運算
select last_name, first_name, points,points + 10,points - 10,points * 10,points / 10,points % 10 from customers(2)運算順序
對列進行算術運算,優先進行乘除,再進行加減。但我們可以用括號改變運算順序
select points,(points + 10) * 100 from customers2.3 為新的列命名
上述產生的新的列的列名沒有表達明確的意義,我們可以為新列重新命名
select last_name,first_name,points,(points + 10) * 100 as discount_factor from customers“as”語法可以為新的列命名,結果如下
如果我們希望列名中包含空格,我們可以用如下的命令
select last_name,first_name,points,(points + 10) * 100 as 'discount factor' from customers結果如下
2.4 顯示一列中不同值
例如客戶來自不同的州,我們想要知道哪些州有我們的客戶,即不查看重復值。
我們發現有重復的州
select state from customers我們想要查看非重復的,只需要加入“distinct”語法
select distinct state from customers2.5 小結
在select語句中, 我們可以:
(1)用 * 來選擇所有的列,
(2)輸入列名選擇特定的列,
(3)運用算術運算獲得新的列,
(4)用 as 給列重新命名,
(5)用distinct獲得無重復值的結果。
【小練習】
選擇products表格中的產品的名字,單位價格以及新的價格,新的價格需要自己創建,它是單位價格的1.1倍。
答案可以在評論區查看噢~
3. where語句
where語句是用于調用滿足特定條件的行,在這一節的例子中我們仍舊采用sql_store的數據庫中customers表格的數據。
以下是常用的符號
如果所需要篩選的條件是字符串,需要用引號括起來。
例如,我們需要調取生活在弗吉尼亞州的客戶的所有數據:
select * from customers where state = 'VA'注:使用小寫的va也是可以的
如果所需要篩選的條件是日期,也是只需要用引號括起來。
例如,我們需要調取1990年及以后出生的客戶的所有數據:
select * from customers where birth_date > '1990-01-01'3.1. and,or以及not語句
如果我們調用滿足多種條件的數據,我們需要使用邏輯運算符號and,or和not。
select * from customers where birth_date > '1990-01-01' or points > 1000 and state = 'VA'請問最后一行代碼是篩選出生于1990年及以后或積分大于1000的客戶,且在滿足前面兩種情況的同時,必須滿足顧客生活在弗吉尼亞州;還是篩選出生于1990年及以后的顧客或積分大于1000且生活在弗吉尼亞州的顧客呢?
答案是后者,因為and運算符號具有更高的優先級。雖然如此,但加上括號可以使得命令更清晰明。
3.2 in語句
如果我們需要找生活中特定幾個州的顧客,運用上一節的知識,我們可以這樣寫:
select * from customers where state = 'VA' or state = 'GA' or state = 'FL'但是我們不能寫成如下形式:
select * from customers where state = 'VA' or 'GA' or 'FL'or語句只能并列多個條件,而‘GA’和‘FL’只是字符串,state = ‘VA’則是一個布爾值,因此這行命令是錯誤的。
如果or語句并列的條件是對于同一列的值進行判斷,則可以用in語句來簡化命令:
select * from customers where state in ('VA','FL','GA')我們可以對in語句使用not邏輯運算:
select * from customers where state not in ('VA','FL','GA')3.3 between語句
當我們需要調用積分在1000到3000的顧客的信息,我們可以使用and邏輯運算符號:
select * from customers where points >= 1000 and points <= 3000當我們需要選取一定范圍內的數值時,我們可以用between來簡化命令:
select * from customers where points between 1000 and 3000【小練習】
我們需要調用出生日期在1990年至2000年之間的顧客的信息。
3.4 like語句
當我們想要調用具有特定字符串的顧客的信息時,我們可以用like語句。
例如,我們需要調用姓氏以b開頭的客戶:
select * from customers where last_name like 'b%'注:b可以用多個字符串代替,如abc;數字也可以使用,當然是對于電話號碼之類的
%-代表多個字符串
_-代表一個字符串
3.5 regexp語句
like的使用范圍有限,類似于python中的正則表達式,在mysql中也有類似的正則表達式。
| 'b%' | '^b' |
| '%b' | 'b$' |
| '%b%' | 'b' |
正則表達式對于滿足多種條件的查詢非常方便。
例如:
select * from customers where last_name regexp 'field|mac|rose'雖然這并不是正則表達的所有內容,但是以上語法足夠適用于日常生活。
【小練習】
- 選擇用戶的名字含有ELKA或者AMBUR的
- 選擇用戶的姓氏以EY或者ON結尾的
- 選擇用戶的姓氏以MY開始或者包含SE的
- 選擇用戶的姓氏包含BR或者BU的
3.6 is null語句
查詢某列值為空值的行
select * from customers -- 查詢電話信息為空的行 where phone is null -- 不為空值則使用 where phone is not null -- 注:這兩行命令只能執行其中一個,否則報錯3.7 小結
注:日期和字符串一樣,引用時需要用括號括起來,但是在篩選日期區間時,與數字區間一樣使用between語句。
4. order by語句
4.1 查看排序的依據
目前顧客表格customers是根據customer_id排序的
怎么知道是按照customer_id排序的呢?
我們可以點擊左欄中小工具圖標后,出現以下內容
列名中有黃色標志的列為默認排序所依據的列,一般此類列具有可識別性,例如你的學號,在學校不會有人與你的學號重復,那么我們就可以用學號來代替每一個人并且不會一個學號對應兩個人的情況。
如果我們希望表格按名字字母排序:
select * from customers order by first_name -- 注:一定要選擇數據庫,類似于use sql_store4.2 倒序
如果我們希望按名字字母倒序排序(若數字,則變成從大到小):
order by first_name desc4.3 多重排序
若要進行多重排序,則按照順序依次寫在order by后面:
order by state desc, first_name desc該命令指:先根據state的倒敘排序,在state相同的情況下再根據first_name的倒敘排序
4.4 所選擇的列與排序所依據的列的關系
即使我們所選擇的列中并不包含排序依據的列,但也是行得通的
-- 按照州的名稱排序后選擇city的信息 select city from customers order by state我們也可以根據新建的列進行排序
-- 根據新建的列排序,再根據first_name select first_name, 10 as points from customers order by points, first_name一種簡便的排序方式
select birth_date, first_name, last_name, 10 as points from customers order by 1, 2該命令會根據所選的第一列和第二列依次進行排序,但這種排序的缺點是如果所選的列的先后順序改變,則排序規則也會改變
注:select *也可以使用這種簡便的方法噢。
4.5 根據運算結果排序
我們可以根據列表進行運算后的結果排序
對于order_items表格,如果我們需要對order_id為2的訂單根據總價格(列表中沒有)從低到高排序。
select * from order_items where order_id = 2 order by quantity * unit_price desc4.6 小結
5. limit語句
之前我們學習的都是根據列的信息進行篩選,如果我們需要選擇特定行,例如我們選擇列表前三行的數據,可以執行這樣的命令:
select * from customers limit 3如果我們需要第六行開始的三行數據,則
select * from customers limit 6, 3學習了這些基本語法后,就是最基礎的sql入門啦~
語法結構必須按照以下順序:select, from, where, order by, limit
總結
以上是生活随笔為你收集整理的sql的加减乘除运算_小白学sql(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: go channel 缓冲区最大限制_[
- 下一篇: .bat文件该图标_电脑桌面图标变成白色