首先两个表的数据如下:

drugs表:

drugsType表:

很显然drugs的外键是typeid,typeid这列对应的是drugsType的主键id.为了方便测试我把drugs表中的外键设置可以为空

常见的连接:

1:外连接

外连接可分为:左连接、右连接、完全外连接。

左连接关键词:left outer join和left join都可以用

select * from drugs d left join drugsType t on d.typeid=t.id      的效果如下

很显然可以看出138条和157条数据,drugs表对应的外键的表中的数据没有显示出来,这就是所谓左连接查询,左连接查询意思就是显示左表中的全部数据,右表符合 on 条件的数据才显示出来,因为drugs表中的两条数据没有与之外键表对应也就没有显示出来。

右连接:关键词:right outer join和right join都可以用

select * from drugs d right join drugsType t on d.typeid=t.id  效果如下:

很显然可以看出138条和157条数据,只显示drugs对应的外键的表中的数据显示出来啦,这就是所谓右连接查询,右连接查询意思就是显示右表中的全部数据,左表符合 on 条件的数据才显示出来,因为drugsType表中的两条数据没有与之主键表对应也就没有显示出来。

2:内连接:关键词:inner join

select * from drugs d INNER join drugsType t on d.typeid=t.id   效果如下:

很显然可以看出138条和157条数据,因为drugsType表中的两条数据没有与之主键表的数据所以都没有显示出来,这就是内连接查询,内连接查询意思就是显示符合条件全部数据。

3:隐性连接,俗称where连接:

关键词where

select * from drugs d,drugsType t where d.typeid=t.id    效果如下:

很显然可以看出138条和157条数据,因为drugsType表中的两条数据没有与之主键表的数据所以都没有显示出来,这就是隐性连接查询,隐性连接查询意思就是显示符合条件全部数据。跟内连接,结果相同,只不过这个内连接,不怎么推广,不推荐用,随着数据库的发展和更新,大多数人用显性连接,也就是内外连接

之所以写这个博客是因为今天写项目的时候出现的bug,根据前台的人反馈的信息,新增的数据,在分类查询的时候,出不来数据,后来想到是外键设置可以为空的了,因此查不出来数据。

转载于:https://www.cnblogs.com/zoli/p/11158152.html

常见的多变查询,和遇到的一些坑。。。。相关推荐

  1. 最常见的 SQL 查询错误 - 第二章节

    第二章节:非 SARGable 查询条件 像大多数编程人员一样,数据库开发人员或多或少倾向于编写直接翻译给定请求的代码.大多数编程语言(包括 SQL)被设计为更易于人们阅读,这也导致了一个问题.为什么 ...

  2. 4.性能下降原因和常见的Join查询

    性能下降 SQL慢,执行时间长,等待时间长 1.查询语句写的烂 2.索引失效 单值索引失效 和 复合索引失效 3.关联查询太多join(设计缺陷或不得已的需求) 4.服务器调优及各个参数设置(缓冲.线 ...

  3. MySQL 常见的数据库查询性能优化手段

    简单介绍了一些常见MySQL数据库优化手段,比如减少数据访问.使用索引.使用关联查询等等. 文章目录 1 优化数据访问 2 重构查询 2.1 优化子查询 2.2 优化GROUP BY和DISTINCT ...

  4. 常见优化Sql查询性能的方法收集

    1.查询条件减少使用函数,避免全表扫描 2.减少不必要的表连接 3.有些数据操作的业务逻辑可以放到应用层进行实现 4.可以使用with as 5.使用"临时表"暂存中间结果 6.不 ...

  5. 测试必看:常见的SQL查询案例(带答案)

    1.查询名字中含有"金"字的学生信息 select * from 学生表 where Sname like '%金%' 2.查询并统计同龄学生人数 select Sage,coun ...

  6. Oracle常见的经典查询语句

    01.  查询员工表所有数据  select * from emp; 02.  查询职位(JOB)为'PRESIDENT'的员工的工资  select sal from emp where job=' ...

  7. MySQL分页查询中该避开的坑

    参考文章:https://cloud.tencent.com/developer/article/1550771 MySQL在2016年仍然保持强劲的数据库流行度增长趋势.越来越多的客户将自己的应用建 ...

  8. C语言常见的错误及解决办法,避坑笔记

    一.指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存.浅显的例子就不举了,这里举几个比较隐蔽的例子. 1.结构体成员指针未初始化 struct stud ...

  9. Django 分组查询与ordering字段 巨坑

    样例: class Test(Model):class Meta:db_table = 'test'ordering = ['字段1', '字段2', '字段3'] django里常见的 group ...

最新文章

  1. My deep learning reading list
  2. 以太坊go-ethereum项目源码本地环境搭建
  3. boost::geometry模块多边形叠加示例
  4. java 调用cpp_java jni 调用cpp文件中的方法 | 学步园
  5. TypeScript入门-枚举
  6. C# 延时小函数 很好用
  7. 一起谈.NET技术,WPF Ribbon 开发资料分享
  8. mysql数据生成词云图_CVPR2018关键字分析生成词云图与查找
  9. JS处理Cookie
  10. Ghost配置2——添加代码高亮
  11. 使用scroll实现Elasticsearch数据遍历和深度分页
  12. lwip协议栈源码分析之pbuf
  13. android 如何清除应用数据恢复,手机删除数据如何恢复?手机数据恢复方法【图文教程】...
  14. Unity3D 串口连接
  15. “前首富”牟其中:欠的人情太多,要留着命来还
  16. 模电数电自动控制原理实验台QY-MS301C
  17. 51单片机期末课程作业之蓝牙、操控、测速、里程小车
  18. Chromebook2013 由Fyde os 升级为Deepin v20.2.1 (一)
  19. 运维自动化之系统部署
  20. cgal + sfcgal

热门文章

  1. java socket发送定长报文_socket编程
  2. mfc检测一个目录是否产生新文件_细数Java8中那些让人纵享丝滑的文件操作
  3. 1.3编程基础之算术表达式与顺序执行(20题)-2022.02.26
  4. P1287 盒子与球(python3实现)
  5. 1.5 编程基础之循环控制 10 满足条件的数累加
  6. 【docker】第五节:docker常用命令总结
  7. thinkPHP 阿里云OSS 上传文件、直接下载
  8. Android 自定义焦点框,Android给自定义按键添加广播和通过广播给当前焦点输入框赋值...
  9. Java笔记-使用ServerSocket构建HTTP服务器
  10. Arduino笔记-使用RFID-RC522读取IC卡卡号