目录

一、MySQL多表查询

二、准备工作

1.运行环境

2.创建公司表

3.创建员工表

三、多表查询

(一)多表联查—同时查询多张表

1.联结

2.左连接

3.右连接

4.右连接

(二)子查询

1.SELECT子查询

2.WHERE子查询

3.FROM子查询

总结


一、MySQL多表查询

MySQL语句学习的难点和重点就在于多表查询,同时MySQL也有诸多方法供大家选择,不论是多表联查(联结表、左连接、右连接……)还是子查询(SELECT子查询、WHERE子查询、FROM子查询),掌握一种方法达到目的即可,当然其他方法也需要理解,本文将阐述完整的多表查询方法。

首先分享下学习链接,大家可以在看完本文后选择以下链接巩固学习成果,我相信如果都给掌握的话,MySQL语句中80%的问题都将迎刃而解!!

视频学习链接:SQL学习之道_哔哩哔哩_bilibili

在线编程链接:SQL必知必会__牛客在线编程

二、准备工作

1.运行环境

本文在MySQL在线运行网址操作,模拟MySQL运行,若大家有条件也可在MySQL或navicat中操作运行

2.创建公司表

以下是创建数据表、新增数据等基础操作,这些语句都是固定的,这是创建的第一个表(company表),id为主键。

#创建数据库,可忽略,一般用不到
CREATE DATABASE test;
use test;
#创建数据表company
CREATE TABLE company (id INT PRIMARY KEY,name VARCHAR(255) NOT NULL
);
#新增数据
INSERT INTO company VALUES(1,'IBM');
INSERT INTO company VALUES(2,'HP');
#单表查询数据
SELECT * FROM company;

运行结果:

3.创建员工表

创建第二个表(menber表),增删改查基础操作都在下边了,希望能帮助大家加深对于基础操作的理解,id为主键。

#创建数据表menber
CREATE TABLE menber(id INT PRIMARY KEY,name VARCHAR(255) NOT NULL,sal DOUBLE(10,2),comid INT
);
#新增数据
INSERT INTO menber VALUES(101,'小李',3000,1);
INSERT INTO menber VALUES(102,'小王',4000,1);
INSERT INTO menber VALUES(103,'小刘',5000,2);
INSERT INTO menber VALUES(104,'小孙',5000,2);
INSERT INTO menber VALUES(105,'小明',7000,3);
#删除数据
DELETE FROM menber WHERE comid = 3;
#修改数据
UPDATE menber SET sal=6000 WHERE id=104;
#单表查询数据
SELECT * FROM menber;

运行结果:

注:company表和menber表中的id、name不是一回事,id和conmid是公共列

三、多表查询

创建完公司表和员工表后就具备进行多表查询的条件了,主要分为多表联查和子查询两部分,也是本文的重点。

(一)多表联查—同时查询多张表

本人常用的是联结,左右连接、内连接一般都能解决问题,只需要添加WHERE条件即可。

1.联结

若查询n张表,必须查询指定n-1个公共列的条件

SELECT c.name 公司名, m.name 员工名,m.sal, company公司信息
FROM company c, menber m
WHERE c.id = m.comid;

应用:查询IBM的员工信息

SELECT m.*
FROM company c, menber m
WHERE c.id = m.comid AND c.name = ‘IBM’

运行结果:

拓展:笛卡尔积(A表有m条记录,B表有n条记录,结果m*n条)

SELECT * FROM company, menber

运行结果:

2.左连接

左表是主表、左表中满足条件的记录会查询出来、左表中【不满足】条件的也会查出来,运行结果也以左表为主。

SELECT *
FROM company c LEFT JOIN menber m ON c.id = m.comid

运行结果:

3.右连接

右表是主表、右表中所有的记录会查询出来,运行结果以右表为主。

SELECT *
FROM menber m RIGHT JOIN company c ON c.id = m.comid

运行结果:

4.右连接

查询的是满足条件的记录

SELECT *
FROM menber m INNER JOIN company c ON c.id = m.comid

运行结果:

(二)子查询

把一个查询的结果当作另一个查询的条件,可以说是一步步解决问题,较符合逻辑。

应用:查询小刘的公司名  #HP

1.SELECT子查询

SELECT  (SELECT name from company WHERE id =conid)
FROM menber
WHERE name = '小刘'

逻辑:先取menber表这一列包含小刘的数据,再对该行数据进行联结

左:menber表,右:company表

运行结果:

2.WHERE子查询

SELECT name
FROM company
WHERE id = (SELECT comid FROM menber WHERE name = '小刘')

WHERE子查询相比前一个逻辑更为简单,先在menber表中找出小刘的comid,由于menber表的comid和company的id是公共列,可直接用于company表的查询。

运行结果:

3.FROM子查询

用于3张表以上的连接查询较多,有A、B、C三张表,先查询A和B两张表、再用查询结果和c表连接查询,select子查询和where子查询是把子查询的结果当成【数据】,from子查询是把查询结果当成【表】

SELECT c.name
FROM (SELECT * FROM menber WHERE name = '小刘') t1,company c
WHERE t1.comid = c.id

运行结果:


总结

大家如果有疑问都可以评论提出,有不足之处请大家批评指正,希望能多结识这方面的朋友,共同学习、共同进步。

【MySQL】多表查询策略(多表联查子查询)相关推荐

  1. 三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)

    三.MySQL子查询学习笔记 7:子查询 含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询:在外面的查询语句,称为主查询或外查询 分类: 一 ...

  2. 子查询及其分类(标量子查询+列子查询+行子查询+表子查询)

    子查询 什么是子查询 子查询概念 子查询:sub query 子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块.当一个查询是另一个查询的条件时,称之为子查询. 子查询:指在一 ...

  3. SQL语句多表查询:【多表连查】和【子查询】

    SQL语句多表查询:[多表连查]和[子查询] 说明:insert.update.delete只针对[一张表]执行操作. 说明:select可以查询一张表.也可以查询多张表. 说明:多表查询分为:[多表 ...

  4. mysql子查询字符串位置_MySql基础-子查询

    一.子查询定义 定义: 子查询允许把一个查询嵌套在另一个查询当中. 子查询用()括起来 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询. 子查询可以包含普通select可以包括的任 ...

  5. 数据库学习之MySQL (十七)—— SQL99 主查询 与 子查询 子查询分类之WHERE的子查询

    文章目录 主查询 子查询 纲举目张--子查询的分类 WHERE语句后的 子查询 主查询 子查询 概念集中于SELECT语句 之前我们所学习的所有,都是SELECT作为独立的一句 是主干,是爸爸 后面跟 ...

  6. mysql+sql+子查询语句_SQL语句:子查询

    一,子查询简介: 子查询就是嵌套在主查询中的查询. 子查询可以嵌套在主查询中所有位置,包括SELECT.FROM.WHERE.ORDER BY.但并不是每个位置嵌套子查询都是有意义并实用的. 子查询必 ...

  7. mysql子查询重复利用_mysql – 如何在查询中多次使用子查询的结果

    MySQL查询需要不同位置的子查询结果,如下所示: SELECT COUNT(*),(SELECT hash FROM sets WHERE ID=1) FROM sets WHERE hash=(S ...

  8. 查询子串_SQL视图、子查询和常见函数的应用

    一.视图 含义:虚拟表,和普通表一样使用,通过表动态生成的数据. 创建语法的关键字 是否实际占用物理空间 使用 视图 CREATE VIEW 没有(只保存了SQL逻辑) 增删改查,一般不能增删改 表 ...

  9. eclipse列名无效_【转】sql使用In语句查询出所有,但子查询列名无效

    本文转自http://www.ddvip.com/tech/100019101.html 原文题目:关于sql语句in的使用注意规则 今天使用sql时候发现一个问题,使用IN查询时,查出主表所有的数据 ...

最新文章

  1. Java项目:诚途旅游系统(java+JSP+Spring+SSM+Mysql)
  2. EMC开发实习生电面经验
  3. Facebook 架构学习
  4. 出口埃塞俄比亚,有哪些需要注意?
  5. 在MFC里面实现线程的实例
  6. c++读取文件–结束条件的判断
  7. Java入门系列-22-IO流
  8. Spring集成activeMQ
  9. IO流使用示例,字符流文件拷贝demo
  10. AndroidStudio配置NDK
  11. Netron - 网络可视化
  12. android barchart设置标题,android - 如何设置MPAndroidChart BarChart的高度和宽度? - 堆栈内存溢出...
  13. 【收藏】40 个学术网站,满足科研文献需求!
  14. TensorFlow - 正弦曲线
  15. Httpwatch中http状态码列表
  16. vs2019,C#,MySQL创建图书管理系统2(登录功能实现)
  17. 若初见,若寻常,若是一双人
  18. 使用条件随机场模型解决文本分类问题(附Python代码)
  19. 千峰教育——网络管理
  20. 最全总结 | Android 系统抓包喂饭教程!

热门文章

  1. 基于PSO优化VIC算法的WORM蠕虫检测matlab仿真
  2. java mail 邮箱发送_Java Mail 发送邮件
  3. 神舟不愿“当枪”的声明背后,“黑公关”问题引人深思
  4. miniblink获取html文档,五、【miniblink】直接注册js可以调用的原生函数
  5. 最新云开秒赞系统公益版网站源码
  6. Tita OKR:掌握大局的仪表盘
  7. n的阶乘c语言输出为负数,为什么 n 为20 阶乘为负数
  8. 浅析嵌入式系统之uboot详解(5.3)—PWM定时器(番外)
  9. python(2) qypt安装 qy designer安装
  10. Frida出现process with pid XXXX either refused to load frida-agent, or terminated during injection错误的原因