Mysql

一,内连接、左连接、右连接以及全连接查询

一、内连接查询 inner join

关键字:inner join on

语句select * from a_table a inner join b_table b on a.a_id = b.b_id;

说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。

案例解释:在boy表和girl 表中查出两表 hid 字段一致的姓名(gname,bname),boy表和girl 表如下:

采用内连接查询方式:

SELECT boy.hid,boy.bname,girl.gname FROM boy INNER JOIN girl ON girl.hid = boy.hid;

二、左连接查询 left join

关键字:left join on / left outer join on

语句:SELECT * FROM a_table a left join b_table b ON a.a_id = b.b_id;

说明: left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。 左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

案例解释:在boy表和girl 表中左连接查询,boy表和girl 表如下:

采用内连接查询方式:

SELECT boy.hid,boy.bname,girl.gname FROM boy LEFT JOIN girl ON girl.hid = boy.hid;

查询结果如下:

三、右连接 right join

关键字:right join on / right outer join on

语句:SELECT * FROM a_table a right outer join b_table b on a.a_id = b.b_id;

说明:right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。

案例解释:在boy表和girl 表中右连接查询,boy表和girl 表如下:

采用内连接查询方式:

SELECT boy.hid,boy.bname,girl.gname FROM boy RIGHT JOIN girl ON girl.hid = boy.hid;

查询结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8kgkgFJ6-1603684358739)(https://i.loli.net/2020/08/31/M7e3YjLDw5Wd4to.png)]

从教学库中查询出所有学生的选课情况,要求没选修任何课程的学生信息也要反映出来(左,右连接)

select a.学生号,b.姓名,a.成绩 from 选课 a
left join 学生 b on a.学生号=b.学生号
where a.成绩 is null

查询课程表中 显示学生姓名,课程名称,成绩

select 学生.姓名,课程.课程名,选课.成绩 from 选课
inner join 学生 on 学生号=学生号
inner join 课程 on 课程号=课程号

查询选课表要求显示如下内容:(姓名,课程名称,成绩)选课(学生号,课程号)–》学生(学生号)–》课程(课程号)

select b.姓名,c.课程名,a.成绩 from 选课 a
inner join 学生 b  on a.学生号=b.学生号
inner join 课程 c  on a.课程号=c.课程号 where c.课程名='C++语言'

作业

1,统计各部门男员工,女员工的最高薪资 (员工)

   select 部门,if(性别=-1 or 性别='False','女','男') as 性别,max(目前薪资) as 最高薪资 from 员工group by 部门,性别

2、统计各部门平均年龄(员工)

    select 部门,format(avg(year(now())-year(出生日期)),2) as 平均年龄 from 员工 group by 部门

3、统计超过666人的部门(员工)

select 部门,count(部门) as 人数 from 员工 group by 部门 having 人数>666

4.查询员工表中年龄最大的员工信息

select 员工编号,姓名,出生日期 from 员工 where 出生日期=(select min(出生日期) from 员工)select 员工编号,姓名,出生日期 from 员工 order by 出生日期 limit 1

5.查询员工表中各部门年龄最小的员工信息(难)

select  distinct a.姓名,a.部门,a.出生日期 from 员工 a  where
a.出生日期=(select max(出生日期) from 员工 b where b.部门=a.部门 ) select  distinct a.姓名,a.部门,a.出生日期 from 员工 a  inner join
(select 部门,max(出生日期) as 出生日期  from 员工 group by 部门) b on a.部门=b.部门 where a.出生日期=b.出生日期select  distinct a.姓名,a.部门,a.出生日期 from 员工 a  inner join
(select 部门,max(出生日期) as 出生日期  from 员工 group by 部门) b on a.出生日期=b.出生日期

7.查询比平均单价高的产品的名称和单价(产品资料)

select 产品,单价 from 产品资料 where 单价>(select avg(单价) from 产品资料)

10.查询有哪些员工姓名是重复的并显示重复姓名的人数

select 姓名,count(*) as 同名人数 from 员工 group by 姓名 having 同名人数>2

12、查询哪些公司没有采购(客户,订货主档)

select 客户编号,公司名称 from 客户 where 客户编号 not in (select distinct 客户编号 from 订货主档)select a.客户编号,a.公司名称 from 客户 a left join 订货主档 b on a.客户编号=b.客户编号
where b.订单号码 is null

13、查询销售数量最多的产品信息(产品资料,订货明细)

select 产品编号,产品 from 产品资料  where 产品编号=销售数量最多的那个产品编号如何求销售数量最多的那个产品编号?
select  产品编号,sum(数量) as 数量 from 订货明细 group by  产品编号 order by 数量 desc limit 1最终代码:
select * from 产品资料  where 产品编号=(select  产品编号  from 订货明细 group by  产品编号 order by sum(数量) desc limit 1)

14、查询销售金额最多的产品信息(产品资料,訂貨明細)

select * from 产品资料  where 产品编号=(select  产品编号  from 订货明细 group by  产品编号 order by sum(单价*数量*(1-折扣)) desc limit 1)

15、查询出本月销售成单数量最多的前三名员工,并将其工资增加10%(訂貨主檔,员工)
本月销售成单数量最多的前三名员工

select 员工编号 from 订货主档 where month(now())= month(订单日期) group by 员工编号 order by  count(*) desc limit 3

16、查询1997年7月份客户采购的详细信息(客户 ,訂貨主檔 , 訂貨明細 )

select a.客户编号,a.公司名称,a.联系人,a.地址,b.订单号码,b.订单日期,b.收货人,
d.产品,e.类别名称,f.供应商,c.单价,c.数量,c.折扣 from 客户 a,订货主档 b,订货明细 c ,产品资料 d,产品类别 e ,商品供应 f where a.客户编号=b.客户编号 and b.订单号码=c.订单号码 and c.产品编号=d.产品编号 and d.类别编号=e.类别编号 and d.供应商编号=f.供应商编号
and 订单日期 between '1997-7-1' and '1997-7-31'

17、查询一个订单中采购金额最多的前三位公司详细信息(客户,訂貨主檔,訂貨明細)

  select a.*from 客户 a, 订货主档 bwhere a.客户编号=b.客户编号 andb.订单号码 in (select * from  ( select 订单号码from 订货明细group by 订单号码order by SUM(单价*数量*(1-折扣))  limit 3) t)

18.根据公司采购数量多少从高到低排列(訂貨主檔,訂貨明細)

select a.客户编号, sum(b.采购数量) as  采购总数量
from 订货主档 a,  (select 订单号码, SUM(数量) as 采购数量 from 订货明细 group by 订单号码) b
where a.订单号码=b.订单号码
group by a.客户编号
order by 采购总数量 desc

19.统计各种产品类别的产品数量,按照产品类别数量从低到高显示(產品類別,产品资料)

  select a.类别名称, b.产品数量from 产品类别 a, ( select 类别编号, COUNT(*) as 产品数量 from 产品资料 group by 类别编号  ) bwhere a.类别编号=b.类别编号  order by b.产品数量 asc

20、统计各个城市中客户的人数(客户)

  select 城市, COUNT(*) as 客户人数from 客户group by  城市

sql内连接、左连接、右连接以及全连接查询相关推荐

  1. 区分笛卡儿积,自然连接,等值连接,内连接,外连接—左,右

    1.笛卡尔积 笛卡儿积,不用多说,返回所有的情况. 2.自然连接 自然连接是在广义笛卡尔积R×S中选出同名属性上符合相等条件元组,再进行投影,去掉重复的同名属性,组成新的关系.自然连接是一种特殊的等值 ...

  2. 【MySQL】MySQL 的连接(内、左、右、全)

    一.表 的连 结 1.目的:减少数据的冗余 2.核心:分类 ***连接时至少要两张表,连接主要有内连接(inner join).左外连接(left outer join).右外连接(right out ...

  3. 内连接(join、inner join )、左连接(left join) 、全连接(full join)

    建表: drop table t_test1; drop table t_test2; create table t_test1( aid number(10), aname varchar2(40) ...

  4. oracle full outer join,oracle 内连接(inner join)、外连接(outer join)、全连接(full join)...

    建表语句: create table EMPLOYEE ( EID NUMBER, DEPTID NUMBER, ENAME VARCHAR2(200) ) create table DEPT ( D ...

  5. linux 全连接队列,TCP半连接队列和全连接队列的可能和出现问题和解决方案

    问题描述 监控系统发现电商网站主页及其它页面间歇性的无法访问: 查看安全防护和网络流量.应用系统负载均正常: 系统重启后,能够暂时解决,但持续一段时间后间歇性问题再次出现. 此时问题已影响到整个网站的 ...

  6. c++中实现域内,左,右对齐的方法

    需要包含头文件 实现域内左对齐 int main() {cout.setf(ios::left);//for (int i = 0; i < 5; i++)cout << setw( ...

  7. 全连接神经网络_二十九.全连接神经网络原理

    一.网络结构 1.图示 2.结构解析 一般情况下,神经网络的层数是指隐藏层和输出层的和,输入层不计入总层数.上示为一个3层神经网络.对各个参数进行解析: :第 层第 个神经元的输出. :第 层第 个神 ...

  8. SQL中的各种连接的区别总结(内连接,左连接,左外连接,右连接,右外连接,全连接,全外连接)

    在数据库中建立两张表方便大家理解,teacher和student表(student表中的teacherid字段是对应teacher表中的ID,举个例子张三的老师就是李四,没有teacherid就是这个 ...

  9. mysql外连接插座_深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接...

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...

  10. mysql 左外连接原理_深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接...

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...

最新文章

  1. java圆形泳池问题_Java实现 LeetCode 778 水位上升的泳池中游泳(二分+DFS)
  2. 最详细的PCL编译安装流程
  3. Ubuntu开机出现“error: invalid environment block“的解决方法
  4. JAVA线程池的创建
  5. django abstract base class ---- 抽象基类
  6. python中计算DataFrame,Series的数据频率
  7. 考研辅导c语言程序设计真题,全国名校C语言程序设计考研真题汇编
  8. OD调试2----破解序列号验证程序
  9. 使用opencv-python读取多个(海康\大华)网络摄像头的视频流,解决实时读取延迟问题
  10. win7查看计算机硬盘序列号,win7系统通过cmd查看硬盘序列号的操作方法
  11. SAP中物料成本视图原始组的应用原理分析
  12. MPQ 文件系统完成
  13. 《Caffe Modle Zoo》
  14. 上海商报:超级表格创始人叫板Excel
  15. 渔港股份创业板IPO上会被否:审核被终止,曾计划募资3.3亿元
  16. ApacheCN 编程/大数据/数据科学/人工智能学习资源 2019.11
  17. 谷歌 Android 12 Go 正式发布!
  18. 为知笔记 印象笔记 有道笔记 OneNote选择
  19. Kotlin 旅途篇(一)
  20. C语言异常代码C0000005的解决办法是:不对地址为NULL的存储空间赋值

热门文章

  1. mysql 计算近30天总金额_计算月嫂每天工资,应该用总工资除以30天还是26天?-免费法律咨询...
  2. keras实现LFW测试
  3. Mvtec数据集批量加各种噪声(高斯,椒盐,随机噪声)
  4. Web 前端开发规范手册
  5. 【Spark】介绍 快速入门
  6. 服务器的ip端口加密协议混淆,Obfsproxy - 混淆/加密端口数据
  7. 实验(1)信号的采样
  8. HACKTHEBOX——Nibbles
  9. table 表格合并行或列
  10. solr mysql 增量索引_基于Solr DIH实现MySQL表数据全量索引和增量索引