1. 程式人生 > >連接查詢和數據庫設計

連接查詢和數據庫設計

相同 img 表連接 主鍵 多個 事物 student 聯合 目標

-- 連接查詢
-- inner join ... on
-- 兩個表連接查詢
select * from students inner join classes
-- 查詢能夠對應班級的學生以及班級信息
select * from students inner join classes on students.cls_id=classes.id;
-- 按照要求顯示姓名,班級
select students.*, classes.name from students inner join classes on students.cls_id=classes.id;

-- 給數據表起名字
select s.name, c.name from students as s inner join classes as c on s.cls_id=c.id;

-- 查詢 有能夠對應班級的學生以及班級信息,顯示學生的所有信息,只顯示班級名稱
select students.*, classes.name from students inner join classes on students.cls_id=classes.id;

-- 在以上查詢中將班級姓名顯示在第一列
select classes.name,students.* from students inner join classes on students.cls_id=classes.id;

-- 查詢有能夠對應班級的學生以及班級信息,按照班級進行排序
select classes.id, students.* from students inner join classes on students.cls_id=classes.id order by classes.id;

-- 當是同一個班級的時候,按照學生的id從小到大
select classes.id, students.* from students inner join classes on students.cls_id=classes.id order by classes.id, students.id;

-- 自關聯
create table areas(
aid int primary key auto_increment,
name varchar(20),
pid int
);
-- 查詢出河北省所有市
select * from areas as province inner join areas as city on province.aid=city.pid having name=‘河北省‘;

select province.name,city.name from areas as province inner join areas as city on province.aid=city.pid having province.name=‘河北省‘;

-- 子查詢
-- 標量子查詢
-- 查詢出北京市所有區的信息
select * from areas where pid=(select aid from areas where name=‘北京市‘);


select * from areas where pid in (select aid from areas where name=‘北京市‘);

數據庫設計

1.第一範式(確保每列保持原子性)

第一範式是最基本的範式。如果數據庫表中的所有字段值都是不可分解的原子值,就說明該數據庫表滿足了第一範式。

2.第二範式(確保表中的每列都和主鍵相關)

第二範式在第一範式的基礎之上更進一層。第二範式需要確保數據庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在一個數據庫表中,一個表中只能保存一種數據,不可以把多種數據保存在同一張數據庫表中。

3.第三範式(確保每列都和主鍵列直接相關,而不是間接相關)

第三範式需要確保數據表中的每一列數據都和主鍵直接相關,而不能間接相關。

  • 1.1第一範式

技術分享圖片

技術分享圖片

  • 2.1第二範式  

技術分享圖片

技術分享圖片

  • 3.1第三範式

技術分享圖片

技術分享圖片

  • 最終實現的目標

技術分享圖片

E-R模型

E-R模型的基本元素是:實體、聯系和屬性

  • E表示entry,實體:一個數據對象,描述具有相同特征的事物

  • R表示relationship,聯系:表示一個或多個實體之間的關聯關系,關系的類型包括包括一對一、一對多、多對多

  • 屬性:實體的某一特性稱為屬性

關系也是一種數據,需要通過一個字段存儲在表中

1、實體A對實體B為1對1,則在表A或表B中創建一個字段,存儲另一個表的主鍵值

技術分享圖片

技術分享圖片

2、實體A對實體B為1對多:在表B中創建一個字段,存儲表A的主鍵值

技術分享圖片

技術分享圖片

3、實體A對實體B為多對多:新建一張表C,這個表只有兩個字段,一個用於存儲A的主鍵值,一個用於存儲B的主鍵值

技術分享圖片

技術分享圖片

連接查詢和數據庫設計