mysql中關鍵字的用法


MySQL中關鍵字的用法



Insert:增加
insert into * values()
insert into user values(‘11’,‘諸葛亮’,‘1011’);
不多解釋,向表中添加一條語句,不清楚的去看MySQL的簡單的增刪改查



Delete:刪除
delete from * where a=b;
delete from user where uuid=10
不多解釋,在表中刪除一條語句,不清楚的去看MySQL的簡單的增刪改查



Update:更新
update * set a=b where a=b;
update user a set a.username=‘我是修改后的’ where a.uuid=6;
不多解釋,在表中更新一條語句,不清楚的去看MySQL的簡單的增刪改查



Select:查詢
select * from a where a=b;
select * from user where uuid=1;
不多解釋,在表中查詢語句,不清楚的去看MySQL的簡單的增刪改查



truncate:刪除表中數據

drop直接刪掉表 truncate刪除表中數據,再插入時自增長id又從1開始 delete刪除表中數據,可以加where字句。
(1) DELETE語句執行刪除的過程是每次從表中刪除一行,並且同時將該行的刪除操作作為事務記錄在日志中保存以便進行進行回滾操作。TRUNCATE TABLE 則一次性地從表中刪除所有的數據並不把單獨的刪除操作記錄記入日志保存,刪除行是不能恢復的。並且在刪除的過程中不會激活與表有關的刪除觸發器。執行速度快。
(2) 表和索引所占空間。當表被TRUNCATE 后,這個表和索引所占用的空間會恢復到初始大小,而DELETE操作不會減少表或索引所占用的空間。drop語句將表所占用的空間全釋放掉。
(3) 一般而言,drop > truncate > delete
(4) 應用范圍。TRUNCATE 只能對TABLE;DELETE可以是table和view
(5) TRUNCATE 和DELETE只刪除數據,而DROP則刪除整個表(結構和數據)。



Where:成立條件
涉及到數據庫的帶有條件的操作,基本都要有where關鍵字,一般用於數據庫的刪除和更新命令,具體用法便是“where 判斷條件”;

查詢語句中你可以使用一個或者多個表,表之間使用逗號, 分割,並使用WHERE語句來設定查詢條件。
你可以在 WHERE 子句中指定任何條件。
你可以使用 AND 或者 OR 指定一個或多個條件。
WHERE 子句也可以運用於 SQL 的 DELETE 或者 UPDATE 命令。
WHERE 子句類似於程序語言中的 if 條件,根據 MySQL 表中的字段值來讀取指定的數據。

where a=b;
where a.uid=b.oid and a.uid=‘1011’;
where a.uid=‘1’ or b.oid=‘1’;
在這里插入圖片描述
如果我們想在 MySQL 數據表中讀取指定的數據,WHERE 子句是非常有用的。
使用主鍵來作為 WHERE 子句的條件查詢是非常快速的。
如果給定的條件在表中沒有任何匹配的記錄,那么查詢不會返回任何數據。



Like:模糊查找
我們知道查詢數據庫的時候用select關鍵字,我們也知道查詢的條件跟在where關鍵字后面就可以,但是如果我們現在的查詢條件比較模糊,我們想查詢后綴是"mp4"的數據或者是想查詢數據中含有“大大”的字眼的數據;這個時候准確查找就無法滿足了,就需要用到模糊查找like關鍵字了;
在這里插入圖片描述
*SQL LIKE 子句中使用百分號 %字符來表示任意字符,類似於UNIX或正則表達式中的星號
如果like 后沒有使用%,那么和使用=作用是一樣的;

select * from user a where a.username like '鍾%'
執行前

執行后

我們可以看到並沒有查出第11條數據,“鍾%”這種形式只會查出以鍾開頭的字眼;“%鍾”這種形式同樣只會查出以鍾結尾的字眼;“%鍾%”則會查出在任何位置含有鍾的數據;



union:聯合,合並
當多個查詢語句一起執行時,把這些查詢的數據組合到一起時會出現重復的數據,這個時候就需要這個union關鍵字來進行聯合查詢;union關鍵字就是用於連接兩個以上的 SELECT 語句的結果組合到一個結果集合中,多個 SELECT 語句會刪除重復的數據;

union是用來聯合多條語句的,如果現在有一張用戶表,每個客戶都有買東西,這個時候要查出買了多少種類的東西,這個時候要單獨用distinct關鍵字了,即
select count(distinct a.goods) from user a ;
原表:

select * from user a where a.username like ‘鍾%’
union (distinct)
select * from user a where a.username like ‘%鍾%’;

默認的union會去掉sql語句的相同的結果;union all會全部顯示;distinct與不寫結果相同;

union/union distinct 查詢后的結果是
在這里插入圖片描述
union all查詢后的結果:
在這里插入圖片描述
這樣便會出現查詢的所有結果,有重復數據;

效率問題

UNION和UNION ALL關鍵字都是將兩個結果集合並為一個,但這兩者從使用和效率上來說都有所不同。

1、對重復結果的處理:UNION在進行表鏈接后會篩選掉重復的記錄,Union All不會去除重復記錄。

2、對排序的處理:Union將會按照字段的順序進行排序;UNION ALL只是簡單的將兩個結果合並后就返回。

從效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認合並的兩個結果集中不包含重復數據且不需要排序時的話,那么就使用UNION ALL。



distinct:不重復的
上滿說到了union默認是和union distinct的作用一樣,會將多個select查詢語句的結果集進行合並;如果現在只有一個select語句,比如現在要統計一張商品表的商品的種類的個數,這個時候就要查詢出種類這個字段不重復的記錄,並計算;這個時候就要用distinct這個關鍵字了;
select count(distinct goods.class) from goods;



order by desc/asc :排序
將要顯示的結果集進行排序,用order by關鍵字,末尾跟desc則是降序、跟asc則是升序;默認情況下是升序;
SELECT * FROM USER WHERE id>8891 ORDER BY id DESC;

Order by是排序;desc降序;asc升序;
SELECT field1, field2,…fieldN table_name1, table_name2…
ORDER BY field1, [field2…] [ASC [DESC]

你可以使用任何字段來作為排序的條件,從而返回排序后的查詢結果。
你可以設定多個字段來排序。
你可以使用 ASC 或 DESC 關鍵字來設置查詢結果是按升序或降序排列。 默認情況下,它是按升序排列。
你可以添加 WHERE…LIKE 子句來設置條件。



group by:分組
group by關鍵字用來分組,根據一個或多個列對結果集進行分組

(count(*)計算個數的函數包含null值,count(屬性)不包括null的值,
sum(屬性)求和的函數
max(屬性)用來求當前列的最大值)

我要只說這是用來分組的,可能有些模糊,可能很多人還是壓根不懂這個到底是用來干啥的;好,那么我就按照我的理解來給大家詳細的解釋下這個分組group by到底該怎么用。

假如現在有這么一個人類表,我要將這個表按照男女來分開,計算一下男生多少人,女生多少人,以表格的形式顯示出來?

你可能會想到select count() from people a where a.sex=1;這樣分別來計算,得到的結果是這個樣子的;
在這里插入圖片描述
如果我想得到一個很友好的結果表:(如下圖,查到這個樣子的表是不是很友好,而且一目了然)
在這里插入圖片描述
那么要怎么做呢?這個時候就要用到我們的group by關鍵字了;只需要一句話select people.‘sex’,count(
) from people group by sex就搞定了,這樣就可以直接顯示一個友好的結果表;


現在有這么一個需求,我有一個客戶表,客戶分為三個等級,需要按照客戶來分類,並計算每個等級的客戶的總消費量,以表格形式呈現出來;有了前面這個例子,這個便很好來實現了,只需要把函數count(*)改成函數sum(xiaofei) 便可以了;


group by x的意思就是把所有具有相同x字段的數據放在一起,比如上面的性別或者上面的客戶等級,按照這個分好;
那么group by x,y的意思呢?很明顯啊,就是把所有具有x和y兩個字段都相同的數據放在一起;


像上面兩個例子,如果我想不僅把客戶按照等級來分好,而且每個等級的按照男女來分好,並計算每個等級的男女的消費總額;這個需求該如何實現呢?這個問題便用到了上面的多條件分組;
select people.level,people.sex,count(*),sum(xiaofei) from people group by level,sex;
即將具有相同的客戶等級和客戶性別的放到一組,並進行聚合函數(sum.count.avg.max);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM