select c.cno,c.cname,t.tname from course c ,teacher t where t.tno=c.tno
首先建立表course,sc,teacher表。sql
course表:3d
DROP TABLE IF EXISTS `course`; CREATE TABLE `course` ( `cno` varchar(10) NOT NULL, `cname` varchar(20) DEFAULT NULL, `tno` varchar(20) NOT NULL, PRIMARY KEY (`cno`,`tno`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of course -- ---------------------------- INSERT INTO `course` VALUES ('c001', 'J2SE', 't002'); INSERT INTO `course` VALUES ('c002', 'Java Web', 't002'); INSERT INTO `course` VALUES ('c003', 'SSH', 't001'); INSERT INTO `course` VALUES ('c004', 'Oracle', 't001'); INSERT INTO `course` VALUES ('c005', 'SQL SERVER 2005', 't003'); INSERT INTO `course` VALUES ('c006', 'C#', 't003'); INSERT INTO `course` VALUES ('c007', 'JavaScript', 't002'); INSERT INTO `course` VALUES ('c008', 'DIV+CSS', 't001'); INSERT INTO `course` VALUES ('c009', 'PHP', 't003'); INSERT INTO `course` VALUES ('c010', 'EJB3.0', 't002');
sc表:code
DROP TABLE IF EXISTS `sc`; CREATE TABLE `sc` ( `sno` varchar(10) NOT NULL, `cno` varchar(10) NOT NULL, `score` int(11) DEFAULT NULL, PRIMARY KEY (`sno`,`cno`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of sc -- ---------------------------- INSERT INTO `sc` VALUES ('s001', 'c001', '79'); INSERT INTO `sc` VALUES ('s001', 'c002', '83'); INSERT INTO `sc` VALUES ('s001', 'c003', '59'); INSERT INTO `sc` VALUES ('s002', 'c001', '81'); INSERT INTO `sc` VALUES ('s002', 'c002', '73'); INSERT INTO `sc` VALUES ('s003', 'c001', '82'); INSERT INTO `sc` VALUES ('s003', 'c002', '82'); INSERT INTO `sc` VALUES ('s004', 'c001', '61');
teacher表:blog
DROP TABLE IF EXISTS `teacher`; CREATE TABLE `teacher` ( `tno` varchar(10) NOT NULL, `tname` varchar(20) DEFAULT NULL, PRIMARY KEY (`tno`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of teacher -- ---------------------------- INSERT INTO `teacher` VALUES ('t001', '刘阳'); INSERT INTO `teacher` VALUES ('t002', '谌燕'); INSERT INTO `teacher` VALUES ('t003', '胡明星');
1.inner join(内链接或等值链接) : 获取两个表中字段匹配关系的记录。ip
如今咱们打算筛选出课程对应的教师名字,能够使用如下语句:class
select c.cno,c.cname,t.tname from course c INNER JOIN teacher t on t.tno=c.tno
能够获得如下结果:select
不过目前使用内链接的次数比较少,通常直接使用相同项相等便可。如上条SQL能够写为:im
select c.cno,c.cname,t.tname from course c ,teacher t where t.tno=c.tno
2.left join(左链接) : 获取左表的全部记录,即便右表没有记录。d3
如今咱们打算选出每科考试学生的平均成绩,能够使用如下语句:img
SELECT c.cname,sc.avgs from course c LEFT JOIN (select cno,AVG(score) as avgs from sc GROUP BY cno) sc ON sc.cno=c.cno
运行后得出结果:
3.right join(右链接) : 与左链接相反。
如今,咱们打算看看每一个平均分对应的科目名字,能够使用如下语句:
SELECT c.cname,sc.avgs from course c RIGHT JOIN (select cno,AVG(score) as avgs from sc GROUP BY cno) sc ON sc.cno=c.cno
运行后得出结果:
4.inner Join后不添加任何条件(全链接):
咱们运行如下SQL:
select c.cno,c.cname,t.tname from course c INNER JOIN teacher t
能够获得如下结果: