sqlite view定義查詢頁面

來源:互聯網
上載者:User

標籤:ar   使用   sp   on   資料   2014   bs   代碼   as   

    下面想象一個這樣的情境,你的資料庫有一個表中儲存有使用者資訊,姑且稱為user表。

     .schema user


CREATE TABLE user(id integer,name text,telphone text,unique(id));
  表user中儲存有 id: 相當於使用者的實際ID,唯一


                      name: 使用者的使用者名稱,供顯示或者登入的時候使用

                      telphone:一個附加資訊,電話號碼

一般我們程式中還會有一個儲存使用者資料的表,這裡引用為data表,裡面儲存的是一些使用者資料,完全可以自訂。在多使用者的情況下我們一般會添加一個欄位user_id來表示這個資料的所屬使用者。

.schema data


CREATE TABLE data(message text,time datetime,user_id integer);
  這是一個簡單的情境,現在我們的需求是 提供一個使用者介面,可以顯示出 姓名,時間,資訊


  我們需要怎麼做呢,(這裡不提我曾經見過的一個中規模程式中邏輯控制拼接這些資訊的了,代碼冗餘且醜陋,效能更不用提~)

  我們在資料庫中建立一個view來解決(引用為view1):

.schema view1


CREATE VIEW view1 as select (select name from user where id=data.user_id) as name,time,message from data;
查詢view1的方式與查詢table一樣,view與table的區別就是view只可以執行查詢的操作,不能執行插入,更新資料等操作,因為view不對應實際的實體記憶體,只是一個預定義的查詢語句而已。


 現在我往user與data表中插入了一些資料


sqlite> select * from user;1|文文|1002|清清|100
 
sqlite> select * from data;data1|2014-12-08 11:19:19|1data2|2014-12-08 11:19:23|1data3|2014-12-08 11:19:27|1data4|2014-12-08 11:19:30|1data5|2014-12-08 11:19:34|1data1|2014-12-08 11:19:39|2data2|2014-12-08 11:19:42|2data3|2014-12-08 11:19:45|2data4|2014-12-08 11:19:49|2data5|2014-12-08 11:19:52|2
現在查詢view1的結果是



sqlite> select * from view1;文文|2014-12-08 11:19:19|data1文文|2014-12-08 11:19:23|data2文文|2014-12-08 11:19:27|data3文文|2014-12-08 11:19:30|data4文文|2014-12-08 11:19:34|data5清清|2014-12-08 11:19:39|data1清清|2014-12-08 11:19:42|data2清清|2014-12-08 11:19:45|data3清清|2014-12-08 11:19:49|data4清清|2014-12-08 11:19:52|data5

達到了合并兩張表的效果。在資料庫中定義好之後可以直接查詢這個視圖(視圖儲存在資料庫中)。 當然這個可以作為查詢曆史資料用,view還可以有更好的更強大的方式去顯示。

比如下面這個情境:
  你程式中有個頁面是擷取當前每個使用者最新的一個記錄顯示。程式後台將資料來源源不斷地存進資料庫,前台固定頻率查詢最新的一條資料來顯示,可以說是即時顯示的意思。

  建立一個視圖(引用為view2)

.schema view2

create view view2 as select (select name from user where id=data.user_id) as name,max(time),message from data group by user_id;
sqlite> select * from view2;文文|2014-12-08 11:19:34|data5清清|2014-12-08 11:19:52|data5
    這樣就做成了一張即時最新的資料表單,可以供使用者查看即時資料。

    當然不必把任何顯示的資料都預先做成view 比如排序,篩選等,也可以做成一個view後再執行相應的查詢操作。


    預先做成的view 可以直接作為 c#或者QT裡的 tablecontrol/tableview 資料來源來使用,極大地減少了程式的複雜度,提升了效率。




sqlite view定義查詢頁面

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.