南昌有限公司 網(wǎng)站灰色詞排名代做
緒論?
每日激勵:挫折是會讓我們變得越來越強大的重點是我們敢于積極的面對它?!狫ack叔叔
緒論?:
本章是表操作的進階篇章(沒看過入門的這里是傳送門,本章將帶你進階的去學(xué)習(xí)表的插入insert和查找select,本質(zhì)也就是學(xué)他們后面所帶的一些附加條件(具體請看目錄),通過這些條件去更好的插入和查找你所需要的數(shù)據(jù)。本章是上篇(全文8000字),下篇將寫道修改和刪除,將快速更新敬請期待。
————————
早關(guān)注不迷路,話不多說安全帶系好,發(fā)車?yán)?#xff08;建議電腦觀看)。
表的增刪查改
CURD是一個數(shù)據(jù)庫技術(shù)中的縮寫詞,一般的項目開發(fā)的各種參數(shù)的基本功能都是CURD。作用是用于處理數(shù)據(jù)的基本原子操作。(源百度百科)
CURD:
- Create(創(chuàng)建)、
- Retrieve(讀取)、
- Update(更新)、
- Delete(刪除)
1. Create插入數(shù)據(jù)(Insert細節(jié)操作)
INSERT [INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)] ...
直接通過實例來學(xué)習(xí):
先創(chuàng)建一個學(xué)生表(后續(xù)在學(xué)生表上進行操作)
1.1 單行數(shù)據(jù)插入:
- 主要需要理解的結(jié)構(gòu):
(需要插入的屬性列) values(對應(yīng)的值)
insert into students (插入中:into可省略,students就是要插入的表名) - 當(dāng)values右邊列屬性不寫,就是一次性插入所有屬性(全列插入)
1.2 多行插入:
也很簡單直接在插入的數(shù)據(jù) 用逗號分隔 連續(xù)插入(具體如下圖)
同樣能指定列插入,這里就不過訴了。
1.3 沖突時同步更新:
當(dāng)插入數(shù)據(jù)時可能會有主鍵、唯一鍵沖突…等情況,假如直接插入會直接報錯。
那么現(xiàn)在可以通過添加一些語法,讓當(dāng)有沖突(即已存在該數(shù)據(jù))時,對沖突進行處理,讓即使有問題也能插入,而不是直接報錯。
語法:
on duplicate key update
例如:
下述插入許攸的情況,若直接插入,因為主機沖突的情況無法直接插入新的值。
那么我們使用(原SQL)on duplicate key update (更新SQL)這樣就能插入,并且修改即使存在也會將他修改為新的
下面再看具體語法:
在插入語句后面添加:
INSERT ...... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...-- 0 row affected: 表中有沖突數(shù)據(jù),但沖突數(shù)據(jù)的值和 update 的值相等
-- 1 row affected: 表中沒有沖突數(shù)據(jù),數(shù)據(jù)被插入
-- 2 row affected: 表中有沖突數(shù)據(jù),并且數(shù)據(jù)已經(jīng)被更新select ROW_COUNT()-- 獲取受影響函數(shù)
1.4 沖突時同步替換:
語法:
-- 主鍵 或者 唯一鍵 沒有沖突,則直接插入;
-- 主鍵 或者 唯一鍵 如果沖突,則刪除后再插入
replace into students (sn, name) VALUES (20001, '曹阿瞞');
Query OK, 2 rows affected (0.00 sec)-- 1 row affected: 表中沒有沖突數(shù)據(jù),數(shù)據(jù)被插入
-- 2 row affected: 表中有沖突數(shù)據(jù),刪除后重新插入
實例:
當(dāng)插入沖突時,會直接進行替換(此時就會顯示2行影響行數(shù)),注意此處是刪除后再插入(id會改變)
具體如下圖:
2. Retireve讀取數(shù)據(jù)(Select細節(jié)操作)
語法:
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...
同樣是用實例來學(xué)習(xí):
創(chuàng)建表并插入數(shù)據(jù):
2.1 全列查詢
通常情況下不建議使用 * 進行全列查詢
1. 查詢的列越多,意味著需要傳輸?shù)臄?shù)據(jù)量越大;
2. 可能會影響到索引的使用。(索引待后面課程講解)
語法:
SELECT * FROM exam_result;
之前講寫了就不過訴了!
2.2 指定列查詢
-- 指定列的順序不需要按定義表的順序來
和插入時類似在前面加上要查詢的列名稱,不同的是此時變成了FROM
SELECT id, name, english FROM exam_result;
2.3 查詢字段為表達式
在select 后可以添加表達式,將會在查詢結(jié)果中帶上表達式結(jié)果。
表達式不包含字段時:
SELECT id, name, 10 FROM exam_result;
發(fā)現(xiàn)將會直接打印10(其實代表的是該表達式的計算結(jié)果)
查詢有字段的表達式時:
并且還能通過as進行重命名:
如求一行中的成績總和
其中as可以省略:
2.4 結(jié)果去重 DISTINCT
SELECT DISTINCT math FROM exam_result
很簡單就是將查詢到的重復(fù)數(shù)據(jù)只見一行。
2.5 where條件
比較運算符:
運算符 | 說明 |
---|---|
> , >=, <, <= | 大于,大于等于,小于,小于等于 |
= | 等于,只能用于數(shù)值的比較,NULL 不安全(不能比較),例如 NULL = NULL 的結(jié)果是 NULL |
<=> | 等于,NULL 安全,例如 NULL <=> NULL 的結(jié)果是 TRUE(1) |
!=, <> | 不等于NULL 不安全 |
BETWEEN a0 AND a1 | 范圍匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) |
IN (option, …) | 如果是 option 中的任意一個,返回 TRUE(1) |
IS NULL | 是 NULL |
IS NOT NULL | 不是 NULL |
LIKE 模糊匹配 | % 表示任意多個(包括 0 個)任意字符;_ 表示任意一個字符 |
附:
=號,不能用于比較NULL值,比較NULL值需要使用<=>
具體如下:
當(dāng)直接用 = 進行比較時比較后會為NULL、的使用<=>這樣就能正常比較
邏輯運算符:
運算符 | 說明 |
---|---|
AND | 多個條件必須都為 TRUE(1),結(jié)果才是 TRUE(1) |
OR | 任意一個條件為 TRUE(1), 結(jié)果為 TRUE(1) |
NOT | 條件為 TRUE(1),結(jié)果為 FALSE(0 |
實例:
比較運算符
- 找英語成績不合格的人:
between運算符的使用
- 語文成績在 80 ~ 90 分的同學(xué)和成績
上述和使用between a1 and a2 (a1 ~ a2)一樣,但between更方便。
in運算符的使用
in:如果是 option 中的任意一個,返回 TRUE(1)
- 取出數(shù)學(xué)成績 58 或 59 或 98或99 的同學(xué)和成績
可以直接使用 or
也可以使用 math in(58,59,…)
like模糊查詢
使用 like:
%
表示模糊查詢后面任意多個(包括 0 個)任意字符;_
表示模糊查詢后面任意一個字符
- 查詢孫某某(使用%,因為不確定其后面有幾個字)
若寫成_(就只能查孫某):
where后面能使用表達式(和字段)
- 語文好于英語成績
- 總分在200以下的同學(xué)
注意其中不能在where后面使用as重命名的變量,這是因為在select中是where是先執(zhí)行的,然后才到篩選列,所以也就是as還未定義,無法使用。
具體執(zhí)行順序:- from(先找表)
- where(篩選條件),
- select(查找的列屬性)
所以因為先where,才到列屬性,所以重命名是不能使用的(列屬性處還未被定義,就不能在where中使用了)
not運算符
-
尋找語文成績大于80且不姓孫
-
是孫某同學(xué),否則要求總成績 > 200 并且 語文成績 < 數(shù)學(xué)成績 并且 英語成績 > 80
- 要么是孫某
- 否則:要求總成績 > 200 and 語文 < 數(shù)學(xué) and 英語 > 80
- 可先把后面一長串的內(nèi)容先寫 然后 再去加上前面的孫某
NULL的查詢
重新新建一個表test:
- 查詢NULL
- 查詢不為空
- NULL不參與比較運算,要比較只能使用<=> 、<>
2.6 order by語句(結(jié)果排序)
- ASC 為升序(Ascending)(從小到大)
- DESC 為降序(Descending)(從大到小)
- 默認為 ASC
- 沒有order by子句的查詢,返回的順序是未定義的,永遠不要依賴這個順序
語法:
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
實操:
ASC升序:
- 按數(shù)學(xué)成績升序顯示
- 降序desc
NULL值在排序中,默認設(shè)置為比任何值都要小
多字段排序,排序優(yōu)先級隨書寫順序
具體理解如下:
查詢同學(xué)各門成績,依次按 數(shù)學(xué)降序,英語降序,語文升序的方式顯示
上圖中先按數(shù)學(xué)降序(數(shù)學(xué)寫在英語前面),當(dāng)數(shù)學(xué)相等時才按英語降序,最后才考慮寫到最后的語文
建議就是向上圖一樣,將排序的 方式全部列全出來,不要去使用MySQL默認的情況(無法掌控)
order by默認升序
可以在order by 中使用前面的as別名
因為在order by中需要對數(shù)據(jù)進行排序,一定要先有適合的數(shù)據(jù)才排序(所以他是先執(zhí)行前面的列屬性篩選那么它就能排序)
2.7 limit的使用(篩選分頁結(jié)果)
- 直接在select后面加上limit表示需要的行數(shù)(從開始到第n行)
- 當(dāng)limit 還能從 指定位置開始,讀取連續(xù)個數(shù)(pos,len)(并且注意:開始位置是從0開始的)
如下圖:從第一個開始讀,3個
- 在limit讀取行數(shù)的前提下,還能通過offset設(shè)置開始的行數(shù)(同樣是從0開始)
建議對未知表查詢時,對limit限制為1,防止數(shù)據(jù)過大
limit的作用,類似于網(wǎng)頁中常見的頁面的1、2、3、4 。。。分頁顯示數(shù)據(jù)。
如下圖:
limit的執(zhí)行階段會更加靠后,因為只有最后將所有數(shù)據(jù)都準(zhǔn)備好了,才到最終的顯示,而limit的本質(zhì)功能也就是顯示,所以將排到最后。
結(jié)合上面多個讀取數(shù)據(jù)的方法實例:
獲取班級第一(如下圖):
SELECT name, (english + math + chinese) AS total
FROM exam_result
WHERE english + math + chinese > 200
ORDER BY total DESC
LIMIT 1;
本章完。預(yù)知后事如何,暫聽下回分解。
如果有任何問題歡迎討論哈!
如果覺得這篇文章對你有所幫助的話點點贊吧!
持續(xù)更新大量MySQL細致內(nèi)容,早關(guān)注不迷路。
?