天天看點

Oracle實操

什麼是SQL語言

結構化查詢語言(Structured Query Language)(發音ˈes kjuːˈ)

SQL是最重要的關系資料庫操作語言,是所有關系資料庫管理系統的标準語言

許多資料庫廠商在使用SQL的同時,都對SQL進行了擴充,比如ORACLE的PL/SQL語言,MS SQL-Server的T-SQL語言

SQL語言是一種非過程化語言,隻需要提出”做什麼”,而不需要指明“怎麼做”

SQL可以做什麼

資料庫資料的增删改查操作(CRUD)

資料庫對象的建立,修改和删除操作

使用者權限/角色的授予和取消

事務控制

1974年,IBM的Ray Boyce和Don Chamberlin将E.F.Codd關系資料庫的12條準則的數學定義以簡單的關鍵字文法表現出來,裡程碑式地提出了結構化查詢語言(Structured Query Language,SQL)。

SQL語言的功能包括查詢、操縱、定義和控制,是一個綜合的、通用的關系資料庫語言,同時又是一種高度非過程化的語言,隻要求使用者指出做什麼而不需要指出怎麼做。SQL內建實作了資料庫生命周期中的全部操作,自産生之日起,SQL語言便成了檢驗關系資料庫的試金石,而SQL語言标準的每一次變更都指導着關系資料庫産品的發展方向。在SQL語言取得進展的同時,IBM研究中心于1973年開始着手System R項目。其目标是論證一個全功能關系DBMS的可行性。該項目結束于1979年,完成了第一個實作SQL的DBMS。

1986年,ANSI把SQL作為關系資料庫語言的美國标準,同年公布了标準SQL文本。基本SQL定義是ANSIX3135-89,“Database Language - SQL with Integrity Enhancement”[ANS89],一般叫做SQL-89标準(也稱為SQL1)。SQL-89定義了模式、資料操作和事務處理。SQL-89和随後的ANSIX3168-1989,“Database Language-Embedded SQL”構成了第一代SQL标準。

1992年,ISO 和 IEC 釋出了 SQL 的國際标準,稱為 SQL-92。ANSI 随之釋出的相應标準是 ANSI SQL-92。ANSI SQL-92 有時被稱為 ANSI SQL。ANSIX3135-1992[ANS92]描述了一種增強功能的SQL,現在叫做SQL-92标準(也稱為SQL2)。SQL-92包括模式操作,動态建立和SQL語句動态執行、網絡環境支援等增強特性。SQL Server 使用 ANSI SQL-92 的擴充集,稱為 T-SQL,其遵循 ANSI 制定的 SQL-92 标準。

在完成SQL-92标準後,ANSI和ISO即開始合作在1999年釋出了SQL-99标準(也稱為SQL3)。SQL3的主要特點在于抽象資料類型的支援,為新一代對象關系資料庫提供了标準。

目前SQL的最新标準是SQL-2003。

到目前為止,SQL共推出四代标準,分别是SQL-89、SQL-92、SQL-99、SQL-2003。

SQL語言的分類

DQL(資料查詢語言)

select

DML(資料操作語言)

insert、update、delete

DDL(資料定義語言)

create、alter、drop

DCL(資料控制語言)

grant、revoke

TCL(事務控制語言)

SAVEPOINT 、 ROLLBACK、SET TRANSACTION ,COMMIT

資料操作語言針對表中的資料,而資料定義語言針對資料庫對象(表、索引、視圖、觸發器、存儲過程、函數、表空間等)

關系資料庫基本概念

關系:整個二維表

關系名:表格名稱

元組:行資料(記錄)

屬性:列資料(字段)

屬性名:列名稱(字段名)

主鍵:唯一确定元組的屬性組(關鍵字)

域:屬性的取值範圍

Oracle實操

select * from emp;

select * from emp order by sal desc ;

select * from emp where ename like ‘S%’;

select avg(sal), max(sal), min(sal), sum(sal) from emp;

select deptno, avg(sal) from emp group by deptno;

insert into student (id,name,age) values(2,‘lkl’,45);

update student set score=88 where id=2;

delete from student where id=2;

CREATE USER bjsxt IDENTIFIED BY bjsxt;

GRANT connect,resource TO bjsxt;

Oracle實操

最簡單的查詢方式

select * from emp;

select * from dept;

select empno, ename,sal from emp;

使用算術表達式

select empno, ename,sal,sal1.08 from emp;

select empno, ename,sal, sal12 from emp;

select empno, ename,sal, sal*12 +1000 from emp;

注:在Select語句中,對數值型資料可以使用算術運算符建立表達式

使用字段别名

select empno as 員工編号, ename 員工姓名, sal12 年薪 from emp;

select empno, ename “Ename”, sal12 “Anual Salary” from emp;

select sal*12+5000 as “年度工資(加年終獎)” from emp;

字段别名

重命名查詢結果中的字段,以增強可讀性

别名如果含有空格或其他特殊字元或大小寫敏感,需用雙引号引起來。

AS可以省略

預設情況下,查詢結果中包含所有符合條件的記錄行,包括重複行

select deptno from emp;

使用DISTINCT關鍵字可從查詢結果中清除重複行

select distinct deptno from emp;

select distinct job from emp;

DISTINCT的作用範圍是後面所有字段的組合

select, distinct deptno job from emp;

使用order by 子句對查詢結果進行排序

排序方式包括升序(asc,預設)和降序(desc)兩種:

select empno, ename, sal from emp order by sal;

select empno, ename, sal from emp order by sal desc ;

按多字段排序

select deptno, empno, ename, sal from emp order by deptno, sal;

使用字段别名排序

select empno, ename, sal*12 annsal from emp order by annsal;

指定查詢條件使用where子句

用法舉例

select * from emp where deptno=10;

select * from emp where ename = ‘SMITH’;

select * from emp where hiredate = ‘02-4月-81’;

注意:

字元串和日期值要用單引号擴起來

字元串大小寫敏感

日期值格式敏感,預設的日期格式是’DD-MON-RR‘

查詢條件中可以使用比較運算符

select * from emp where sal > 2900;

select * from emp where deptno <> 30;

select * from emp where sal between 1600 and 2900;

select * from emp where ename in(‘SMITH’,‘CLARK’,‘KING’);

Oracle實操

使用LIKE運算符執行模糊查詢(通配查詢)

% 表示零或多個字元 _ 表示一個字元

對于特殊符号可使用ESCAPE 辨別符來查找

用法舉例

select * from emp where ename like ‘S%’;

select * from emp where ename like ‘_A%’;

select * from emp where ename like ‘%_%’ escape ‘’;

使用IS NULL運算符進行空值判斷

用法舉例

select * from emp where comm is null;

select * from emp where comm is not null;

查詢條件中可以使用邏輯運算符

select * from emp where deptno = 10 and sal > 1000;

select * from emp where deptno = 10 or job = ‘CLERK’;

select * from emp where sal not in (800, 1500, 2000);

SQL優化問題:

AND: 把檢索結果較少的條件放到後面

OR: 把檢索結果較多的條件放到後面

共計四種運算符:算術>連接配接>比較>邏輯

Oracle實操

可使用小括号強行改變運算順序

select * from emp where job=‘SALESMAN’ or job=‘CLERK’ and sal>=1280;

select * from emp where (job=‘SALESMAN’ or job=‘CLERK’) and sal>=1280;

使用函數可以大大提高SELECT語句操作資料庫的能力;

它給資料的轉換和處理提供了友善。

函數隻是将取出的資料進行處理,不會改變資料庫中的值。

Oracle函數分為單行函數和多行函數兩大類

單行函數分類

字元函數 數值函數 日期函數

轉換函數 通用函數

多行函數

sum() avg() 僅适用數值型

count() max() min() 适用任何類型資料

Oracle實操
Oracle實操
Oracle實操