2018-09-21数据库&多表关联&增删改&数据库备份

数据库&多表关联&增删改&数据库备份

多表关联

  • 两表关联,必须有一个关联字段
-- 多表查询
SELECT * FROM `courses` a,`scores` b WHERE a.`cno`= b.`cno`;
  • 关联方法
  1. where(原理)
  • 第一步:拿两表数据做笛卡尔乘积
  • 第二步:根据where条件进行筛选;
  1. join
  • 原理
    第一步:先用on条件进行数据筛选
    第二步:满足条件的显示,不满足条件的丢弃
  • 内连接
    1.只显示满足条件的数据
    2.关键字join --- inner join
    3.格式
    select * from 表1 inner join 表2 on 连接条件;
-- 查询成绩不及格的学生姓名
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 连接条件;

-- 查询成绩不及格的学生姓名
SELECT DISTINCT a.`sname` FROM students a  JOIN scores b ON a.`sno`=b.`sno` AND b.`degree`<60;
  1. 左连接
  • 左表为主表,左表中所有的数据都展示,右表中只显示满足条件的数据,
  • 关键字 left join
  • 格式select * from 表1 left join 表2 on 连接条件;
    -- 查询所有学生的选课信息,如果没有选课信息以 null代替。
SELECT * FROM students a LEFT JOIN scores b ON a.`sno`=b.`sno`;
  1. 右连接
  • 右表为主表,右表中所有的数据都展示,左表中只显示满足条件的数据,
  • 关键字right join
  • 格式select * from 表1 right join 表2 on 连接条件;
SELECT * FROM scores a RIGHT JOIN students b ON a.`sno`=b.`sno`;
  1. 全连接(sql 数据库无法使用)
    两张表都为主表,不满足条件的以null代替
    关键字full join
    格式select * from 表1 full join 表2 on 连接条件;
-- 统计出每个学生的面试数
SELECT schedule_id,COUNT(*) FROM `t_interview_interview` GROUP BY schedule_id;
 -- 统计出每个学生的面试数量并按从大到小的顺序排序
SELECT schedule_id,COUNT(*) FROM `t_interview_interview` GROUP BY schedule_id ORDER BY COUNT(*) DESC;

-- 找出最大的面试次数
SELECT COUNT(*) FROM `t_interview_interview` GROUP BY schedule_id ORDER BY COUNT(*) DESC LIMIT 0,1;
-- 找出面试次数最多的学生
SELECT schedule_id 学生,COUNT(*) 面试次数 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`;
-- 查询选修计算机导论的所有学生编号
SELECT b.`sno` FROM courses a ,scores b WHERE a.`cno` = b.`cno` AND cname='计算机导论';
-- 查询选修计算机导论的学生人数
SELECT a.`cname`,COUNT(*) FROM courses a ,scores b WHERE a.`cno` = b.`cno` AND cname='计算机导论' GROUP BY a.`cname`;
-- 查询选修计算机导论和高等数学的所有学生信息
SELECT * FROM courses a ,scores b,students c WHERE a.`cno`= b.`cno` AND b.`sno`=c.`sno` AND a.`cname` IN ('计算机导论','高等数学');

-- 查询成绩不及格的学生姓名
SELECT DISTINCT a.`sname` FROM students a INNER JOIN scores b ON a.`sno`=b.`sno` AND b.`degree`<60;

-- 查询所有学生的选课信息,如果没有选课信息以    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`;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.数据库三范式是什么? 第一范式:表中每个字段都不能再分。 第二范式:满足第一范式并且表中的非主键字段都依赖于主...
    杰伦哎呦哎呦阅读 2,930评论 0 28
  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,796评论 0 44
  • 在图力不足不知道画什么的时候,可以尝试着临摹,呐,我临摹了一顶王冠。 我只是想从你这儿得到一个王冠, 你却给了我一...
    爱吃云的猫先森阅读 1,061评论 7 19
  • 六斤 生活可能总是喜欢在平淡无味中,给你加一剂猛药,再配上些许伏特加。苦味陈杂,用尽各种方法让我们触摸到现实,认清...
    月半六斤阅读 306评论 0 0
  • 她是一个树人。 她在一个城市里出生、读幼儿园、读小学、读中学、读大学、工作。她害怕乘车,即便是自行车,她也怕,怕到...
    皮皮鲁_阅读 192评论 0 4