常用的SQL語句大全 多表操作

2021-08-08 15:57:07 字數 3425 閱讀 6625

以案例的方式學習

購物**的實體:

使用者 訂單 商品 分類

常見關係:

一對多. 使用者和訂單 分類和商品

多對多. 訂單和商品 學生和課程

一對一. 丈夫和妻子

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...