連線查詢和資料庫設計
-- 連線查詢
-- 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的主鍵值