目录

  • 前言
  • 连接查询分类
  • sql92连接
    • 等值连接
    • 非等值连接
    • 自连接
  • sql99连接
    • 内连接
      • 等值连接
      • 非等值连接
      • 自连接
    • 外连接
      • 左(右)外连接
      • 全外连接
    • 交叉连接

前言

介绍MySQL的连续查询操作我们选择使用可视化软件Navicat,对应的数据库使用了某公司员工数据库,该数据库包含员工信息表、部门信息表、公司地址信息表、工作职业信息表、员工等级表。

当遇到多表查询(查询的字段来自多个表时)就需要用到连接查询,根据前面介绍的知识,直接from对应的表的话,就会遇到笛卡尔乘积现象,这个时候为了解决问题,我们就要通过增加有效的连接手段来避免。

连接查询分类

∙ \bullet ∙ 按功能分类:

∙ \bullet ∙ 按年代分类:sql92标准、sql99标准。其中sql92只支持内连接,sql99支持内连接、左(右)外连接、交叉连接。

sql92连接

内连接显示的是多个表之间交集的部分,n表连接至少需要n-1个连接条件。

等值连接

语法

select 查询列表
from 表1 别名,表2 别名
where 表1.key=表2.key
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】

示例一:查询员工名和对应的部门名

示例二:查询有奖金的员工名、部门名

示例三:查询员工名、部门名和所在城市(三表连接)

特点

∙ \bullet ∙ 为表起别名,方便书写,区分重名的字段,起别名后查询字段只能用别名

∙ \bullet ∙ 两个表的顺序可以调换

∙ \bullet ∙ 可以加筛选where,后面使用and接下一个筛选条件

∙ \bullet ∙ 可以加分组、进行排序,可以实现多表连接

非等值连接

where语句下的连接条件不再是等于号。

示例一:查询员工的工资和工资级别

自连接

在一个表中进行查询,一定要记得起别名来进行区分。

示例一:查询员工名和上级的名称

sql99连接

语法

select 查询列表
from 表1 别名
【连接类型】 join 表2 别名 on 连接条件 【where 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】

注意:多表连接时重复【连接类型】join 表2 别名 on 连接条件

内连接

连接类型为inner,其余于sql92的内连接基本相同。

等值连接

示例一:查询部门个数大于3的城市名和部门个数

示例二:查询员工名、部门名、工种名,并按部门名降序

特点

∙ \bullet ∙ 添加排序、分组、筛选

∙ \bullet ∙ inner可以省略

∙ \bullet ∙ 筛选条件放在where之后,连接条件放在on之后,提高分离性,便于阅读

∙ \bullet ∙ inner join 连接于sql92连接效果相同,都是查询多表的交集部分

非等值连接

示例一:查询员工的工资和工资级别

自连接

示例一:查询员工的名字、上级的名字

外连接

用于查询一个表中有,另一个表中没有的信息。分主从表,显示信息为主表全部信息,当对应的项没有记录时用null填充。左外连接的连接类型为left 【outer】,右外连接的连接类型为right 【outer】,全外连接的连接类型为full 【outer】

左(右)外连接

左外、右外连接的唯一区别是表示的主从表不同。即左外连接left左边的表为主表,右边的表为从表;右外连接右边的表为主表,左边的表为从表。

示例一:查询哪个部门没有员工

全外连接

mysql不支持全外连接,所以这里简单的介绍一下全外连接的功能。

全外连接=内连接的结果+表1中有但表2没有的+表2中有表1中没有的

交叉连接

交叉连接的连接类型为cross,不加on连接条件,最终实现的结果相当于笛卡尔集。

连接查询(MySQL)相关推荐

  1. MySQL连接查询——MySQL 基础查询你会了吗?

    前言: 由于大一学习数据库不扎实,学到后面有点吃力,所以回过头来认真学习一边,写一些学习总结,提醒自己.也要告诫读者,把基础打扎实.读者觉得有用的话可以收藏点赞哦! 上一篇:MySQL函数查询--My ...

  2. JDBC简单连接查询MySQL数据库

    代码: DButil.java(连接关闭数据库的类) import java.sql.DriverManager; import java.sql.SQLException; import java. ...

  3. mysql判断是否连通c_C/C++连接查询MYSQL

    1. [代码][C/C++]代码 #include #include #include int main() { MYSQL mysql;//连接数据库的变量 MYSQL_RES *res;//存放查 ...

  4. jsp mysql demo_echart通过jsp连接查询mysql的demo - 贪吃蛇学院-专业IT技术平台

    echart 连接MySQL 数据库的例子 js核心代码 idea项目截图 数据库截图 mysql数据库脚本 /* Navicat MySQL Data Transfer Source Server ...

  5. Mysql之七种连接查询

    1.数据库构成 2.sql执行顺序 1.内连接查询 显示A表和B表的共有信息,相当于取交集. 2.左连接查询 显示左表(A表)的全部信息,右表(B表)只显示符合条件的信息,没有显示null 3.右连接 ...

  6. mysql 连接 分组_MySQL 基础 (四) 分组查询及连接查询

    MySQL 基础 (四) 分组查询及连接查询 MySQL 基础(四) 进阶 5 分组查询 语法: SELECT 分组函数, 列(要求出现在 group by 的后面) FROM 表 [where 筛选 ...

  7. mysql连接查询和in的效率取舍

    例如: A表 id   子id    父id 1      3        2 2      5        2 3      4         3 B表 id    name 3      x ...

  8. MySQL之DQL(数据查询语言)- 表连接查询

    目录 一.简介 1.1.男生表 1.2.女生表 二.左连接查询(左外连接) 三.右连接查询(右外连接) 四.内连接查询 五.全连接查询 五.自连接查询 六.子查询 七.伪表查询 学习计划: 一.简介 ...

  9. MySQL 数据库————连接查询

    目录 一.多表连接查询 1.内连接--inner join 2.左连接--left join 3.右连接--right join 二.存储过程 1.简介 2.优点 3.语法 ②.参数分类 ③.带参数的 ...

  10. 数据库系统原理与应用教程(066)—— MySQL 练习题:操作题 71-81(十):连接查询

    数据库系统原理与应用教程(066)-- MySQL 练习题:操作题 71-81(十):连接查询 71.连接查询(1) 数据表:Customers,包含顾客名称:cust_name.顾客 id:cust ...

最新文章

  1. SAP CRM WebClient UI Sales Area的cancel处理
  2. 4代hiv检测50元_别瞧不起国货!这4个姥姥辈的护肤品,真心好用,还不到50元
  3. raid0 raid1 raid5 raid10工作模式的工作原理及特点
  4. tensorflow中同时两个损失函数_深度度量学习中的损失函数
  5. android OpenGL ES实现渲染到透明的纹理 render to transparent texture
  6. 使用Crash工具查看一个TCP listen sock内存布局实例
  7. 2019年泰迪杯技能赛A题心得
  8. Java 常用数据类型(总结)
  9. 求2n个数中最大值和最小值的最少比较次数
  10. linu安装JDK1.8
  11. 《山海经》只能是政府组织编写的
  12. JavaScript高级第02天笔记
  13. HTML+CSS大作业HTML5期末大作业 旅游酒店网站设计——旅游酒店服务预订(1页) web网页设计—— 出游
  14. ADC0809 VHDL控制程序
  15. 使用腾讯手游助手作为开发测试模拟器的方案---以及部分问题的解决方案-1
  16. jQuery二级下拉菜单 下拉箭头翻转动画
  17. 可怕的思维定势!!!
  18. .net core入门38:linux上安装.net 5.0
  19. 2.1 2722 和数
  20. Android开发之“友录”

热门文章

  1. 颜色的前世今生19·外传之PPI、LPI、DPI疑难问题解答
  2. sicily 1002
  3. Storm DRPC环境搭建笔记
  4. Android:Preference
  5. 远程桌面无法连接解决办法
  6. 数据结构考试的一些选择题
  7. C程序编译时错误与运行时错误
  8. Python Curses
  9. 三维深度学习之pointnet系列详解(一)
  10. Js判断是否为非数字