學習使用SQLite(版本3.7.4)(中E)

來源:互聯網
上載者:User

針對兩個關係A、B ,union關鍵字將兩者串連成為一個只包含A和B中非重複欄位的單一關係。SQL中,union聯合兩個select結果,預設消除重複資料(利用union   all保留全部資料):

select f.* , top_foods.count  from  foods  f 
inner join  
   (select food_id ,count(food_id)  as  count from foods_episodes 
    group by  food_id
    order by count(food_id) desc limit 1)  top_foods
  on f.id = top_foods.food_id
union
select f.*,bottom_foods.count  from foods  f
inner join 
    (select  food_id , count(food_id)  as count from foods_episodes
     group by food_id
     order by count(food_id) desc limit 1)  bottom_foods

  on  f.id = bottom_foods.food_id
order by top_foods.count  desc;

,這是要找出foods表中最高頻率和最低頻率的食品。


intersect操作兩個關係A和B,選擇在A也在B中的行。會用intersect找出處於3和5之間的處於前10位的食品:

select f.*  from  foods  f 
inner join  
   (select food_id ,count(food_id)  as  count from foods_episodes 
    group by  food_id
    order    by    count(food_id)   desc limit 10)  top_foods
  on f.id = top_foods.food_id
intersect
select f.*   from foods  f
   inner    join  foods_episodes fe  on  f.id=fe.food_id
   inner    join  episodes e on fe.episode_id = e.id
   where e.season between 3 and 5
order by  f.name;

except 操作兩個關係A和B,找出所有在A而不在B的行:

select f.*  from  foods  f 
inner join  
   (select food_id ,count(food_id)  as  count from foods_episodes 
    group by  food_id
    order by count(food_id) desc limit 10)  top_foods
  on f.id = top_foods.food_id

except

select f.*   from foods  f
   inner join  foods_episodes fe  on  f.id=fe.food_id
   inner join  episodes e on fe.episode_id = e.id
   where e.season between 3 and 5
order by  f.name;


注意:複合查詢只是要求在結尾有一個order by 語句。


處理SQLite中的null:

null是缺失資訊的預留位置,本身不是值。null與真假值之間的關係:

表格:與null相關的邏輯或與邏輯與
x y x    and  y                 x      or       y

True                   

True                    

True                    

True

True
 
False     

False

True

True

NULL

NULL

True

False

False

False

False

False

NULL

False

NULL

NULL

NULL

NULL

NULL


注意:我們如果要檢驗null是否存在,可以使用is  null,或者is  not     null來檢驗,而使用equal或者greater  than 可能得到很奇怪的結果。null不等於任何值,null和null也是不一樣的,因為你根本就不知道null儲存了什麼。

非0的任何值都是“真”。

coalesce()函數的用法:

      文法:coalesce(運算式[ ,,……n,,,]);
                  COALESCE ( expression [ ,...n ] )

      變數均為null時,返回null;如果至少有一個不是null,那麼返回第一個不是null的值。注意彙總中,null的用法。

      特別注意:

      COALESCE(expression1,...n) 與此 CASE 函數等價:

   CASE

   WHEN (expression1 IS NOT NULL)    THEN    expression1

  ...

         

   WHEN (expressionN IS NOT NULL)    THEN   expressionN

      ELSE NULL


更多可以參考:

        sql  server的coalesce()的兩種用法:

        http://content.edu-edu.com.cn/info/2010/07/21/000048p2.shtml


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.