1. 程式人生 > >1. 安裝Oracle,配置環境 2. 實現查詢From子句 3. 實現查詢where子句 4. 實現查詢order by子句

1. 安裝Oracle,配置環境 2. 實現查詢From子句 3. 實現查詢where子句 4. 實現查詢order by子句

不可 所有 ear sql文件 是否 階段 dna cls 數學運算

一、環境安裝
1. 登錄:以管理員身份登錄
sqlplus 登錄名/密碼
管理員身份登錄:sqlplus system/123456
2. 登錄後,導入案例。下載scott.sql文件,執行下面一行的命令
SQL>@"E:\兄弟連文檔\oracle\java 19\day01\script\scott.sql";
此時我們擁有非管理員的用戶:scott
3. 激活scott的賬號,激活用scott可登錄
alter user scott identified by tiger;
alter user 登錄 identified by 登錄密碼;
此時如果成功:
SQL> show user
顯示:USER 為 "SCOTT"
4. 退出system管理登錄,重新以scott/tiger登錄
C:\..\sqlplus scott/tiger
登錄成功
SQL> desc dept;
如成功

名稱 是否為空? 類型
----------------------------------------- -------- ------------------

DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
---------------------------------------------------------------------------------------------
二、sql命令
0. 在Oracle環境下清空屏幕
SQL> host cls;
1. 查看表結構
SQL> desc 表名;
例如: desc dept; 查看dept部門表的表結構
desc emp; 查看emp員工表的表結構
2.專業詞匯
數據庫:存儲數據的倉庫。
數據存儲經歷的階段
人工階段 -- 很久很久以前...有一個屋子放置一臺(巨大個的)計算機,用於實現科學計算。
文件階段 -- 用文件實現【永久存儲】
數據庫階段--用數據庫實現存儲
常見關系型數據庫
DB2 -- IBM
Oracle -- Oracle公司(甲骨文)
Sql Server -- 微軟
MySQL -- Oracle公司

java程序猿必備關系數據庫:Oracle\MySql
數據庫分類
非關系型數據庫: 後續課程有說
關系型: 層次結構、網狀結構、關系型數據庫
數據庫系統
DB -- 數據庫
RDB -- 關系型數據庫
RDBMS -- 關系型數據庫管理系統
數據庫存儲的基本單位
表(實體描述) -- class Student{... ...}
字段(列) -- 屬性
值(行) -- 實體對象值
dept表 列
行 DEPTNO DNAME LOC
------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
Oracle常見數據類型:
數值型 number(有效長度,小數點保留位數); 舉栗:number(10,2) 12345678.12
字符
可變長度字符 varchar2(有效長度) 舉栗:varchar2(5) ‘ab‘ 實際存 ‘ab‘
varchar2(5) ‘abcde‘ 最多存5個
不可變長度字符 char(有效長度) 舉栗:char(5) ‘ab‘ 實際存 ‘ab ‘
char(5) ‘abcde‘ 最多存5個
char當實際存儲字符不足時補空格,varchar2按實際字符長度存儲不補空格
日期 date ... 月/日/年 小時:分鐘:秒 ...

3.查詢一個表的內容:from子句
前導條件:登錄名scott 密碼tiger
3.1 查詢dept部門表的所有字段信息
select * from dept;
*表示所有的列字段: deptNo,dName,loc

3.2 查詢顯示emp員工表中:員工編號、員工姓名、工資、獎金、部門編號
語法:select 列名1,列名2,...,列名N from 表名;
練習:select empNo,eName,sal,comm,deptNo from emp;

3.3 查詢顯示dept部門的:部門編號,部門名稱,所在地區
select deptNo,dName,loc from dept;

--【總結】from子句-------------------------------------------------------------------------------------
查詢一個表的所有字段:字段名可用* 代替。

select 列名1,列名2,... ... ,列名N from 表名;

select * from 表名;

4. from 子句進階
4.1 別稱,給當前字段或這個表起外號:顯示部門時統一部門字段標題dXxx的格式。
語法:select 列名1 別稱1,列名2 別稱2,... ,列名N 別稱N from 表名;
默認:select deptNo,dName,loc from dept;
練習:select deptNo dNo,dName,loc dLoc from dept;
思考:
員工表emp裏有字段:empNo,eName...deptNo(部門編號)
部門表dept裏有字段:deptNo(部門編號),dName,loc
列字段同名了,此時必須用別稱來區分

4.2 數學運算:+ - * / 求當前員工的年薪(忽略獎金) = 月薪*12. 顯示員工姓名、月薪、年薪
select eName,sal, sal*12 from emp; 顯示標題eName,sal,sal*12

select eName,sal, sal*12 yearSal from emp; 顯示標題eName,sal,yearSal

思考:員工當月實發工資=工資sal+提成comm ,顯示員工姓名和實發工資
select eName,sal,comm,sal+comm from emp; 此時沒獎金的人沒有實發工資,
oracle中 運算數1+運算數2 任何1個是null結果是null
當某個員工沒有績效獎金comm是,工資sal+獎金comm顯示結果是null
沒有控制處理時:select eName,sal,comm,sal+comm money from emp;
ENAME SAL COMM MONEY
-------------------- ---------- ---------- ----------
SMITH 800
... ...
4.3 null值的處理,查詢獎金是null時依然計算實發工資
語法:nvl(字段,新值) 功能:將字段裏時null的內容替換成新值
s
練習:將獎金是null的顯示0
select eName,nvl(comm,0) from emp;
練習:當獎金是Null時依然計算實發工資(sal+comm)
select eName,sal,nvl(comm,0) cm, sal+nvl(comm,0) money from emp;
顯示結果:
ENAME SAL CM MONEY
-------------------- ---------- ---------- ----------
SMITH 800 0 800
... ...

練習:查詢所有員工年薪和年度提成(顯示員工姓名、年薪yearSal、年度提成yearComm)
ename sal*12 nvl(comm,0)*12==對

select eName, sal*12 , nvl(comm,0)*12 from emp;
完美要求可加入別稱
select eName, sal*12 yearSal, nvl(comm,0)*12 yearComm from emp;

4.4 字符鏈接。 當需要有顯示前綴、後綴、中間鏈接賦的時候可用

練習:顯示 部門名_所在地區
java的字符鏈接: "abc"+"123" 結果是 "abc123"
oracle的字符鏈接:‘abc‘||‘123‘ 結果是 ‘abc123‘ select ‘abc‘||‘123‘ from dual;
答:select dName||‘_‘||loc from dept;

練習:要求姓名以 Mr.開頭

答:select ‘Mr.‘||eName,sal from emp;

思考:顯示 abc 成 ‘abc‘ 即顯示結果中有‘號,特殊符號的處理
思考答1:select ‘‘‘abc‘‘‘ from dual;
思考答2:select ‘‘‘‘||‘abc‘||‘‘‘‘ from dual;

5、where子句 :有條件查詢 ,表達滿足什麽條件顯示數據。結合from使用

5.1 查工資大於1000的員工
select * from emp where sal>=1000; --顯示當前工資在1000及以上員工的所有字段
select eName,sal from emp where sal>=1000; --查詢工資大於1000及以上員工的姓名和工資

5.2 姓名是WARD的員工
select * from emp where eName = ‘WARD‘;
select * from emp where eName = ‘Ward‘; 還能出來結果嗎?答不出,‘值‘區分大小寫

5.3 查詢部門所在地區紐約的部門信息是什麽?
select * from dept where loc=‘NEW YORK‘;


5.4 查沒獎金的員工信息。
你們認為:select eName,comm from emp where comm = null;
答案1:select eName,comm from emp where nvl(comm,0) = 0 ;


6、order by 子句:排序,按指定規則排序
6.1 按部門編號從大到寫顯示部門信息
思路:排序依據是部門編號,排序規則是從大到小
答:select * from dept order by deptNo desc; --desc降序從大到小的排序規則。asc升序
6.2 按部門名稱升序排列顯示
答: select * from dept order by dname asc;

1. 安裝Oracle,配置環境 2. 實現查詢From子句 3. 實現查詢where子句 4. 實現查詢order by子句