官术网_书友最值得收藏!

3.3 SQL語法介紹

前面講解了如何安裝和使用MySQL數據庫,在此基礎上,讀者更需要了解的是SQL的基本語法,因為不管使用MySQL數據庫,還是使用Oracle、DB2等數據庫,都必須掌握SQL的語法。

3.3.1 SQL簡介

SQL是結構化查詢語言,英文全稱是Structured Query Language。SQL包含以下4個部分。

● 數據查詢語言:SELECT。

● 數據操縱語言:INSERT、UPDATE、DELETE。

● 數據定義語言:CREATE、ALTER、DROP。

● 數據控制語言:COMMIT WORK、ROLLBACK WORK。

SQL的前身是SQUARE語言,它是由IBM的圣約瑟研究實驗室為其關系數據庫管理系統開發的一種查詢語言。SQL語言結構簡潔,功能強大,簡單易學,所以自從IBM公司于1981年推出以來,SQL得到了廣泛的應用。1979年Oracle公司首先在商用的數據庫中實現了SQL,緊接著IBM公司在DB2數據庫系統中也實現了SQL。1986年10月,美國ANSI采用SQL作為關系數據庫管理系統的標準語言(ANSI X3.135-1986),后被國際標準化組織(ISO)采納作為國際標準。

SQL是一個非過程化的語言,SQL不要求用戶指定對數據的存放方法。這種特性使用戶更易將精力集中于要得到的結果。所有SQL語句使用查詢優化器,它是RDBMS的一部分,由它決定對指定數據存取的最快速度的手段。查詢優化器知道存在什么索引,在哪里使用合適,而用戶從不需要知道表是否有索引,表有什么類型的索引。由于主要的關系數據庫管理系統都支持SQL,用戶可以將使用SQL的技能從一個RDBMS轉到另一個,所有用SQL編寫的程序都是可以移植的。

3.3.2 SQL基本語法

SQL的基本語法非常簡單,網上相關語法的詳細介紹有很多,因此本書只介紹一些簡單的語法,主要是從查詢、新增、修改、刪除和創建這幾個方面進行介紹。SQL查詢的最基本形式如下:

      select – from – where–order by

代碼說明如下。

● select,指定哪些欄位要列出來。

● from,要搜尋的表名稱。

● where,指定要搜尋的條件。

● order by,指定哪些欄位要排序(ASC、DESC)。

示例代碼如下:

      select  empno,name,phone
      from   DB.TBTEST01
      where sex ='M'
      order by empno

上述代碼是針對一個數據庫表進行操作的,SQL還允許對多個數據庫表進行關聯操作,查詢語句中FROM后面接的是許多表名,查詢語句中WHERE子句指定表間的關系,示例代碼如下:

      select   db.tbtest01.empno,db.tbtest01.name,db.tbtest02.salary
      from      db.tbtest01,db.tbtest02
      where    db.tbtest01.empno=db.tbtest02.empno
      and       db.tbtest02.workdept='知識信息部'

注意:如果字段名稱唯一,則可不加表名稱,雖然不是必要,但可增加此查詢語句的可讀性。

對數據庫表名進行重新命名的示例代碼如下:

      select    x.empno,x.name,y.salary
      from     db.tbtest01 x,db.tbtest02 y
      where    x.empno=y.empno
      and      y.workdept='知識信息部'

對多個表進行查詢時,除了在FROM后面直接列出表名外,還可以建立表之間的關系,比如:INNER JOIN,就表示只要兩個被連接的表內有相同的值,即可根據該值內部連接兩個表。INNER JOIN的示例代碼如下:

      select    x.empno,x.name,y.salary
      from     db.tbtest01 x inner join db.tbtest02 y
      on       x.empno=y.empno
      and      y.workdept='知識信息部'

對表進行關聯查詢還有以下3種表示方法。

● Left Outer Join:含有在左表但無法在右表中找到對應的數據列。

● Right Outer Join:含有在右表但無法在左表中找到對應的數據列。

● Full Outer Join:含有以上兩種情況的數據列。

SQL還提供了一些函數,比如求平均值、統計總數、最大值、最小值函數等,還可以在參數前加DISTINCT以刪除重復數據。

示例代碼如下:

      select workdept,count(*)as人數from db.tbtest02 group by workdept    各部門人數統計

使用group by字段將表中的數據按照一個或多個表達式的值分組,除group by字段及匯總字段外,其余字段不可選擇(select),利用having子句過濾掉不需要的組,示例代碼如下:

      select workdept,sum(salary)as salary
      from db.tbtest02 group by workdept
      having count(*)>=2

代碼說明:

找出至少存在兩條記錄的部門工資總和。

當SQL語句同時含有where子句與having子句時,處理步驟是:用where子句先過濾掉不符合條件的數據列,然后用group by做數據分組,最后用having子句過濾掉不合格的組,示例代碼如下:

      select workdept,sum(salary)as salary
      from db.tbtest02 where salaryym='200408' group by workdept having count(*)>=2

代碼說明:

找出至少存在兩條記錄的部門2004年8月的工資總和。

SQL除了提供上述命令,還提供了其他一些命令,比如between、in等。在查詢中,如果某列的數值在某個區間,則可使用between,示例代碼如下:

      select * from db.tbtest02
      where salary between 60000 and 70000

它等價于:

      select * from db.tbtest02
      where salary >= 60000 and salary <= 70000

代碼說明:

找出工資為60000~70000的員工。

在查詢中,還經常會遇到要求表中列值是某幾個值中的一個的情況,示例代碼如下:

      select * from db.tbtest02
      Where workdept  in('知識信息部','財務部')

代碼說明:

找出知識信息部、財務部的員工。

在查詢條件中,還可以進行字符串匹配,下畫線字符(_)表示任何單個字符;百分號(%)表示零個或多個字符的字符串,示例代碼如下:

      select * from db.tbtest01
      where name like '劉%'

代碼說明:

找出姓劉的所有員工。

在查詢中還可以使用EXISTS,該查詢不返回值,只是檢驗子查詢的結果是否為空,并且返回“true”或“false”,示例代碼如下:

      select name from db.tbtest01 as x
      where exists(select*from db.tbtest02 as y where  x.empno=y.empno and y.workdept='知識信
      息部')

代碼說明:

找出知識信息部的所有員工。

前面講解了如何從數據庫中查詢數據的語法,除了查詢之外,SQL還可以添加、修改和刪除數據。把一個或多個數據列寫入表中的示例代碼如下:

      insert into db.tbtest01 (compId,empno,name,sex,birthday,phone,
      address,modifyDate,modifyEmpNo)
      values  ('ejianlong','010203','張軍','M','19790816','13645623856','浙江寧波北侖','20040910','010248')

所寫入的數據列可以用一個實值表來表示,也可以是從數據庫中查詢的數據,示例代碼如下:

      Insert  into  db.test1(no)select  no  from  test2;

代碼說明:

子查詢先被執行,執行結果再寫入表中。

利用set子句對表中每個符合where條件的數據列進行更改;若無where,則表中數據列全部更改,示例代碼如下:

      update   db.tbtest02
      set   salary=99999
      where empno='010123' and salaryym = '200408';

利用delete命令可以實現刪除功能,符合where子句條件的數據都會被刪除;若無where子句,則所有數據全部被刪除,示例代碼如下:

      delete  form DB.TBTEST01   where   empno='010203';

代碼說明:

刪除工號為010203的員工記錄。

使用create命令可以建立一個新的基本表,指明表名與結構,包括組成該表的每一個字段名、數據類型,示例代碼如下:

      create TABLE DB.TBTEST03 (
              compId VARCHAR (10) NOT NULL WITH DEFAULT '',
              empno VARCHAR (10) NOT NULL WITH DEFAULT '',
              name VARCHAR (40) WITH DEFAULT '',
              PRIMARY KEY(compId,empno)
          );
主站蜘蛛池模板: 大田县| 六盘水市| 宜兰市| 钟祥市| 平江县| 武夷山市| 大埔县| 双峰县| 海伦市| 斗六市| 莱阳市| 拜泉县| 布尔津县| 株洲县| 肃北| 新泰市| 大港区| 壤塘县| 临漳县| 皋兰县| 石狮市| 正阳县| 盈江县| 耿马| 固安县| 河南省| 平武县| 玛曲县| 磐石市| 衡南县| 永胜县| 拜城县| 镇沅| 陆河县| 莲花县| 柳河县| 昂仁县| 宜黄县| 砚山县| 固始县| 永福县|