熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

SQL語句的基本語法一

2022-06-13   來源: Oracle 

  SELECT語句的完整語法為
  
  SELECT[ALL|DISTINCT|DISTINCTROW|TOP]
  {*|talbe*|[table]field[AS alias][[table]field[AS alias][…]]}
  FROM tableexpression[…][IN externaldatabase]
  [WHERE…]
  [GROUP BY…]
  [HAVING…]
  [ORDER BY…]
  [WITH OWNERACCESS OPTION]
  
  說明
  
  用中括號([])括起來的部分表示是可選的用大括號({})括起來的部分是表示必須從中選擇其中的一個
  
   FROM子句
  
  FROM子句指定了SELECT語句中字段的來源FROM子句後面是包含一個或多個的表達式(由逗號分開)其中的表達式可為單一表名稱已保存的查詢或由 INNER JOINLEFT JOIN 或 RIGHT JOIN 得到的復合結果如果表或查詢存儲在外部數據庫在IN 子句之後指明其完整路徑
  
  例下列SQL語句返回所有有定單的客戶
  
  SELECT OrderIDCustomercustomerID
  FROM Orders Customers
  WHERE OrdersCustomerID=CustomersCustomeersID
  
   ALLDISTINCTDISTINCTROWTOP謂詞
  
  () ALL 返回滿足SQL語句條件的所有記錄如果沒有指明這個謂詞默認為ALL
  
  例SELECT ALL FirstNameLastName
  FROM   Employees
  
  () DISTINCT 如果有多個記錄的選擇字段的數據相同只返回一個
  
  () DISTINCTROW 如果有重復的記錄只返回一個
  
  () TOP顯示查詢頭尾若干記錄也可返回記錄的百分比這是要用 TOP N PERCENT子句(其中N 表示百分比)
  
  例返回%定貨額最大的定單
  SELECT TOP PERCENT*
  FROM [ Order Details]
  ORDER BY UnitPrice*Quantity*(Discount) DESC
  
   用 AS 子句為字段取別名
  
  如果想為返回的列取一個新的標題或者經過對字段的計算或總結之後產生了一個新的值希望把它放到一個新的列裡顯示則用AS保留
  
  例返回FirstName字段取別名為NickName
  SELECT  FirstName AS NickName LastName City
  FROM   Employees
  
  例返回新的一列顯示庫存價值
  SELECT ProductName UnitPrice UnitsInStock UnitPrice*UnitsInStock AS valueInStock
  FROM  Products
  
  WHERE 子句指定查詢條件
  
   比較運算符
  
  比較運算符 含義
  = 等於
  > 大於
  < 小於
  >= 大於等於
  <= 小於等於
  <> 不等於
  !> 不大於
  !< 不小於
  
  例返回月的定單
  
  SELECT OrderID CustomerID OrderDate
  FROM Orders
  WHERE OrderDate>#//# AND OrderDate<#//#
  
  注意
  Mcirosoft JET SQL 中日期用#定界日期也可以用Datevalue()函數來代替在比較字符型的數據時要加上單引號尾空格在比較中被忽略
  
  例
  WHERE OrderDate>##
  
  也可以表示為
  WHERE OrderDate>Datevalue(//)
  
  使用 NOT 表達式求反
  
  例查看日以後的定單
  WHERE Not OrderDate<=#//#
  
   范圍(BETWEEN 和 NOT BETWEEN)
  
  BETWEEN …AND…運算符指定了要搜索的一個閉區間
  
  例返回月到月的定單
  
  WHERE OrderDate Between #//# And #//#
  
   列表(IN NOT IN)
  
  IN 運算符用來匹配列表中的任何一個值IN子句可以代替用OR子句連接的一連串的條件
  
  例要找出住在 LondonParis或Berlin的所有客戶
  
  SELECT CustomerID CompanyName ContactName City
  FROM Customers
  WHERE City In(London Paris Berlin)
  
   模式匹配(LIKE)
  
  LIKE運算符檢驗一個包含字符串數據的字段值是否匹配一指定模式
  
  LIKE運算符裡使用的通配符
  
  通配符 含義
  
  ? 任何一個單一的字符
  * 任意長度的字符
  # ~之間的單一數字
  [字符列表] 在字符列表裡的任一值
  [!字符列表] 不在字符列表裡的任一值
   指定字符范圍兩邊的值分別為其上下限
  例返回郵政編碼在(到(之間的客戶
  SELECT CustomerID CompanyNameCityPhone
  FROM Customers
  WHERE Phone Like ()####
  LIKE運算符的一些樣式及含義
  樣式 含義 不符合
  LIKE A* A後跟任意長度的字符 Bcc
  LIKE[*] *
  LIKE? 之間有任意一個字符 wer
  LIKE## kd
  LIKE[az] az間的任意一個字符 %
  LIKE[!]間的任意一個字符
  LIKE[[] *
  
  用ORDER BY子句排序結果
  
  ORDER子句按一個或多個(最多個)字段排序查詢結果可以是升序(ASC)也可以是降序(DESC)缺省是升序ORDER子句通常放在SQL語句的最後
  
  ORDER子句中定義了多個字段則按照字段的先後順序排序
  
  例
  SELECT ProductNameUnitPrice UnitInStock
  FROM  Products
  ORDER BY  UnitInStock DESC UnitPrice DESC ProductName
  
  ORDER BY 子句中可以用字段在選擇列表中的位置號代替字段名可以混合字段名和位置號
  
  例下面的語句產生與上列相同的效果
  
  SELECT ProductNameUnitPrice UnitInStock
  FROM  Products
  ORDER BY  DESC DESC
  
  運用連接關系實現多表查詢
  
  例找出同一個城市中供應商和客戶的名字
  
  SELECT CustomersCompanyName SuppliersComPanyName
  FROM  Customers Suppliers
  WHERE CustomersCity=SuppliersCity
  
  例找出產品庫存量大於同一種產品的定單的數量的產品和定單
  
  SELECT ProductNameOrderID UnitInStock Quantity
  FROM  Products [Order Deails]
  WHERE ProductproductID=[Order Details]ProductID
  AND UnitsInStock>Quantity
  
  另一種方法是用 Microsof JET SQL 獨有的 JNNER JOIN
  
  語法
  
  FROM table INNER JOIN table
  ON   tablefield comparision tablefield
  
  其中comparision 就是前面WHERE子句用到的比較運算符
  
  SELECT FirstNamelastNameOrderIDCustomerIDOrderDate
  FROM Employees
  INNER JOIN Orders ON EmployeesEmployeeID=OrdersEmployeeID
  
  注意
  
  INNER JOIN不能連接Memo OLE Object Single Double 數據類型字段
  
  在一個JOIN語句中連接多個ON子句
  
  語法
  SELECT fields
  FROM table INNER JOIN table
  ON tablefield compopr tablefield AND
  ON tablefield compopr tablefield OR
  ON tablefield compopr tablefield
  也可以
  SELECT fields
  FROM table INNER JOIN
  (table INNER JOIN [( ]table
  [INNER JOER] [( ]tablex[INNER JOIN]
  ON tablefield compopr tablefield
  ON tablefield compopr tablefield
  ON tablefield compopr tablefield
  
  外部連接返回更多記錄在結果中保留不匹配的記錄不管存不存在滿足條件的記錄都要返回另一側的所有記錄
  
  FROM table [LEFT|RIGHT]JOIN table
  ON tablefieldcomparision tablefield
  
  用左連接來建立外部連接在表達式的左邊的表會顯示其所有的數據
  
  例不管有沒有定貨量返回所有商品
  
  SELECT   ProductName OrderID
  FROM   Products
  LEFT JOIN Orders  ON  ProductsPrductsID=OrdersProductID
From:http://tw.wingwit.com/Article/program/Oracle/201311/16954.html
  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.