標籤:net www col switch dex get 分類 商品 必須
一、select查詢子句使用和注意事項:
1.where
where後跟條件用來篩選我們所需的行。它後面可以跟的操作符有=、!=、<、>、<=、>=、 in、 like(可以和萬用字元%結合一起用,效果將會更好) 、between....and........ AND、OR 、NOT
如:select id,name,score form student where score in (每組裡面的最高分組合);
2.group by(GROUP BY 語句用於結合合計函數(也叫彙總函式sum count avg max min),根據一個或多個列對結果集進行分組。否則沒有多大的意義)
group by 有一個原則,就是 select 後面的所有列中,沒有使用彙總函式的列,必須出現在 group by 後面
如:我們對文字的分類id進行分組,查詢每組分類的文章數 select articlecategory_id,count(*) from article group by articlecategory_id;
再次提示:
如果你使用了group by,而沒有相應的使用彙總函式那麼結果就沒有意義了,按照實際情況來思考的話就變成了一對多了(也就是一個分組對應多個對象(也就是多行),那麼一個分組對應多行資料的顯示就變成了分組和第一行資料進行顯示了,
所以此時我們應該使用彙總函式(彙總函式就是把多個變成一),也就是對多行資料進行篩選,得到我們想要的資料,如:可以使用count計算論壇小組總貼文數,可以使用sum來計算
論壇小組文章總回複數,可以使用max來計算論壇小組最多回複的文章,可以使用min來計算論壇小組最少回複數(沒有多大意義,商城最便宜的商品就意義了),可以使用avg來計算論壇每周的平均訪問量(商城所有商品的平均價格)等。
3.having 這個是針對查詢的結果進行作用,只能對結果擁有的列進行操作,與where不同的是where是針對原表(就是from後面的那張表的欄位)發揮作用。其中having裡面可以使用彙總函式。為group by子句設定條件,類似於where為select語句設定條件的方法。having的尋找條件可以包括集合函數運算式。除此之外,它的尋找條件與where尋找條件相同。
select articlecategory_id,count(*) from article group by articlecategory_id having count(*)<5;
4.order by 排序 (可以對多個欄位進行排序)
可以針對欄位進行排序,order by 欄位1 [asc] 升序,[desc] 降序
5.limit是mysql的文法
select * from table limit m,n
其中m是指記錄開始的index,從0開始,表示第一條記錄
n是指從第m+1條開始,取n條。
select * from tablename limit 2,4
即取出第3條至第6條,4條記錄
即取出第(m+1)至第(m+n)的資料
總結:where是針對from後面跟的表進行處理,而group by having order by limit則是針對select後面的欄位進行處理。從它們的結構角度來看則:先整體後部分。
二、update和delete語句複雜使用需要注意的事項:
mysql的update的一些特點:
(1)、update 時,更新的表不能在set和where中用於子查詢(只需要單張表的修改操作)
如:UPDATE a SET a.name = ‘a‘ WHERE id IN (SELECT a.id FROM (SELECT * FROM a) AS a , b WHERE a)
(2)、update 時,可以對多個表進行更新(sqlserver不行);
如:update ta a,tb b set a.Bid=b.id ,b.Aid=a.id;
(3)、update 後面可以做任意的查詢,這個作用等同於from,各種串連的查詢:例如inner join,left join,還可以直接用逗號隔開(需要使用到多張表的修改操作)
例1:
UPDATE order_mall a,(SELECT order_mall.id FROM `order_mall`,`order_goods` WHERE order_mall.`id`=order_goods.`order_id` AND order_goods.order_status=8 AND order_goods.order_goods_type=3) b
SET a.`status`=4
WHERE a.id=b.id
例2:
UPDATE `core_user` a,(SELECT message_push_conf.user_id,message_push_conf.`open_push` FROM `message_push_conf`) b
SET a.`switch_push`=b.open_push
WHERE a.id=b.user_id
delete語句:
(1)刪除的表不能在set和where中用於子查詢,所以需要用到別名(單張表的刪除操作)
delete from student where id = (select n.max_id from (select max(id) as max_id from student) as n);
(2)、delete from left join(需要使用到多張表的刪除操作)
刪除多表 DELETE q,pq from com_purchasequote q LEFT JOIN com_purchasequote_snapshoot pq on q.id=pq.id where q.id=84110;
刪除一張表 DELETE q from com_purchasequote q LEFT JOIN com_purchasequote_snapshoot pq on q.id=pq.id where q.id=82347;
刪除一張表 DELETE pq from com_purchasequote q LEFT JOIN com_purchasequote_snapshoot pq on q.id=pq.id where q.id=67710;
(3)、delete from A,B(需要使用到多張表的刪除操作)
delete A from YSHA A , YSHB B whereA.code=b.code
相關連網址:https://www.cnblogs.com/daniell003/p/3860440.html
https://www.cnblogs.com/007sx/p/7404651.html
47780091
資料庫語句練習