目錄
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不會