之前的項目都是使用mysql數據庫開發的,現在進了新的公司,開始接觸到了Oracle數據庫,而本身之前沒有接觸過,就本身擠時間來學習一下。mysql
一.關係型數據庫的概念sql
關係型數據理論由E.F.Codd博士在1970年提出;數據庫
Codd制定了一個數據庫產品成爲關係型數據庫所必備一系列相關標準;express
它是RDBMS(關係型數據庫管理系統)的基礎;編程
關係型數據庫須要包含下面三個方面:安全
1.對象或關係的集合;服務器
2.基於關係的操做集合;oracle
3.因數據精確性和一致性二帶來的數據的完整性;編程語言
關係型數據庫是關係的集合或二維表的集合;分佈式
每一個表有行和列組成;
能夠經過Structured Query Language(SQL)來操做表中的數據;
表中的每一行數據能夠經過主鍵即Primary Key(PK)來惟一標識;
表與表之間可經過外鍵即Foreign Key(FK)來關聯;
關係型數據庫中的對象:
1.表:存儲的基本單元,有行和列組成;
2.視圖:從一個或多個表的數據本身的一邏輯表示
3.序列:用來產生主鍵;
4.索引:提升查詢的速度;
5.同義詞:一個對象的別名;
6.編程單元:包括過程、函數或包,以及PL/SQL中的聲明。
二.ORACLE簡介
oracle是一個最大的數據庫廠商提供的關係型數據庫產品
oracle的RDBMS也稱爲oracle服務器
1.一個存儲數據的地方;
2.能快速的得到數據;
3.數據庫安全性;
4.分佈式的數據庫;
5.客戶端和服務器的配置;
SQL——結構化的查詢語言,經過它能以一種標準化的方法來對關係型數據庫種的數據進行訪問和操做。
SQL*Plus——是最簡單的數據庫開發工具。它容許用戶從提示行上以交互方式輸入SQL語句和PL/SQL語句塊。這些語句被直接發給數據庫,而結果會返回到屏幕上。一般,SQL*Plus與oracle服務器集成在一塊兒,是標準oracle安裝的一部分。SQL/Plus是字符模式環境,window版本包括了需對GUI操做,主要用於鏈接數據庫和設置SQL*Plus選項。
PL/SQL——是用於從各類環境中訪問oracle數據庫的一種比較複雜的編程語言。它與數據庫服務器集成在一塊兒,也是標準數據庫安裝的一部分。
SQL命令:
1.取值語句:
SELECT
2.數據操做語句Data manipulation language(DML):
INSERT UPPDATE DELETE
3.數據定義語句Data definition language(DDL):
CREATE ALTER DROP RENAME TRUNCATE
4.事務控制語句Transaction control:
COMMMIT ROLLBACK SAVEPIONT
5.數據控制語句Data control language(DCL):
GRANT REVOKE
三.SELECT語句
語法:SELECT [DISTINCT] {*,column [alias],......} FROM table;
說明:
1.SELECT 後面能夠跟上列名、列別名、通配符;
2.FROM 子句後面跟上要查找的表名;
3.DISTINCT 查找不重複的記錄
4.SELECT語句能夠寫成一行或多行,不區分大小寫;
5.通配符*顯示錶中全部的列
select * from department;
6.查詢指定列時,SELECT語句中列與列之間用逗號分割
select d_id,d_name from department;
7.查詢出來的數值或日期能夠進行加減乘除運算,若是某一項爲NULL,那麼運算結果也爲NULL
select salary*12 from department;
可使用括號改變優先權,如:
select salary*12+100 from department; 和 select 12*(salary+100)from department;
8.採用NVL函數將NULL轉換成某個值,如NVL(列名,‘字符串’)或NVL(列名,數值)
9.列別名是可選的,一個列別名包含了空格、特殊字符、或者要區分大小寫,那就要給它加上雙引號
select last_name "Employees" from department;
四.排序和條件查詢
ORDER BY 子句:
1.order by 子句在整個SQL語句最後;
2.ORDER BY 後面能夠是列名、列別名、表達式、列出如今SELECT關鍵詞後的序號。
select name,salary from department order by salary; 等同於: select name,salary from department order by 2;
3.ORDER BY後面能夠跟多列,先按第一列排序,若是第一列相同再以第二列排序,一次類推。。。
4.ASC表示升序,是默認的,能夠省略,DESC是降序排列;
5.NULL永遠是最大的。
WHERE 子句:
1.緊跟在from子句以後,對返回數據進行篩選
2.條件由一個或多個表達式、比較符或字面值組成
3.全部字符串和日期都要用單引號包起來,數字不須要
4.日期在oracle數據庫有特定形式,‘DD-MON-YY’(具體看日期顯示格式),不然視做字符串
5.WHERE子句的運算符:=等於、 >大於、 >=大於等於、 <小於、 <=小於等於、 !=不等於、 <>不等於、 BETWEEN...AND...包括起止值、 IN(list)限定內容、 LIKE模糊查詢、 IS NULL爲空(不能使用=null)、 NOT BETWEEN不在...之間、 NOT IN再也不集合裏、 NOT LIKE不包含、 IS NOT NULL不爲空、 NOT、 AND、 OR;
五.單行函數
Oracle數據庫的函數做用:對數據進行計算、數據統計、修改數據顯示、數據類型轉換等
函數分類:單行函數和多行函數(組函數)
單行函數:字符函數、數值函數、日前函數、轉換函數;
單行函數的使用:做用在單行(單挑記錄)上,每行均可以返回一個結果,可操做數據項,接受參數並返回結果,修改數據類型,還能夠嵌套使用。
函數使用方式:
function_name(column|expression,[arg1,arg2,...])
1.字符函數:
lower:轉換成小寫;
upper:轉換成大寫;
initcap:首字母大寫,其他的都小寫;
concat:字符串鏈接;
substr(str,start,end):字符串截取;
length:求字符串長度;
nvl:空值置換
示例:
LOWER('SQL Course') sql course UPPER('SQL Course') SQL COURSE INITCAPP('SQL Course') Sql Course CONCAT('good','string') goodstring SUBSTR('String',1,3) Str LENGTH('String') 6
2.數值函數
round:四捨五入
trunc:截取,不進行四捨五入
mod:求餘,取模
示例:
ROUND(45.923,2) 45.92 ROUND(45.923,0) 46 ROUND(45.923) 46 ROUND(45.923,-1) 50 TRUNC(45.923,2) 45.92 TRUNC(45.923) 45 TRUNC(45.923,-1) 40 MOD(1600,300) 100
3.日期函數
MONTHS_BETWEEN(date1,date2) 兩個日期之間的月數
ADD_MONTHS(date,n) 指定日期上添加月數
NEXT_DAY(date,'friday') 指定日期的下一天(如:下一個星期五)是哪一天
LAST_DAY(date) 指定日期的最後一天
ROUND(date,'year') 對指定日期四捨五入,逢16日往月進一,逢7月往年進一
TRUNC(date,'year') 對指定日期進行截取
說明:oracle日期包括世紀、年、月、日、時、分、秒、毫秒,默認顯示DD-MON-YY,函數SYSDATE、SYSTIMESTAMP能夠返回相同時間,經過DUAL表可使用這兩個函數來查看系統時間。
MONTHS_BETWEEN('01-SEP-95','11-JAN-94') 19.774194 ADD_MONTHS('11-JAN-94',6) '11-JUL-94' NEXT_DAY('01-SEP-95','FRIDAY') '08-SEP-95' LAST_DAY('01-SEP-95') '30-SEP-95' ROUND('25-MAY-95','MONTH') 01-JUN-95 ROUND('25-MAY-95','YEAR') 01-JAN-95 TRUNC('25-MAY-95','MONTH') 01-MAY-95 TRUNC('25-MAY-95','YEAR') 01-JAN-95
4.轉換函數
TO_CHAR 將日期轉換成字符串,TO_CHAR(date,‘fmt’)使用format定時日期格式,使用fm來去除空格或0,使用逗號分割
日期格式模型的元素:
year:英文年份
month:英文月份
mon:英文月份縮寫
day:星期幾的英文單詞
DY:星期幾的前三個字母
ddap:英文拼寫的天
ddspth:英文拼寫的第幾天
d:一個星期的數字表示,週日爲1,週六爲7
dd:一個月的第幾天
ddd:一年的第幾天
yyyy:四位年
mm:二位月
hh24:24小時制的時
mi:分鐘
ss:秒
AM:上午
PM:下午
RR日期格式:
RR:0-49表明本世紀,50及以上表明上世紀(默認)
YY:表明和當前時間所處的同一世紀
TO_CHAR 將數值轉換成字符串,TO_CHAR(number,‘fmt’)
0:強制0填充未滿數據位數
9:表明數字
$:設置一個浮點型的美圓符號
L:使用本地貨幣符號
示例:
SELECT 'Order'||TO_CHAR(id)||'was filled for a total of'||TO_CHAR(total,'fm$9,999,999') FROM table WHERE date='21-SEP-95';
TO_NUMBER 將一個數值字符串轉換成數字
TO_DATE 將一個日期字符串轉換成日期
好了,今天就更新到這裏,下次更新內容是奪標查詢。