MySQL中的表操作及查詢方式
一.表操作
MySQL的操作中,一些專用的詞無論是大寫還是小寫都是可以通過的。
1.插入數(shù)據(jù)
INSERT [INTO] table_name (列名稱…)VALUES (列數(shù)據(jù)…), (列數(shù)據(jù)…);
"[]"表示可有可無,插入時,如果不指定要插入的列,則表示默認全部列都要插入數(shù)據(jù),插入數(shù)據(jù)的順序必須和列的順序一致。
如果插入單行數(shù)據(jù),則只需一個"()“,如果想要多行插入,則可以同時追加多個”()"。
2.更新數(shù)據(jù)
此外,由于主鍵或者唯一鍵對應的值已經(jīng)存在而導致插入失敗,則可以更新數(shù)據(jù):
INSERT INTO 表名稱 (列名稱…) VALUES (列數(shù)據(jù)…) ON DUPLICATE KEY UPDATE 列名稱=新數(shù)據(jù)…;
除這條語句之外,還有一條語句,名為替換,也可以解決主鍵或唯一鍵沖突問題:
REPLACE INTO 表名稱(列名稱…) VALUES (列數(shù)據(jù)…);
如果沒有發(fā)生沖突,就相當于直接插入,如果發(fā)生沖突,則刪除原有數(shù)據(jù),重新插入新數(shù)據(jù)。
二.查詢
1.查找數(shù)據(jù)
(1)整體查找
全列查詢
select * from 表名稱;
指定列查詢
select 列名稱…from 表名稱;
查詢字段表達式
select 列名稱… 表達式 from 表名稱;
例如:
SELECT id, name, 10 FROM exam_result; ±–±-------±—+ | id | name | 10 | ±–±-------±—+ | 1 | 張三 | 10 | | 2 | 李四 | 10 | | 3 | 王五 | 10 | | 4 | 趙六 | 10 |
如果表達式與字段無關,則會生成一列表達式數(shù)據(jù)。
SELECT id, name, english + 10 FROM exam_result; ±–±--------±----------------+ | id | name | english + 10| ±–±--------±----------------+ | 1 |張三 | 66 | | 2 |李四 | 87 | | 3 |王五 | 100 | | 4 |趙六 | 77 |
表達式與字段有關:生成表達式為english + 10即將學生的英語成績+10分的列并顯示。
SELECT id, name, chinese + math + english FROM exam_result;
還有如上表達式,表示顯示學生漢數(shù)英的成績之和。
SELECT id, name, chinese + math + english 總分 FROM exam_result;
還可以給表達式指定別名,即在表達式后追加別名。
SELECT DISTINCT 字段 FROM 表名稱;
通過DISTINCT,可以將查詢結果去重。
(2)定向查找
上邊的查找操作,都是對一整個列的數(shù)據(jù)進行查找,如果我們想要對列中的特定數(shù)據(jù)進行查找,則可以通過WHERE 條件。
比較運算符:
- >, >=, <, <= :大于,大于等于,小于,小于等于
- = :等于,NULL 不安全,例如 NULL = NULL 的結果是 NULL
- <=> :等于,NULL 安全,例如 NULL <=> NULL 的結果是 TRUE(1)
- !=, <> :不等于
- 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 個)字符;_ 表示任意一個字符
邏輯運算符:
- AND :多個條件必須都為 TRUE(1),結果才是 TRUE(1)
- OR :任意一個條件為 TRUE(1), 結果為 TRUE(1)
- NOT :條件為 TRUE(1),結果為 FALSE(0)
where基本使用
select 字段… from 表名稱 where 條件;
例如,查找一張成績表中,英語不及格的學生名單:
SELECT name, english FROM exam_result WHERE english < 60;
多個條件可以通過邏輯運算符相互組合。
如果現(xiàn)在要查找一個同學,但是不記得他的全名,只記得他的姓為孫,該怎么找到他呢?
SELECT name FROM exam_result WHERE name LIKE ‘孫%'; SELECT name FROM exam_result WHERE name LIKE ‘孫_';
通過 “LIKE” 條件, 其中 ‘%’ 表示該同學的名字可以是任意數(shù)量的字符,‘_’ 表示該同學的名字只有一個字。
值得注意的是,在MySQL中,null 、0、和空字符’ ',三者互不相干,執(zhí)行相關的查詢時應注意。
2.排序數(shù)據(jù)
對數(shù)據(jù)進行排序通常是查找到對應數(shù)據(jù)后的操作。
select 列名稱… from 表名稱 ORDER BY 列名稱 排序方式;
- – ASC 為升序(從小到大)
- – DESC 為降序(從大到小)
- – 如果不指明排序方式,則默認為 ASC
當數(shù)據(jù)中有null時,null視為比任何值都小。
此外,當出現(xiàn)多字段排序,比如:查詢同學各門成績,依次按 數(shù)學降序,英語升序,語文升序的方式顯示,查詢后的結果并不是說,就是按照上述排序方式將單獨的科目進行排序,而是按照書寫優(yōu)先級,先將整體數(shù)據(jù)按照數(shù)學降序排序,如果出現(xiàn)數(shù)學成績相等,再將其后的英語成績按照升序排序,如果英語成績也相等,則最后排序語文成績。
3.篩選數(shù)據(jù)
當數(shù)據(jù)量過大時,如果直接查詢,可能會引起諸多不便,比如直接就顯示到了數(shù)據(jù)的末尾幾行。
因此可以通過LIMIT 按行篩選數(shù)據(jù)的方式來查詢對應行的數(shù)據(jù)信息:
- 起始下標為 0
- 從 0 開始,篩選 n 條結果
- SELECT 列名稱…FROM 表名稱LIMIT n;
- 從 s 開始,篩選 n 條結果
- SELECT 列名稱… FROM 表名稱LIMIT s, n;
- 從 s 開始,篩選 n 條結果,比第二種用法更明確,建議使用
- SELECT 列名稱… FROM 表名稱LIMIT n OFFSET s;
因此當我們對未知表進行查詢時,最好加一條 LIMIT 1,避免因為表中數(shù)據(jù)過大,查詢全表數(shù)據(jù)導致數(shù)據(jù)庫卡死。
4.更新數(shù)據(jù)
數(shù)據(jù)更新必須配合where使用,因為你不可能將一整列的數(shù)據(jù)全部更新,一般都是對特定行的數(shù)據(jù)進行更新。
UPDATE 表名稱 SET 列名稱 = 新數(shù)據(jù)[, column = expr …] [WHERE …] [ORDER BY …] [LIMIT …]
可以同時對某一行的多個數(shù)據(jù)進行更新,也可以對更新后的數(shù)據(jù)進行排序篩選等操作。
值得注意的是,當需要對某數(shù)據(jù)進行加減運算時,在MySQL中不支持 “+=” 等操作,必須采用 “新數(shù)據(jù) = 原數(shù)據(jù) + 改變值” 的方式。
5.刪除數(shù)據(jù)
DELETE FROM table_name [WHERE …] [ORDER BY …] [LIMIT …]
刪除數(shù)據(jù)時,可以使用where來指定要刪除的數(shù)據(jù),如果不使用where,則默認為刪除整張表的全部數(shù)據(jù)。
值得注意的是,刪除數(shù)據(jù)不會影響表的各種結構定義,就僅僅是刪除插入的數(shù)據(jù),諸如表字段的類型,以及表的各種約束條件等都不會受到影響。
特別要注意的是,delete刪除數(shù)據(jù),不會對自增長****AUTO_INCREMENT產(chǎn)生影響,比如說原本自增長已經(jīng)到了5,此時刪除全部數(shù)據(jù),在進行插入,自增長依然會為6。
6.截斷表
TRUNCATE [TABLE] table_name;
截斷表truncate,同樣是清空表的全部數(shù)據(jù),與delete不同的是,它會將自增長****AUTO_INCREMEN同樣清除,從AUTO_INCREMEN的初始值從頭開始增長。
7.聚合函數(shù)
- COUNT([DISTINCT] expr) :返回查詢到的數(shù)據(jù)的 數(shù)量
- SUM([DISTINCT] expr) :返回查詢到的數(shù)據(jù)的 總和,不是數(shù)字沒有意義
- AVG([DISTINCT] expr) :返回查詢到的數(shù)據(jù)的 平均值,不是數(shù)字沒有意義
- MAX([DISTINCT] expr) :返回查詢到的數(shù)據(jù)的 最大值,不是數(shù)字沒有意義
- MIN([DISTINCT] expr) :返回查詢到的數(shù)據(jù)的 最小值,不是數(shù)字沒有意義
聚合函數(shù)可以選擇對去重后的數(shù)據(jù)操作,通常和數(shù)據(jù)查找共同使用,例如查找某表總共有多少行:
SELECT COUNT(*) FROM 表名稱;
使用 * 做統(tǒng)計,不受 NULL 影響。
8.數(shù)據(jù)分組
在select中使用group by 子句可以對指定列進行分組查詢。
select 列名稱… from table group by 列名稱;
所謂分組查詢,就是對表中某一列中的相同數(shù)據(jù)組合,例如,有一張完整的學生表數(shù)據(jù),其中包含名稱為班級號的字段,現(xiàn)在要查詢每個班級分別有多少學生,就可以通過分組查詢:
select class_id count(*)from studentgroup by class_id;
having和group by配合使用,對group by結果進行過濾,作用類似用where:
select 列名稱… from table group by 列名稱 having 過濾條件;
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
MySQL數(shù)據(jù)的讀寫分離之maxscale的使用方式
這篇文章主要介紹了MySQL數(shù)據(jù)的讀寫分離之maxscale的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
MySQL數(shù)據(jù)庫卸載以及刪除所有有關信息詳細步驟
在MySQL中數(shù)據(jù)刪除操作不僅僅是簡單地將某一個或多個行刪除,下面這篇文章主要給大家介紹了關于MySQL數(shù)據(jù)庫卸載以及刪除所有有關信息的詳細步驟,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-06-06

