首页 > 数据库 >sql查询进阶操作-多表查询

sql查询进阶操作-多表查询

时间:2022-12-10 14:00:09浏览次数:55  
标签:join 进阶 查询 student 多表 连接 select studentaddress

数据库的进阶操作

一:连接查询1)内连接 inner join

内连接:使用语法 表一 inner join 表2 on 字段1 = 字段2
//在查询中需要将两张表存在对应关系的数据全部显示出来,需要使用内连接,内连接显示两张表中存在对应关系的全部数据,没有对应关系的数据不显示
内连接使用前提:有两张表,只显示两张表中某个字段值相同的数据,每有相同字段值的数据不显示
eg:现有学生表和学生住址表,两个表中的学号是存在对应关系,按照学号进行查询学生的所有信息
select * from student inner join studentaddress on student.studentid = studentaddress.student
//注意在使用内连接时on后面跟的表名与字段名之间是有个点的,不是逗号是点

二:连接查询通知识点

1:对链接后的表进行显示字段限制
select 表1.字段名 , 表2.字段名 from 表1名 inner join 表2名 on 表1.字段名 = 表2.字段名
eg:现有学生表和学生住址表,需要查询他们的姓名,班级。联系电话和住址
select student.studentName as 姓名,student.studentClass as 班级,studentaddress.tal as 联系电话,studentaddress.address as 家庭住址 from student inner join studentaddress on student.studentid = studentaddress.studentid;
2:在连接查询中往往会用到起别名的方式去缩短表名。给表单独创造空间
eg:
select st.studentName as 姓名,st.studentClass as 班级,ad.tal as 联系电话,ad.address as 家庭住址 from student st inner join studentaddress ad on st.studentid = ad.studentid;

三:连接查询2)左连接 left join

左连接:以left join为界 关键字左边表的信息要全部显示出来,关键字右边表中只显示有对应关系的字段,没有对应关系的字段以null占位填充即可
eg:select * from student left join studentaddress on student.studentid = studentaddress.studentid;

四:连接查询3)右连接 right join

右连接主要解决三张及以上表查询时常见
以right join为界,关键字左边有关联关系的对应字段全部显示,没有关联关系的字段值不显示以null填充,关键字右边所有字段全部显示
右连接正好是与左连接相反的
eg:select * from student right join studentaddress on student.studentid = studentaddress.studentid;

连接查询总结

一:内连接:匹配两张表中右关联关系的字段值
二:左连接,关键字左边所有字段值全部限制,关键字右边只显示有关联关系的字段值,没有关联关系的字段值以null进行填充
三:右连接,关键字右边所有字段值都显示,关键字左边只显示右关联关系的字段值,没有关联关系以null进行填充
四:连接查询的实质:只是将分布于多张表的数据,通过连接的方式进行整理,形成数据源
连接操作完成后,之前所有的查询方法都可以使用
具体连接方法要根据实际工作时进行选择
//注意:使用内连接时,要注意他的特性“如果两张表之间有部分字段没有对应关系,那么将不会显示出来”

五:自关联

特征:只有一张表,表中最少有两个字段具备对应关系
步骤:通过起别名的方式将一张表变为两张表,通过字段的对应关系,进行条件对比,实现连接查询
eg:有一张城市表,包含若干城市,现在需要查询河南省所有城市
select * from areas a1 inner join areas a2 on a1.aid = a2.pid where a1.atitle = '河南省';
//注意:不要漏写表名,否则会报错字段不明确
eg:查询河南省所有的市区
select * from areas a inner join areas b on a.aid = b.pid left join areas c on c.aid = b.pid where a.atitle='河南省';

六:子查询

在一条查询语句中,利用另一条语句作为条件或数据源,充当条件或数据源的语句称为子查询
注意:子查询语句在使用时无比使用括号括起来

子查询-充当条件

eg:查询商品价格超过平均价格的商品
//首先查商品的平均价格,在使用平均价格作为条件,对比高于平均价的商品
--查询商品平均价格
select avg(price) from goods/得出平均价格为68.333
--在使用查询出的平均价格作为条件,去查询高于平均价格的商品和价格
select goodsName,price from goods where price >68.333;
--使用子查询
select goodsName,price from goods where price >(select avg(price) from goods);
//犹如数学计算一样,先查询括号里面的,在将括号里面的结果作为条件查询括号外面的

子查询-充当数据源

eg:查询所有来自并夕夕的商品包含商品分类
实现步骤:先查询所有商品,在查询所有商品分类,在进行筛选出属于并夕夕的商品
--查询所有商品和所有分类
select * from goods;
select * from category;
--筛选出属于并夕夕的商品
select * from goods where company='并夕夕';
--实现子查询作为数据源
select * from category F inner join (select * from goods where company="并夕夕") G on F.typeId = g.typeId
//解释:现在有两张表,一张表中包含商品信息,一张表中包含商品分类,这两张表的有个字段信息是有关联的,那么在表1中我么要筛选出要求的公司产品,再将表1的结果作为第三张表与表二进行内连接查询出商品所属分类
 

标签:join,进阶,查询,student,多表,连接,select,studentaddress
From: https://www.cnblogs.com/wh0915/p/16971477.html

相关文章

  • Day7 - 面向对象编程进阶
    本节内容:面向对象高级语法部分经典类vs新式类静态方法、类方法、属性方法类的特殊方法反射异常处理Socket开发基础作业:开发一个支持多用户在线的FTP程序 1.经典类......
  • Python进阶——循环对象
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • 【MySQL】将查询结果导出到一个文件
    (1)SQL示例如下,要将如下的SQL查询结果导出到一个txt文件,便于研发做结果内容的核对selectps_partkey,sum(ps_supplycost*ps_availqty)asvaluefrompartsupp,......
  • 【Java】【数据库】索引为何使查询变得更快?--B+树
    排序数据的二分查找二分查找的时间复杂度是\(O(log_2n)\),明显快于暴力搜索。索引建立索引的数据,就是通过事先排好顺序,在查找时可以应用二分查找来提高查询效率。所以......
  • 现在有一个并查集,你需要完成合并和查询操作。
    输入格式:第一行包含两个整数N,M,表示共有N个元素和M个操作。接下来M行,每行包含三个整数zi,xi,yi。当zi=1时,将xi与yi所在的集合合并。当zi=2时,输出xi与yi......
  • oracle数据库实现分页查询
    SELECT*FROM ( SELECT T.*, ROWNUMRN FROM (SELECT*FROM表名WHERE条件)T WHERE ROWNUM<=((currentPage-1)*pageSize+pageSize) )......
  • HCIP-进阶实验06-多实例生成树安全部署
    HCIP-ICT进阶实验06-多实例生成树安全部署1实验需求1.1实验拓扑1.2实验环境说明IP地址规划表:设备接口IP地址备注SW1VLANIF10192.168.10.254/24......
  • SpringBoot中MongoDB聚合管道查询操作$facet$lookup$unwind$group
    前言、官方文档、MongoTemplate中的概念前言最近在做基于SpringBoot的MongoDB的聚合管道操作,JSON语句不难写,但是理清楚逻辑、顺序很麻烦,而且在Java(Springboot)上操作聚合......
  • Django ORM之F与Q查询
    1.F查询fromdjango.testimportTestCase#Createyourtestshere.importosif__name__=="__main__":  os.environ.setdefault("DJANGO_SETTINGS_MODULE","da......
  • golang mysql查询textRows和binaryRows解惑
    1.问题之前写了一套统一mysql返回数据的解析库:rows,err:=ms.dbInst.Query(s,args...) //执行SQL语句,比如select*fromusersiferr!=nil{panic(err)}......