2018-09-21數(shù)據(jù)庫(kù)&多表關(guān)聯(lián)&增刪改&數(shù)據(jù)庫(kù)備份

數(shù)據(jù)庫(kù)&多表關(guān)聯(lián)&增刪改&數(shù)據(jù)庫(kù)備份

多表關(guān)聯(lián)

  • 兩表關(guān)聯(lián),必須有一個(gè)關(guān)聯(lián)字段
-- 多表查詢
SELECT * FROM `courses` a,`scores` b WHERE a.`cno`= b.`cno`;
  • 關(guān)聯(lián)方法
  1. where(原理)
  • 第一步:拿兩表數(shù)據(jù)做笛卡爾乘積
  • 第二步:根據(jù)where條件進(jìn)行篩選;
  1. join
  • 原理
    第一步:先用on條件進(jìn)行數(shù)據(jù)篩選
    第二步:滿足條件的顯示,不滿足條件的丟棄
  • 內(nèi)連接
    1.只顯示滿足條件的數(shù)據(jù)
    2.關(guān)鍵字join --- inner join
    3.格式
    select * from 表1 inner join 表2 on 連接條件;
-- 查詢成績(jī)不及格的學(xué)生姓名
SELECT DISTINCT a.`sname` FROM students a INNER JOIN scores b ON a.`sno`=b.`sno` AND b.`degree`<60;

select * from 表1 join 表2 on 連接條件;

-- 查詢成績(jī)不及格的學(xué)生姓名
SELECT DISTINCT a.`sname` FROM students a  JOIN scores b ON a.`sno`=b.`sno` AND b.`degree`<60;
  1. 左連接
  • 左表為主表,左表中所有的數(shù)據(jù)都展示,右表中只顯示滿足條件的數(shù)據(jù),
  • 關(guān)鍵字 left join
  • 格式select * from 表1 left join 表2 on 連接條件;
    -- 查詢所有學(xué)生的選課信息,如果沒(méi)有選課信息以 null代替。
SELECT * FROM students a LEFT JOIN scores b ON a.`sno`=b.`sno`;
  1. 右連接
  • 右表為主表,右表中所有的數(shù)據(jù)都展示,左表中只顯示滿足條件的數(shù)據(jù),
  • 關(guān)鍵字right join
  • 格式select * from 表1 right join 表2 on 連接條件;
SELECT * FROM scores a RIGHT JOIN students b ON a.`sno`=b.`sno`;
  1. 全連接(sql 數(shù)據(jù)庫(kù)無(wú)法使用)
    兩張表都為主表,不滿足條件的以null代替
    關(guān)鍵字full join
    格式select * from 表1 full join 表2 on 連接條件;
-- 統(tǒng)計(jì)出每個(gè)學(xué)生的面試數(shù)
SELECT schedule_id,COUNT(*) FROM `t_interview_interview` GROUP BY schedule_id;
 -- 統(tǒng)計(jì)出每個(gè)學(xué)生的面試數(shù)量并按從大到小的順序排序
SELECT schedule_id,COUNT(*) FROM `t_interview_interview` GROUP BY schedule_id ORDER BY COUNT(*) DESC;

-- 找出最大的面試次數(shù)
SELECT COUNT(*) FROM `t_interview_interview` GROUP BY schedule_id ORDER BY COUNT(*) DESC LIMIT 0,1;
-- 找出面試次數(shù)最多的學(xué)生
SELECT schedule_id 學(xué)生,COUNT(*) 面試次數(shù) FROM `t_interview_interview` GROUP BY schedule_id HAVING COUNT(*)=(SELECT COUNT(*) FROM `t_interview_interview` GROUP BY schedule_id ORDER BY COUNT(*) DESC LIMIT 0,1);

-- 多表查詢
SELECT * FROM `courses` a,`scores` b WHERE a.`cno`= b.`cno`;
-- 查詢選修計(jì)算機(jī)導(dǎo)論的所有學(xué)生編號(hào)
SELECT b.`sno` FROM courses a ,scores b WHERE a.`cno` = b.`cno` AND cname='計(jì)算機(jī)導(dǎo)論';
-- 查詢選修計(jì)算機(jī)導(dǎo)論的學(xué)生人數(shù)
SELECT a.`cname`,COUNT(*) FROM courses a ,scores b WHERE a.`cno` = b.`cno` AND cname='計(jì)算機(jī)導(dǎo)論' GROUP BY a.`cname`;
-- 查詢選修計(jì)算機(jī)導(dǎo)論和高等數(shù)學(xué)的所有學(xué)生信息
SELECT * FROM courses a ,scores b,students c WHERE a.`cno`= b.`cno` AND b.`sno`=c.`sno` AND a.`cname` IN ('計(jì)算機(jī)導(dǎo)論','高等數(shù)學(xué)');

-- 查詢成績(jī)不及格的學(xué)生姓名
SELECT DISTINCT a.`sname` FROM students a INNER JOIN scores b ON a.`sno`=b.`sno` AND b.`degree`<60;

-- 查詢所有學(xué)生的選課信息,如果沒(méi)有選課信息以    null代替。
SELECT * FROM students a LEFT JOIN scores b ON a.`sno`=b.`sno`;
SELECT * FROM scores a RIGHT JOIN students b ON a.`sno`=b.`sno`;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容