数据库知识个人总结
關(guān)系數(shù)據(jù)庫的范式:
第一范式:數(shù)據(jù)庫表中的所有字段值都是不可分解的原子值。
第二范式:確保數(shù)據(jù)庫表中的每一列都和主鍵相關(guān),而不能只和主鍵的某一部分相關(guān)(主要針對聯(lián)合主鍵),也就是說在一個數(shù)據(jù)庫表中,一個表只能保存一種數(shù)據(jù)。
第三范式:確保數(shù)據(jù)表中每一列數(shù)據(jù)都和主鍵直接相關(guān),而不能間接相關(guān)。(一般數(shù)據(jù)庫滿足)
數(shù)據(jù)完整性分為4類:實體完整性(設(shè)計時指定主鍵,并且主鍵不能為空值),域完整性(列滿足特定的數(shù)據(jù)類型或者約束,如取值范圍,精度等),參照完整性(兩個表的主鍵和外鍵的數(shù)據(jù)對應(yīng)一致),用戶定義完整性。
insert(向數(shù)據(jù)庫表中插入數(shù)據(jù))
用values子句為一行指定數(shù)據(jù)值:insert into 地址表(編號,描述)values (101,'市區(qū)')
用select子句為一行或者多行指定數(shù)據(jù)值
insert into 地址表(編號,描述) select 地址號,說明 from 客戶表
update(更新數(shù)據(jù))
將Medicine數(shù)據(jù)庫中的藥品的價格進行調(diào)整,幅度為原來的90%:update Medicine set showprice=showprice*0.9
在Medicine數(shù)據(jù)庫中將使用急速快遞物流的訂單修改為貨到付款,且無物流費用:update SaleOrderSummary
set Freight=0,RayMain='貨到付款' where FreighterName='極速快遞'
top (更新指定更新的行數(shù)或者行數(shù)的百分比):對MedicinieDetail表的前5條條藥品的價格增加:update top(5) MedicineDetail set showprice=showprice+5
對MrdicineDetail的前30%的藥品價格增加5:update top(30) percent MedicineDetail set showprice=showprice+5
delete(刪除數(shù)據(jù)庫表的單行數(shù)據(jù),多行數(shù)據(jù)或者所有數(shù)據(jù)):刪除ClientInfo表中職稱為"業(yè)務(wù)代表”的所有客戶信息:
delete ClientInfo Where Compost=‘業(yè)務(wù)代表’
刪除ClientInfo表中的所有數(shù)據(jù):delete from ClientInfo
列表條件:in:查詢MedicineInfo表中查詢出分類編號為31,80或者91的藥品信息,查詢結(jié)果包含編號,藥品名稱和所屬分類編號
Select MedicineId '編號',MedicineName '藥品名稱',TypeId '所屬分類編號' from MedicineInfo where TypeId IN(31,80,91)
要從藥品信息表MedicineDetail中統(tǒng)計每個廠家生產(chǎn)的藥品的數(shù)量,就可以使用group by子句對ProviderName列進行分組,然后統(tǒng)計結(jié)果集的個數(shù)
select ProviderName '上產(chǎn)廠家', count(*) '藥品數(shù)量' from MedicineDetail group by ProviderName
要從藥品信息表中獲取每個廠家長產(chǎn)藥品的最高價格:select ProviderName '生產(chǎn)廠家', Max(showprice) '價格' from MedicineDetail group by ProviderName
篩選藥品信息表中MedicineDetail中數(shù)量多于10個的藥品生產(chǎn)廠家以及的該廠家的藥品數(shù)量就可以使用having子句進行過濾
select ProviderName '生產(chǎn)廠家', count(*) '藥品數(shù)量’ from MedicineDetail group by ProivderName Having count (*) >10
內(nèi)連接:將兩個表中滿足條件的記錄組合在一起。
外連接:返回所有匹配的行和不匹配的行。
外連接分為左外鏈接:left outer join LEFT返回所有匹配的行并從關(guān)鍵字join左邊的表中返回所有不匹配的行,
right outer join RIGHT返回所有匹配的行并從關(guān)鍵字join郵編的表中返回所有不匹配的行。
例如:左外鏈接:select 列名列表 from 表名1 LEFT [OUTER] join 表名2 on 表名1.列名=表名2.列名
使用子查詢
1.使用比較運算符 any和some表示相比較的兩個數(shù)據(jù)集中,至少有一個值的比較為真,滿足搜索條件,若子查詢結(jié)果集為空,則不滿足搜索條件。
all與結(jié)果集中所有的值比較都為真, 才能滿足搜索條件。
在Personnel_Sys數(shù)據(jù)庫中查詢包含女性員工的部門編號和部門名稱。
select did '編號' , dname '部門名稱'
from Departments where did=ANY(select did from Employees where sex='女')
2.使用in關(guān)鍵字
in關(guān)鍵字可以判斷指定的值是否包含在另外一個查詢結(jié)果集中。
select e.eid '編號',e.ename '姓名',e.sex '性別',e.hometown '籍貫',c.salary2 '調(diào)整后工資' from salary_changes c inner join employees e on c.eid=e.eid where e.eid in(select eid from employees where married='已婚')
3.使用exists關(guān)鍵字
exists關(guān)鍵字的作用是在where子句中測試子查詢返回的數(shù)據(jù)行是否存在,不會返回任何行只會產(chǎn)生邏輯值true或者false
在Personnel_Sys數(shù)據(jù)庫中如果存在一個部門沒有員工的情況,那么就顯示所有部門的信息
select * from Departments where exists(select e.eid '編號',e.ename '姓名',d.dname '部門名稱' from employees e right outer join departments d on e.eid=d.did where e.eid is null)
4.單值查詢
子查詢的查詢結(jié)果就返回一個值:在Personnel_sys數(shù)據(jù)庫中輸出編號為100401員工所在部門的編號,部門名稱以及部門人數(shù)
select * from departments where did=(select did from employees where eid=100401)
5.嵌套子查詢
在查詢語句中包含一個或者多個子查詢:查詢并顯示調(diào)整過薪資的員工的信息,包含員工編號,姓名,性別和籍貫
select eid '編號',ename '姓名',sex '性別',hometown '籍貫' from employees where eid in(select eid from salary_changes)
使用create view語句創(chuàng)建一個名為V_employee_department的視圖,要求視圖可以查詢每個員工的編號,姓名,職稱以及所在部門名稱:create view V_employee_department
(
編號,姓名,職稱,所在部門)
as select e.eid,e.ename,e.post,d.dname from employees e inner join departments d on e.eid=d.did
?
?
?
總結(jié)
- 上一篇: Labview OCR数字识别
- 下一篇: 台达DVP50MC11T与威纶触摸屏Mo