Oracle 數據庫 簡單操作命令(新手看 可以收藏喲)

Oracle 數據庫 簡單操作命令(新手看 可以收藏喲)

(💖下面的案例是Oracle 10g ,可以看下句型作參考)

一、認識 Oracle

1、簡介

oracle 創始人拉里·埃裏森,Oracle也叫“甲骨文公司”,是一個公司的名稱,Oracle是一個關係型(表)數據庫,關係可以看成由行和列交叉組成的二維表格

2、需要了解的知識點

① 數據(date):數字、文字、圖形、視頻等

② 數據庫(datebase):管理數據的倉庫

③ 數據庫管理系統(DBMS):Oracle、MySQL

④ 表中的列稱爲屬性或字段

⑤ 域-值域:屬性的取值範圍

⑥ 表中的行稱爲元組或記錄

⑦ 主鍵:能夠唯一的標識一條記錄的屬性或屬性組(聯合主鍵)

⑧ 外鍵:在A表中不是主鍵,但是在B表中是主鍵,這一列就叫做A表的外鍵

⑨ 表空間(Tablespace):存儲表的文件,相當於MySQL一個數據庫

⑩ Oracle版本:Oracle 9i–Internet、Oracle 10g–grid、Oracle 11g、Oracle 12c–cloud

3、命令類型

在這裏插入圖片描述

二、SQL 查詢

1、瞭解表及表的結構

  • 下面的案例需要先了解表的結構
  • emp表、dept表
    在這裏插入圖片描述
  • student表、score表、course表

SQL> desc student;
Name Type Nullable Default Comments
SID CHAR(6)
SNAME VARCHAR2(10) Y
SSEX CHAR(1) Y
SAGE NUMBER(38) Y
SPHONE VARCHAR2(12) Y





SQL> desc score;
Name Type Nullable Default Comments
SCID NUMBER(38)
SID CHAR(6) Y
CID CHAR(6) Y
GRADE NUMBER(38) Y




SQL> desc course;
Name Type Nullable Default Comments
CID CHAR(6)
CNAME VARCHAR2(20) Y
CHOUR NUMBER(38) Y
TNAME VARCHAR2(10) Y




2、SQL語句特點

1)SQL關鍵字不區分大小寫

2)表名和列名不區分大小寫

3)SQL語句可以換行,但是關鍵字不能換行

4)SQL中註釋使用兩個中劃線(–)

3、簡單的查詢

(💖參考上面的表結構)

  • 查詢用戶下有哪些表

select * from user_tables;
在這裏插入圖片描述

  • 查詢員工的工號、姓名、職位

select empno,ename,job from emp;
在這裏插入圖片描述

  • 查詢所有列 *表示所有列
    查詢員工信息

select * from emp;
在這裏插入圖片描述

  • 列別名,重新給查詢出來的列起個名字
    列名 as 別名;as可以省略;當在別名中有特殊字符如空格或者需要區分大小,需要使用雙引號

    –查詢員工姓名、年薪(不包含獎金)

    select ename as 姓名,sal as 年薪 from emp;
    select ename 姓名,sal 年薪 from emp;
    select ename 姓名,sal “年 薪” from emp; --有空格
    select ename,sal “sumsal” from emp; --區分大小寫
    在這裏插入圖片描述



4、基本運算符(+ - * /)學習

  • 可以對某些列(NUMBER類型、DATE型)進行算術運算
    查詢員工姓名、工資,以及加了500以後的工資

select ename,sal,sal+500 from emp;
在這裏插入圖片描述

  • 查詢員工姓名及日薪(不加獎金)

select ename,sal/24 from emp;
在這裏插入圖片描述

  • 查詢員工姓名及年薪(不算獎金)

select ename,sal*12 from emp;
在這裏插入圖片描述

5、時間函數

  • 當前時間函數 sysdate
  • dual 是一張虛表,爲了保證SQL語法完整性而存在
  • 工作年限 (sysdate-hiredate)/365

select sysdate from dual;

–查詢員工姓名以及工作年限(截止當前時間)

select ename,(sysdate-hiredate)/365 from emp;
在這裏插入圖片描述

  • emp表,插入一條數據,其中員工編號是1122,入職日期是1997年7月1號
  • 第一種方式 to_date(日期,格式) 推薦使用

insert into emp(empno,hiredate) values(1123,to_date(‘1997-07-01’,‘YYYY-MM-DD’));
在這裏插入圖片描述

  • 第二種方式 Oracle認爲滿足DD-MON-YY這種格式的字符串是時間,其他字符串不是時間
  • DD-MON-YY是可以修改的 不推薦使用

insert into emp(empno,hiredate) values(1122,‘01-7月-97’);
在這裏插入圖片描述

  • 日期默認格式由參數NLS_DATE_FORMAT控制

select * from nls_session_parameters;

  • to_char() 將日期和數值類型轉換爲字符串
  • 查詢入職時間是1980-12-17的員工,使用to_date/to_char函數

select * from emp where hiredate = to_date(‘1980-12-17’,‘YYYY-MM-DD’);
select * from emp where to_char(hiredate,‘YYYY-MM-DD’) = ‘1980-12-17’;

6、null 空值

  • null 意爲空值、不存在、不知道的值
  • 空值參與計算結果也是空值
  • 查詢員工姓名和年薪(加上獎金)

select ename,sal*12+comm from emp;
在這裏插入圖片描述

7、where 語句

  • where子句,對結果進行限定
  • where子句中是一個或者多個條件表達式,某一行是否被查詢出來,取決於表達式結果
    是真還是假
  • 條件永遠爲真,會查詢出所有記錄
  • 查詢姓名是SMITH的員工信息

select * from emp where ename=‘SMITH’; --字符串是區分大小寫
在這裏插入圖片描述

8、比較運算符

  • 大於(>) 、大於等於(>=) 、小於(<) 、小於等於(<=) 、等於(=) 、不等於(<> !=)
  • 其他比較運算符:
    between A and B 在兩者之間 大於等於A且小於等於B
    in(A,B) 匹配列表中每一項 等於A或等於B

  • 查詢工資在1500和3000之間的員工信息

select * from emp where sal between 1500 and 3000;
在這裏插入圖片描述

  • 查詢工資爲1500和3000的員工信息

select * from emp where sal in (1500,3000);
在這裏插入圖片描述

9、like運算符 (_ %)

  • % : 可表示零或多個字符 例:張% 表示 張 張三 張亮 張三丰 張三丰子
  • : 可表示一個字符 例:張 表示 張三 張亮
  • 查詢姓名第二個字符是A的員工

select * from emp where ename like ‘_A%’;
在這裏插入圖片描述

  • 查詢姓名以S開頭的員工

select * from emp where ename like ‘S%’;
在這裏插入圖片描述

10、邏輯運算符

  • NOT 多個條件都要滿足,OR 多個條件只要滿足其中1個就會被查詢出來,NOT 對條件取反;
  • 查詢工資大於1500或者部門號是20的員工信息

select * from emp where sal>1500 or deptno=20;
在這裏插入圖片描述

  • 運算優先級 NOT>AND>OR
  • 查詢工資大於1500的PRESIDENT和工資大於1500的SALESMAN的員工

select * from emp where (job = ‘SALESMAN’ or job=‘PRESIDENT’) and sal>1500;
在這裏插入圖片描述

11、order ⼦句

  • 使⽤ORDER BY ⼦句將記錄排序 ASC: 升序,缺省 DESC: 降序
  • 查詢部門20的員工,按照工資升序排列

select * from emp where deptno=20 order by sal asc; --asc 省略

  • 查詢員工信息,按照工資降序排

select * from emp order by sal desc;
在這裏插入圖片描述

12、轉義字符 ( \ )

  • 查詢名字最後1個字是%的同學

select * from student where sname like ‘%%’ escape ‘’;
在這裏插入圖片描述

13、字符函數

在這裏插入圖片描述

13、數字函數

在這裏插入圖片描述

三、常用函數

1、單行函數

  • 字符串函數:對字符串操作
  • 數字函數:對數字進行計算,返回一個數字
  • 日期函數:對日期和時間進行處理
  • 轉換函數:可以將一種數據類型轉換爲另外一種數據類型

2、多行函數(聚合函數)

  • AVG ([DISTINCT|ALL]n) 求平均數
  • SUM ([DISTINCT|ALL]n) 求和
  • COUNT ({ *|[DISTINCT|ALL]expr}) 計數
  • MAX ([DISTINCT|ALL]expr) 求最⼤值
  • MIN ([DISTINCT|ALL]expr) 最⼩值

四、分組查詢

1、 group by⼦句

  • select後⾯的列必須要出現在group by中,但是出現在group by後⾯列不⼀定要出現select中
  • 查詢每個部門的平均工資

select deptno,avg(sal) from emp group by deptno;
在這裏插入圖片描述

  • 查詢每個年齡段的人數

select sage,count(*) from student group by sage order by sage;
在這裏插入圖片描述

2、分組過濾 having

  • having 對分組進行過濾
  • where 對行進行過濾
  • 查詢每個部門平均工資,只顯示平均工資大於2000的

select deptno,avg(sal) from emp group by deptno having avg(sal) >2000;
在這裏插入圖片描述

3、多表連接查詢

  • 當兩表關聯,生成笛卡爾乘積(有很多無效的記錄)
  • 使用連接條件將有效的記錄過濾出來
  • 使用表前綴,可以提高查詢的效率
  • 等值連接:連接條件使用=號
  • 不等連接:連接條件使用除了=之外其他比較運算符 > >=
  • 查詢員工工號,姓名,部門號,工作地

select emp.empno,emp.ename,emp.deptno,dept.loc from emp,dept where emp.deptno = dept.deptno;
select e.empno,e.ename,e.deptno,d.loc from emp e,dept d where e.deptno = d.deptno;
在這裏插入圖片描述

4、內 外 左 右 連接

  • 內連接 (inner join)
  • 外連接 (outer join)
  • 左連接(left join)
  • 右連接 (right join)
  • 查詢每門功課的選擇人數,將沒有人選的功課也顯示出來

select c.cname,count(sc.sid) from score sc right join course c on sc.cid = c.cid group by c.cname;
在這裏插入圖片描述

5、子查詢

  • ⼦查詢的結果返回多⾏
  • 大於最大值 >ALL
  • <ALL 小於最小值
  • <ANY 小於最大值
  • 大於最小值 >ANY
  • 查詢工資高於部門20所有人的員工

select * from emp where sal >(select max(sal) from emp where deptno=20);
select * from emp where sal >ALL(select sal from emp where deptno=20);

  • 從emp表中工資小於CLERK的最高工資的且職位不是CELRK的員工

select * from emp where sal < (select max(sal) from emp where job=‘CLERK’) and
job<>‘CLERK’;
select * from emp where sal < ANY(select sal from emp where job=‘CLERK’) and
job<>‘CLERK’;


五、SQL執行順序

  • 1.from子句
  • 2.where子句
  • 3.group by子句
  • 4.having子句
  • 5.select子句
  • 6.order by子句

六、數據操縱語言 DML

1、insert into :將數據插入到數據表中

–第一種方式 表名後面跟列名
insert into dept(deptno,dname,loc) values(50,‘TEST50’,‘NANJING’);
–如果列名不寫,插入空值
insert into dept(deptno,dname) values(60,‘TEST60’);
–第二種方式,表名後不寫列名,表示要插入所有的值
insert into dept values(70,‘TEST70’,‘SH’)
–插入空值,需要寫NULL
insert into dept values(80,‘TEST80’,null)






2、update :更新數據表中已存在的數據

  • 將SMITH的工資修改比KING多500

update emp set sal = (select sal+500 from emp where ename=‘KING’) where
ename=‘SMITH’;

3、delete :刪除數據表中的數據

  • 刪除員工表中員工號爲1122和1123的數據

delete emp where empno in(1122,1123);

七、約束(constraint)

  • 約束是表級強制執⾏的規則
  • 保護表中數據的完整性和⼀致性
  • 約束類型

NOT NULL ⾮空約束 C
UNIQUE Key 唯⼀約束
PRIMARY KEY 主鍵約束 P
FOREIGN KEY 外鍵約束
CHECK 檢查約束 ⽤戶可以⾃⼰定義檢查的內容



八、數據定義語言:DDL

  • Oracle數據類型
    VARCHAR2(size) 可變長字符串
    CHAR(size) 定長字符串
    NUMBER(p,s) 數字值
    DATE ⽇期值
    INTEGER 整數
    FLOAT ⼩數





1、create :創建表或其他對象的結構

  • 創建一個學生表(學號、姓名、性別、出生日期)

create table student
(
sid varchar2(20) primary key,–主鍵
sname varchar2(10) not null,–非空
ssex char(1) default ‘M’,–默認值,缺省值
birthday date
)





  • 備份emp表 改名爲emp_bak

create table emp_bak as select * from emp;

2、alter :修改表或其他對象的結構

  • 可以修改數據類型,長度,默認值
  • 修改的時候不能影響原有的數據
  • 修改一列 phone 13位

alter table student modify (phone varchar2(13))

3、drop :刪除表或其他對象的結構

  • 刪除學生表中數據及表結構

drop table student;

4、truncate :刪除表數據,保留表結構

  • 刪除表中全部記錄

truncate table student;

5、delete 和truncate的區別

  • delete可以選擇刪除部分記錄,truncate只能全部記錄
  • delete是DML語句,可以回滾,truncate是DDL語句,不能回滾
  • truncate刪除速度比delete快
  • truncate會回收空間,delete不會
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章