看完就懂的连表查询

文章目录

      • 一、表与表之间的关系
        • 1.1一对一
        • 1.2一对多
        • 1.3多对多
      • 二、 连表查询
        • 2.1概念
        • 2.2笛卡尔积
        • 2.3内连接
        • 2.4外连接
          • 2.4.1左外连接
          • 2.4.2右外连接
          • 2.4.3全连接
          • 2.4.4navicat导入导成sql语句
          • 2.4.5练习
      • 三、 子查询
        • 3.1概念
        • 3.2练习
          • 3.2.1查询工资最高的员工所有信息
          • 3.2.2查询工资比7654工资高和7788做相同工作的人的详细信息?
      • 五、练习
        • 5.1查询工资比JONES员工高的信息
        • 5.2计算每个部门的平均工资比30部门最高工资还高的平均工资
        • 5.3查询工资排名靠前的第6位到第10位
        • 5.4查询和SCOTT从事相同工作的信息
        • 5.5查询有奖金的员工信息
        • 5.6查询部门编号是20并且工资在2000和3000之间的员工信息
        • 5.7查询出工作为MANAGER或者CLERK的员工的信息。
        • 5.8查询出名字正数第二位为R的员工信息。
      • 六、补充

一、表与表之间的关系

1.1一对一

在这里插入图片描述

1.2一对多

一个班级可以有多个学生,像这样就叫一对多的关系
在这里插入图片描述

1.3多对多

在这里插入图片描述

一个老师可以带多个学生,一个学生可以被多个老师教,所以两张表的关系是多对多。

二、 连表查询

2.1概念

如果要查询的数据字段在两张表里,需要连表查询

2.2笛卡尔积

select * from 表名1 inner join 表名2;

如果学生表如下:
在这里插入图片描述

教师表如下:
在这里插入图片描述

如果像上面的写法不加条件就是用学生表的每一条数据去匹配老师表的数据,就是8*5=40,就会生成一个庞大的查询结果,叫笛卡尔积。
但是上面很多数据是无效的,所以为了避免出现笛卡尔积,我们要加上条件。

2.3内连接

select * from 表名1 inner join 表名2 on 条件;

查询结果如下:
在这里插入图片描述

我们也可以给表起别名,语法真实表名 as 别名

在这里插入图片描述

2.4外连接

2.4.1左外连接
select 字段 from 左表名 left outer join 右表名 on 条件;

在这里插入图片描述

左外连接是以左表为基准,左表的所有数据都会显示,对于右表匹配到的就显示匹配的数据,没有匹配的就显示null.
也可以把outer省略
在这里插入图片描述

2.4.2右外连接
select 字段 from 左表名 right outer join 右表名 on 条件;

在这里插入图片描述

右外连接是以右表为基准,右表的所有数据都会显示,对于左表匹配到的就显示匹配的数据,没有匹配的就显示null.

2.4.3全连接

我们可以这样实现全部查询所有数据显示结果
左外连接语句 UNION 右外连接语句;

select sname,age,tname from student left join teacher on student.tid=teacher.tid UNION select sname,age,tname from student right join teacher on student.tid=teacher.tid;

在这里插入图片描述

2.4.4navicat导入导成sql语句

我们把别人给的sql语句导入如下操作:

在这里插入图片描述
在这里插入图片描述

注意导入成功以后右键刷新一下表才会显示出来。

如果我们想把自己写的表导成sql文件,可以如下操作:
在这里插入图片描述

2.4.5练习

假设dept表如下:
在这里插入图片描述

假设员工表如下:
在这里插入图片描述

(1) 查询sales(销售部)的员工的具体信息(姓名 工资 奖金 部门)
在这里插入图片描述

(2)查询姓名最后一位是R的员工的姓名 工作 奖金和所在的部门
在这里插入图片描述

三、 子查询

3.1概念

一个查询语句的结果当成另一个查询的语句的范围或条件了。

3.2练习

3.2.1查询工资最高的员工所有信息

第一步:先查出最高工资

select max(sal) from emp;结果是5000

第二步:查询工资=5000的人的所有信息

select * from emp where sal=5000;

第三步:替换成子查询

select * from emp where sal=(select max(sal) from emp);
3.2.2查询工资比7654工资高和7788做相同工作的人的详细信息?

第一步:定出主框架

select * from emp where 工资>and job=?

第二步:先实现条件1

select sal from emp where empno=7654 结果是1250

第三步:实现条件2

select job from emp where empno=7788;结果是ANALYST

第四步:替换成子查询

select * from emp where sal>( select sal from emp where empno=7654) and job=( select job from emp where empno=7788);

最终结果如下:
在这里插入图片描述

五、练习

5.1查询工资比JONES员工高的信息

第一步:先查询JONES的工资

select sal from emp where ename='JONES'; 结果是2975

第二步:替换成子查询

select * from emp where sal>( select sal from emp where ename='JONES');

5.2计算每个部门的平均工资比30部门最高工资还高的平均工资

第一步:先写主框架

select  deptno, avg(sal)  from emp group by deptno having avg(sal)>?

第二步:求30号部门的最高工资

select max(sal) from emp where deptno=30; 结果是2850

第三步:替换成子查询

select  deptno, avg(sal)  from emp group by deptno having avg(sal)>(select max(sal) from emp where deptno=30);

5.3查询工资排名靠前的第6位到第10位

select sal from emp order by sal desc limit 5,5;

5.4查询和SCOTT从事相同工作的信息

第一步:先查询SCOTT从事的工作

select job from emp where ename='SCOTT';结果是化验员

第二步:替换成子查询

select * from emp where job=( select job from emp where ename='SCOTT');

5.5查询有奖金的员工信息

select * from emp where comm is not null;

5.6查询部门编号是20并且工资在2000和3000之间的员工信息

select * from emp where deptno=20 and sal between 2000 and 3000;

5.7查询出工作为MANAGER或者CLERK的员工的信息。

select * from emp where job=’MANAGER’ or job=’CLERK’;

或者

select * from emp where job in (‘MANAGER’,’CLERK’);

5.8查询出名字正数第二位为R的员工信息。

select * from emp where ename like ‘_R%’;

六、补充

mysql有两个存储引擎,一个是innoDB 和MYISAM,但是如果想设置外键必须存储引擎是innodb.
其实创建数据表完整格式:

create table xx(字段名 类型 字段修饰符,..)engine=innodb default charset utf8;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三分钟掌握PHP操作数据库

这里写自定义目录标题一、 操作数据库(mysql)的工具1.1命令行工具1.2navicat界面化工具1.3phpAdmin界面化工具二、 表单传值2.1文本框和文本域传值2.2单选框传值2.4下拉菜单传值三、 php连接数据库3.1连接方式介绍3.2mysqli基础步骤3.2.1创建连接3.2.2选…

看完就会的文件编程

文章目录文件编程1.1文件操作函数1.1.1file()函数1.1.2fopen fgets fclose1.2.1读取模式1.2.2写入内容(开头)1.2.3写入内容(追加)1.1.3file_get_contents1.1.4文件路径相关函数1.1.5file_exists1.1.6feof1.1.7copy()1.1.8set_incl…

一文吃透PHP和HTML的嵌套写法

1.1全部php生成结构 1.2html中嵌套php 总结如下&#xff1a; html和php混写规则&#xff1a; php代码必须包在<?php ?>html中写php也是同理&#xff0c;但是有值输出必须加上echo 1.3博客项目 1.3.1前后台 前台主要是做数据展示的&#xff0c;所有的用户通过访问域…

一文看懂 GD2库

文章目录一、 GD2简介1、 验证码&#xff08;实际上是一个img&#xff09;二、 GD2库使用步骤2.1添加扩展2.2修改php配置文件2.3重启服务三、 GD2里面的常用方法3.1 imagecreate3.2 imagecolorallocate3.3 imagefill3.4 输出图像资源3.5创建真彩画布3.6在图像中写文字3.6.1imag…

算法实践--最小生成树(Kruskal算法)

什么是最小生成树(Minimum Spanning Tree) 每两个端点之间的边都有一个权重值&#xff0c;最小生成树是这些边的一个子集。这些边可以将所有端点连到一起&#xff0c;且总的权重最小 下图所示的例子&#xff0c;最小生成树是{cf, fa, ab} 3条边 Kruskal算法 用到上一篇中介绍的…

洽谈 “会话技术” 纯干货赶紧收藏吧

文章目录一、 HTTP协议二、 会话三、 cookie3.1概念和设置cookie3.2读取cookie3.3设置cookie有效期3.4cookie是跨页面的3.5删除cookie3.6登录案例3.7cookie特点四、 session4.1概念4.2设置session4.3获取session4.4清除session4.5模拟购物车案例一、 HTTP协议 HTTP协议是Hyper…

[bzoj2729][HNOI2012]排队 题解 (排列组合 高精)

Description 某中学有 n 名男同学&#xff0c;m 名女同学和两名老师要排队参加体检。他们排成一条直线&#xff0c;并且任意两名女同学不能相邻&#xff0c;两名老师也不能相邻&#xff0c;那么一共有多少种排法呢&#xff1f;&#xff08;注意&#xff1a;任意两个人都是不同的…

详解 正则表达式

文章目录一、概念二、作用三、语法规则3.1定义规则3.2符号简介3.3preg_match用法详解3.4详解元字符3.4.1 \d和[0-9]3.4.2 \D和[^0-9]3.4.3^和$3.4.4*代表出现0次或者多次3.4.5代表出现1次或者多次3.4.5&#xff1f;代表出现0次或者1次3.4.6{n}3.4.7{n,}3.4.8{n,m}3.4.9点号&…

Java:控制台输入车辆信息,将信息保存至数据库中

程序功能&#xff1a;控制台输入车辆信息&#xff0c;将信息保存至数据库中 程序代码如下&#xff1a; BaseDao.java package DAO_dome.kehozuoye; import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;i…

echars 3D地图为区域自定义颜色

echars 3D地图为区域自定义颜色问题延伸解决问题问题 根据项目需求&#xff0c;我们要将下面省级地图中的个别市进行高亮&#xff08;不同颜色&#xff09;展示 延伸 首先跟大家介绍这个地图的展示方式&#xff1a; 采用的是Vue框架中运用echarts地图采用的是geo3D和scatt…

基于Python语言使用RabbitMQ消息队列(一)

介绍 RabbitMQ 是一个消息中间人&#xff08;broker&#xff09;: 它接收并且发送消息. 你可以把它想象成一个邮局: 当你把想要寄出的信放到邮筒里时, 你可以确定邮递员会把信件送到收信人那里. 在这个比喻中, RabbitMQ 就是一个邮筒, 同时也是邮局和邮递员 . 和邮局的主要不同…

爆赞程序猿开发软件

VSCode 使用 IntelliSense 超越语法突出显示和自动完成&#xff0c;它提供基于变量类型、函数定义和导入模块的智能完成 直接从编辑器调试代码。启动或附加到您正在运行的应用程序并使用断点、调用堆栈和交互式控制台进行调试 与 Git 和其他 SCM 提供商合作从未如此简单。查…

如果你在北京失业了,别怕,记得去领这笔钱!最少2034元/月!

人在江湖飘&#xff0c;哪能不挨刀 公司倒闭&#xff0c;老板走人&#xff0c;公司裁人 …… 就要被迫失业了 别怕! 如果你在北京失业了 记得去领这笔钱——失业保险金 每月最多有2143元 虽然钱不多&#xff0c;但能解燃眉之急 帮助你度过困难日子 重点全程网上就能…

真实诠释程序员日常的二十四张图【你中了几个】

当你打开遗留代码时 扒下来项目后改了一行代码…… 程序员调试css样式的时候 当你的try catch 不起作用 产品经理对你说要兼容IE 没有ui给你提供大小设计的结果 没吃透需求直接开发的你 程序员修复bug的真实处境 当你开始使用库&#xff0c;但忘记阅读文档 产品经理告诉你这只是…

Git学习原版手稿

手稿诞生记 Git学习的时候难免会有遗忘然后往复学习查看的过程&#xff0c;所以就形成了这个学习的手稿&#xff0c;记录了Git使用过程中的大部分命令&#xff0c;今天在清理的时候偶然看到了这些记录&#xff0c;而且最近也在写Git的使用教程&#xff0c;大致的学习线路也是按…

程序员首选编程电脑【火爆来袭】

作为一名程序员肯定会常用到一些编程软件&#xff0c;所以需要设备的配置参数上不能太差&#xff0c;不仅是要以稳定强大输出为基本&#xff0c;内存、音响、续航等方面也不可或缺。 直奔主题 如果你手里资金到位&#xff0c;那必须整一步到位——MacBook 对于这款大佬型笔记本…

强大的APIClound云修复——告别繁琐的编译打包流程

小编接到一项目的二期开发任务&#xff0c;拉下代码开始熟悉大概的框架、技术、上线流程等前期工作&#xff0c;本app是通过vue技术进行开发&#xff0c;使用ui是 vant 库&#xff0c;打包上线则是使用的 APIClound 平台&#xff1b; 在我们的app上线后&#xff0c;如果我们改…

你对ES6究竟了解多少?—— 有这一篇就够用了

1. ES6相关概念&#xff08;★★&#xff09; 1.1 什么是ES6 ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。ES6 是ES2015以后的泛称 1.2 为什么使用 ES6 ? 每一次标准的诞生都意味着语言的完善&#xff0c;功能的加强。JavaScrip…

JavaScript 高级——详谈面向对象

1.面向过程与面向对象 1.1面向过程 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。 1.2面向对象 面向对象是把事务分解成为一个个对象&#xff0c;然后由对象之间分工与合作。…

UVa202Repeating Decimals (循环小数)

解答&#xff1a; 因为除数是固定的&#xff0c;所以只要判断被除数是否出现过即可。 #include<iostream> #include <cstdio> #include <cstring> using namespace std; int m,n,vis[5000],res[5000],temp[5000],num,t,x; int main() {while(scanf("%d%…