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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql特别点_Mysql 特别注意点!

發布時間:2024/10/14 数据库 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql特别点_Mysql 特别注意点! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

連接查詢小坑

初始環境:CREATE?TABLE?product?(

id?INT?UNSIGNED?NOT?NULL?AUTO_INCREMENT,

amount?INT?UNSIGNED?DEFAULT?NULL?,

PRIMARY?KEY?(id)

)?ENGINE?=?innodb?CHARSET?='utf8';

INSERT?INTO?product?VALUES?(1,100),?(2,200),?(3,300),?(4,400);

SELECT?*?FROM?product;

CREATE?TABLE?product_details?(

id?int?UNSIGNED?NOT?NULL,

weight?INT?UNSIGNED?DEFAULT?NULL?,

exist?INT?UNSIGNED?DEFAULT?NULL?,

PRIMARY?KEY?(id)

)?ENGINE?=?innodb?CHARSET?='utf8';

INSERT?INTO?product_details?VALUES?(2,22,0),(4,44,1),(5,55,0),(6,66,1);

SELECT?*?FROM?product_details;

執行如下兩SQL:1、SELECT?*?FROM?product?a?LEFT?JOIN?product_details?b?ON?a.id=b.id?AND?a.amount=100;

結果:

idamountidweightexist

1100NULLNULLNULL

2200NULLNULLNULL

3300NULLNULLNULL

4400NULLNULLNULL

2、SELECT?*?FROM?product?a?LEFT?JOIN?product_details?b?ON?a.id=b.id?AND?a.amount=200;

結果:

idamountidweightexist

22002220

1100NULLNULLNULL

3300NULLNULLNULL

4400NULLNULLNULL

原因解釋:

首先要清除SQL執行順序

首先對a和b表做笛卡爾積生成虛擬表VT1

根據ON條件刷選VT1數據生成虛擬表VT2

如果是外連接則需要將保留表中被過濾的的數據(外部行)添加到VT2中生成VT3

具體分析語句1,a b表生成笛卡爾積后根據a.id=b.id AND a.amount=100條件刷選,沒有符合條件的行,所以保留表a表的所有行被過濾掉,在添加外部行時a表的所有行被添加到虛擬表中b表的字段都為NULL,所以就得出結果。

語句2與1過程一致,根據a.id=b.id?AND?a.amount=200刷選出一行結果添加外部行后得出實際結果。

參考:《MySQL技術內幕:SQL編程.姜承堯》

2. order by case when用法(根據不同條件選擇不同列的值排序)

寫法1:需要顯示選擇的列值

SELECT?auto_id,?(case?when?flag='1'?THEN?price?when?flag='0'?THEN?n_price?else?null?END?)?as?oprice???FROM?yaju_new.test?ORDER?BY?oprice;

寫法2:

SELECT?auto_id FROM?yaju_new.test?ORDER?BY?,?(case?when?flag='1'?THEN?price?when?flag='0'?THEN?n_price?else?null?END?);

總結

以上是生活随笔為你收集整理的mysql特别点_Mysql 特别注意点!的全部內容,希望文章能夠幫你解決所遇到的問題。

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