例1 場景:有用戶表sys_user,用戶崗位關聯表 sys_user_post ,崗位表sys_post
SELECT * from sys_user t;
SELECT * from sys_user_post t;
SELECT * from sys_post t;
字段如下:
查詢用戶名稱以及該用戶的崗位名稱信息:
過程如下:
SELECT u.user_name,up.post_id from sys_user u LEFT JOIN sys_user_post up on u.user_id = up.user_id;
SELECT u.user_name,up.post_id,p.post_name from sys_user u LEFT JOIN sys_user_post up on u.user_id = up.user_id LEFT JOIN sys_post p on up.post_id = p.post_id;
結果:
場景2 用戶表(學生表、導師表或者員工與上級經理等)是同一張表sys_user,學生與導師關係對應表sys_user_tutor,表結構如下:
要求查詢出員工id,員工姓名,與該員工的導師id,導師姓名:
SELECT s.user_id as stuId, s.user_name as stuName,t.user_id as tutorId,t.user_name as tutorName FROM sys_user s LEFT JOIN sys_user_tutor st on s.user_id = st.user_id LEFT JOIN sys_user t on t.user_id = st.tutor_id;
查詢結果如下:
常用sql總結:
SELECT * from sys_user t;
SELECT * from sys_user_post t;
SELECT * from sys_post t;
SELECT * from sys_user_tutor t;
SELECT u.user_name,up.post_id from sys_user u LEFT JOIN sys_user_post up on u.user_id = up.user_id;
SELECT u.user_name,up.post_id,p.post_name from sys_user u LEFT JOIN sys_user_post up on u.user_id = up.user_id LEFT JOIN
sys_post p on up.post_id = p.post_id;
-- 按工號
SELECT * FROM user s LEFT JOIN student_tutor st on s.code = st.stuCode LEFT JOIN user t on st.tutorCode = t.code;
SELECT s.code as stuCode,s.name as stuName,t.code as tutorCode,t.name as tutorName FROM user s LEFT JOIN student_tutor st
on s.code = st.stuCode LEFT JOIN user t on st.tutorCode = t.code;
-- 按ID
SELECT * FROM user s LEFT JOIN student_tutor st on s.id = st.stuId LEFT JOIN user t on st.tutorId = t.id;
SELECT s.id as stuId, s.name as stuName,t.id as tutorId,t.name as tutorName FROM user s LEFT JOIN student_tutor st
on s.id = st.stuId LEFT JOIN user t on st.tutorId = t.id;
-- 實戰
SELECT s.user_id as stuId, s.user_name as stuName,t.user_id as tutorId,t.user_name as tutorName FROM sys_user s LEFT JOIN
sys_user_tutor st on s.user_id = st.user_id LEFT JOIN sys_user t on t.user_id = st.tutor_id;