1. 程式人生 > >連線查詢和資料庫設計

連線查詢和資料庫設計

-- 連線查詢
-- 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的主鍵值