mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化
先附上数据
CREATE TABLE `course` (
`cno` int(11) NOT NULL,
`cname` char(30) CHARACTER SET utf8 NOT NULL,
`ctime` int(11) NOT NULL,
`scount` int(11) NOT NULL,
`ctest` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `course` VALUES ('', '应用数学基础', '', '', '2016-03-10 10:08:29');
INSERT INTO `course` VALUES ('', '生物工程概论', '', '', '2016-03-10 10:09:24');
INSERT INTO `course` VALUES ('', '计算机软件基础', '', '', '2016-03-10 10:09:47');
INSERT INTO `course` VALUES ('', '计算机硬件基础', '', '', '2016-03-10 10:10:28');
INSERT INTO `course` VALUES ('', '模拟电路设计', '', '', '2016-04-06 10:11:02');
INSERT INTO `course` VALUES ('', '机械设计实践', '', '', '2016-03-10 10:11:29');
INSERT INTO `course` VALUES ('', '生物化学', '', '', '2016-03-29 10:11:54');
INSERT INTO `course` VALUES ('', '数据库设计', '', '', '2016-03-10 10:12:14');
INSERT INTO `course` VALUES ('', '设计理论', '', '', '2016-03-10 10:12:33');
INSERT INTO `course` VALUES ('', '计算机入门', '', '', '2016-03-10 10:12:53');
INSERT INTO `course` VALUES ('', '数字电路设计基础', '', '', '2016-03-10 10:13:10'); CREATE TABLE `student` (
`sno` char(4) CHARACTER SET utf8 DEFAULT NULL,
`sname` char(10) CHARACTER SET utf8 DEFAULT NULL,
`dname` char(10) CHARACTER SET utf8 DEFAULT NULL,
`ssex` char(2) CHARACTER SET utf8 NOT NULL,
`cno` int(11) NOT NULL,
`mark` decimal(3,1) NOT NULL,
`type` char(4) CHARACTER SET utf8 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `student` VALUES ('', '刘建国', '管理工程', '男', '', '82.5', '必修');
INSERT INTO `student` VALUES ('', '刘建国', '管理工程', '男', '', '70.0', '必修');
INSERT INTO `student` VALUES ('', '刘建国', '管理工程', '男', '', '78.5', '选修');
INSERT INTO `student` VALUES ('', '李春', '环境工程', '女', '', '63.0', '必修');
INSERT INTO `student` VALUES ('', '李春', '环境工程', '女', '', '58.0', '选修');
INSERT INTO `student` VALUES ('', '王天', '生物', '男', '', '48.5', '必修');
INSERT INTO `student` VALUES ('', '王天', '生物', '男', '', '86.0', '选修');
INSERT INTO `student` VALUES ('', '李华', '计算机', '女', '', '76.0', '必修');
INSERT INTO `student` VALUES ('', '李华', '计算机', '女', '', '92.0', '必修');
INSERT INTO `student` VALUES ('', '李华', '计算机', '女', '', '89.0', '必修');
INSERT INTO `student` VALUES ('', '李华', '计算机', '女', '', '80.0', '必修');
INSERT INTO `student` VALUES ('', '李华', '计算机', '女', '', '70.0', '选修');
INSERT INTO `student` VALUES ('', '孙庆', '电子工程', '男', '', '79.0', '必修');
INSERT INTO `student` VALUES ('', '孙庆', '电子工程', '男', '', '59.0', '必修');
INSERT INTO `student` VALUES ('', '孙庆', '电子工程', '男', '', '52.0', '必修');
INSERT INTO `student` VALUES ('', '孙庆', '电子工程', '男', '', '68.0', '必修');
INSERT INTO `student` VALUES ('', '高伟', '机械工程', '男', '', '93.0', '必修');
INSERT INTO `student` VALUES ('', '高伟', '机械工程', '男', '', '88.5', '必修');
INSERT INTO `student` VALUES ('', '高伟', '机械工程', '男', '', '78.0', '选修');
INSERT INTO `student` VALUES ('', '高伟', '机械工程', '男', '', '76.0', '选修'); CREATE TABLE `teacher` (
`tno` int(11) NOT NULL,
`tname` varchar(10) CHARACTER SET utf8 NOT NULL,
`cno` int(11) NOT NULL,
`sal` int(11) DEFAULT NULL,
`dname` char(10) CHARACTER SET utf8 NOT NULL,
`tsex` char(2) CHARACTER SET utf8 NOT NULL,
`age` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `teacher` VALUES ('', '王军', '', '', '数学', '男', '');
INSERT INTO `teacher` VALUES ('', '李丹', '', '', '生物', '女', '');
INSERT INTO `teacher` VALUES ('', '王永军', '', '', '计算机', '男', '');
INSERT INTO `teacher` VALUES ('', '刘小静', '', '', '计算机', '女', '');
INSERT INTO `teacher` VALUES ('', '高伟', '', '', '电子工程', '男', '');
INSERT INTO `teacher` VALUES ('', '李伟', '', '', '机械工程', '男', '');
INSERT INTO `teacher` VALUES ('', '刘辉', '', '', '生物', '女', '');
INSERT INTO `teacher` VALUES ('', '刘静', '', '', '经济管理', '女', '');
INSERT INTO `teacher` VALUES ('', '李伟', '', null, '计算机', '女', '');
INSERT INTO `teacher` VALUES ('', '刘一凯', '', null, '计算机', '女', '');
简单的二表连接
SELECT tname,dname,cname,ctest from teacher,course WHERE teacher.cno=course.cno

SELECT tname,dname,cname,ctest from teacher,course


采用join关键字建立连接
SELECT COLUMN from join_table join_type join_table on (join_condition)
自连接
SELECT s.sname,s.dname,s.cno,s.mark
from student s
where s.mark<60


SELECT s.sname,s.dname,s.cno,s.mark
from student s
where s.sno in(SELECT DISTINCT s.sno from student s where s.mark<60)


SELECT DISTINCT s.sname,s.dname,s.cno,s.mark
from student s,student s2
where s.sno=s2.sno
and s2.mark<60


SELECT s.sname,s.dname,s.cno,s.mark
from student s,student s2
where s.sno=s2.sno
and s2.mark<60


SELECT DISTINCT s.sname,s.dname,s.cno,s.mark
from student s,student s2
where s.sno=s2.sno
and s.mark<60


自然连接


SELECT sname,dname,cno,tname
from student NATURAL join teacher
SELECT sname,s.dname,s.cno,tname
from student s, teacher t
where s.dname=t.dname
and s.cno=t.cno


外连接
1,左外连接


SELECT s.sno,sname,s.cno,cname,ctest,mark
from student s LEFT JOIN course c
on s.cno=c.cno
ORDER BY sname


右外连接

SELECT s.sno,sname,s.cno,cname,ctest,mark
from student s RIGHT JOIN course c
on s.cno=c.cno
ORDER BY sname

全外连接


SELECT s.sno,sname,s.cno,cname,ctest,mark
from student s full OUTER JOIN course c
on s.cno=c.cno
ORDER BY sname
mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化的更多相关文章
- Python中内置的日志模块logging用法详解
logging模块简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/P ...
- SQL语句 删除表user 中字段name 内容重复的记录,
public class T01 { public static void main(String[] args) { int j=4; j=j+=j-=j*=j; System.out.printl ...
- mysql status关键字 数据表设计中慎重使用
mysql status关键字 数据表设计中慎重使用
- MySQL慢查询(二) - pt-query-digest详解慢查询日志 pt-query-digest 慢日志分析
随笔 - 66 文章 - 0 评论 - 19 MySQL慢查询(二) - pt-query-digest详解慢查询日志 一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它 ...
- Mysql高手系列 - 第9篇:详解分组查询,mysql分组有大坑!
这是Mysql系列第9篇. 环境:mysql5.7.25,cmd命令中进行演示. 本篇内容 分组查询语法 聚合函数 单字段分组 多字段分组 分组前筛选数据 分组后筛选数据 where和having的区 ...
- MySQL中的主键,外键有什么作用详解
MySQL中的主键,外键有什么作用详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 学关系型数据库的同学,尤其在学习主键和外键时会产生一定的困惑.那么今天我们就把这个困惑连根拔起 ...
- Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解
随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...
- SQL Server时间粒度系列----第4节季、年时间粒度详解
本文目录列表: 1.SQL Server季时间粒度2.SQL Server年时间粒度 3.总结语 4.参考清单列表 SQL Serve季时间粒度 季时间粒度也即是季度时间粒度.一年每3 ...
- 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解
Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解 多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...
随机推荐
- Atitit.自然语言处理--摘要算法---圣经章节旧约39卷概览bible overview v2 qa1.docx
Atitit.自然语言处理--摘要算法---圣经章节旧约39卷概览bible overview v2 qa1.docx 1. 摘要算法的大概流程2 2. 旧约圣经 (39卷)2 2.1. 与古兰经的对 ...
- Drupal8重命名上传的中文名文件
完整的模块代码文件在Coding.net上,想直接使用的请前往下载:https://coding.net/u/yamus/p/chinese_rename/git/tree/master 最近吧Dru ...
- iOS开发-闪退问题-解决之前上架的 App 在 iOS 9 会闪退问题
最新更新:(2015.10.02) 开发环境: Delphi 10 Seattle OS X El Capitan v10.11 需使用下列 HotfixID: 30398, PAServer Hot ...
- 使用JAVA编写电话薄程序,具备添加,查找,删除等功能
//该程序需要连接数据库.根据word文档要求所有功能均已实现.//大部分方法基本差不多,//在查询修改的时候能输出 最大ID号 和最小ID号,并且可以对输入的ID号进行判断是否存在(具体方法请查看 ...
- NULL的陷阱:Merge
NULL表示unknown,不确定值,所以任何值(包括null值)和NULL值比较都是不可知的,在on子句,where子句,Merge或case的when子句中,任何值和null比较的结果都是fals ...
- JavaScript Prototype
function Obj () { } Obj.a=0; Obj.fn=function(){ } console.log(Obj.a); console.log(typeof Obj.fn);//f ...
- jQuery.unique引发一个血案
项目开发过程中,PM说系统只要在一个特定的浏览器中运行就好,但是在其他的浏览器中不能出现逻辑的错误,所以在开发过程中,前端和后台选择是Chrome浏览器,没有仔细测试Firefox和IE.但是昨天PM ...
- 从零开始编写自己的C#框架(6)——SubSonic3.0插件介绍(附源码)
前面几章主要是概念性的东西为主,向初学者们介绍项目开始前的一些知识与内容,从本章开始将会进入实操阶段,希望跟着本系统学习的朋友认真按说明做好每一步操作(对于代码最好是直接照着文档内容在你的IDE中打一 ...
- 6-tips-for-managing-property-files-with-spring--转
原文地址:http://www.summa.com/blog/2009/04/20/6-tips-for-managing-property-files-with-spring What could ...
- Eclipse与Android源码中ProGuard工具的使用
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...