黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

mysql 基礎(chǔ)之CURD

系統(tǒng) 3375 0
原文: mysql 基礎(chǔ)之CURD


增刪改查基本語法學(xué)習(xí)

?

:?insert?

Insert?3 :?

1:? 插入哪張表 ??

2:? 插入哪幾列 ?

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

?

Insert?into? TableName

( 1, 2....? n)

Values

( 1, 2,.... n)

?

值?與?列 , 按順序 , 一一對應(yīng)

?

?

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

:? 允許 .

如果沒有聲明列明 , 則默認(rèn)插入所有列 .

因此 , 值應(yīng)該與全部列 , 按順序一一對應(yīng) .

?

: 建一張工資登記表

mysql 基礎(chǔ)之CURD

2: 插入部分列

mysql 基礎(chǔ)之CURD

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

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

mysql 基礎(chǔ)之CURD
insert 中數(shù)字不需要加單引號,會降低解析速度,字符竄必須加單引號,不然會報錯!

:?Update? 語句?

Update?4

改哪張表 ?

改哪幾列的值 ?

分別改為什么值 ?

在哪些行生效 ?

?

語法 :

Update? 表名?

Set?

1?=? 新值? 1,

2?=? 新值 2,

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

Where??expr

mysql 基礎(chǔ)之CURD

刪除 :?delete

Delete?2

從哪張表刪除數(shù)據(jù) ?

要刪除哪些行 ?

?

語法 :

Delete?from? 表名? where??expr

mysql 基礎(chǔ)之CURD

:?select?

查詢 3

1: 查哪張表的數(shù)據(jù) ?

2: 查哪些列的數(shù)據(jù) ?

3: 查哪些行的數(shù)據(jù) ?

?

語法 :

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

From? 表名

Where?expr;

mysql 基礎(chǔ)之CURD


排序:

磁盤里的數(shù)據(jù)可能排好序,也可能沒排序,就需要到內(nèi)存里面進(jìn)行排序,這就比較浪費時間了。

當(dāng)最終結(jié)果集出來后 , 可以進(jìn)行排序 .

排序的語法 :

Order?by? 結(jié)果集中的列名? desc/asc

?

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

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

?

多字段排序也很容易

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


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

Limit?[offset,]?N

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

N:? 取出條目

Offset, 如果不寫 , 則相當(dāng)于?? limit?0,N


子查詢

Where 型子查詢 :? 指把內(nèi)層查詢的結(jié)果作為外層查詢的比較條件 .

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

?

Where 型子查詢

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

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

?

From? 型子查詢 :? 把內(nèi)層的查詢結(jié)果當(dāng)成臨時表 , 供外層 sql 再次查詢

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

Exists 子查詢? :? 把外層的查詢結(jié)果 , 拿到內(nèi)層 , 看內(nèi)層的查詢是否成立 .

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



模糊查詢 :

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

Like->

?

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

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


查詢模型 ( 重要 )

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

Where 條件是表達(dá)式 , 在哪一行上表達(dá)式為真 ,

哪一行就取出來

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

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

?

?

查詢結(jié)果集 -- 在結(jié)構(gòu)上可以當(dāng)成表看
select?count(*)?from? 表名 ,? 查詢的就是絕對的行數(shù) , 哪怕某一行所有字段全為 NULL, 也計算在內(nèi) .

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

查詢的是該列不為 null 的所有行的行數(shù) .

?

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

其實 , 對于 myisam 引擎的表 , 沒有區(qū)別的 .

這種引擎內(nèi)部有一計數(shù)器在維護(hù)著行數(shù) .

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

mysql 基礎(chǔ)之CURD

左連接的語法 :

?

假設(shè) A 表在左 , 不動 ,B 表在 A 表的右邊滑動 .

A 表與 B 表通過一個關(guān)系來篩選 B 表的行 .

語法 :

A?left?join?B?on? 條件??條件為真 , B 表對應(yīng)的行 , 取出

?

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

這一塊 , 形成的也是一個結(jié)果集 , 可以看成一張表?設(shè)為 C

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

?

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

:?A?B 的列都可以查

/*

左連接?右連接 , 內(nèi)連接的區(qū)別在哪兒 ?

?

*/

mysql 基礎(chǔ)之CURD

主持人大聲說 :

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

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

: ,

: 張三沒有對應(yīng)的行怎么辦 ?

: NULL 補齊

結(jié)果如下

mysql 基礎(chǔ)之CURD

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

?

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

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

?

?

左右連接是可以互換的

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

?

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


內(nèi)連接的特點

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

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

mysql 基礎(chǔ)之CURD

如果從集合的角度

A?inner?join?B

和  left?join?/right join 的關(guān)系

答: 內(nèi)連接是左右連接的交集

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

有配偶的,帶著配偶;

沒配偶的,拿牌子寫NULL

即:結(jié)果是左右連接的并集

?

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

Union: 合并 2 條或多條語句的結(jié)果

語法 :

Sql1?union?sql2

?

?

能否從 2 張表查詢再 union ?

: 可以 ,union? 合并的是 " 結(jié)果集 ", 不區(qū)分在自于哪一張表 .

?

: 取自于 2 張表 , 通過 " 別名 " 2 個結(jié)果集的列一致 .

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

: 可以 , 如下圖 , 而且取出的最終列名 , 以第 1 sql 為準(zhǔn)?

mysql 基礎(chǔ)之CURD

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

: 只要結(jié)果集中的列數(shù)一致就可以 .

:?union 后結(jié)果集 , 可否再排序呢 ?

: 可以的 .

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

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

思考如下語句:

(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;

?

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

因此 , 內(nèi)層的語句的排序 , 就沒有意義 .

?

因此 : 內(nèi)層的 order?by? 語句單獨使用 , 不會影響結(jié)果集 , 僅排序 ,

在執(zhí)行期間 , 就被 Mysql 的代碼分析器給優(yōu)化掉了 .

內(nèi)層的 order?by? 必須能夠影響結(jié)果集時 , 才有意義 .

mysql 基礎(chǔ)之CURD

這一次 : 內(nèi)層的 order?by? 發(fā)揮了作用 , 因為有 limit?,order? 會實際影響結(jié)果集 , 有意義 .

?

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

: 這種情況是比較常見的 , 默認(rèn)會去重 .

?

: 如果不想去重怎么辦 ?

:?union?all


mysql 基礎(chǔ)之CURD


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論