以案例的方式學習
購物**的實體:
使用者 訂單 商品 分類
常見關係:
一對多. 使用者和訂單 分類和商品
多對多. 訂單和商品 學生和課程
一對一. 丈夫和妻子
er圖可以描述實體於實體之間的關係
實體用矩形表示
屬性用橢圓表示
關係用菱形表示
一對多:
使用者和訂單
-- 建立使用者表
create
table
user(
id int
primary
key auto_increment,
username varchar(20)
);-- 建立訂單表
create
table orders(
id int
primary
key auto_increment,
totalprice double,
user_id int
);為了保證資料的有效性和完整性,新增約束(外來鍵約束).
在多表的一方新增外來鍵約束
格式:alter
table 多表名稱 add
foreign
key(外來鍵名稱) references 一表名稱(主鍵);
例如:alter
table orders add
foreign
key(user_id) references
user(id);
新增了外來鍵約束之後有如下特點:★
1.主表中不能刪除從表中已引用的資料
2.從表中不能新增主表中不存在的資料
開發中處理一對多:★
在多表中新增乙個外來鍵,名稱一般為主表的名稱_id,字段型別一般和主表的主鍵的型別保持一致,
為了保證資料的有效性和完整性,在多表的外來鍵上新增外來鍵約束即可.
例子:商品和訂單
-- 建立商品表
create
table product(
id int
primary
key auto_increment,
name varchar(20),
price double
);-- 建立中間表
create
table orderitem(
oid int,
pid int
);-- 新增外來鍵約束
alter
table orderitem add
foreign
key(oid) references orders(id);
alter
table orderitem add
foreign
key(pid) references product(id);
開發中處理多對多:★
笛卡爾積:了解
select a.*,b.* from a,b;
內連線:★
格式1:顯式的內連線
select a.*,b.* from a [inner] join b on ab的連線條件
格式2:隱式的內連線select a.*,b.* from a,b where ab的連線條件
練習:
查詢使用者的訂單,沒有訂單的使用者不顯示
隱式內連線:
select
user.*,orders.* from
user ,orders where
user.id=orders.user_id;
顯示內連線
select
user.*,orders.* from
user
join orders on
user.id=orders.user_id;
外連線:★
左外連線:★
select a.*,b.* from
a left [outer] join b on 連線條件;
```- 意思:先展示join左邊的(a)表的所有資料,根據條件關聯查詢 join右邊的表(b),符合條件則展示出來,不符合以null值展示.
###### 右外連線:
```txt
select a.*,b.* from b right [outer] join a
on 連線條件;
div>
左外連線: user在左
select user.*,orders.* from user left join orders on
user.id=orders.user_id;
查詢所有訂單的使用者詳情
右外連線:orders 在右
select orders.*,user.* from user right join orders on
user.id=orders.user_id;
class="se-preview-section-delimiter">div>
子查詢:★
練習:
查詢訂單**大於300的訂單資訊及相關使用者的資訊。
檢視使用者為張三的訂單詳情
1.先查詢張三的id
select id from user where username = '張三';// 3
2.select * from orders where user_id = ?;
兩個合二為一
select * from orders where user_id = (select id from user where username = '張三');
查詢出訂單的**大於300的所有使用者資訊。
1.先查詢出訂單**》300的使用者的id
select user_id from orders where price >300;//(3,3,5,null)
2.select * from user where id in(3,3,5,null);
兩個合二為一:
select * from user where id in(select user_id from orders where price >300);
內連線:
select orders.*,user.* from orders,user where user.id=orders.user_id and orders.price>300 ;
子查詢: 是將乙個查詢的結果作為一張臨時表
select user.*,tmp.* from user,(select * from orders where price>300) as tmp where user.id=tmp.user_id;
一對一:(了解) SQL基礎語句 多表操作
合併多個表join on join inner join 根據某列合併兩個表,只合併兩個表中在該列的共有值,不共有的值忽略 select from orders join customers on orders.customer id customers.customer id left join ...
Oracle常用SQL語句大全
常用oracle資料庫sql語句彙總。1 常用操作 清空 站 purge recyclebin 查詢 站 select from recyclebin 查詢oracle版本資訊 select from v version 查詢oracle資料庫字符集 select userenv language ...
操作日期的SQL語句大全
1.顯示本月第一天 select dateadd mm,datediff mm,0,getdate 0 select convert datetime,convert varchar 8 getdate 120 01 120 2.顯示本月最後一天 select dateadd day,1,conve...