- 搞定J2EE核心技術與企業應用
- 常建功 王向華編著
- 2098字
- 2018-12-29 13:49:53
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) );
- Visualforce Development Cookbook(Second Edition)
- 3D Printing with RepRap Cookbook
- Ansible Quick Start Guide
- Learning Social Media Analytics with R
- SharePoint 2010開發最佳實踐
- 大型數據庫管理系統技術、應用與實例分析:SQL Server 2005
- Excel 2007技巧大全
- Containers in OpenStack
- Visual FoxPro程序設計
- Photoshop行業應用基礎
- FPGA/CPLD應用技術(Verilog語言版)
- 云計算和大數據的應用
- AVR單片機工程師是怎樣煉成的
- Building Google Cloud Platform Solutions
- 新一代人工智能與語音識別