日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

mysql 基礎(chǔ)之CURD

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


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

?

:?insert?

Insert?3 問(wèn) :?

1:? 插入哪張表 ??

2:? 插入哪幾列 ?

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

?

Insert?into? TableName

( 1, 2....? n)

Values

( 1, 2,.... n)

?

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

?

?

特殊 :?insert 語(yǔ)句?允不允許不寫列名

:? 允許 .

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

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

?

: 建一張工資登記表

mysql 基礎(chǔ)之CURD

2: 插入部分列

mysql 基礎(chǔ)之CURD

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

4: 插入所有的列的簡(jiǎn)單寫法 .

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

:?Update? 語(yǔ)句?

Update?4 問(wèn)

改哪張表 ?

改哪幾列的值 ?

分別改為什么值 ?

在哪些行生效 ?

?

語(yǔ)法 :

Update? 表名?

Set?

1?=? 新值? 1,

2?=? 新值 2,

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

Where??expr

mysql 基礎(chǔ)之CURD

刪除 :?delete

Delete?2 問(wèn)

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

要?jiǎng)h除哪些行 ?

?

語(yǔ)法 :

Delete?from? 表名? where??expr

mysql 基礎(chǔ)之CURD

:?select?

查詢 3 問(wèn)

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

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

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

?

語(yǔ)法 :

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

From? 表名

Where?expr;

mysql 基礎(chǔ)之CURD


排序:

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

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

排序的語(yǔ)法 :

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

?

:order?by?shop_price?desc?, 按價(jià)格降序排列

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

?

多字段排序也很容易

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


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

Limit?[offset,]?N

Offset:? 偏移量 ,---- 跳過(guò)幾行

N:? 取出條目

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


子查詢

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

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

?

Where 型子查詢

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

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

?

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

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

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

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



模糊查詢 :

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

Like->

?

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

'_'?-->? 單個(gè)字符


查詢模型 ( 重要 )

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

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

哪一行就取出來(lái)

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

在哪一行時(shí) ,shop_price>5000 如果為真 , 則這行取出來(lái) .

?

?

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

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

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

?

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

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

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

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

mysql 基礎(chǔ)之CURD

左連接的語(yǔ)法 :

?

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

A 表與 B 表通過(guò)一個(gè)關(guān)系來(lái)篩選 B 表的行 .

語(yǔ)法 :

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

?

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

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

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

?

問(wèn) :C 表的可以查詢的列有哪些列 ?

:?A?B 的列都可以查

/*

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

?

*/

mysql 基礎(chǔ)之CURD

主持人大聲說(shuō) :

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

思考 : 張三上不上舞臺(tái)呢 ?

: ,

問(wèn) : 張三沒有對(duì)應(yīng)的行怎么辦 ?

: NULL 補(bǔ)齊

結(jié)果如下

mysql 基礎(chǔ)之CURD

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

?

主持人說(shuō) : 所有女生請(qǐng)上舞臺(tái) , 有配偶的帶著 ,? 沒有的 , 寫個(gè) NULL 補(bǔ)齊 .

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

?

?

左右連接是可以互換的

A?left?join?B,? 就等價(jià)于? B?right?join?A

?

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


內(nèi)連接的特點(diǎn)

主持人說(shuō): 所有有配偶的男生/女生,走到舞臺(tái)上來(lái)

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

mysql 基礎(chǔ)之CURD

如果從集合的角度

A?inner?join?B

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

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

主持人說(shuō):所有男生/女生,走上舞臺(tái).

有配偶的,帶著配偶;

沒配偶的,拿牌子寫NULL

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

?

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

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

語(yǔ)法 :

Sql1?union?sql2

?

?

能否從 2 張表查詢?cè)? union ?

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

?

問(wèn) : 取自于 2 張表 , 通過(guò) " 別名 " 2 個(gè)結(jié)果集的列一致 .

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

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

mysql 基礎(chǔ)之CURD

問(wèn):union 滿足什么條件就可以用了 ?

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

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

: 可以的 .

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

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

思考如下語(yǔ)句:

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

?

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

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

?

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

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

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

mysql 基礎(chǔ)之CURD

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

?

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

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

?

問(wèn) : 如果不想去重怎么辦 ?

:?union?all


mysql 基礎(chǔ)之CURD


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 张家口市| 荃湾区| 晴隆县| 共和县| 南康市| 仁布县| 鲁甸县| 贞丰县| 浙江省| 库尔勒市| 六盘水市| 闽侯县| 正蓝旗| 巴楚县| 宁海县| 通海县| 读书| 宿迁市| 贵溪市| 汝阳县| 靖边县| 鄂尔多斯市| 五家渠市| 二连浩特市| 屏山县| 清水县| 武山县| 镇巴县| 惠州市| 耿马| 隆林| 阳山县| 涡阳县| 赤城县| 焉耆| 定安县| 余干县| 赞皇县| 长宁县| 南皮县| 延寿县|