五種基本子句查詢 查詢是mysql中最重要的一環,我們今天就來說一下select的五種子句中的where條件查詢: 首先我們先建立一張商品表:goods 由於商品數目太多,我就不一一列舉了。 在這裡我說一下這些列名都是什麼意思: goods_id 主鍵;goods_name 商品名稱;cat_id ...
五種基本子句查詢
查詢是mysql中最重要的一環,我們今天就來說一下select的五種子句中的where條件查詢:
首先我們先建立一張商品表:goods
由於商品數目太多,我就不一一列舉了。
在這裡我說一下這些列名都是什麼意思:
goods_id 主鍵;goods_name 商品名稱;cat_id 商品所屬欄目;goods_nummber 商品庫存;shop_price 本店價格;market_pprice 市場價格;click_count 點擊量。
我們取出主鍵為32的商品:
select * from goods where goods_id=32;select * from goods where goods_id=32;
我們註意,一定要把where表達式理解清楚,只要where後面的條件為真,那麼語句就執行
我們看到主鍵為32的商品本店價格為3010,市場價格為3612,
那麼我們也可以用
select * from goods where shop_price=3010 and market_price=3612;
來取出它
我們來取出商品欄目不等於3的商品:
select * from goods where cat_id !=3;
取出本店價格小於3000的商品:
select * from goods where shop_price<3000;
取出商品欄目是4和11的商品:
select * from goods where cat_id in (4,11);
取出商品本店價格在100到500之間的商品(含邊界):
select * from goods where shop_price between 100 and 500;
取出商品欄目不在3和11的商品(用and和not in分別實現):
select * from goods where cat_id !=3 and cat_id !=11;
select * from goods where cat_id not in (3,11);
取出第三個欄目下麵本店價格<1000或>3000,並且點擊量>5的商品:
在這裡我們使用括弧來控制優先順序:
select * from goods where cat_id=3 and (shop_price<1000 or shop_price>3000) and click_count>5;
模糊查詢:like
%通配任意字元
_匹配單一字元
我們想查出名稱以諾基亞為開頭的商品:
select * from goods where goods_name like '諾基亞%';
我們想查出名稱以諾基亞為開頭,並且後面只有三個字元的商品:
select * from goods where goods_name like '諾基亞___';
把列當成變數,既然是變數,那就可以進行運算,比較
取出商品id,商品名,本店價格比市場價格省的錢:
select goods_id,goods_name,market_price - shop_price from goods ;
這種結果叫做廣義投影。
我們還可以給列差價起個名字叫做discount,但是這個列並不在原表中存在,只存在於結果中:
select goods_id,goods_name,market_price-shop_price as discount from goods;
如果要對結果繼續進行查詢,需要用having:
比如我們想從上面的結果中取出差價大於200的商品:
select goods_id,goods_name,market_price-shop_price as discount from goods having discount>200;
一定註意這裡的having不能換成where,否則會報錯,因為我們是對結果進行再次查詢,而不是從原來的表裡面直接查詢,因為原來的表裡面沒有discount這一列。
接下來我們用一道面試題來練習:
把下麵表中[20,29]的值改為20,[30,39]的值改為30
這道題的核心在於我們要能想到把列當成一個變數來進行運算,對其除以10取模再乘10。
update mian set num=floor(num/10)*10 where num between 20 and 39;
再來做道練習題:把goods表中商品名為‘諾基亞xxxx’的商品名稱顯示為‘HTCxxxx’。
提示:用到兩個函數,一個是截取字元串函數substring(),一個是連接字元串函數concat()。
select goods_name,concat('HTC',substring(goods_name,4)) from goods where goods_name like '諾基亞%' ;