日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql curd_mysql 基础之CURD

發布時間:2023/12/29 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql curd_mysql 基础之CURD 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文:mysql 基礎之CURD

增刪改查基本語法學習

增:?insert

Insert?3問:

1:?插入哪張表?

2:?插入哪幾列?

3:?這幾列分別插入什么值?

Insert?into?TableName

(列1,列2....列n)

Values

(值1,值2,....值n)

值?與?列,按順序,一一對應

特殊:?insert語句?允不允許不寫列名

答:允許.

如果沒有聲明列明,則默認插入所有列.

因此,值應該與全部列,按順序一一對應.

例:建一張工資登記表

2:插入部分列

注:文中的set?names?gbk;是為了告訴服務器,客戶端用的GBK編碼,防止亂碼.

4:插入所有的列的簡單寫法.

insert 中數字不需要加單引號,會降低解析速度,字符竄必須加單引號,不然會報錯!

改:?Update語句

Update?4問

改哪張表?

改哪幾列的值?

分別改為什么值?

在哪些行生效?

語法:

Update?表名

Set

列1?=新值1,

列2?=新值2,

列n?=新值n.....

Where??expr

刪除:?delete

Delete?2問

從哪張表刪除數據?

要刪除哪些行?

語法:

Delete?from?表名where??expr

查:?select

查詢3問

1:查哪張表的數據?

2:查哪些列的數據?

3:查哪些行的數據?

語法:

Select?列1,列2,列3,...列n

From?表名

Where?expr;

排序:

磁盤里的數據可能排好序,也可能沒排序,就需要到內存里面進行排序,這就比較浪費時間了。

當最終結果集出來后,可以進行排序.

排序的語法:

Order?by?結果集中的列名desc/asc

例:order?by?shop_price?desc?,按價格降序排列

Order?by?add_time?asc?,按發布時間升序排列.

多字段排序也很容易

Order?by?列1?desc/asc,?列2?desc/asc,?列3?desc,asc

Limit?在語句的最后,起到限制條目的作用,在分頁類中發揮很大作用

Limit?[offset,]?N

Offset:?偏移量,----跳過幾行

N:?取出條目

Offset,如果不寫,則相當于limit?0,N

子查詢

Where型子查詢:指把內層查詢的結果作為外層查詢的比較條件.

典型題:查詢最大商品,最貴商品

Where型子查詢

如果?where列=(內層sql),則內層sql返回的必是單行單列,單個值

如果?where列in?(內層sql),則內層sql只返回單列,可以多行.

From?型子查詢:把內層的查詢結果當成臨時表,供外層sql再次查詢

典型題:查詢每個欄目下的最新/最貴商品

Exists子查詢:把外層的查詢結果,拿到內層,看內層的查詢是否成立.

典型題:查詢有商品的欄目

模糊查詢:

案例:想查找"諾基亞"開頭的所有商品

Like->像

%?-->?通配任意字符

'_'?-->?單個字符

查詢模型(重要)

列就是變量,在每一行上,列的值都在變化.

Where條件是表達式,在哪一行上表達式為真,

哪一行就取出來

比如下面的條件,?shop_price在不同的行,有不同的值.

在哪一行時,shop_price>5000如果為真,則這行取出來.

查詢結果集--在結構上可以當成表看

select?count(*)?from?表名,查詢的就是絕對的行數,哪怕某一行所有字段全為NULL,也計算在內.

而select?couht(列名)?from表名,

查詢的是該列不為null的所有行的行數.

用count(*),count(1),誰好呢?

其實,對于myisam引擎的表,沒有區別的.

這種引擎內部有一計數器在維護著行數.

Innodb的表,用count(*)直接讀行數,效率很低,因為innodb真的要去數一遍.

左連接的語法:

假設A表在左,不動,B表在A表的右邊滑動.

A表與B表通過一個關系來篩選B表的行.

語法:

A?left?join?B?on?條件??條件為真,則B表對應的行,取出

A?left?join?B?on?條件

這一塊,形成的也是一個結果集,可以看成一張表?設為C

既如此,可以對C表作查詢,自然where,group?,having?,order?by?,limit照常使用

問:C表的可以查詢的列有哪些列?

答:?A?B的列都可以查

/*

左連接?右連接,內連接的區別在哪兒?

*/

主持人大聲說:

所有的男士,站到舞臺上,帶上自己的配偶,(沒有的拿塊牌子,上寫NULL)

思考:張三上不上舞臺呢?

答:上,

問:張三沒有對應的行怎么辦?

答:用NULL補齊

結果如下

這種情況就是??男生??left?join女生.

主持人說:所有女生請上舞臺,有配偶的帶著,沒有的,寫個NULL補齊.

Select?女生left?join男生on條件

左右連接是可以互換的

A?left?join?B,?就等價于B?right?join?A

注意:既然左右連接可以互換,盡量用左連接,出于移植時兼容性方面的考慮.

內連接的特點

主持人說: 所有有配偶的男生/女生,走到舞臺上來

這種情況下: 屌絲和寶釵都出局

如果從集合的角度

A?inner?join?B

和 left?join?/rightjoin的關系

答: 內連接是左右連接的交集

主持人說:所有男生/女生,走上舞臺.

有配偶的,帶著配偶;

沒配偶的,拿牌子寫NULL

即:結果是左右連接的并集

這種叫做外連接,但是,在mysql中不支持外連接

Union:合并2條或多條語句的結果

語法:

Sql1?union?sql2

能否從2張表查詢再union呢?

答:可以,union合并的是"結果集",不區分在自于哪一張表.

問:取自于2張表,通過"別名"讓2個結果集的列一致.

那么,如果取出的結果集,列名字不一樣,還能否union.

答:可以,如下圖,而且取出的最終列名,以第1條sql為準

問:union滿足什么條件就可以用了?

答:只要結果集中的列數一致就可以.

問:?union后結果集,可否再排序呢?

答:可以的.

Sql1?union?sql2?order?by?字段

注意:?order?by是針對合并后的結果集排的序.

思考如下語句:

(SELECT?goods_id,cat_id,goods_name,shop_price?FROM?goods?WHERE?cat_id?=?4?ORDER?BY?shop_price?DESC)

UNION

(SELECT?goods_id,cat_id,goods_name,shop_price?FROM?goods?WHERE?cat_id?=?5?ORDER?BY?shop_price?DESC)

order?by?shop_price?asc;

外層語句還要對最終結果,再次排序.

因此,內層的語句的排序,就沒有意義.

因此:內層的order?by語句單獨使用,不會影響結果集,僅排序,

在執行期間,就被Mysql的代碼分析器給優化掉了.

內層的order?by必須能夠影響結果集時,才有意義.

這一次:內層的order?by發揮了作用,因為有limit?,order會實際影響結果集,有意義.

如果Union后的結果有重復(即某2行,或N行,所有的列,值都一樣),怎么辦?

答:這種情況是比較常見的,默認會去重.

問:如果不想去重怎么辦?

答:?union?all

總結

以上是生活随笔為你收集整理的mysql curd_mysql 基础之CURD的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。