当前位置: 首页 > news >正文

MySQL数据库干货_16—— SQL99标准中的查询

SQL99标准中的查询

MySQL5.7 支持部分的SQL99 标准。

SQL99中的交叉连接(CROSS JOIN)

示例:

使用交叉连接查询 employees 表与 departments 表。

select * from employees cross join departments;
SQL99中的自然连接(NATURAL JOIN)

自然连接

连接只能发生在两个表中有相同名字和数据类型的列上。如果列有相同的名字,但数据类型不同,NATURAL JOIN 语法会引起错误。

自然连接查询

在图片例子中,LOCATIONS 表被用 LOCATION_ID 列连接到 DEPARTMENT表,这是在两个表中唯一名字相同的列。如果存在其它的同名同类型的列,自然连接会使用等值连接的方式连接他们,连接条件的关系为and。

自然连接也可以被写为等值连接:

SELECT d.department_id, d.department_name,d.location_id , l.cityFROMdepartments d , locations lWHEREd.location_id = l.location_id;

示例:

使用自然连接查询所有有部门的雇员的名字以及部门名称。

select e.last_name,d.department_name from employees e natural join departments d;
SQL99中的内连接(INNER JOIN)

语法:

  • SELECT 查询列表;
  • FROM 表1 别名;
  • INNER JOIN 连接表(INNER关键字可省略);
  • ON 连接条件;

用ON子句指定连接条件

用ON子句指定更多的连接条件

示例:

查询雇员名字为 Fox 的雇员 ID ,薪水与部门名称。

select e.employee_id,e.salary,d.department_name from employees e inner JOIN departments d on e.department_id = d.department_id where e.last_name = 'Fox';
外连接查询(OUTER JOIN)

孤儿数据(Orphan Data)

孤儿数据是指被连接的列的值为空的数据。

左外连接(LEFT OUTER JOIN)

左外连接

左边的表 (EMPLOYEES) 中即使没有与 DEPARTMENTS 表中匹配的行,该查询

也会取回 EMPLOYEES 表中所有的行。

示例:

查询所有雇员的名字以及他们的部门名称,包含那些没有部门的雇员。

select e.last_name,d.department_name from employees e LEFT OUTER JOIN departments d on e.dept_id = d.department_id;
右外连接(RIGTH OUTER JOIN)

右外连接

右边的表 (DEPARTMENTS ) 中即使没有与 EMPLOYEES 表中匹配的行,该查询

也会取回 DEPARTMENTS 表中所有的行。

示例:

查询所有雇员的名字以及他们的部门名称,包含那些没有雇员的部门。

select  e.last_name,d.department_name from  employees  e RIGHT OUTER JOIN  departments  d on e.DEPARTMENT_ID = d.department_id;
全外连接(FULL OUTER JOIN)

注意: MySQL 中不支持 FULL OUTER JOIN 连接

可以使用 union 实现全完连接。

  • UNION: 可以将两个查询结果集合并,返回的行都是唯一的,如同对整个结果集合使用了 DISTINCT。
  • UNION ALL: 只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据, 那么返回的结果集就会包含重复的数据了。

语法结构

(SELECT  投影列 FROM 表名 LEFT OUTER JOIN  表名 ON  连接条件) 
UNION 
(SELECT  投影列 FROM 表名 RIGHT OUTER JOIN  表名 ON  连接条件)

示例:

查询所有雇员的名字以及他们的部门名称,包含那些没有雇员的部门以及没有部门的雇 员。

(select e.last_name,d.department_name from employees e LEFT OUTER JOIN departments d on  e.department_id =  d.department_id) 
UNION 
(select  e1.last_name,d1.department_name from employees e1 RIGHT OUTER JOIN departments d1 on d1.department_id = e1.department_id)

相关文章:

  • Selenium元素定位之页面检测技巧
  • 【打卡】牛客网:BM35 判断是不是完全二叉树
  • vue的指令学习
  • 一座 “数智桥梁”,华为助力“天堑变通途”
  • golang工程——中间件redis,单节点集群部署
  • vue双向绑定失效,设置data值页面却不显示
  • 线性代数 第六章 二次型
  • 【代码数据】2023粤港澳大湾区金融数学建模B题分享
  • Centos部署清华ChatGLM3-6B详细教程
  • ffmpeg mp3截取命令,视频与mp3合成带音频视频命令
  • 【flink】RowData copy/clone方式
  • 动态规划29(Leetcode714买卖股票的最佳时期含手续费)
  • Go语言并发控制:原理与实践
  • 解决 eslint 的 Parsing error: Unexpected token 错误
  • 抛弃繁琐、提高效率:低代码工具助你飞速开发 | 开源专题 No.42
  • SegmentFault for Android 3.0 发布
  • 03Go 类型总结
  • 2017前端实习生面试总结
  • es6要点
  • Github访问慢解决办法
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JavaScript标准库系列——Math对象和Date对象(二)
  • java多线程
  • Java应用性能调优
  • vue中实现单选
  • 当SetTimeout遇到了字符串
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 前端
  • 前端攻城师
  • 设计模式(12)迭代器模式(讲解+应用)
  • 使用Swoole加速Laravel(正式环境中)
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 仓管云——企业云erp功能有哪些?
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (175)FPGA门控时钟技术
  • (2020)Java后端开发----(面试题和笔试题)
  • (三)c52学习之旅-点亮LED灯
  • (转)Mysql的优化设置
  • (转载)Google Chrome调试JS
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET NPOI导出Excel详解
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • /proc/vmstat 详解
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [BT]BUUCTF刷题第9天(3.27)