首先掌握基本查詢,深入點再掌握數據庫表結構設計方法。以下我們以某oracle數據庫中的表sys_user、sys_depetment和sys_employee舉例
表結構如下:
(1)、sys_user(用戶表)
(1)、sys_depetment(部門表)
(2)、sys_employee(雇員表)
ER圖到關系模式集的轉換
以二元聯系類型的轉換為例
1. (實體類型的轉換):將每個實體類型轉換成一個關系模式,實體的屬性即為關系模式的屬性,實體標識符即為關系模式的鍵。
2. (聯系類型的轉換):
1. 若實體間聯系是1:1,可以在兩個實體類型轉換成的兩個關系模式中任意一個關系模式的屬性中加入另一個關系模式的鍵(作為外鍵)和聯系類型的屬性。
2. 若實體間聯系是1:N,則在N端實體類型轉換成的關系模式中加入1端實體類型的鍵(作為外鍵)和聯系類型的屬性。
3. 若實體間聯系是M:N,則將聯系類型也轉換成關系模式,其屬性為兩端實體類型的鍵(作為外鍵)加上聯系類型的屬性,而鍵為兩端實體鍵的組合。
實例:教學管理的ER圖轉換成關系模式集
教學管理的ER圖
第一步:把三個實體類型轉換成三個模式:
系(系編號,系名,電話)
教師(教工號,姓名,性別,職稱)
課程(課程號,課程名,學分)
第二步:
1. 對于1:1聯系“主管”,可以再“系”模式中加入教工號(教工號為外鍵,用波浪線表示);
2. 對于1:N聯系“聘用”,可以再“教師”模式中加入系編號和聘期兩個屬性(系編號為外鍵);
3. 對于1:N聯系“開設”,可以再“課程”模式中加入系編號(系編號為外鍵)
這樣得到的三個模式成如下形式:
第三步:對于M:N聯系“任教”,則生成一個新的關系模式:
第四步:整合后關系模式如下:
系統用戶(用戶編號,用戶姓名,用戶登錄名,用戶登錄密碼,雇員編號)
雇員(雇員編號,雇員姓名,年齡,性別,職務,部門編號)
部門(部門編號,部門名稱,部門編號)
1、增
insert into sys_user (USERID, USERCODE, USERPASS, EMPID, USERNAME, VALIDFLAG, LASTCHANGEDATE)
values ('c9e5d6f90f02428ea8a9cc4410dc5c06', 'Daibz', 'c4ca4238a0b923820dcc509a6f75849b',
'fd767722ffa741cf89db964873bf4f75', '代邦振', '1', to_date('07-05-2018 13:54:25', 'dd-mm-yyyy hh24:mi:ss'));
2、刪
delete from sys_user where usercode='Daibz'
3、改
update sys_user set userpass='c4ca4238a0b923820dcc509a6f75849b' where usercode='test'
update sys_user set userpass='1' where usercode='test'
4、查
select * from sys_user
select * from sys_employee
select * from sys_department
模糊查詢:
select * from sys_user where username like '代__'
select * from sys_user where username like '%代%'
多表查詢:
多表連接查詢通過表之間的關聯字段,一次查詢多表數據。
下面將依次介紹 多表連接中的如下方法:
1、from a,b
2、inner join
3、left outer join
4、right outer join
兩個表的deptno字段關聯。
1、from 表1,表2
語法:select a.x,b.y from a,b where a.id=b.id;
實例:
返回所有滿足where條件的行
select a.empid as 員工編號, a.empname as 員工名稱, b.depname as 部門
from sys_employee a, sys_department b
where a.depid = b.depid; 擴展:查詢用戶名,姓名,部門,密碼select u.username as 用戶名,e.empname as 姓名,d.depname as 部門,u.userpass as 密碼 from sys_user u,sys_employee e,sys_department d where u.empid=e.empid and e.depid=d.depid
2、inner join
語法:select a.x from a inner join b on a.id=b.id;
inner 可以省略.
實例:
select a.empid as 員工編號, a.empname as 員工名稱, b.depname as 部門
from sys_employee a inner join sys_department b on a.depid = b.depid;
擴展:查詢用戶名,姓名,部門,密碼
select u.username as 用戶名,e.empname as 姓名,d.depname as 部門,u.userpass as 密碼
from (sys_user u inner join sys_employee e on u.empid=e.empid)
inner join sys_department d on e.depid=d.depid
3、left outer join
查詢結果除了返回包含連接條件的行,還包含左表(a)中不滿足連接條件的行,
其中不滿足連接條件的行中b表的字段值將被置為空。
語法:select a.x from a inner left outer join b on a.id=b.id;
outer 可以省略.
實例:
select a.empid as 員工編號, a.empname as 員工名稱, b.depname as 部門
from sys_employee a left outer join sys_department b
on a.depid = b.depid;
當查詢中出現過濾條件時:
1)當連接條件后面有where條件時:
select a.empid as 員工編號, a.empname as 員工名稱, b.depname as 部門
from sys_employee a left outer join sys_department b on a.depid = b.depid where a.empname like '%00%';
解釋:先根據連接條件a.depid = b.depid查詢,再對查詢結果按過濾條件查詢。
2)當連接條件后面有and條件時:
select a.empno as 員工編號, a.ename as 員工名稱, b.dname as 部門 from scott.emp a left outer join scott.dept b on (a.deptno = b.deptno and b.dname like 'SALES')
解釋:先對b表按過濾條件查詢,再對結果執行左連接查詢。
select a.empid as 員工編號, a.empname as 員工名稱, b.depname as 部門
from sys_employee a left outer join sys_department b on (a.depid = b.depid and a.empname like '%00%');
4 、right outer join
查詢結果除了返回包含連接條件的行,還包含右表(b)中不滿足連接條件的行,
其中不滿足連接條件的行中a表的字段值將被置為空。
語法:select a.x from a inner right outer join b on a.id=b.id;