MySQL命令(二)| 表的增删查改、聚合函数(复合函数)、联合查询
文章目錄
- 新增 (Create)
- 全列插入
- 指定列插入
- 查詢 (Retrieve)
- 全列查詢
- 指定列查詢
- 條件查詢
- 關(guān)系元素運(yùn)算符
- 模糊查詢
- 分頁查詢
- 去重:DISTINCT
- 別名:AS
- 升序 or 降序
- 更新 (Update)
- 刪除 (Delete)
- 分組(GROUP BY)
- 聯(lián)合查詢
- 內(nèi)連接(inner join)
- 自連接
- 外連接
- 左連接(left join)
- 右連接(left join)
- 子查詢(嵌套查詢)
- 合并查詢
- UNION
- UNION ALL
- 聚合函數(shù)(復(fù)合函數(shù))
- 最大最小
- 總數(shù)、總和、平均值、保留小數(shù)
- 條件函數(shù)
- IF
- CASE
- 日期函數(shù)
- 時間戳和日期的轉(zhuǎn)換
- 年月日截取
- 日期差計(jì)算
- 文本函數(shù)
新增 (Create)
全列插入
語法
INSERT INTO [表名] VALUES(參數(shù)1, 參數(shù)2, 參數(shù)3......);示例
INSERT INTO book VALUES(4, "C++Primer", 99.9, "2000-08-02", 103);mysql> SELECT * FROM book-> ; +------+-----------+-------+------------+------+ | id | name | price | publish | num | +------+-----------+-------+------------+------+ | 4 | C++Primer | 100 | 2000-08-02 | 103 | +------+-----------+-------+------------+------+ 1 rows in set (0.00 sec)這里 price 的值為 100 而不是 99.9 是因?yàn)?默認(rèn)decimal為(10,0) ,也就是 0 位小數(shù),保存的時候?qū)⑿?shù)點(diǎn)后面的值四舍五入。
指定列插入
即只插入部分列內(nèi)容
語法
INSERT INTO [表名](列1,列2,列3.......) values(參數(shù)1, 參數(shù)2, 參數(shù)3......);示例
mysql> INSERT INTO book(id,name,price)-> VALUES(8,"紅樓夢",94.4); Query OK, 1 row affected, 1 warning (0.01 sec)mysql> SELECT * FROM book; +------+-----------+-------+------------+------+ | id | name | price | publish | num | +------+-----------+-------+------------+------+ | 4 | C++Primer | 100 | 2000-08-02 | 103 | | 8 | 紅樓夢 | 94 | NULL | NULL | +------+-----------+-------+------------+------+ 2 rows in set (0.00 sec)查詢 (Retrieve)
全列查詢
語法
SELECT * FROM [表名];示例
mysql> SELECT * FROM book; +------+-----------+-------+------------+------+ | id | name | price | publish | num | +------+-----------+-------+------------+------+ | 4 | C++Primer | 100 | 2000-08-02 | 103 | | 8 | 紅樓夢 | 94 | NULL | NULL | +------+-----------+-------+------------+------+ 2 rows in set (0.00 sec)指定列查詢
語法
SELECT 列1,列2,列3..... FROM [表名];示例
mysql> SELECT name, price FROM book; +-----------+-------+ | name | price | +-----------+-------+ | C++Primer | 100 | | 紅樓夢 | 94 | +-----------+-------+ 2 rows in set (0.00 sec)條件查詢
關(guān)系元素運(yùn)算符
語法
示例
mysql> SELECT * FROM book WHERE id=8; +------+-----------+-------+---------+------+ | id | name | price | publish | num | +------+-----------+-------+---------+------+ | 8 | 紅樓夢 | 94 | NULL | NULL | +------+-----------+-------+---------+------+ 1 row in set (0.00 sec)模糊查詢
語法
SELECT * FROM [表名] WHERE [列名] LIKE ”%XX%“ // 查詢名字中帶XX的數(shù)據(jù) SELECT * FROM [表名] WHERE [列名] LIKE ”XX%“ // 查詢名字中以XX開頭的數(shù)據(jù) SELECT * FROM [表名] WHERE [列名] LIKE ”%XX“ // 查詢名字中以XX結(jié)尾的數(shù)據(jù)分頁查詢
語法
SELECT * FROM [表名] LIMIT [每頁條數(shù)] OFFSET [偏移條數(shù)];示例
mysql> SELECT * FROM book; +------+-----------+-------+------------+------+ | id | name | price | publish | num | +------+-----------+-------+------------+------+ | 4 | C++Primer | 100 | NULL | 103 | | 4 | C++Primer | 100 | 2000-08-02 | 103 | | 8 | 紅樓夢 | 94 | NULL | NULL | +------+-----------+-------+------------+------+ 3 rows in set (0.00 sec)// 限制顯示條數(shù) mysql> SELECT * FROM book LIMIT 1; +------+-----------+-------+---------+------+ | id | name | price | publish | num | +------+-----------+-------+---------+------+ | 4 | C++Primer | 100 | NULL | 103 | +------+-----------+-------+---------+------+ 1 row in set (0.00 sec)// 限制顯示條數(shù)、規(guī)定偏移量 mysql> SELECT * FROM book LIMIT 1 OFFSET 1; +------+-----------+-------+------------+------+ | id | name | price | publish | num | +------+-----------+-------+------------+------+ | 4 | C++Primer | 100 | 2000-08-02 | 103 | +------+-----------+-------+------------+------+ 1 row in set (0.00 sec)// 剩余數(shù)據(jù)不足LIMIT限制時,不會報錯,而是輸出所有剩余的 mysql> SELECT * FROM book LIMIT 2 OFFSET 2; +------+-----------+-------+---------+------+ | id | name | price | publish | num | +------+-----------+-------+---------+------+ | 8 | 紅樓夢 | 94 | NULL | NULL | +------+-----------+-------+---------+------+ 1 row in set (0.00 sec)去重:DISTINCT
語法
SELECT DISTINCT * FROM [表名];示例
mysql> SELECT * FROM book; +------+-----------+-------+------------+------+ | id | name | price | publish | num | +------+-----------+-------+------------+------+ | 4 | C++Primer | 100 | NULL | 103 | | 4 | C++Primer | 100 | 2000-08-02 | 103 | | 8 | 紅樓夢 | 94 | NULL | NULL | | 4 | C++Primer | 100 | 2000-08-02 | 103 | +------+-----------+-------+------------+------+ 4 rows in set (0.00 sec)mysql> SELECT DISTINCT * FROM book; +------+-----------+-------+------------+------+ | id | name | price | publish | num | +------+-----------+-------+------------+------+ | 4 | C++Primer | 100 | NULL | 103 | | 4 | C++Primer | 100 | 2000-08-02 | 103 | | 8 | 紅樓夢 | 94 | NULL | NULL | +------+-----------+-------+------------+------+ 3 rows in set (0.00 sec)別名:AS
語法
SELECT 列a,列b...... AS [別名] FROM [表名];示例
mysql> SELECT name, price * num AS total FROM book; +-----------+-------+ | name | total | +-----------+-------+ | C++Primer | 10300 | | C++Primer | 10300 | | 紅樓夢 | NULL | | C++Primer | 10300 | +-----------+-------+ 4 rows in set (0.00 sec)–
升序 or 降序
語法
SELECT * FROM [表名] ORDER BY [列名] DESC // DESC為降序排序,ASC為升序排序,默認(rèn)為ASC。示例
mysql> SELECT name, price * num AS total FROM book ORDER BY total; +-----------+-------+ | name | total | +-----------+-------+ | 紅樓夢 | NULL | | C++Primer | 10300 | | C++Primer | 10300 | | C++Primer | 10300 | +-----------+-------+ 4 rows in set (0.00 sec)更新 (Update)
語法
UPDATE [表名] SET [修改項(xiàng)] = [修改結(jié)果]示例
mysql> SELECT * FROM book; +------+-----------+-------+------------+------+ | id | name | price | publish | num | +------+-----------+-------+------------+------+ | 4 | C++Primer | 100 | NULL | 103 | | 4 | C++Primer | 100 | 2000-08-02 | 103 | | 8 | 紅樓夢 | 94 | NULL | NULL | | 4 | C++Primer | 100 | 2000-08-02 | 103 | +------+-----------+-------+------------+------+ 4 rows in set (0.00 sec)mysql> UPDATE book SET num=55 WHERE id=8; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0mysql> SELECT * FROM book; +------+-----------+-------+------------+------+ | id | name | price | publish | num | +------+-----------+-------+------------+------+ | 4 | C++Primer | 100 | NULL | 103 | | 4 | C++Primer | 100 | 2000-08-02 | 103 | | 8 | 紅樓夢 | 94 | NULL | 55 | | 4 | C++Primer | 100 | 2000-08-02 | 103 | +------+-----------+-------+------------+------+ 4 rows in set (0.00 sec)刪除 (Delete)
語法
DELETE FROM [表名];示例
mysql> DELETE FROM book WHERE id=4; Query OK, 3 rows affected (0.00 sec)mysql> SELECT * FROM book; +------+-----------+-------+---------+------+ | id | name | price | publish | num | +------+-----------+-------+---------+------+ | 8 | 紅樓夢 | 94 | NULL | 55 | +------+-----------+-------+---------+------+ 1 row in set (0.00 sec)分組(GROUP BY)
分組的意思是根據(jù)所選 列名 對數(shù)據(jù)進(jìn)行分組,可以理解為作為分組依據(jù)的 列 不會變動,而對其余列按照要求進(jìn)行相關(guān)操作,最后對照著 列中的項(xiàng) 展示對應(yīng)的結(jié)果。
語法
SELECT * FROM [表名] WHERE [條件] GROUP BY [列名] SELECT * FROM [表名] GROUP BY [列名] HAVING [過濾條件] // WHERE 后跟的條件里不允許使用聚合函數(shù),但 HAVING 后面的過濾條件可以。示例
聯(lián)合查詢
內(nèi)連接(inner join)
內(nèi)連接即查找兩個表中的 交集 ,找到兩個表中同時符合條件的數(shù)據(jù),進(jìn)行連接。
語法
select 字段 from 表1 別名1 [inner] join 表2 別名2 on 連接條件 and 其他條件; select 字段 from 表1 別名1,表2 別名2 where 連接條件 and 其他條件;自連接
自連接是特殊的內(nèi)連接,即與本表進(jìn)行連接,需要對表名進(jìn)行 別名顯示 。
語法
select 字段 from 表名1 別名1 [inner] join 表名2 別名2 on 連接條件 and 其他條件;外連接
外連接又分左外連接和右外連接。簡單來說就是,以左表的數(shù)據(jù)為基準(zhǔn)就是左連接,以右表的數(shù)據(jù)為基準(zhǔn)就是右連接。
左連接(left join)
對于左連接,以左表的數(shù)據(jù)為基準(zhǔn),在右表中查找符合條件的數(shù)據(jù),找不到的以 NULL 展示。
語法
select 字段名 from 表名1 left join 表名2 on 連接條件; // 以 表1 為左基準(zhǔn),查詢 表2 中的符合數(shù)據(jù)右連接(left join)
對于右連接,以右表的數(shù)據(jù)為基準(zhǔn),在左表中查找符合條件的數(shù)據(jù),找不到的以 NULL 展示。
語法
select 字段 from 表名1 right join 表名2 on 連接條件; // 以 表1 為右基準(zhǔn),查詢 表2 中的符合數(shù)據(jù)子查詢(嵌套查詢)
子查詢又叫做嵌套查詢(窗口查詢),其實(shí)就是嵌入 其他sql語句 中的 select語句 ,一般用于 查詢的條件是另一條語句的結(jié)果 這一情況。
語法
select 字段 from 表名 where 查詢條件=(select 列名 from 表名 where 查詢條件);示例
(題源牛客)找到每個學(xué)校gpa最低的同學(xué)來做調(diào)研,請你取出相應(yīng)數(shù)據(jù)。
合并查詢
UNION
該操作符用于取得兩個結(jié)果集的并集。當(dāng)使用該操作符時,會自動去掉結(jié)果集中的重復(fù)行。
語法
select 字段 from 表名 where 查詢條件 UNION select 列名 from 表名 where 查詢條件;同樣的結(jié)果也可以通過 or語句 來得到
select 字段 from 表名 where 查詢條件1 or 查詢條件2;但是OR這個邏輯運(yùn)算符會忽略索引、掃描全表,所以在海量數(shù)據(jù)查詢中性能會下降很多。
UNION ALL
該操作符用于取得兩個結(jié)果集的并集。當(dāng)使用該操作符時,不自動去掉結(jié)果集中的重復(fù)行。
語法
select 字段 from 表名 where 查詢條件 UNION ALL select 列名 from 表名 where 查詢條件;聚合函數(shù)(復(fù)合函數(shù))
最大最小
- MAX(): 返回查詢到的數(shù)據(jù)的最大值
- MIN(): 返回查詢到的數(shù)據(jù)的最小值
語法
SELECT max([列名]) FROM [表名] // 查詢對應(yīng)列中最大的數(shù)據(jù) SELECT min([列名]) FROM [表名] // 查詢對應(yīng)列中最小的數(shù)據(jù)示例
mysql> SELECT * FROM class; +------+------+-------+ | id | num | name | +------+------+-------+ | NULL | NULL | li | | NULL | NULL | chen | | NULL | NULL | zhang | +------+------+-------+ 3 rows in set (0.00 sec)mysql> SELECT max(name) FROM class-> ; +-----------+ | max(name) | +-----------+ | zhang | +-----------+ 1 row in set (0.00 sec)總數(shù)、總和、平均值、保留小數(shù)
- COUNT(): 返回查詢到的數(shù)據(jù)的數(shù)量
- SUM(): 返回查詢到的數(shù)據(jù)的總和
- AVG(): 返回查詢到的數(shù)據(jù)的平均值
- ROUND(): 返回查詢數(shù)據(jù)的保留小數(shù)結(jié)果,常與 sum、avg 搭配。
語法
SELECT count([列名]) FROM [表名] // 查詢對應(yīng)列中數(shù)據(jù)的總數(shù) SELECT sum([列名]) FROM [表名] // 查詢對應(yīng)列中數(shù)據(jù)的和 SELECT avg([列名]) FROM [表名] // 查詢對應(yīng)列中數(shù)據(jù)的平均值 SELECT round([數(shù)據(jù)], n) FROM [表名] // 查詢對應(yīng)數(shù)據(jù)保留n位小數(shù)的結(jié)果,數(shù)據(jù)可以為count、avg的結(jié)果條件函數(shù)
IF
條件函數(shù) if(x,a,b)表示如果 x 成立、則返回 a;否則返回 b 。常用來劃分查詢結(jié)果的輸出情況。
語法
SELECT IF(X, A, B) AS [列名] FROM [表名]示例
(題源牛客)現(xiàn)在運(yùn)營想要將用戶劃分為25歲以下和25歲及以上兩個年齡段,分別查看這兩個年齡段用戶數(shù)量:
CASE
數(shù)據(jù)庫中的 case運(yùn)算符 類似于 C語言 中的 switch語句 ,WHEN 用來羅列情況,THEN 將情況與輸出結(jié)果相對應(yīng),ELSE 總結(jié)未羅列的情況,END 標(biāo)識語句結(jié)束。
語法
SELECT CASEWHEN [條件] THEN [輸出結(jié)果]WHEN [條件] THEN [輸出結(jié)果]ELSE [輸出結(jié)果] END AS [列名] FROM [表名]示例
(題源牛客)現(xiàn)在運(yùn)營想要將用戶劃分為20歲以下,20-24歲,25歲及以上三個年齡段,分別查看不同年齡段用戶的明細(xì)情況,請取出相應(yīng)數(shù)據(jù)。
日期函數(shù)
時間戳和日期的轉(zhuǎn)換
時間戳是數(shù)據(jù)庫中自動生成的唯一二進(jìn)制數(shù)字,表明數(shù)據(jù)庫中數(shù)據(jù)修改發(fā)生的相對順序,其記錄形式類似:1627963699 ,在實(shí)際工作環(huán)境中,對于用戶行為發(fā)生的時間通常都是用時間戳進(jìn)行記錄。
from_unixtime 可以將時間戳轉(zhuǎn)換成日期,其使用語法如下:
# 時間戳所在列轉(zhuǎn)換 SELECT from_unixtime([時間戳所在列], 'yyyy-MM-dd’) AS [列名] # 日期格式有’yyyy-MM-dd’ 和 ‘yyyyMMdd’,這里選用前者 From [表名] # 單個時間戳轉(zhuǎn)換 SELECT from_unixtime([時間戳], [日期格式]) AS [列名]unix_timestamp 可以將日期轉(zhuǎn)換成時間戳,其使用語法如下:
- 如果日期值格式滿足yyyy-MM-dd HH:mm:ss,則無需指定日期格式:
- 如果日期值格式不滿足yyyy-MM-dd HH:mm:ss,則必須指定日期格式:
年月日截取
可以從完整日期格式中提取出年月日:
語法
SELECT year([日期值]), month([日期值]), day([日期值]) FROM [表名] # 提取一列的年月日則可以將 日期值 改為 列名示例
(題源牛客)計(jì)算出2021年8月每天用戶練習(xí)題目的數(shù)量,請取出相應(yīng)數(shù)據(jù)。
日期差計(jì)算
datedff
datediff 的作用為計(jì)算兩個日期之間的天數(shù)間隔。
語法
datediff(date1, date2)返回起始時間 date1 和結(jié)束時間 date2 之間的天數(shù),date1 大于 date2 的情況下,返回的天數(shù)為正數(shù);date1 小于 date2 的情況下,返回的天數(shù)為負(fù)數(shù)。
date_sub
語法
date_sub (string startdate, interval int day)返回開始日期 startdate 減少 day 天后的日期。
date_add
語法
date_add(string startdate, interval int day)返回開始日期 startdate 增加 day 天后的日期。
示例
(題源牛客)查看用戶在某天刷題后第二天還會再來刷題的平均概率。請取出相應(yīng)數(shù)據(jù)。
文本函數(shù)
總結(jié)
以上是生活随笔為你收集整理的MySQL命令(二)| 表的增删查改、聚合函数(复合函数)、联合查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 邮政大额存单2022年,大额存单的特点
- 下一篇: leetcode612. 平面上的最近距