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

SQL基本語句

2022-06-13   來源: Oracle 

  掌握SQL四條最基本的數據*作語句InsertSelectUpdate和Delete
  
     練掌握SQL是數據庫用戶的寶貴財 富在本文中我們將引導你掌握四條最基本的數據*作語句—SQL的核心功能—來依次介紹比較*作符選擇斷言以及三值邏輯當你完成這些學習後顯然你已經開始算是精通SQL了
  
    在我們開始之前先使用CREATE TABLE語句來創建一個表DDL語句對數據庫對象如表列和視進行定義它們並不對表中的行進行處理這是因為DDL語句並不處理數據庫中實際的數據這些工作由另一類SQL語句—數據*作語言(DML)語句進行處理
  
    SQL中有四種基本的DML*作INSERTSELECTUPDATE和DELETE由於這是大多數SQL用戶經常用到的我們有必要在此對它們進行一一說明我們給出了一個名為EMPLOYEES的表其中的每一行對應一個特定的雇員記錄請熟悉這張表我們在後面的例子中將要用到它
  
    INSERT語句
  
    用戶可以用INSERT語句將一行記錄插入到指定的一個表中例如要將雇員John Smith的記錄插入到本例的表中可以使用如下語句
  
    INSERT INTO EMPLOYEES VALUES
  
     (SmithJohn
  
     Los Angles);
  
    通過這樣的INSERT語句系統將試著將這些值填入到相應的列中這些列按照我們創建表時定義的順序排列在本例中第一個值Smith將填到第一個列LAST_NAME中第二個值John將填到第二列FIRST_NAME中……以此類推
  
    我們說過系統會試著將值填入除了執行規則之外它還要進行類型檢查如果類型不符(如將一個字符串填入到類型為數字的列中)系統將拒絕這一次*作並返回一個錯誤信息
  
    如果SQL拒絕了你所填入的一列值語句中其他各列的值也不會填入這是因為SQL提供對事務的支持一次事務將數據庫從一種一致性轉移到另一種一致性如果事務的某一部分失敗則整個事務都會失敗系統將會被恢復(或稱之為回退)到此事務之前的狀態
  
     回到原來的INSERT的例子請注意所有的整形十進制數都不需要用單引號引起來而字符串和日期類型的值都要用單引號來區別為了增加可讀性而在數字間插入逗號將會引起錯誤記住在SQL中逗號是元素的分隔符
  
    同樣要注意輸入文字值時要使用單引號雙引號用來封裝限界標識符
  
    對於日期類型我們必須使用SQL標准日期格式(yyyymmdd)但是在系統中可以進行定義以接受其他的格式當然年臨近請你最好還是使用四位來表示年份
  
    既然你已經理解了INSERT語句是怎樣工作的了讓我們轉到EMPLOYEES表中的其他部分
  
    INSERT INTO EMPLOYEES VALUES
  
     (BunyanPaul
  
     Boston);
  
    INSERT INTO EMPLOYEES VALUES
  
     (JohnAdams
  
     Boston);
  
    INSERT INTO EMPLOYEES VALUES
  
     (SmithPocahontas
  
     Los Angles);
  
    INSERT INTO EMPLOYEES VALUES
  
     (SmithBessie
  
     Boston);
  
    INSERT INTO EMPLOYEES VALUES
  
     (JonesDavy
  
     Boston);
  
    INSERT INTO EMPLOYEES VALUES
  
     (JonesIndiana
  
     ChicagoNULLNULL);
  
    在最後一項中我們不知道Jones先生的工薪級別和年薪所以我們輸入NULL(不要引號)NULL是SQL中的一種特殊情況我們以後將進行詳細的討論現在我們只需認為NULL表示一種未知的值
  
    有時像我們剛才所討論的情況我們可能希望對某一些而不是全部的列進行賦值除了對要省略的列輸入NULL外還可以采用另外一種INSERT語句如下
  
    INSERT INTO EMPLOYEES(
  
     FIRST_NAME LAST_NAME
  
     HIRE_DATE BRANCH_OFFICE)
  
    VALUE(
  
     IndianaJones
  
     Indianapolis);
  
    這樣我們先在表名之後列出一系列列名未列出的列中將自動填入缺省值如果沒有設置缺省值則填入NULL請注意我們改變了列的順序而值的順序要對應新的列的順序如果該語句中省略了FIRST_NAME和LAST_NAME項(這兩項規定不能為空)SQL*作將失敗
  
    讓我們來看一看上述INSERT語句的語法圖
  
    INSERT INTO table
  
     [(column { column})]
  
    VALUES
  
     (columnvalue [{columnvalue}]);
  
    和前一篇文?幸謊頤怯梅嚼ê爬幢硎究裳∠睿罄ê瘧硎究梢災馗慈我獯問南睿ú荒茉谑導實腟QL語句中使用這些特殊字符)VALUE子句和可選的列名列表中必須使用圓括號
  
    SELECT語句
  
    SELECT語句可以從一個或多個表中選取特定的行和列因為查詢和檢索數據是數據庫管理中最重要的功能所以SELECT語句在SQL中是工作量最大的部分實際上僅僅是訪問數據庫來分析數據並生成報表的人可以對其他SQL語句一竅不通
  
    SELECT語句的結果通常是生成另外一個表在執行過程中系統根據用戶的標准從數據庫中選出匹配的行和列並將結果放到臨時的表中在直接SQL(direct SQL)中它將結果顯示在終端的顯示屏上或者將結果送到打印機或文件中也可以結合其他SQL語句來將結果放到一個已知名稱的表中
  
    SELECT語句功能強大雖然表面上看來它只用來完成本文第一部分中提到的關系代數運算選擇(或稱限制但實際上它也可以完成其他兩種關系運算—投影連接SELECT語句還可以完成聚合計算並對數據進行排序
  
    SELECT語句最簡單的語法如下
  
    SELECT columns FROM tables;
  
    當我們以這種形式執行一條SELECT語句時系統返回由所選擇的列以及用戶選擇的表中所有指定的行組成的一個結果表這就是實現關系投影運算的一個形式
  
    讓我們看一下使用EMPLOYEES表的一些例子(這個表是我們以後所有SELECT語句實例都要使用的而我們在圖和圖中給出了查詢的實際結果我們將在其他的例子中使用這些結果)
  
    假設你想查看雇員工作部門的列表那下面就是你所需要編寫的SQL查詢
  
    SELECT BRANCH_OFFICE FROM EMPLOYEES;
  
  
  
    由於我們在SELECT語句中只指定了一個列所以我們的結果表中也只有一個列注意結果表中具有重復的行這是因為有多個雇員在同一部門工作(記住SQL從所選的所有行中將值返回)要消除結果中的重復行只要在SELECT語句中加上DISTINCT子句
  
    SELECT DISTINCT BRANCH_OFFICE
  
    FROM EMPLOYEES;
  
    
    現在已經消除了重復的行但結果並不是按照順序排列的如果你希望以字母表順序將結果列出又該怎麼做呢?只要使用ORDER BY子句就可以按照升序或降序來排列結果
  
    SELECT DISTINCT BRANCH_OFFICE
  
    FROM EMPLOYEES
  
    ORDER BY BRANCH_OFFICE ASC;
  
    這一查詢的結果如表所示請注意在ORDER BY之後是如何放置列名BRANCH _OFFICE的這就是我們想要對其進行排序的列為什麼即使是結果表中只有一個列時我們也必須指出列名呢?這是因為我們還能夠按照表中其他列進行排序即使它們並不顯示出來列名BRANCH_ OFFICE之後的關鍵字ASC表示按照升序排列如果你希望以降序排列那麼可以用關鍵字DESC
  
    同樣我們應該指出ORDER BY子句只將臨時表中的結果進行排序並不影響原來的表
  
    假設我們希望得到按部門排序並從工資最高的雇員到工資最低的雇員排列的列表除了工資括號中的內容我們還希望看到按照聘用時間從最近聘用的雇員開始列出的列表以下是你將要用到的語句
  
    SELECT BRANCH_OFFICEFIRST_NAME
  
     LAST_NAMESALARYHIRE_DATE
  
    FROM EMPLOYEES
  
    ORDER BY SALARY DESC
  
     HIRE_DATE DESC;
  
    這裡我們進行了多列的選擇和排序排序的優先級由語句中的列名順序所決定SQL將先對列出的第一個列進行排序如果在第一個列中出現了重復的行時這些行將被按照第二列進行排序如果在第二列中又出現了重復的行時這些行又將被按照第三列進行排序……如此類推這次查詢的結果如表所示
  
    將一個很長的表中的所有列名寫出來是一件相當麻煩的事所以SQL允許在選擇表中所有的列時使用*號
  
    SELECT * FROM EMPLOYEES;
  
    這次查詢返回整個EMPLOYEES表如表所示
  
     下面我們對開始時給出的SELECT語句的語法進行一下更新(豎直線表示一個可選項允許在其中選擇一項
  
    SELECT [DISTINCT]
  
     (column [{ columns}])| *
  
    FROM table [ { table}] From:http://tw.wingwit.com/Article/program/Oracle/201311/18760.html
  • 上一篇文章:

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