鷹翔宇空

          學習和生活

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
          [ 作者:陳蘇文????轉貼自:http://www.chinaunix.net????點擊數:9525????文章錄入:sdccf
          下面通過實例來對Select的通常用法加以介紹。
          例1:選擇所有的列,語法為select * from table_list
          如:select * from publishers
          例2:選擇指定的列,語法為
          select column_name[,column_name]…
          from table_name
          如:select pub_id,pub_name from publishers
          例3:重命名查詢結果中的列,語法為
          select column_heading= column_name
          from table_name
          如:select Publisher=pub_name,pub_id
          from publishers
          例4:select列表中的計算值,可以對select列表中的數值數據進行計算,下面列出了算術運算符。

          符號運算
          +加
          -減
          /除
          *乘
          %取模
          如select title_id,total_sales,total_sales*2 from titles
          例5:使用distinct消除重復的查詢結果
          可選的關鍵詞消除select語句的結果中的重復行。若不指定distinct,缺省值為all,將檢索出包含重復行的所有行數據。
          如:select distinct au_id from titleauthor
          例6:選擇行——where語句
          select語句中的確切指定要檢索哪些行的準則,其一般格式為:
          select select_list from table_list where search_conditions
          where子句中的搜索條件(或稱限制)包括:
          ·比較運算符(=,<,>,!=等=
          如:where advance*2>total_sales*price
          ·范圍(between和not between)
          如:where total_sales between 5000 and 10000
          ·列表(in和not in)
          如:where state in(“CA”,”IN”,”MD”)
          ·匹配字符(like和not like)
          如:where phone like “0535%”
          ·未知值(is null和is not null)
          如:where advance is null
          ·以上各項的組合(and, or)
          如:where advance<5000 or total_sales between 500 and 1000
          例7:用集合函數小結查詢結果
          集合函數用特定列的數據來計算小結值。
          集合函數結 果
          Sum([all|distinct]expression)數值列中(不重復)值的總和
          Avg([all|distinct]expression)數值列中(不重復)值的平均
          count([all|distinct]expression)列中(不重復)非空值的數目
          Count(*)選定的行數
          Max(expression)Expression的最大值
          Min(expression)Expression的最小值
          如:select avg(advance),sum(total_sales)
          from titles
          where type=”as”
          select count(*) from titles
          select avg(distinct price) from titles
          select max(price) from books
          例8:分組組織查詢結果——group by 子句
          group by 子句用在select語句中將一張表分成若干組。
          如:select type, advance from titles group by type
          例9:選擇分組數據——having子句
          having為group by 子句設置條件,與where為select語句設置條件一樣。Having搜索條件與where相同,但having可包括集合函數,而where不能包括。
          下列語句使用帶集合函數having子句的例子。它把title表中的行按類型分組,但去掉了那只包含一本書的分組。
          Select type from titles group by type having count(*)>1
          下面是一個不帶集合函數的having子句的例子。它把title表中的行按類型分組,但去掉了那些不以字母“p”開頭的類型。
          Select type from titles group by type having type like “p%”
          例10:查詢結果排序——order by子句
          Order by子句允許按一列或多列對查詢結果排序。每個排序可以是升序的(asc)或降序的(desc)。若不特別指明,則按升序進行。下列查詢返回按pub_id排序的結果:
          Select pub_id,type,title_id from titles order by pub_id
          例11:連接——從多張表中檢索數據
          連接兩張或兩張以上的表是這樣一個過程:比較指定字段中的數據,根據比較結果用符合條件的行組成一張新表。
          舉例:
          select publishers.pub_id,publishers.pub_name,authors.*
          from publishers,authors
          where publishers.city=authors.city
          例12:分組計算子句
          Compute是Sybase對SQL標準中Group子句的擴充,可以將其看作帶聚集計算的Group子句。例如:
          Select type,price,advance
          From titles
          Order by type
          Compute sum(price),sum(advance) by type
          2.Insert語句
          用Insert命令向數據庫中添加行有兩種方法:使用關鍵詞values或使用select語句。
          Insert語句的基本語法為:
          Insert[into]表名[(字段列表)]
          {values(值列表)|select_statement}
          舉例:insert into publishers
          values(‘1622’,’Jardin,Inc.’,’Camden’,’NJ’)
          Insert into publishers(pub_id,pub_name)
          values(‘1756’,’The Health Center’)
          Insert authors select * from newauthors
          Insert authors(au_id,address,au_lname,au_fname)
          Select * from newauthors
          3.Delect語句
          Delect可以對一行或多行進行操作。
          Delect語句的基本語法為:
          Delect 表名
          [from 表名列表]
          [where條件表達式]
          舉例:Delect publishers
          where pub_name=”Jardin,Inc.”
          Delect titles
          From authors, titles
          Where titles.title_id=authors.title_id
          4.Update語句
          可以使用Update命令來改動表中的單個行、一組行或所有行。
          Update語句的基本語法為:
          Update表名
          Set column_name1={expression1|null|(select_statement)}
          [,column_name2={expression2|null|(select_statement)}]
          [……]
          [from 表名列表]
          [where 條件表達式]
          舉例:
          update authors set_au_lname=”Health”,aufname=”Goodbody”
          where au_lname=”Bloth”
          update titles
          set total_sales=total_sales + qty
          from titles,sales
          where titles.title_id=sales.title_id
          六、Sybase預定義函數
          1.聚集函數
          sum([all|distinct]表達式)
          avg([all|distinct]表達式)
          count([all|distinct]表達式)
          count(*)
          max(表達式)
          min(表達式)
          2.字符串函數
          upper(字符表達式)
          lower(字符表達式)
          char(整型表達式)
          char_length(字符表達式)
          ltrim(字符表達式)
          rtrim(字符表達式)
          ……
          3.數學函數
          abs(精確小數型表達式)
          floor(精確小數型表達式)求小于或等于給定表達式值的最大整數(取底)
          rand([整數型]
          round(精確小數型表達式,整數)
          sign(精確小數型表達式)
          power(精確小數型表達式,整數冪)
          ……
          4.日期函數
          getdate()
          datepart(日期部分,日期)
          datediff(日期部分,日期1,日期2)
          dateadd(日期部分,數值表達式,日期)
          5.類型轉換函數
          convert(數據類型,表達式[,格式])
          6.系統函數
          db_name([數據庫ID])
          host_name()
          isnull(表達式1,表達式2)
          ……
          七、數據控制語言
          用來控制數據的安全性,如權限控制語句GRANT和REVOKE等。


          第七講 數據庫編程基礎

          一、批處理
          SQL Server可以處理作為一批而提交的多個SQL語句,既可以是交互式的,也可以是一個文件。批處理SQL語句由批結束標志終止,該標志指示SQL Server從前面開始執行該批處理語句,對于獨立的SQL實用程序isql而言,其批結束標志為單獨占一行的“go”。
          舉例:選擇表title及表authors的行數
          select count(*) from titles
          select count(*) from authors
          go
          二、流程控制語言
          1.變量聲明與賦值
          全局變量由系統預定義,以符號@@打頭。
          局部變量聲明使用Declare語句,這個變量必須以符號@開頭,后跟一個標識符。
          Declare @變量名 數據類型[,@變量名 數據類型,……]
          變量賦值使用Select語句,未賦值的變量其值為Null。
          舉例:
          Declare @msg char(50)
          Select @msg=’How are you?’
          Select @msg=emp_name from employee
          Where emp_id=12345678
          2.SQL語句塊
          Begin
          Statement Block/*多個順序執行的SQL 語句*/
          End
          3.條件語句
          If 條件表達式
          語句(塊)
          Else
          語句(塊)
          舉例:
          if(select max(id) from sysobjects)<50
          print ‘數據庫里沒有用戶創建的對象‘
          else
          select name,type,id from sysobjects where id>50
          4.循環語句
          While 條件表達式
          語句(塊)
          ●兩個特殊的循環控制語句:
          Continue 執行下一次循環
          Break 退出當前循環
          舉例:
          While(select avg(price) from titles)>$20
          Begin
          Update titles set price=price/2
          If(select avg(price) from titles)<$40
          Break
          Else
          Continue
          End
          5.其它控制語句
          ◇Return語句——無條件結束當前過程,并可返回給調用者的一個狀態值:Return[整數表達式]
          ◇Print語句
          ◇RaiseError語句
          ◇Waitfor語句
          三、存儲過程
          存儲過程是存儲在服務器端的一類數據庫對象,它實質上是一段用SQL語言編寫的程序,它在服務器端預先經過編譯,并確定出執行計劃,因此與同樣功能的批處理語句相比,它的執行速度較快。
          基本語法:
          Create Procedure[owner.]過程名
          [@參數名 數據類型[=默認值][Output]]
          [,@參數名 數據類型[=默認值][Output]]
          [……]
          AS
          Begin
          SQL語句(塊)
          End
          存儲過程是數據庫對象,和表、索引是一個級別的;是SQL語句和控制流語言的集合,存儲過程在首次運行時被編譯,并駐留在過程高速緩存的內存中,所以存儲過程的招待非常快。存儲過程可以帶參數,可以調用其他過程,返回狀態值,返回參數值,并且可以在遠程SQL Server執行。可以在遠程SQL Server執行對數據庫設計有特別重要的意義。SQL Server提供的存儲過程稱為系統過程。
          存儲過程大大增強了SQL的能力、效率和靈活性,經過編譯的存儲過程極大地改善SQL語句和批處理的性能。
          存儲過程有很多優點:
          ●存儲過程在第一次執行時編譯,并存儲在過程高速緩存的內存中。編譯時系統對其進行優化,以選擇最佳的路徑來訪問數據集中的數據,這種優化考慮了數據集的實際數據結構。因此存儲過程大大提高了系統的性能。
          ●存儲過程可以跨服務器運行。這一點是通過觸發器來實現的,當然,首先存儲過程要能登錄到該遠程服務器。
          ●應用程序也能執行存儲過程,從而實現服務器和客戶之間的協同作業。
          ●存儲過程減少了網絡的交通。這是因為存儲過程的文本存儲在數據庫里,調用存儲過程時通過網絡的只是存儲過程的過程名。
          ●利用存儲過程可以提供一個附加的安全層。
          如(該例子取自pubs2數據庫):
          Create proc titleid_proc(@title_id varchar(80))
          As
          Begin
          Select @title_id=lower(@title_id)+”%”
          Select title,title_id,price
          Form titles
          Where lower(title_id) like @title_id
          Return @@rowcount
          End
          注意例子中的黑體部分,這實際上是一條賦值語句。該存儲過程有返回值。
          存儲過程可以變得非常復雜。我們認為,創建存儲過程還是要遵循“最簡單就是最好”的原則。建議在創建存儲過程時采用縮進風格,否則創建的存儲過程三天之后連自己都看不懂。
          需要對存儲過程作些說明:
          ●Create procedure 語句不能和其他語句在同一個批命令里。
          ●Create procedure 語句不能包括下列語句:
          use
          Create View
          Create default
          Create rule
          Create trigger
          Create procedure
          不能使用use語句好理解,存儲過程是針對數據庫的,不能在一個數據庫里訪問另外的數據庫。如果在存儲過程里訪問另外的數據庫,則數據庫表的參照完整性難于得到保障。
          從另外幾條語句看,在存儲過程里一般不能創建新的數據庫對象。但可以創建表和索引,以及和表相關聯的鍵,表是臨時表,在存儲過程結束后不能看見創建的臨時表;否則的話每運行一次存儲過程就創建一個表,結果可想而知。
          存儲過程里不能創建一個對象,刪除它;然后又在同一存儲過程里用相同的名字創建新的對象。實際上,SQL Server在存儲過程運行時而不是在編譯時創建對象的。
          ●如果存儲過程調用另外的存儲過程,則第二個存儲過程可以調用在第一個存儲過程里創建的對象。
          ●存儲過程包含的最多參數為255個,對存儲過程里的局部和全局變量沒有限制。
          最后討論一下系統存儲過程。系統存儲過程以sp_開頭,當然用戶創建的存儲過程也可以以sp_開頭;?/span>
          posted on 2006-06-07 09:21 TrampEagle 閱讀(922) 評論(0)  編輯  收藏 所屬分類: datebase
          主站蜘蛛池模板: 咸丰县| 灵石县| 泗水县| 南乐县| 兴和县| 上高县| 玉溪市| 桑植县| 云浮市| 琼海市| 井冈山市| 东台市| 青龙| 始兴县| 南城县| 湟源县| 长春市| 赤水市| 桦甸市| 桂平市| 龙胜| 天台县| 郴州市| 阿合奇县| 宜阳县| 马尔康县| 莫力| 山阴县| 乌拉特中旗| 岚皋县| 呈贡县| 凯里市| 特克斯县| 天台县| 诸城市| 孙吴县| 惠安县| 内黄县| 江山市| 山阴县| 盐津县|