本文主要列举两张和三张表来讲述多表连接查询。

新建两张表:

表1:student  截图例如以下:

表2:course  截图例如以下:



(此时这样建表仅仅是为了演示连接SQL语句。当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键。)

一、外连接

外连接可分为:左连接、右连接、全然外连接。

1、左连接  left join 或 left outer join

SQL语句:select * from student left join course on student.ID=course.ID

运行结果:

左外连接包括left join左表所有行。假设左表中某行在右表没有匹配。则结果中相应行右表的部分所有为空(NULL).

注:此时我们不能说结果的行数等于左表数据的行数。

当然此处查询结果的行数等于左表数据的行数,由于左右两表此时为一对一关系。

2、右连接  right join 或 right outer join

SQL语句:select * from student right join course on student.ID=course.ID

运行结果:

右外连接包括right join右表所有行,假设左表中某行在右表没有匹配,则结果中相应左表的部分所有为空(NULL)。

注:相同此时我们不能说结果的行数等于右表的行数。

当然此处查询结果的行数等于左表数据的行数,由于左右两表此时为一对一关系。

3、全然外连接  full join 或 full outer join

SQL语句:select * from student full join course on student.ID=course.ID

运行结果:

全然外连接包括full join左右两表中所有的行,假设右表中某行在左表中没有匹配,则结果中相应行右表的部分所有为空(NULL),假设左表中某行在右表中没有匹配,则结果中相应行左表的部分所有为空(NULL)。

二、内连接  join 或 inner join

SQL语句:select * from student inner join course on student.ID=course.ID

运行结果:

inner join 是比較运算符,仅仅返回符合条件的行。

此时相当于:select * from student,course where student.ID=course.ID

三、交叉连接 cross join

1.概念:没有 WHERE 子句的交叉联接将产生连接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。

SQL语句:select * from student cross join course

运行结果:

假设我们在此时给这条SQL加上WHERE子句的时候比方SQL:select * from student cross join course where student.ID=course.ID

此时将返回符合条件的结果集。结果和inner join所看到的运行结果一样。

四、两表关系为一对多,多对一或多对多时的连接语句

当然上面两表为一对一关系,那么假设表A和表B为一对多、多对一或多对多的时候。我们又该怎样写连接SQL语句呢?

事实上两表一对多的SQL语句和一对一的SQL语句的写法都差点儿相同,仅仅是查询的结果不一样,当然两表也要略有修改。

比方表1的列能够改为:

Sno Name Cno

表2的列能够改为:

Cno CName

这样两表就能够写一对多和多对一的SQL语句了,写法和上面的一对一SQL语句一样。

以下介绍一下当两表为多对多的时候我们该怎样建表以及些SQL语句。

新建三表:

表A:  student 截图例如以下:

表B:  course 截图例如以下:

表C:  student_course 截图例如以下:

一个学生能够选择多门课程,一门课程能够被多个学生选择,因此学生表student和课程表course之间是多对多的关系。

当两表为多对多关系的时候,我们须要建立一个中间表student_course,中间表至少要有两表的主键,当然还能够有别的内容。

SQL语句:select s.Name,C.Cname from student_course as sc left join student as s on s.Sno=sc.Sno left join course as c on c.Cno=sc.Cno

运行结果:

此条SQL运行的结果是学生选课的情况。

SQL多表连接查询(具体实例)的更多相关文章

  1. SQL多表连接查询

    SQL多表连接查询 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际 ...

  2. SQL多表连接查询(详细实例)

    转载博客:joeleo博客(http://www.xker.com/page/e2012/0708/117368.html) 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:stud ...

  3. SQL多表连接查询(详细实例)(转)

    http://www.xker.com/page/e2012/0708/117368.html select * from student,course where student.ID=course ...

  4. SQL多表连接查询以及mysql数据库、sqlserver数据库常见不同点

    mysql数据库表及数据准备语句: USE test; DROP TABLE IF EXISTS `teacher_table`; DROP TABLE IF EXISTS `student_tabl ...

  5. sql server 表连接

    本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student 截图如下: SQL多表连接查询(详细实例)_新客网 表2:course 截图如下: SQL多表连接查询(详细实例)_新 ...

  6. 010.简单查询、分组统计查询、多表连接查询(sql实例)

    -------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SEL ...

  7. SQL的7种连接查询详细实例讲解

    SQL的7种连接查询详细实例讲解 原文链接:https://mp.weixin.qq.com/s/LZ6BoDhorW4cSBhaGy8VUQ 在使用数据库查询语句时,单表的查询有时候不能满足项目的业 ...

  8. oracle(sql)基础篇系列(二)——多表连接查询、子查询、视图

        多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所 ...

  9. SQL表连接查询(inner join、full join、left join、right join)

    SQL表连接查询(inner join.full join.left join.right join) 前提条件:假设有两个表,一个是学生表,一个是学生成绩表. 表的数据有: 一.内连接-inner ...

随机推荐

  1. vue-cli中引入jquery方法

    这里有个详解,当然,仅仅是安装jq的话下面这个办法就够了.传送门 在webpack.base.conf.js里加入 var webpack = require("webpack") ...

  2. 使用Gradle管理第三方依赖

    http://blog.bsdn.org/2012/01/02/%E4%BD%BF%E7%94%A8gradle%E7%AE%A1%E7%90%86%E7%AC%AC%E4%B8%89%E6%96%B ...

  3. ubuntu要安装新软件,已有deb安装包

    如果ubuntu要安装新软件,已有deb安装包(例如:iptux.deb),但是无法登录到桌面环境.那该怎么安装?答案是:使用dpkg命令.dpkg命令常用格式如下:sudo dpkg -I iptu ...

  4. VS2013下实现移动端的跨平台开发

    http://www.th7.cn/Program/Android/201412/336394.shtml 前一天准备下载VS2015预览版,到VisualStudio官网一看,发现微软发布了Visu ...

  5. centos xampp 隐藏phpmyadmin地址

    /opt/lampp/etc/extra/httpd-xampp.conf Alias /phpmyadmin "/opt/xampp/phpMyAdmin/" 改为 Alias ...

  6. 141. Linked List Cycle【Easy】【判断链表是否存在环】

    Given a linked list, determine if it has a cycle in it. To represent a cycle in the given linked lis ...

  7. python 写文件write(string), writelines(list) ,读文件

    read()方法用于直接读取字节到字符串中,可以接参数给定最多读取的字节数,如果没有给定,则文件读取到末尾. readline()方法读取打开文件的一行(读取下个行结束符之前的所有字节),然后整行,包 ...

  8. Oracle 索引扫描的五种类型

    之前在讨论CBO和RBO的时候提到了索引扫描的几种类型. Oracle Optimizer CBO RBO http://blog.csdn.net/tianlesoftware/archive/20 ...

  9. [BZOJ2337][HNOI2011]XOR和路径(概率+高斯消元)

    直接不容易算,考虑拆成位处理. 设f[i]表示i到n的期望路径异或和(仅考虑某一位),则$f[y]=\sum\limits_{exist\ x1\to y=0}\frac{f[x1]}{d[x1]}+ ...

  10. 【动态规划】CDOJ1651 Uestc的命运之旅

    要处理从四个角出发的答案.最后枚举那个交点,然后讨论一下来的方向即可. #include<cstdio> #include<algorithm> using namespace ...