隐式内連接配接:select user_name as ‘昵稱’,gname as ‘遊戲名稱’,score as ‘分數’
from users,games,scores
where users.user_qq=scores.user_qq
and games.gno=scores.gno
隐式内連接配接文法 select 字段名 from 表1,表2 [ ,表3… ] where 連接配接條件 [ and 查詢/連接配接條件 … ];
from子句後面直接出現多個表名,這種連接配接方式即屬于内連接配接,是隐式連接配接
顯式内連結:select col_list from table1 inner join table2 on table1.col=table2.col
顯式内連接配接文法 select 字段名 from 表1 join 表2 on 連接配接條件 [ join 表3 on 連接配接條件 … where 查詢條件 … ];
顯示内連接配接比隐式内連接配接相同情況下更快。on是連接配接條件的限定
外連接配接:
分為左外連接配接和右外連接配接
外連接配接特點:
做連接配接的兩個表地位不相等,其中有一張是基礎表
基礎表中的每條資料必須出現,即使另外一張表中沒有資料與之比對,也要用Null補齊
左外連接配接時左表為基礎表,右外連接配接時右表為基礎表
語句中先出現的表為‘左表’,後出現的表為‘右表’
select col_list
from table1 left|right| join table2
on table1.col=table2.col
(left代表左外連接配接,right代表右外連接配接)
例如:查詢所有玩家關于5号遊戲的分數資訊
select user_name as ‘昵稱’,
gno as ‘遊戲編号’,
score as ‘分數’
from users u left join scores s
on u.user_qq=s.user_qq
and s.gno=5
(如果把left去掉,則變成了内連接配接,那麼沒有玩過5号遊戲的玩家就不會被顯示出來)
下面是一個老王的例子:
select * from pe_user;
角色表
select * from pe_role;
角色使用者表(中間表) 得知 一個使用者屬于哪個角色
select * from pe_role_user;
** 權限表(功能表,子產品表)**
select * from ss_module;
角色權限表(中間表) 得知 一個角色有哪些權限
select * from pe_role_module;
隐式内連接配接
select m.name from pe_user u,pe_role_user ru,pe_role r,pe_role_module rm,ss_module m
where u.user_id = ru.user_id
and ru.role_id = r.role_id
and r.role_id = rm.role_id
and rm.module_id = m.module_id
and u.user_name='老王'
顯示内連接配接
select m.name from pe_user u inner join pe_role_user ru inner join pe_role r inner join pe_role_module rm inner join ss_module m
on u.user_id = ru.user_id
and ru.role_id = r.role_id
and r.role_id = rm.role_id
and rm.module_id = m.module_id
and u.user_name='老王'