1. 程式人生 > 資料庫 >測試人員需掌握的資料庫知識小結

測試人員需掌握的資料庫知識小結

1、什麼是資料庫
儲存資料的倉庫。當前主流的包括關係型資料庫和非關係型資料庫
關係型資料庫:和Excel工作簿一樣,用由列和行構成的二維表來管理資料;利用SQL(Structured Query Language,結構化查詢語言)對資料開展實際操作。
非關係型資料庫:NOSQL資料庫(特殊場景下高效率,Not only SQL)儲存方式有以下:鍵值(Key-Value)儲存資料庫;列儲存(Column-oriedted)資料庫;面向文字文件(Document-Oriented)資料庫;圖型(Graph)資料庫
2、資料庫有哪些分類
小型資料庫 access 1000條以下
中型資料庫 mysql sqlserver 10萬以下

大型資料庫 oracle db2 dbase 10萬以上
3、oracle資料庫有哪些版本
oracle 9i (inter)網路技術
oracle 10g (grid)網格技術
oracle 11g (grid)網格技術
oracle 12c (cloud)雲技術
4、oracle的兩個服務
1)主服務
在Linux下切換到oracle使用者許可權
[oracle@localhost opt]$ sqlplus “/as sysdba”
SQL> startup
另外停止資料庫的指令如下(不要執行):
SQL> shutdown immediate
CTRL + D 退出當前命令
2)監聽服務
啟動監聽服務 lsnrctl start
檢視監聽服務的狀態 lsnrctl status
5、oracle 有的基本使用者
1)sys 超級管理員 密碼:安裝時密碼
特點:sys使用者必須以sysdba、sysoper身份登入
2)system 系統管理員 密碼:安裝時密碼
特點:主要管理其他使用者的
3)scott 例項使用者 密碼:tiger
特點:初次不可以登入,賬號被鎖定,只有解鎖才可以登入
6、常用的第三方工具pl sql安裝和使用
解鎖scott使用者 alter user scott account unlock;
修改scott使用者密碼 alter user scott identified by scott;
7、sql語句
1、基本查詢
1)查詢部門列資訊:select 列1,列2… from 表名
例:select * from 表名 (查詢所有資訊)
2)列上做運算:只有日期、數字型別的列才可做運算,如果列為空值,不可做運算
例:select empno,ename,sal,sal+1000,hiredate,hiredate+30 from emp
空值 null<>空格 空值null <>0 <>(不等於)
3)列上做連線 ||
例:select empno||ename from emp
4)列的別名 as 別名 或者 空格+別名 如果有特殊符號和空格一定用“”
5)表的別名 空格+別名
6)去重複 distinct
例:select distinct deptno from emp
2、where查詢 where放在 from之後
1)語句結構
select 列1,列2… from 表名 where 條件(列/表示式 比較運算子 值)
普通比較運算子:
> < >= <= != <>(不等於)
邏輯運算子:
and 同時滿足 or 滿足其中一個即可
not 如果條件為假則返回真值? 一般跟between and 、in、like一起使用
其他比較運算子
1)between… and … 在兩者之間(包括了邊界值)
例:查詢員工的基本工資在2000和3000之間
select * from emp where sal between 2000 and 3000
2)in在裡面
例:查詢員工編號是7369 7499 7844 7900的員工資訊
select * from emp where empno in(7369,7499,7844,7900)
3)like 模糊查詢 佔位符 _ 兩位佔位符 __
例:查詢員工名稱包含S的員工資訊
select * from emp where ename like ‘%S%’
例:查詢員工的名稱第二個字母是S的員工資訊
select * from emp where ename like ‘_A%’
4)is null 是空
例:查詢沒有獎金的員工資訊
select * from emp where comm is null or comm=0
5)條件之間的優先規則
1 所有的比較運算 (普通運算子、between and like in is null)
2 NOT
3 AND
4 OR
要想改變其優先順序可以用C >0 and(A is null or B is not null)
例:查詢崗位PRESIDENT並且工資大於1500或者是崗位是SALESMANS 的員工的名稱,崗位,基本工資
select ename, job, sal from emp where job=‘SALESMAN’
or (job=‘PRESIDENT’ and sal>1500);
3、排序 order by 放在sql語句的最後
排序規則 從大到小 降序 desc
排序規則 從小到大 升序 asc 預設規則就是asc
例:查詢員工的資訊,並且工資從高到低進行排序
select * from emp order by sal desc
多個列進行排序 order by sal desc, age asc, 排序的列的先後順序會影響結果集的順序
4、單組函式
1)字元函式
lower 轉換為小寫
例:select emp., lower(ename) from emp(把名字大寫轉小寫)
upper 轉換為大寫
例:select emp.
,upper(ename) from emp(把名字小寫轉大寫)
initcap 首字母大寫
例:select emp., initcap(ename) from emp(把名字首字母大寫)
concat(字串1,字串2) 連線函式
例:select emp.
,concat(empno,ename) from emp(把工號和姓名合併為一列)
substr(字串,擷取的開始位置,擷取的長度) 擷取函式
length(字串) 獲取字串的長度
instr(字串1,字串2) 在字串1查詢字串2的內容在字串1中的位置
rpad(字串1,返回的長度,字串2) 字串2在字串1的右邊開始填充
lpad(字串1,返回的長度,字串2) 字串2在字串1的左邊開始填充
trim(字串) 前後去空格
replace(字串1,要處理的內容,替換的新內容) 替換函式
2)數字函式
floor(x) 取小於或者等於x的最大整數
mod(被除數,除數) 取餘數
round(x,小數位數) 四捨五入
trunc(x,小數位數) 不四捨五入
3)日期函式
select add_months(sysdate,-3) from dual
select add_months(sysdate,3) from dual
select hiredate, last_day(hiredate) from emp
select next_day(sysdate,‘星期一’) from dual
select sysdate from dual
4)轉換函式
顯示轉換 to_date() to_number() to_char()
nvl2(引數1,引數2,引數3)
當引數1<>null返回引數2 當引數1=null 返回引數3
nvl (引數1,引數2)
當引數1<>null 返回引數1本身 當引數1=null 返回引數2
Decode(引數1, 值1, 翻譯值1,值2,翻譯值2,…值n,翻譯值n,預設值)
5)條件查詢
case when 條件1 then ‘輸出內容1’
when 條件2 then ‘輸出內容2’

else ‘輸出內容n’ end
6)分組函式
max() 求最大值
min() 求最小值
avg() 求平均值
sum() 求和
count() 求個數
注意事項: 1)空值不進行統計,要統計則先處理空值 nvl() nvl2()
2)如sql語句中沒有group by,select 列除了分組函式,不能有其他列
7)group by 分組 放在where 後面 對多組資料進行統計
1)在select顯示列除分組函式在group by 裡面有的,在select顯示列也可以有
2)多個列進行分組,先後順序不影響結果集
3)where不可以使用分組函式
4)分組後過濾having
例:查詢每一個領導下工資大於2000的人數和領導編號。
select mgr,count() from emp where sal>2000 and mgr is not null group by mgr
8)子查詢 當出現未知條件的時候,可能用到子查詢
1)單行子查詢
例:查詢跟MARTIN是同部門同崗位的員工資訊
select * from emp where (deptno,job)=(select deptno,job from emp where ename=‘MARTIN’)
2)多行子查詢
in 在某個範圍裡面
any 任意一個
all 同時滿足
<any 小於最大值
>any 大於最小值
<all 小於最小值
>all 大於最大值
例:查詢每個部門工資最高的員工的資訊
select * from emp where (deptno,sal) in( select deptno, max(sal) from emp group by deptno)
3)分頁查詢 rownum 只支援<= 或者< 子查詢作為表使用
例:查詢員工表的第六行到第10行的記錄
select * from ( select emp.
,rownum rm from emp ) where rm between 6 and 10
9)1多表連線(99正規化和92正規化)
內連線 inner join on
通過一個關聯欄位,把兩個表的資料連線到一起,得到所需要的資料

  1. select emp., dept. from dept,emp where dept.deptno=emp.deptno
    select emp.,dept. from emp inner join dept on emp.deptno= dept.deptno
    外連線
    左連線:left join…on 屬從表(右表)的關聯列名(+)
    以左表為準,左表的資料全有,通過一個關聯條件,跟右表的資料相連線,如果有 與之匹配的記錄則連線,否則返回為null
    右連線:right join…on 屬從表(左表)的關聯列名(+)
    跟左連線,恰恰相反,以右表為準,右表的資料全有,通過一個關聯條件,跟左表 的資料相連線,如果有與之匹配的記錄則連線,否則返回為null
    自連線
    例:查詢每個員工的名稱、編號及其領導的名稱和編號
    select worker.ename,worker.empno,manager.ename,manager.empno from emp worker, emp manager where worker.mgr=manager.empno
    10 ) 查詢表名裡面的欄位名稱,欄位型別,以及欄位長度…
    select table_catalog,table_schema,table_name,column_name,column_default,is_nullable,data_type,character_maximum_length,
    column_type,column_key from information_schema.columns where table_name = ‘ac_admin’

11 ) python中連線Oracle的demo
import cx_Oracle
conn = cx_Oracle.connect(‘username/[email protected]:1521/ORCL’)
cursor = conn.cursor()
result=cursor.execute(‘Select * from emp’)
data=cursor.fetchone()
print (data)
conn.close()
分析函式(視窗函式):用於資料收斂的範圍
Eg:

12 ) python中連線Oracle的demo
import cx_Oracle
conn = cx_Oracle.connect(‘username/[email protected]:1521/ORCL’)
cursor = conn.cursor()
result=cursor.execute(‘Select * from emp’)
data=cursor.fetchone()
print (data)
conn.close()
13) sql中查詢使用並行
Select /*partion 8 */ 欄位名稱 from 表名
14) 怎樣檢視SQL中執行計劃?
15) SQL中正則表示式使用?
總結:sql語句的解題步驟
解題步驟
1、找出要查詢這些列自哪些表
2、如果多個表,則多表連線,找到他們的關聯條件
3、有沒有where條件 分組前過濾
4、要不要group by
5、要不要having 分組後過濾
6、是否需要排序

5、管理表
1)建立表的語法
create table 表名(列名1 列 1型別 default 預設值 ,列名2 列2型別…)
2)修改表的結構
增加列 alter table 表名 add(列名 列的型別)
修改列的型別 alter table 表名 modify(列名 列的型別)
修改列的名稱(重新命名) alter tabl表名 rename column原列名 to新列名
刪除表 drop table表名
修改表的名稱 rename原表名稱 to新表名稱
給表加註釋 comment on table 表名 is ‘註釋的內容’
給列加註釋 comment on column 表名.列 is ‘列的註釋’
查看錶的註釋 select * from user_tab_comments
查看錶中列的註釋 select * from user_col_comments
3)資料操作
新增記錄
對部分列進行插入 insert into 表名(列名1) values(列值1)
對所有列進行插入 insert into 表名 values(列值1,列值2,…)
修改記錄
update 表名 set 列名=列值 where 條件
刪除記錄
delete from 表名 where 條件 刪除指定的記錄
delete 和 truncate的區別
1)truncate 刪除的速度要比delete要快
2)delete刪除可以回滾,而truncate不可以回滾
3)truncate 刪除的時候,直接釋放表的儲存空間
6、約束
約束的型別
NOT NULL 非空約束
UNIQUE Key 唯一約束
PRIMARY KEY 主鍵約束
FOREIGN KEY 外來鍵約束
CHECK 檢查約束
建立約束
1)建立表的時候建立約束
2)新增約束
create table course (cid number ,cname varchar2(20),tid number ,
constraint courese_cid_pk primary key (cid));
create table teacher1(tid number,tname varchar(10),
constraint teacher_tid_pk primary key(tid));
alter table course add constraint course_tid_fk foreign key(tid)
references teacher1(tid);
alter table course add constraint course_tid_ck check(tid between 1 and 10)
alter table course add constraint course_cname_uk unique (cname);
3)刪除約束
alter table 表名 drop constraint 約束名
4)失效約束
alter table 表名 disable constraint 約束名
5)生效約束
alter table 表名 enable constraint 約束名
6)檢視約束
檢視約束在哪些列上 select * from USER_CONS_COLUMNS
檢視 USER_CONSTRAINTS 表可得到使用者的所有約束. select * from USER_CONSTRAINTS
7、檢視
create view 檢視名稱 as sql語句
select * from 檢視名稱
8、索引
CREATE INDEX 索引名稱 ON 表名(列);
9、序列
CREATE SEQUENCE course_cid
INCREMENT BY 1 START WITH 10 MAXVALUE 100
insert into course values(course_cid.nextval,‘物理5’,1);
select course_cid.currval from dual
drop sequence course_cid
10、Oracle使用者及許可權管理
–建立使用者–
–create user 使用者名稱 identified by 密碼–
例子:create user huangguangjing identified by huangguangjing
–賦予許可權–
–grant 許可權1,許可權2 使用者名稱–
例子:grant connect,resource to huangguangjing
–檢視許可權–
–select * from user_role_privs–
例子:select * from user_role_privs
–收回許可權–
–revoke許可權1,許可權2 from 使用者名稱–
例子:revoke connect,resource from huangguangjing
解鎖scott使用者
例子:alter user scott account unlock ;
8、MySQL常用語句

  1. mysql -uroot -p 進入資料庫
  2. show databases; 顯示所有資料庫
  3. use 資料庫名稱; 進入資料庫
  4. show tables; 顯示所有表
  5. service mysql status 檢視mysql是否執行
  6. mysql 預設密碼為空
  7. create database 表名; 建立表
    9、Oracle與MySQL增刪改查語句對比:

10、資料庫中delete、truncate、drop的區別
delete truncate drop
可以恢復刪除的資料,同時會記錄日誌,刪除速度慢,但是提交了沒辦法可以恢復, 刪除所有資料,不會影響表機構,不會記錄日誌,資料不能恢復,刪除很快 刪除所有資料,包括表結構一併刪除,不會記錄日誌,資料不能恢復,刪除速度快
11、rownum和rowid的區別:
兩者都是偽列,rownum是根據SQL查詢的結果給每行分配一個邏輯編號,而rowid是物理結構上的,在每條記錄新增到資料庫時生成的唯一物理標記