分享好友 最新动态首页 最新动态分类 切换频道
join on 后跟or有什么用_关于SQL:除了刷题,还要准备什么?
2024-12-26 19:51

其实不论是哪种考察模式,基本看完《SQL必知必会》,然后在牛客刷完在线SQL题就能够解决70%的问题了。那剩下的30%是什么呢

join on 后跟or有什么用_关于SQL:除了刷题,还要准备什么?

——剩下的30%是对语法进行总结,避免陷入因为长时间不写而忘记的尴尬境地……也避免对某些函数进行混淆…… 那我就直接放上来文字版了,主要是针对我在面试中被问到的一些常见函数用法以及混淆点做了简单总结(敲重点,不是所有常见的语法啦,只是我面试中被问到最多的哦,有事没事看两眼,就当复习咯。

当然,别偷懒,重点还是刷题or实习写代码

inner_join内连接,根据两个表共有的列来匹配其中的行,强调只有两个表共有的列值对应的行才能匹配出来。left join/right join/all join(左,右,全)外连接,以left join 为例,如果指定了需要匹配的列名,无论右表对应行是否包含满足连接条件的数据,左表的数据都会提取出来,则结果会将右表的这些值以空值的形式匹配进来。cross join交叉连接,结果是笛卡尔积,就是第一个表符合查询条件的行数乘以第二个表符合查询条件的行数。

▼索引的作用

索引是为了提高数据库查询数据的速度而增加的标志符号(通过创建唯一性索引,可以保证表中每一行数据的唯一性)。索引主要建立在①经常搜索的列;②主键所在列;③外键所在列索引包括聚集索引与非聚集索引,它们的区别在于索引记录的顺序与表记录的顺序是否一致。聚集索引: 可以理解为索引记录的顺序与表记录的顺序一致,SQL默认在依次递增的主键上建立聚集索引,例如,id为1的数据在第一条,id为2的数据在第二条。聚集索引会按照主键的顺序来排序。(例如,用字典找字,对于认识的字可以通过拼音排序对应正文找到页码)非聚集索引: 可以理解数据存储在一个地方,索引指向数据存储的位置,索引的顺序与表中数据记录的顺序不一定一致。例如说,建立数据表登记学生考试成绩,字段包括姓名,学号与分数。假定该表按照成绩排序、学号信息错乱,可以考虑构建非聚集索引,第一名对应1,第二名对应2……,想要提取第10个学生的学号,查找索引10指向的数据即可。(用字典找字,不认识的字可以采用部首结合笔画等信息在检字表中搜索,找到页码。比如查"张"字,检字表中"张"的页码是60页,检字表中"张"的上面是"驰"字,但页码却是100页"张"的下面是"弩"字,页面是200页。很显然,在正文里面这些字并不是真正的分别位于"张"字的上下方,而检字表中连续的"驰、张、弩"三字实际上就是他们在非聚集索引中的排序

(关于聚集索引和非聚集索引的区别可以百度学习下,我记得好几家面试都直接问了……

▼排名函数与排序函数

排序函数 order by(默认asc升序,指定desc降序,例如将表格数据按照考试成绩从低到高排序。排名函数rank, dense rank, row number,得到的成绩的排序后,根据成绩的高低对学生排名,100分对应第一名,99分第二名。它们的区别在于row number: 根据成绩排序生成连续的序列号,1,2,3,4,5……rank 和row number 不同,rank 考虑了相同分数学生的排名问题。如第一名100分,第2名两个人并列99分,那么98分的同学排名第四。dense rank: 和rank的区别在于,同样考虑了分区内的排名,但dense rank的输出结果是连续的。如第一名100分,第2名两个人并列99分,那么98分的同学排名第三。

▼on和where的区别

前提:数据库在连接多张表返回记录时,都会生成一个中间临时表。在内连接中,使用on或者where没有区别。在外连接里,例如使用left join时:on是在生成临时表时使用的条件,不管on的条件是否为真,都会返回左边表中的全部记录。where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

▼连接多个select

union: 连接select,不允许重复值,而且select的对象要有相同的列以及数据类型;(例如A表中某字段的数据是1,1,2,3,4,B表中对应的数据是(0,0,0,0,0,则提取的数据是(1,0;2,0;3,0;4,0,也就是说(1,0)这个组合只会出现一次。)union all: 作用同union,但是允许重复值(也就是说,与上面一样的操作里,(1,0)这个组合会出现2次)一般来说如果select 字段大于1个,用union all比用union速度快,因为union 会将多个结果中重复的数据合并,union all则是直接合并Intersect: 和 union指令类似,intersect也是合并两个select语句结果的函数。不同的地方是, union的处理结果类似于全集 (如果这个值存在于第一个select或者第二个select,它就会被选出),而 intersect则比较像取出交集 ( 值要同时存在于第一个select和第二个select)。

minus: 先找出第一个 select 语句所产生的结果,然后看这些结果有没有在第二个 select语句的结果中。最后会输出第一个select中没有,但是第二个select中有的数据

▼主键和外键

主键是一张表中能够确定一条记录的唯一标志(数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 ),比如身份证号。

外键用于和另一张表进行关联。例如,A字段是A表的主键,那么出现在B表中的A字段能够作为B表的外键,实现A,B表的连接查询。

▼向表中插入数据

insert into tablename values: 普通插入数据模式insert or ignore into: 如果没有则插入数据,如果有则忽略insert or replace into: 如果不存在就插入,存在就更新

▼删除表中数据

delete : 删除表中数据,可以指定具体数据(where)drop column/ drop table : 删除列数据,与delete 不同,drop函数会将数据以及表的结构全部删除。truncate: 仅删除数据,且默认删除所有数据。和delete不同,truncate不能用where进行筛选,但删除速度比delete快

▼字符串常见操作函数

concat(): 将多个字符串连接成一个字符串,连接符用“”包起来

concat_ws()将多个字符串连接成一个字符串,在最开始的位置指定连接符(指定一次即可

group concat(): 将group by产生的同一个分组中的值连接起来,返回一个字符串。

like(): 需要与通配符一起使用'%'代表任意字符出现任意次数'_'仅能匹配单个字符

substr(): 用于从字段中提取相应位置的字符。

regexp() : 正则表达式匹配函数

▼In/exist的联系与区别

子查询过程中,In和exist函数效率比较当进行连接的两个表大小相似,效率差不多;如果子查询的内表更大,则exist的效率更高(exist先查询外表,然后根据外表中的每一个记录,分别执行exist语句判断子查询的内表是否满足条件,满足条件就返回ture)。如果子查询的内表小,则in的效率高(in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积 (表中的每一行数据都能够任意组合A表有a行,B表有b行,最后会输出a*b行),然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快)。Exist的原理: 使用exist时,若子查询能够找到匹配的记录,则返回true,外表能够提取查询数据;使用 not exist 时,若子查询找不到匹配记录,则返回true,外表能够提取查询数据。


最新文章
黄冈企业关键词优化策略,高效网络营销新路径
黄冈地区企业可优化关键词推广,实现高效网络营销。精准定位目标客户,深入分析行业热词;优化搜索引擎排名,提高曝光度;利用社交媒体扩大传播,增强品牌影响力;持续监测数据,调整策略,实现精准营销。通过这些方法,黄冈地区企业可在网
牛栏山百年牛栏山39度500毫升(红12)
牛栏山经销商手机号码固定电话联系人QQ经销商地址龙威酒行134****90090373****5103高总河南新乡 中博食府183****7187183****7187李双陡沟街道中博凤华岳府5-2101福建酒一杯烟酒茶批发商行137****5565137****5565张总南屿镇酒一杯吉喆名烟
豆包助力个性化搭建,一站式解决方案全攻略
豆包轻松搭建个性化,提供一站式解决方案。只需简单操作,即可自定义设计、布局、功能,实现个性化搭建。本文全解析豆包搭建流程,助您轻松掌握。一、了解豆包二、豆包三、选择模板四、编辑与配置五、域名绑定与备案六、发布与推广七、与升
讲师课件教学课件
讲师课件目录讲师介绍课程内容教学方法教学资源教学评价教师风采展示CONTENTS01讲师介绍CHAPTER拥有国内外知名大学的博士学位,并在相关领域有多年的研究经验。学术背景研究方向学术成果专注于某一专业领域,对该领域有深入的理解和独到的
解锁手机正确使用方法,vivo一键证件照功能太好用了!
  随着时间的推移,这个不平凡的假期也正式画下了句点。莘莘学子纷纷随着开学季的到来回到了校园。但是假期一长,突然的返校就让许多学子们手足无措了起来。如何快速适应校园生活,也成为了当下诸多学生头痛的问题之一。当然了,vivo这家
错误编译如何解决apktool d -d 出现错误Error occured while disassembling class
新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正如何处理apktool d -d 出现错误Error occured while disassembling class告诉你,这不是你的错误,这是apktool本身的错误,现在正式release的1.5.2版本不行,搞不定这
(二十六)文件上传和下载
目录实现web开发中的文件上传功能,需要完成如下二步操作:在web页面中添加上传输入项在servlet中读取上传文件的数据,并保存到本地硬盘中如何在web页面中添加上传输入项标签用于在web页面中添加上传输入项,设置文件上传输入项的时需要注
连锁店销售管理系统_连锁店销售管理系统百科
1、本网站发布的该篇文章,目的在于分享电商知识及传递、交流相关电商信息,以便您学习或了解电商知识,请您不要用于其他用途; 2、该篇文章中所涉及的商标、标识的商品/服务并非来源于本网站,更非本网站提供,与本网站无关,系他人的商品
神马搜索广告投放是怎么收费的 uc信息流推广怎么样模式收费
在快应用开发中整合神马搜索的广告通常需要通过其官方提供的SDK来进行。首先,你需要在项目中引入神马搜索的广告SDK,并按照官方文档注册开发者账号并获取广告位ID。以下是基本步骤:1. **添加依赖**: - 在`build.gradle`文件的`dependenc
相关文章
推荐文章
发表评论
0评