文章目录

  • 一、笛卡尔积查询
  • 二、内、外、全连接查询
  • 三、复合条件查询
  • 四、子查询
  • 五、EXIST判断

本篇文章主要介绍MySQL里的多表关联查询,其中包括了笛卡尔积查询、内连接查询、外连接查询、全连接查询,另外还会介绍复合条件查询和子查询。

一、笛卡尔积查询

1、首先创建表并插入数据
1)doctor表

--创建一个doctor表
create table doctor(doc_id int auto_increment primary key not null,doc_name varchar(50),age int,dept_id int
);--给doctor插入数据
insert into doctor(doc_name,age,dept_id) values('A',19,200),('B',26,201),('C',30,201),('D',24,202),('E',20,200),('F',38,204);

2)department表

create table department(dept_id int,dept_name varchar(100)
);--给department插入数据
insert into department values(200,'Lin'),(201,'Cure'),(202,'Check'),(203,'Found');

3)参考结果

2、笛卡尔积表
简单来说就是将两张表合在一起显示出来,该表成为笛卡尔积表(用处不大);
也就是说,如果A表里有m条记录,B表里有n条记录,那这样取出来的表将有m✖n条记录

SELECT * from doctor, department;

二、内、外、全连接查询

1、内外全连接查询关键字

  • 内连接:inner join
  • 外连接:left join, right join
  • 全连接:full join

2、内连接查询(inner join):
通过对笛卡尔积表筛选后得到的表

--筛选doctor里的dept_id与department里的dept_id相对应的部分
SELECT * from doctor, department where doctor.dept_id=department.dept_id;--如上例子,使用内连接查询
--格式为:(A inner join B on A.C=B.D)
SELECT * from doctor inner join department on doctor.dept_id=department.dept_id;


3、外连接查询(left join, right join):

  • 通过对笛卡尔积表筛选后得到的表
  • left以左表为主(不管右表是否有对应的值,都会显示左表),right以右表为主(同理)
  • 能匹配的就匹配上,不能匹配的置为null
SELECT * from doctor left join department on doctor.dept_id=department.dept_id;SELECT * from doctor right join department on doctor.dept_id=department.dept_id;--筛选两表dept_id相等的doctor的doc_name和department的dept_name
SELECT doctor.doc_name, department.dept_name from doctor right join department on doctor.dept_id=department.dept_id;

4、全连接查询(full join):
但是在MySQL里不支持这种写法;
最主要的是,全连接基本用不上。不过可以用左右连接的拼接(UNION)来模拟全连接的效果

-- 模拟全连接
select * from doctor RIGHT JOIN department on doctor.dept_id = department.dept_idUNIONselect * from doctor LEFT JOIN department on doctor.dept_id = department.dept_id;

三、复合条件查询

简单来说就是多条件复合成一条复杂的select查询语句

--查找所有Cure部(编号201)的doctor名字
SELECT doctor.doc_name, department.dept_name FROM doctor, department
WHERE doctor.dept_id=department.dept_id AND department.dept_name="Cure";--找出大于25的doctor的名字和所在的部门
SELECT doctor.doc_name,department.dept_name FROM doctor, department
WHERE doctor.dept_id=department.dept_id AND doctor.age>25;

四、子查询

1、查询内容在A表,查询条件在B表

--查询doctor的dep_id在department的dep_id中出现过的doctor
SELECT * from doctor WHERE dept_id in (201,202,203,204);

但是以上把(201,202,203,204)给写死了,不灵活,因此可以再查询一遍得到department中所有的dep_id,也就是用到子查询

2、子查询
其实就是嵌套查询,查询里面嵌套查询(select里套着select)

SELECT * from doctor WHERE dept_id in (SELECT dept_id from department);

两种查询结果当然也是一样的:

这里还有另外一些练习:

--创建表也可以用嵌套:得到doctor的字段信息和数据信息
CREATE table AA (SELECT * from doctor);--嵌套查询:大于25的doctor的所在的部门
SELECT dept_name from departmentWHERE department.dept_id IN(SELECT doctor.dept_id from doctor where doctor.age>=25);

五、EXIST判断

  • EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录
  • 而是返回一个真假值。True或False
  • 当返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询
--查询doctor里面是否存在dep_id=203的全部信息(如果存在就打印doctor的全部信息,这个案例里是存在的)
select * from doctorWHERE EXISTS(SELECT dept_name from department where dept_id=203);-- 查询doctor里面是否存在dep_id=205的全部信息(本案例中不存在)
select * from doctorWHERE EXISTS(SELECT dept_name from department where dept_id=205);

MySQL数据库基础(多表关联查询、内外全连接、复合条件查询、子查询)相关推荐

  1. MySQL数据库基础-----多表查询

    一.多表关系 在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系. 1. 一对多 案例: 部门 与 员工的关系 关 ...

  2. MySQL数据库基础以及进阶(一篇全)

    本文主要介绍了MySQL数据库的基础知识以及进阶知识----->适合有志学习MySQL的初学者,使其从入门到精通(如有安装MySQL等方面问题,欢迎留言) 文章目录 基础篇 [通用语法及分类] ...

  3. [MySQL数据库]-基础多表练习题---员工工资

    -- 部门表 CREATE TABLE dept (id INT PRIMARY KEY PRIMARY KEY, -- 部门iddname VARCHAR(50), -- 部门名称loc VARCH ...

  4. Mysql数据库基础第八章:窗口函数和公用表表达式(CTE)

    Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...

  5. (19)一篇掌握MySQL数据库基础下 基本操作(外键约束、建表原则、多表查询、子查询)

    MySQL数据库基础下 一.修改表--添加外键约束 二.多表之间的建表原则 1.建数据库原则:通常情况下,一个项目/应用建一个数据库 2.多表之间的表原则: (1)一对多:分类和商品 (一个分类对应多 ...

  6. MySQL数据库基础(五)——SQL查询

    MySQL数据库基础(五)--SQL查询 一.单表查询 1.查询所有字段 在SELECT语句中使用星号""通配符查询所有字段 在SELECT语句中指定所有字段 select fro ...

  7. mysql数据库多表查询(内连接,外连接,自连接,子查询及案例分析)

    mysql数据库多表查询 之前接触的项目或者自己涉及的部分对于多表查询的使用都比较的少,常常是自己更具案例进行学习,最近见到的比较的多,所以今天就好好的总结一下,为下一步学习做准备! 1.多表查询关系 ...

  8. 原力计划【MySQL数据库】- 多表查询

    目录  多表关系 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系. 基本上分为三种: 一对多(多 ...

  9. MySQL数据库应用 多表查询_mysql数据库-多表查询

    今日任务 完成对MYSQL数据库的多表查询及建表的操作 教学目标 掌握MYSQL中多表的创建及多表的查询 掌握MYSQL中的表关系分析并能正确建表 昨天内容回顾: ​ 数据库的创建 : create ...

最新文章

  1. PyTorch迎来5岁生日,创始人带领大一实习生开发:没想到会这么成功
  2. Windows Home Server 2011 RC 安装体验
  3. linux 导入txt_手机混用闪存到底是真是假:教你查手机闪存型号|闪存|手机|linux|ufs|zip...
  4. weka 初练之 文本分类
  5. 【漫画详解】用iframe障眼法,骗取用户点击
  6. 一个简单的品优购项目----html+css
  7. html字体加粗怎么设置,css怎么设置字体加粗?
  8. 关于stm32单片机的通讯方式
  9. 读大前研一《思考的技术》-锻炼解决问题的思维
  10. C 语言判断某年是否为闰年该月有多少天
  11. 商用密码安全性评估简介
  12. 平面几何----向量证明欧拉线
  13. 台湾大学开放式课程C语言,国立台湾大学-台大开放式课程.doc
  14. 国家中小学网络平台爬虫项目
  15. LeetCode-1276. 不浪费原料的汉堡制作方案
  16. Flutter 十六进制颜色转换
  17. 【文智背后的奥秘】系列篇——文本聚类系统
  18. 中小学数学试卷自动生成程序-对张凯翔同学代码的评价
  19. Python语法规范
  20. 根文件系统制作 -- Kernel panic - not syncing

热门文章

  1. java局部变量的描述正确的是_【Java入门课|这才是Java局部变量的正确使用方法,你真的会用这些吗】- 环球网校...
  2. audio插入背景音乐_网页制作中的html插入背景音乐
  3. mysql 函数事务_MySQL:函数和事务
  4. 6年级下册计算机教案,六年级下册信息技术教案 (6).doc
  5. php cors和jsonp,jsonp和CORS跨域实现
  6. java代码启动spring_javascript - 从JavaScript调用Java代码( Spring 启动)
  7. qml 信号槽第二次才响应_QML中各种代理的用法
  8. linux c 文件映射,linuxc-共享内存
  9. android 判断app处于前后台
  10. 基于JAVA+SpringBoot+Mybatis+MYSQL的疫苗接种信息管理系统