oracle命令列登入 + 簡單命令 + 基礎查詢 + 單行函式 (學習筆記)
阿新 • • 發佈:2019-02-12
使用oracle之前,先開啟兩個服務。計算機-》管理-》服務
OracleOraDb11g_home1TNSListener、OracleServiceORCL
· 執行——》cmd——》sqlplus
· win+R -> sqlplus
格式化指令 (命令不區分大小寫)
· set pagesize 30;//設定每頁長度。
· set linesize 300;//設定每行長度。
oracle命令建立記事本檔案: ed+空格+檔名
· (如果不寫字尾,預設為*.sql 找不到檔案時就建立新的*.sql檔案) 檔案預設的路徑:C:\Users\Administrator
· 儲存檔案後必須關閉才可以繼續使用。
· 隨後要想執行檔案中的命令,使用“@檔名稱”(預設找到*.sql的字尾)
使用者切換語法
· 如果是使用sys登入,必須加上as sysdba,否則無法登入。
共有四個使用者 ·超級管理員: sys/change_on_install
·普通管理員: system/manager
·普通使用者: scott/tiger
·大資料使用者 :sh/sh
" show user "命令,輸出當前的登入的管理使用者。emp表屬於scott使用者.
嚴格來講,emp表的名稱是“模式名稱.表名稱”,(使用者名稱.表名稱),即:scott.emp
在sqlplus命令裡面,除了可以使用Oracle自己定義的命令之外,也可以使用host指令呼叫本機作業系統命令
·呼叫"echo" 命令:"host echo helloworld"
·呼叫"copy" 命令:"copy 原始檔路徑 拷貝檔案路徑 " 如: host copy e:\a.txt e:\b.txt
·DML:資料操作語言。主要是資料庫的查詢與更新。開發中使用的語言。
·DDL:資料定義語言。主要是指物件的建立。開發前的設計。
·DCL:資料控制語言。主要進行許可權的管理操作。系統人員的工作。
select* from tab; 查詢一個使用者下所有的資料表。
desc 表名稱; 查詢一個表的結構。
根據每一列單獨進行格式化操作。
例如: · col ename for a10;
· col job for a10;
簡單查詢基本語法:(首先執行的是from子句,確定資料來源)
select [distinct]* | 列名稱 [別名],列名稱 [別名],...
from 表名稱 [別名];
eg: select job,empno from emp;
("*"指的是全部記錄,所有的行和列,distinct關鍵字用於消除重複內容,distinct只能放在select後面)
(如果查詢的資料是多個列,只有當多個列的資料都相同的情況下才可以消除)
可以對查詢的結果進行四則運算,eg:select sal*12 from emp;
加別名:select sal*12 income from emp;(別名不建議使用中文)
在使用SELECT子句查詢資料的時候,除了查詢還可以設定一些常量:
·如果常量是字串,使用單引號宣告,例如'hello',別名不需要引號:
·如果常量是數字,則直接編寫;
·如果常量是日期,則按照日期風格格式編寫,"xx日-xx月-xx年".
·eg: select '僱員'ename from emp;
select子句中使用||可將兩個列合併為一個列進行顯示:
·eg1: select empno||ename from emp;
·eg2; select '僱員編號:'|| empno || ',姓名:'|| ename from emp;
在Oracle資料庫中,所有的資料是要區分大小寫的,
·eg: select * from emp where ename='SMITH';和小寫的smith不一樣,只有大寫有查詢結果。
空的操作只能是IS NULL 或者IS NOT NULL;
·eg: 查詢所有領取佣金的僱員資訊(佣金存在,不為空)
select * from emp where comm is not null;
select * from emp where not comm is null;
select句子要落後與where子句執行
·關係運算符:>、<、>=、<>(!=);
·邏輯運算子:AND、OR、NOT;
·範圍運算子:BETWEEN...AND;
·謂詞判斷:IN、NOT IN;
·空判斷:IS NULL、IS NOT NULL;
·模糊查詢:LIKE;
使用LIKE模糊查詢時,如果不設定關鍵字(%%"),則表示查詢全部。
LIKE可以應用在各種資料型別上,不一定是字串。
·eg: select * from emp where sal like '%9%';
使用NOT IN 查詢時,查詢範圍裡面不允許出現NULL,否則不會有任何查詢結果。
· eg: select * from emp where empno not in(7369,7788,null); 結果未選定行
SECLECT子句落後於WHERE子句執行,所以在SELECT定義的別名,無法在WHERE中使用。
在整個的SQL查詢結構之中,只有ORDER BY可以呼叫SELECT中定義的別名。
ORDER BY 子句是在SELECT子句之後執行,則order by可以使用在SELECT之中定義的別名:
eg: 查詢每個僱員的編號,姓名,年薪,按照年薪由低到高排序:
select empno,ename,sal*12 as 年薪 from emp order by 年薪;
·ASC (預設,不寫也是ASC):按照升序排列
·DESC : 降序。
同時設定多個排序欄位:
按照工資由高到低,如果工資相同,則按照僱傭日期由早到晚:
·eg: SELECT * from emp ORDER BY sal DESC,hiredate ASC; (ASC是預設的)
···字串函式:
返回值 函式(引數列表) 函式功能描述
·字串 UPPER(列 | 字串) 將傳入的字串變為大寫字母形式
·字串 LOWER(列 | 字串) 將傳入的字串變為小寫字母形式
·字串 INITCAP(列 | 字串) 開頭首字母大寫,其他字母全部小寫
·字串 LENGTH(列 | 字串) 取得字串的長度
·字串 SUBSTR(列|字串,開始索引,[長度]) 進行字串的擷取,如果沒有設定長度,表示從開始索引一直擷取到結尾
·字串 REPLACE(列|字串,舊內容,新內容) 將指定字串資料由新內容替代舊內容
~在Oracle裡面,所有額函式如果要進行驗證,也必須編寫sql語句,為了方便,專門提供了一個dual虛擬表。
eg:SELECT upper('hello') from dual;
~在程式之中,所有字串的首字母索引都是0,但是在Oracle裡面,所有字串首字母索引設定為1,如果寫的0,那麼也會按照1的方式進行處理。
~範例:取每位僱員姓名的後三位字母:SELECT ename,substr(ename,-3) FROM emp;
長度可以設定為負數,表示後面第幾位索引,此類設定方式只有Oracle資料庫才有。
···數值函式:
返回值 函式(引數列表) 函式功能描述
·數字 round(列 | 數字 [,小數位]) 實現資料的四捨五入.沒有設定小數點的保留位數,預設不保留小數位進行進位;設定為負數,表示進行整數位的四捨五入
·數字 trunc(列 | 數字 [,小數位]) 實現小數位資料的擷取,擷取時不進位。
·數字 mod(列 | 數字,列 | 數字) 求模(計算餘數)
··日期公式:
日期 + 數字 = 日期(表示若干天之後的日期)
日期 - 數字 = 日期(表示若干天之前的日期)
日期 - 日期 = 數字(天數)
若果直接使用天數來進行年或者月的計算,最終的結果不準確。所以Oacle提供了以下準確計算日期的操作函式:
···日期函式:
select next_day(sysdate,'星期三') from dual;數功能描述
·日期 add_months(列 | 日期,月數) 返回在指定日期上增加月數後的日期
·數字 month_between(列 | 日期,列 | 日期) 返回兩個日期之間的天數
·日期 last_day(列 | 日期) 取得指定日期所在月份的最後一天
·日期 next_day(列 | 日期,'星期X') 返回下一個指定的一週時間數對應的日期
Oracle裡面提供了2個偽列 "sysdate" 和 "systimestamp" 來獲得當前的日期。SELECT sysdate from dual;
eg:查詢所有在僱傭所在月倒數第三天僱傭的僱員資訊:
SELECT empno,hiredate,last_day(hiredate)-2 from emp where hiredate=last_day(hiredate)-2;
查詢當前日期的下一個星期三:select next_day(sysdate,'星期三') from dual;
···轉換函式:
返回值 函式(引數列表) 函式功能描述
·字串 to_char(列 | 日期 | 數字,轉換格式) 將日期或數字格式化為指定結構的字串
·日期 to_date(列 | 字串,轉換格式) 按照指定的轉換格式編寫字串或將其變為日期型資料
·數字 to_number(列 | 字串) 將字串變為數字
eg一1:·select to_char(sysdate,'yyyy-mm-dd') from dual; 年-月-日
·select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual; 年-月-日 時:分:秒
·select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;表示按照24小時顯示
to_char()函式可以實現日期的拆分:·select to_char(sysdate,'yyyy'),to_char(sysdate,'mm'),to_char(sysdate,'dd') from dual;
: 查詢2月份僱傭的僱員:select* from emp where to_char(hiredate,'mm')='02';
或者select* from emp where to_char(hiredate,'mm')=2; oracle提供有自動轉型操作,自動完成型別匹配。
eg一2:·select to_char(187816257272672,'L999,999,999,999,999,999') from dual; L表示貨幣,9表示任意數字。
eg二1:·select to_date('1888-12-3','yyyy-mm-dd') from dual;一般意義不大
eg三1:·select to_number('1')+to_number('2') from dual;和select '1'+'2' from dual;結果一樣,因為Oracle裡面有自動轉型操作。
···通用函式(Oracle特色函式):
返回值 函式(引數列表) 函式功能描述
·數字 nvl(列 | NULL,預設值) 如果傳入的是null,則使用預設數值處理,否則使用原始數值處理。
·資料型別 decode(列|字串|數值,比較內容1,顯示內容1,比較內容2,顯示內容2,...[,預設顯示內容])
(設定的內容會與每一個比較內容進行比較,如果內容相同,則使用顯示內容進行輸出,如果都不相同,則使用最後的預設資訊輸出)
eg1: select empno,ename,sal,comm,(sal+nvl(comm,0))*12 as 年薪 from emp;
alter table Student modify Sage int;修改列定義
一次性插入多條記錄,直接拷貝多條資訊:
insert into SC values(9512101,'c01',90);
insert into SC values(9512101,'c02',86);
insert into SC values(9512101,'c06',null);
insert into SC values(9512102,'c02',78);
insert into SC values(9512102,'c04',66);
insert into SC values(9521102,'c01',82);
insert into SC values(9521102,'c02',75);
delect from myemp where EMPNO in (
select myemp.EMPNO
from myemp join mydept on mydept.DEPTNO = myemp.DEPTNO
where JOB = 'MANAGER'
and sal<1000
);
delect from myemp1 where EMPNO in (select EMPNO from mydept where JOB = 'MANAGER') and sal<1000;