sql中的连接

在sql查询中,我们经常需要用到条件查询,然而where的效率没有join的高,连接查询非为外连接和内连接,外连接又分为左外连接和又外连接。

开始之前,我们先建几张表

CREATE TABLE `stu` (
  `id` int(11) NOT NULL auto_increment,
  `stunum` varchar(15) default NULL,
  `stuname` varchar(20) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

CREATE TABLE `teacher` (
  `id` tinyint(4) NOT NULL auto_increment,
  `name` varchar(20) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

CREATE TABLE `course` (
  `id` tinyint(4) NOT NULL auto_increment,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

CREATE TABLE `courseteacher` (
  `id` int(11) NOT NULL auto_increment,
  `courseid` int(11) default NULL,
  `teacherid` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

CREATE TABLE `score` (
  `id` int(11) NOT NULL auto_increment,
  `stuid` int(11) default NULL,
  `courseid` int(1
) default NULL,
  `
score` tinyint(4) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

这是创建表的sql语句,可以自己试着往里面添加一些测是的值,左外连接就是除了返回满足条件的记录以外还会返回所有左表中的记录,右外连接是除了返回满足条件的记录还要返回右表中的全部记录,比如select stu.stuname,score.score from stu left outer join score on stu.id=score.stuid;和select stu.stuname,score.score from score right outer join stu on stu.id=score.stuid;返回的结果是一样的。

注:我事先已经在数据库里写入的相应的值。必须现在我们有一个需求是我们需要查询所有修名字为math的这门学科的学生的成绩和学生的姓名和学号以及这门课的任课教师的名字,只用一条sql语句完成。select stu.stuname,stu.stunum,score.score,course.name,teacher.name from stu join score on stu.id=score.stuid join course on score.courseid = course.id join courseteacher on course.id=courseteacher.courseid join teacher on courseteacher.teacherid = teacher.id where course.name='math';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值