MySQL表操作及查詢功能詳解
一.表操作
MySQL的操作中,一些專用的詞無論是大寫還是小寫都是可以通過的。
1.插入數據
INSERT [INTO] table_name (列名稱...) VALUES (列數據...), (列數據...);
"[]"表示可有可無,插入時,如果不指定要插入的列,則表示默認全部列都要插入數據,插入數據的順序必須和列的順序一致。
如果插入單行數據,則只需一個"()",如果想要多行插入,則可以同時追加多個"()"。
2.更新數據
此外,由于主鍵或者唯一鍵對應的值已經存在而導致插入失敗,則可以更新數據:
INSERT INTO 表名稱 (列名稱...) VALUES (列數據...) ON DUPLICATE KEY UPDATE 列名稱=新數據...;
除這條語句之外,還有一條語句,名為替換,也可以解決主鍵或唯一鍵沖突問題:
REPLACE INTO 表名稱 (列名稱...) VALUES (列數據...);
如果沒有發(fā)生沖突,就相當于直接插入,如果發(fā)生沖突,則刪除原有數據,重新插入新數據。
二.查詢
1.查找數據
(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 |
如果表達式與字段無關,則會生成一列表達式數據。
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;
還有如上表達式,表示顯示學生漢數英的成績之和。
SELECT id, name, chinese + math + english 總分 FROM exam_result;
還可以給表達式指定別名,即在表達式后追加別名。
SELECT DISTINCT 字段 FROM 表名稱;
通過DISTINCT,可以將查詢結果去重。
(2)定向查找
上邊的查找操作,都是對一整個列的數據進行查找,如果我們想要對列中的特定數據進行查找,則可以通過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;
多個條件可以通過邏輯運算符相互組合。
如果現在要查找一個同學,但是不記得他的全名,只記得他的姓為孫,該怎么找到他呢?
SELECT name FROM exam_result WHERE name LIKE '孫%'; SELECT name FROM exam_result WHERE name LIKE '孫_';
通過 "LIKE" 條件, 其中 '%' 表示該同學的名字可以是任意數量的字符,'_' 表示該同學的名字只有一個字。
值得注意的是,在MySQL中,null 、0、和空字符' ',三者互不相干,執(zhí)行相關的查詢時應注意。
2.排序數據
對數據進行排序通常是查找到對應數據后的操作。
select 列名稱... from 表名稱 ORDER BY 列名稱 排序方式; -- ASC 為升序(從小到大) -- DESC 為降序(從大到?。? -- 如果不指明排序方式,則默認為 ASC
當數據中有null時,null視為比任何值都小。
此外,當出現多字段排序,比如:查詢同學各門成績,依次按 數學降序,英語升序,語文升序的方式顯示,查詢后的結果并不是說,就是按照上述排序方式將單獨的科目進行排序,而是按照書寫優(yōu)先級,先將整體數據按照數學降序排序,如果出現數學成績相等,再將其后的英語成績按照升序排序,如果英語成績也相等,則最后排序語文成績。
3.篩選數據
當數據量過大時,如果直接查詢,可能會引起諸多不便,比如直接就顯示到了數據的末尾幾行。
因此可以通過 LIMIT 按行篩選數據的方式來查詢對應行的數據信息:
起始下標為 0 從 0 開始,篩選 n 條結果 SELECT 列名稱... FROM 表名稱 LIMIT n; 從 s 開始,篩選 n 條結果 SELECT 列名稱... FROM 表名稱 LIMIT s, n; 從 s 開始,篩選 n 條結果,比第二種用法更明確,建議使用 SELECT 列名稱... FROM 表名稱 LIMIT n OFFSET s;
因此當我們對未知表進行查詢時,最好加一條 LIMIT 1,避免因為表中數據過大,查詢全表數據導致數據庫卡死。
4.更新數據
數據更新必須配合where使用,因為你不可能將一整列的數據全部更新,一般都是對特定行的數據進行更新。
UPDATE 表名稱 SET 列名稱 = 新數據 [, column = expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...]
可以同時對某一行的多個數據進行更新,也可以對更新后的數據進行排序篩選等操作。
值得注意的是,當需要對某數據進行加減運算時,在MySQL中不支持 "+=" 等操作,必須采用 "新數據 = 原數據 + 改變值" 的方式。
5.刪除數據
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
刪除數據時,可以使用where來指定要刪除的數據,如果不使用where,則默認為刪除整張表的全部數據。
值得注意的是,刪除數據不會影響表的各種結構定義,就僅僅是刪除插入的數據,諸如表字段的類型,以及表的各種約束條件等都不會受到影響。
特別要注意的是,delete刪除數據,不會對自增長AUTO_INCREMENT產生影響,比如說原本自增長已經到了5,此時刪除全部數據,在進行插入,自增長依然會為6。
6.截斷表
TRUNCATE [TABLE] table_name;
截斷表truncate,同樣是清空表的全部數據,與delete不同的是,它會將自增長AUTO_INCREMEN同樣清除,從AUTO_INCREMEN的初始值從頭開始增長。
7.聚合函數
COUNT([DISTINCT] expr) :返回查詢到的數據的 數量
SUM([DISTINCT] expr) :返回查詢到的數據的 總和,不是數字沒有意義
AVG([DISTINCT] expr) :返回查詢到的數據的 平均值,不是數字沒有意義
MAX([DISTINCT] expr) :返回查詢到的數據的 最大值,不是數字沒有意義
MIN([DISTINCT] expr) :返回查詢到的數據的 最小值,不是數字沒有意義
聚合函數可以選擇對去重后的數據操作,通常和數據查找共同使用,例如查找某表總共有多少行:
SELECT COUNT(*) FROM 表名稱;
使用 * 做統(tǒng)計,不受 NULL 影響。
8.數據分組
在select中使用group by 子句可以對指定列進行分組查詢。
select 列名稱... from table group by 列名稱;
所謂分組查詢,就是對表中某一列中的相同數據組合,例如,有一張完整的學生表數據,其中包含名稱為班級號的字段,現在要查詢每個班級分別有多少學生,就可以通過分組查詢:
select class_id count(*) from student group by class_id;
having和group by配合使用,對group by結果進行過濾,作用類似用where:
select 列名稱... from table group by 列名稱 having 過濾條件;
到此這篇關于MySQL表操作及查詢功能詳解的文章就介紹到這了,更多相關mysql表查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MySQL慢查詢之pt-query-digest分析慢查詢日志
這篇文章主要介紹了關于MySQL慢查詢之pt-query-digest分析慢查詢日志的相關資料,文中介紹的非常詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03
解決Can''t locate ExtUtils/MakeMaker.pm in @INC報錯
今天小編就為大家分享一篇關于解決Can't locate ExtUtils/MakeMaker.pm in @INC報錯,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01

