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