MySQL基本查詢(xún)示例總結(jié)
Create
插入
語(yǔ)法:
INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...value_list: value, [, value] ...
注意:MySQL語(yǔ)法不區(qū)分單雙引號(hào),不區(qū)分大小寫(xiě)。
忽略 [(column [, column] ...)]:全列插入。
()values():像一個(gè)扁擔(dān),左邊和右邊對(duì)應(yīng)。其中前一個(gè)括號(hào)指明要插入的列,后一個(gè)括號(hào)填寫(xiě)對(duì)應(yīng)的元素。如果前一個(gè)括號(hào)忽略則默認(rèn)為全列插入。
可同時(shí)插入多條,即()values(),(),()......
into也可省略。
示例:
mysql> create table test8( -> id int primary key auto_increment, -> name varchar(20) -> ); Query OK, 0 rows affected (0.02 sec) mysql> insert into test8 (id,name)values(20250031,'張三'); Query OK, 1 row affected (0.01 sec) mysql> insert test8 (name)values('李四'); Query OK, 1 row affected (0.01 sec) mysql> insert test8 values(20250045,'王五'); Query OK, 1 row affected (0.00 sec) mysql> insert test8 (name)values('趙六'),('田七'); Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql>
替換
語(yǔ)法
INSERT ... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...
通常用來(lái)解決由于主鍵或者唯一鍵對(duì)應(yīng)的值已經(jīng)存在而導(dǎo)致插入失敗的問(wèn)題。即對(duì)數(shù)據(jù)進(jìn)行更新。
如下我們插入已存在主鍵的值:
mysql> insert into values(20250031,'李華'); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'values(20250031,'李華')' at line 1 mysql> insert into test8 values(20250031,'李華') on duplicate key update name='李華'; Query OK, 2 rows affected (0.00 sec) mysql>
方法二:
mysql> replace into test8 values(20250031,'小明'); Query OK, 2 rows affected (0.00 sec)
Retrieve(讀取)
select(確定列)
語(yǔ)法:
SELECT
column1, column2, ...
FROM
table_name
[WHERE condition]
[GROUP BY column_name]
[HAVING condition]
[ORDER BY column_name [ASC|DESC]]
[LIMIT offset, count];
全列查詢(xún):select * from 表名(建議不要使用)。
去重:select distinct 列名 form 表名
案例:
顯示時(shí)對(duì)列重命名:列名 as 新列名。as可省略。
其次可對(duì)列進(jìn)行運(yùn)算然后顯示,如下:
where條件(確定行)
語(yǔ)法:
SELECT 列名1, 列名2, ...
FROM 表名
WHERE 條件表達(dá)式;
注意:NULL和0不一樣。
NULL=NULL結(jié)果還是NULL,因?yàn)镹ULL不可以用=比較,而是用<=>。通常用is null,is not null。
示例:
英語(yǔ)不及格的同學(xué)及英語(yǔ)成績(jī)
mysql> select name,english from exam_result where english<60;
語(yǔ)文成績(jī)?cè)赱80,90]分的同學(xué)及語(yǔ)文成績(jī)
select name,chinese from exam_result where chinese>=80 and chinesese<=90;
或:
mysql> select name,chinese from exam_result where chinese between 80 and 90;
數(shù)學(xué)成績(jī)是58或59或98或99分的同學(xué)及數(shù)學(xué)成績(jī)
mysql> select name,math from exam_result where math=58 or math=59 or math=98 or math=99;
或
mysql> select name,math from exam_result where math in (58,59,98,99);
姓孫的同學(xué) 及 孫某同學(xué)
mysql> select name from exam_result where name like '孫%';
mysql> select name from exam_result where name like '孫_';
語(yǔ)文成績(jī)好于英語(yǔ)成績(jī)的同學(xué)
mysql> select name,chinese,english from exam_result where chinese > english;
總分在200分以下的同學(xué)
mysql> select name,chinese+math+english 總分 from exam_result where chiinese+math+english<200;
注意:語(yǔ)句的執(zhí)行順序是從右往左,所以不能使用‘總分’這個(gè)詞來(lái)計(jì)算,而where不支持把列重命名。執(zhí)行順序:1.from 2.where 3.select
語(yǔ)文成績(jī)>80并且不姓孫的同學(xué)
mysql> select name,chinese from exam_result where chinese>80 and not(name like '孫%');
孫某同學(xué),否則要求總成績(jī)>200并且語(yǔ)文成績(jī)<數(shù)學(xué)并且英語(yǔ)成績(jī)>80
mysql> select name,chinese,math,english,chinese+math+english 總分 -> from exam_result -> where (name like '孫_') or (chinese+math+english>200 and chinesee<math and english>80);
null查詢(xún)
order by語(yǔ)句
語(yǔ)法:
-- ASC 為升序(從小到大)
-- DESC 為降序(從大到?。?br />-- 默認(rèn)為 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
注意:沒(méi)有帶asc或desc的排序查詢(xún),返回的順序是未定義的。
同學(xué)及數(shù)學(xué)成績(jī),按數(shù)學(xué)成績(jī)升序顯示:
mysql> select name,math from exam_result order by math asc;
注意:NULL在排序時(shí)原則上比任何值都小。
查詢(xún)同學(xué)各門(mén)成績(jī),依次按數(shù)學(xué)降序,英語(yǔ)升序,語(yǔ)文升序的方式顯示:
mysql> select name,math,english,chinese -> from exam_result -> order by math desc,english desc,chinese asc;
查詢(xún)同學(xué)及總分,從高到低
mysql> select name,math+chinese+english as total -> from exam_result -> order by total desc;
這里order by后總分能用別名是因?yàn)?,order by是后執(zhí)行的。
查詢(xún)姓孫的同學(xué)或者姓曹的同學(xué)數(shù)學(xué)成績(jī),結(jié)果按數(shù)學(xué)成績(jī)由高到低顯示:
mysql> select name,math -> from exam_result -> where name like '孫%' or name like '曹%' -> order by math desc;
limit(分頁(yè))
語(yǔ)法:
-- 起始下標(biāo)為 0
-- 從 s 開(kāi)始,篩選 n 條結(jié)果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n
-- 從 0 開(kāi)始,篩選 n 條結(jié)果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
;
-- 從 s 開(kāi)始,篩選 n 條結(jié)果,比第二種用法更明確,建議使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
建議:對(duì)未知表進(jìn)行查詢(xún)時(shí),最好加一條 LIMIT 1,避免因?yàn)楸碇袛?shù)據(jù)過(guò)大,查詢(xún)?nèi)頂?shù)據(jù)導(dǎo)致數(shù)據(jù)庫(kù)卡死。
按 id 進(jìn)行分頁(yè),每頁(yè) 3 條記錄,分別顯示 第 1、2、3 頁(yè)
從開(kāi)頭連續(xù)讀取3行
mysql> select*from exam_result limit 3;
從第2行開(kāi)始往下讀取4行:
mysql> select*from exam_result limit 2,4;
Update(更新)
語(yǔ)法:
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
用于對(duì)查詢(xún)到的值進(jìn)行更新。
將孫悟空同學(xué)的數(shù)學(xué)成績(jī)改為80分
mysql> update exam_result set math=80 where name='孫悟空';
將曹孟德同學(xué)的數(shù)學(xué)成績(jī)改為60分,語(yǔ)文成績(jī)改為70分
mysql> update exam_result set math=60,chinese=70 where name='曹孟德';
將總成績(jī)倒數(shù)前三的3位同學(xué)的數(shù)學(xué)成績(jī)加30分
mysql> update exam_result set math=math+30 -> order by math+chinese+english asc -> limit 3;
將所有同學(xué)的語(yǔ)文成績(jī)更新為原來(lái)的2倍。
Delete(刪除)
語(yǔ)法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
刪除孫悟空同學(xué)的考試成績(jī)
mysql> delete from exam_result where name='孫悟空';
刪除整張表數(shù)據(jù):delete from 表名。
截?cái)啾?/h3>
語(yǔ)法:
TRUNCATE [TABLE] table_name
注意:這個(gè)操作慎用
- 只能對(duì)整表操作,不能像 DELETE 一樣針對(duì)部分?jǐn)?shù)據(jù)操作。
- 實(shí)際上 MySQL 不對(duì)數(shù)據(jù)操作,所以比 DELETE 更快,但是TRUNCATE在刪除數(shù)據(jù)的時(shí)候,并不經(jīng)過(guò)真正的事物,所以無(wú)法回滾。
- 會(huì)重置 AUTO_INCREMENT 項(xiàng)。
- delete不會(huì)重置AUTO_INCREMENT。
去重表數(shù)據(jù)
語(yǔ)法:
INSERT INTO table_name [(column [, column ...])] SELECT...
比如我們有一個(gè)表:duplicate_table,要對(duì)它去重,
首先創(chuàng)建一個(gè)相同的表結(jié)構(gòu)
mysql> create table no_duplicate_table like duplicate_table;
mysql> insert into noduplicate_table select distinct * from duplicate_table;
然后把duplicate_table刪除,no_duplicate_table重命名為 duplicate_table。
這樣的好處在于把一切都準(zhǔn)備就緒,然后統(tǒng)一放入、更新、生效等。
聚合統(tǒng)計(jì)
聚合函數(shù)
函數(shù) | 說(shuō)明 |
COUNT([DISTINCT] expr) | 返回查詢(xún)到的數(shù)據(jù)的 數(shù)量 |
SUM([DISTINCT] expr) | 返回查詢(xún)到的數(shù)據(jù)的 總和,不是數(shù)字沒(méi)有意義 |
AVG([DISTINCT] expr) | 返回查詢(xún)到的數(shù)據(jù)的 平均值,不是數(shù)字沒(méi)有意義 |
MAX([DISTINCT] expr) | 返回查詢(xún)到的數(shù)據(jù)的 最大值,不是數(shù)字沒(méi)有意義 |
MIN([DISTINCT] expr) | 返回查詢(xún)到的數(shù)據(jù)的 最小值,不是數(shù)字沒(méi)有意義 |
測(cè)試:
統(tǒng)計(jì)班里一共多少學(xué)生
或:
mysql> select count(name) from exam_result;
統(tǒng)計(jì)數(shù)學(xué)成績(jī)總分
mysql> select sum(math) from exam_result;
統(tǒng)計(jì)平均總分
mysql> select sum(math+chinese+english)/count(name) from exam_result;
或:
mysql> select avg(math+chinese+english) from exam_result;
返回英語(yǔ)最高分
mysql> select max(english) from exam_result;
返回>70分以上的數(shù)學(xué)最低分
mysql> select min(math) from exam_result where math>70;
group by句子的使用
語(yǔ)法:
select column1, column2, .. from table group by column;
分組:把一組按條件拆分成多個(gè)組 。然后在各自組能做統(tǒng)計(jì)。在邏輯上相當(dāng)于拆分成多張"表"。
測(cè)試:
顯示每個(gè)部門(mén)的平均工資和最高工資
select deptno,avg(sal),max(sal) from emp group by deptno;
顯示每個(gè)部門(mén)的每種崗位的平均工資和最低工資
select avg(sal),min(sal),job, deptno from emp group by deptno, job;
顯示平均工資低于2000的部門(mén)和它的平均工資。having和group by配合使用,對(duì)group by結(jié)果進(jìn)行過(guò)濾
select avg(sal) as myavg from emp group by deptno having myavg<2000;
having與where的使用方法相同,但它們使用在不同的場(chǎng)景。
- where:對(duì)具體任意列進(jìn)行統(tǒng)計(jì)篩選。
- having:對(duì)分組聚合后的結(jié)果進(jìn)行條件篩選。
到此這篇關(guān)于MySQL基本查詢(xún)示例總結(jié)的文章就介紹到這了,更多相關(guān)mysql基本查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL表的基本查詢(xún)操作大全(這一篇夠了)
- MySQL聯(lián)表查詢(xún)基本操作之left-join常見(jiàn)的坑
- MySQL中查詢(xún)?nèi)罩九c慢查詢(xún)?nèi)罩镜幕緦W(xué)習(xí)教程
- 對(duì)MySQL慢查詢(xún)?nèi)罩具M(jìn)行分析的基本教程
- 在MySQL中使用子查詢(xún)和標(biāo)量子查詢(xún)的基本操作教程
- MySQL中幾種數(shù)據(jù)統(tǒng)計(jì)查詢(xún)的基本使用教程
- MySQL的查詢(xún)緩存機(jī)制基本學(xué)習(xí)教程
- MySQL中基本的多表連接查詢(xún)教程
相關(guān)文章
MySQL觸發(fā)器的使用和inserted和deleted表介紹
這篇文章主要介紹了MySQL觸發(fā)器的使用和inserted和deleted表,觸發(fā)器,就是一種特殊的存儲(chǔ)過(guò)程,觸發(fā)器和存儲(chǔ)過(guò)程一樣是一個(gè)能夠完成特定功能和存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器上的SQL片段,感興趣想要詳細(xì)了解可以參考下文2023-05-05mysql中distinct和group?by的區(qū)別淺析
distinct簡(jiǎn)單來(lái)說(shuō)就是用來(lái)去重的,而group by的設(shè)計(jì)目的則是用來(lái)聚合統(tǒng)計(jì)的,兩者在能夠?qū)崿F(xiàn)的功能上有些相同之處,但應(yīng)該仔細(xì)區(qū)分,下面這篇文章主要給大家介紹了關(guān)于mysql中distinct和group?by區(qū)別的相關(guān)資料,需要的朋友可以參考下2023-05-05windows下mysql中binlog日志分析和數(shù)據(jù)恢復(fù)問(wèn)題
這篇文章主要介紹了windows下mysql中binlog日志分析和數(shù)據(jù)恢復(fù)問(wèn)題,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06MySQL慢查詢(xún)?nèi)罩镜淖饔煤烷_(kāi)啟
這篇文章主要給大家介紹了關(guān)于MySQL慢查詢(xún)?nèi)罩镜淖饔煤烷_(kāi)啟的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01在Ubuntu或Debian系統(tǒng)的服務(wù)器上卸載MySQL的方法
這篇文章主要介紹了在Ubuntu或Debian系統(tǒng)的服務(wù)器上卸載MySQL的方法,適用于Debian系的Linux系統(tǒng),需要的朋友可以參考下2015-06-06