前言:
- 為什么要學習數據庫?
1.1數據庫的概念
數據庫是按照數據結構組織,存儲和管理數據的倉庫。
數據庫,簡單來說是本身可視為電子化的文件櫃-存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。
它將數據以一定方式存儲在一起、能夠為多個用戶共享、盡可能小的冗余度的特點、是與應用程序彼此獨立的數據集合。
1.2數據模型是數據庫中數據的存儲方式,是數據庫系統的基礎
數據模型經歷了:
1.2.1層次模型:層次模型是數據庫系統最早使用的一種模型,他的數據結構是一顆"有向樹"
1.2.2網狀模型:網狀模型以網狀結構表示實體與實體之間的聯系。網中的每一個節點代表一個記錄類型,聯系用鏈接指針來實現。網狀模型可以表示多個從屬關系的聯系,也可以表示數據間的交叉關系,即數據間的橫向關系和縱向關系,它是層次模型的擴展。網狀模型可以方便地表示各個類型的聯系,但是結構復雜,實現的算法難以規范化
1.2.3關系型:在關系型模型中基本數據結構就是二維表,不用像層次或者網狀那樣的鏈接指針。記錄之間的聯系是通過不同關系中同名屬性來實現的
關系型數據庫優勢:
數據結構單一
關系規范化,並建立在嚴格的理論基礎上
概念簡單,操作方便
組成
a.單一的數據結構-----關系
b.關系操作集合
c.關系的數據完整性,准確性和一致性
1.3關系型數據庫:
關系型數據庫簡單的可以理解為二位數據庫,表的格式就如Excel,有行有列。所謂關系型數據庫,是指采用了關系模型來組織的數據庫。關系模型是1970年由IBM的研究院E.F.Codd博士首先提出,在之后的幾十年中,關系型的概念得到了充分的發展並逐漸成為數據庫結構的主流模型。簡單的說,關系型指的就是二維表格模型,而一個關系型數據庫就是由二維表及其之間的聯系組成的一個數據組織。
1.4常見關系型數據庫及其基本概念:
1.4.1常見關系型數據庫:
mysql sqlServer oracle db2 sybase
1.4.2基本概念
a.關系:一個關系對應着一個二維表,二維表就是關系名,每張表由行和列組成
b.元組:在二維表中的一行,成為一個元組。可以用過使用結構化查詢語句(Structured Query Language)來操作元組語句
c.屬性:元組中的一個屬性值(分量)
d.碼:如果在一個關系中存在這樣的一個屬性,他的值就能用來唯一標識一行,則稱這姓屬性為關系的鍵或者碼
e.主鍵(主碼):從若干個候選碼中選出來的一個用來唯一標識一行數據的屬性
f.外鍵:用來邏輯的關聯多張表的數據信息
2.Oracle的認知(一個認知)
oracle是一家公司的名字(甲骨文公司),世界上屈指可數的,是國際上非常大的巨型IT公司,是全球最大的企業級軟件公司,總部位於美國加利福尼亞州的紅木灘。1989年正式進入中國市場。2013年,甲骨文已超越IBM,成為繼Microsoft后成為全球第二大軟件公司,最有名的產品是DB,database,RDBMS,關系型數據庫系統。世界第一大數據庫提供商,上海研發中心,五角場,離復旦大學近。主營oracle數據庫軟件,全世界第二大ERP提供商,大型企業級內部管理系統,包括人力資源管理等等。Oracle是Oracle公司第一個也是最成功的一個產品,發展經歷過一個漫長的過程,到1997年6月,Oracle第八版發布。Oracle支持面向對象的開發以及新的多媒體應用,這個版本也成為支持Internet、網絡計算等奠基定了基礎。同時這一版本開始具有同時處理大量用戶和海量數據的特性。1998年9月,oracle公司正式發布oracle 8i。"i"代表Internet,這一版本中添加了大量為支持Internet而設計的特性,這一版本為數據庫用戶提供了全方位的Java支持,Oracle 8i成為第一個完全整個了本地Java運行時環境的數據庫。然后有9i,10g,"g"代表”grid“,網格。這一版本最大的特性就是加入了網格計算功能。然后是11g,現在發展到12c,c代表cloud,也就是現在炒的非常火的雲概念。
3.三個名詞:
sql:結構化查詢語句,操作oracle數據庫的語言
sqlplus:oracle軟件自帶的可以輸入sql,且將sql執行結果顯示的終端
pl/sql:程序化的sql語句,在sql語句的基礎之上加入了一定的邏輯操作,如if for,使之成為一個sql塊,完成一定的功能
4.四種對象
table:表格,由行和列組成,列又稱為字段,每一行內容為表格的一天完整數據。
view:視圖,一張表或者多張表的部分或者完整的映射,好比表格照鏡子,鏡子里面的虛像就是view
出去常見的table和view兩種對象外,oracle還支持如下四種對象
sequence:序列
index:索引,提高數據的訪問效率
synonym:同義,方便對象的操作
program unit:程序單元,pl/sql操作的對象
5.五種分類
sql的五大分類
Data retrieval:數據查詢
select
DML:數據操作語言(行級操作語言) 操作的是表格中一條一條的數據
insert update delete
DDL:數據定義語言(表級操作語言) 操作的內容為表格(對象)
create alter drop truncate rename
transaction control(事務控制):commit rollback savepoint
DCL:數據控制語言
grant revoke
delete與truncate區別:
delete:刪除表中的一條或者多條記錄,並不返回表格的初始化狀態
truncate:清空表格,並返回表格的初始化狀態
6.oracle的使用
啟動:
6.1 win+R------->cmd-------->sqlplus "as sysdba" //以sysdba身份登陸(此時可以創建用戶,分配權限等)
win+R------->cmd-------->sqlplus username/password //以指定用戶名/密碼身份登陸
直接找到安裝目錄,打開sqlplus終端
6.2 創建用戶:
create user 用戶名 identified by 密碼
6.3 權限授予:
grant resource,connect to user;
resource:
create trigger
create sequence
create type
create procedure
create cluster
create operator
create indextype
create table
connect:
create session
6.4 切換用戶:
conn username/password
6.5 因為數據文件的默認語言環境為英語,當前windows系統是中文,中英文時間顯示不一致,導入會失敗,需要先修改語言環境
alter session set nls_date_language=english;
alter session set nls_language=english;
導入表給
@ e:\oracle\summit2.sql
start e:/oracle/summit2.sql
6.6 查看表結構
desc table_name;
Model 1 Select Rows
1.select :
語法:
select [distinct] {*,column [alias],...} from table
注:[]括起來的內容代表可有可無,* 代表所有列 ,distinct關鍵字只能跟在select關鍵字之后,select 子句后邊指定要查詢的列,from 子句后邊跟要查詢的表.
(英文名是first_name+last_name):My name is first_name.last_name;
2.select語句可以對指定的列的所有值進行算術運算。
語法:
select col_name 運算符 數字
from tb_name;
注意:select語句永遠不對原始數據進行修改。
3.給查詢的列區別名
語法:
select old_column [as] new_column_name
from tb_name;
4.使用||可以使得多列的值或者列和特殊的字符串合並到一個列進行顯示
語法:
select col_name||'spe_char'||col_name
from tb_name
'spe_char':如果一個列的值要跟特殊的字符串連接顯示,使用該語法。
5.對null值得替換運算
語法:
select nvl(col_name,change_value)
from tb_name;
nvl2(col_name,不為空顯示的值,為空顯示的值);
6.使用distinct關鍵詞,可以將顯示中重復的記錄只顯示一條
語法:
select distinct col_name,col_name...
from tb_name; 注意1:distinct關鍵詞只能放在select關鍵詞后面
如:select id,distinct title
from s_emp;
該語句語法錯!!!!!
注意2:如果distinct關鍵詞后面如果出現多列,表示多列聯合去重,即多列的值都相同的時候才會認為是重復的記錄。
test表:
id id2
1 2
1 3
2 4
3 4
3 4
select distinct id,id2
from test;
顯示結果為:
id id2
1 2
1 3
2 4
3 4
7.sqlplus命令
a:在當前操作的命令行追加內容
a test
c: 在當前操作的命令行修改內容
c/old_char/new_char
clear buffer:清空當前緩存的命令
del:刪除當前操作行
del line_num指定刪除第幾行
i:當前操作命令行的下一行插入內容
l:查看緩存命令
l line_num:查看指定的命令行
n text:替換第n行的整行內容
!:后面接終端命令 ------linux環境下
!clear:清屏 ///
$:后接終端命令
$cls ---------> windows環境下
/:執行緩存sql命令
save file_name:將緩存命令保存到file_name中 (append replace)
get file_name:將文件中的內容提取到sqlplus
start 和 @ file_name:執行文件中的sql命令
edit file_name:使用終端設置好的vi編輯器編輯文件(對於windows使用的是notepad)
spool file_name 將接下來的sql語句以及sql的運行結果保存到文件中(append)
sql1
result1
sql2
result2
...
spool off 關閉spool功能
exit:退出
8.select id,last_name,first_name, salary, dept_id
from s_emp;
結果不好看,通過column使我們的顯示界面好看。
colu last_name format a15;
colu first_name format a15;
Column 有沒有改變數據表里數據啊,沒有,它只是改變顯示。它是不是SQL命令呢? 不是,它是sqlplus命令。除了剛才這個作用之外,我們下面來看看它還有什么作用。
COLUMN last_name HEADING 'Employee|Name' FORMAT A15
. 給last_name取別名為Employee|Name , 豎杠代表換行。
. A15表示十五個字節長,一短橫杠就是一個字節長
COLUMN salary JUSTIFY LEFT FORMAT $99,990.00
. salary JUSTIFY LEFT : 僅僅改變列名顯示為左齊
. FORMAT $99,990.00: 控制顯示格式為前面加 $ 符, “,”為分隔符, 0或9代表數字(通配符),0表示替換對齊數值,位數不足會補足,可以混合使用.
COLUMN start_date FORMAT A8 NULL 'Not hired'
. 如果start_date值為空的話,顯示為’Not hired’;
. Format后不能直接跟null, 要先a8或a10;
. NULL 'Not hired'和nvl有點不同, nvl要求類型匹配
column 顯示所有對列格式的設置情況
column last_name 顯示對last_name列顯示設置的情況
column last_name clear 刪除對last_name列格式設置的情況
Clear column 清除所有column的格式設置
Column某列的格式設置,這里的列並不特定於某個表.
ex:
1234 column 99.99 -- > ###### //出錯的時候不能顯示,只是顯示####
column columName 顯示對列的限制
model 2 Sorting & Limiting Selected Rows
1、Order by 子句的使用
1) Order by子句在整個
select語句中的位置:
始終位於最后
2) order by后可以跟什么:
列名,列的別名,表達式,
列出現在select關鍵字后的
順序(列號);
3) order by后可以跟多列,
表示先按第一列排序,
如第一列有相同值再按
第二列進行排序,如前二列
均有相同值,則按第三列進行排序...
4) ASC表升序,可以省略.
DESC表降序。
5)空值永遠是最大的。
升序排序的時候,空值放在最后
降序排序的時候,空值放在最前面的
2、Where子句的使用
語法:
select col_name,...
from tb_name
where col_name 比較操作表達式
邏輯操作符
col_name 比較操作表達式
1) 作用:對SQL語句返回的數據集進行篩選;
2) 位置:緊跟在from子句后
3) 內容:由一至多個限定條件組成,限定條件由表達式, 比較符, 字面值組成。
4) 所有字符串和日期要用單引號括起來,數值不需要單引號。
日期在Oracle里有特定的格式,’DD-MON-YY’(具體看日期的顯示格式),
否則作為一個字符串。
5) 幾種常見的操作符:
1》邏輯比較操作符
= > < >= <= !=
2》sql比較操作符
between and:在什么范圍之內
in(list):在一個列表中
like:模糊查詢,即值不是精確的值的時候使用
通配符,即可以代替任何內容的符號
%:通配0到多個字符
_: 當且僅當通配一個字符
轉義字符:
默認為\,可以指定 指定的時候用escape 符號指明即可,轉義字符只能轉義后面的一個字符
between 1 and 4: 包括起止值。限定內容為1到4。
in (1,2,4): 限定內容為1,2,4。
3》邏輯操作符
當條件有多個的時候使用
and:且邏輯
or:或邏輯
注意:and邏輯比or邏輯要高
not:非邏輯