版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一定听LEFTJOIN、RIGHTJOIN这样的操作符,这实际上就是SQL99的标准,在SQL92中它们是用(+)代替的。SQL92SQL99SQL99SQL99SQL99与SQL92DBMSSQL99上一篇文章中,我用NBA球员的数据表进行了举例,包括 张数据表yer team和heightgrades。其中yer表为球员表,一共有37个球员,如下所示team表为球队表 共有3支球队,如下所示heightgradesSQL99SQL92们采用的是CROSSJOIN。我们可以通过下面这行代码得到yer和team这两张表1SQL:SELECT*FROMyerCROSSJOIN运行结果(一共37*3=111条记录t1,t2,t31SQL:SELECT*FROMt1CROSSJOINt2CROSSJOIN你可以把自然连接理解为Q2如果我们想把yer表和team表进行等值连接,相同的字段是team_id。还记得在SQL92标准中,是如何编写的1SELECTyer_id,a.team_id,yer_name,height,在SQL991SELECTyer_id,team_id,yer_name,height,SQL99NATURALJOINWHEREplayer.team_id=team.team_id。ONONSELECTyer_id,yer.team_id,yer_name,这里我们指定了连接条件是ONyer.team_id=team.team_id,相当于是用ON进行了team_id字段的等值ON球员的身高等级,需要用yer和height_grades两张SQL99:SELECTp.yer_name,p.height,FROMyeraspJOINheight_gradesasONheightBETWEENh.height_lowestAND4SQL92SQL92:SELECTp.yer_name,p.height,FROMyerASp,height_gradesASWHEREp.heightBETWEENh.height_lowestAND一般来说在SQL99中,我们需要连接的表会采用JOIN进行连接,ON指定了连接条件,后面可以是等值连接,也可USING当我们进行连接的时候,可以用USING指定数据表里的同SELECTyer_id,team_id,yer_name,height,你能看出与自然连接NATURALJOIN不同的是,USINGUSING中填入要指定的同名字段。同时使用JOINUSING可以简化JOINON的等值连接,它与下面的SQL查询结果是相SELECTyer_id,yer.team_id,yer_name,SQL99左外连接:LEFTJOIN或LEFTOUTER右外连接:RIGHTJOIN或RIGHTOUTER全外连接:FULLJOIN或FULLOUTER我们在SQL92中讲解了左外连接、右外连接,在SQL99的结合。在这三种外连接中,我们一般省略OUTER不写。1SELECT*FROMyer,teamwhereyer.team_id=1SELECT*FROMyerLEFTJOINteamONyer.team_id1SELECT*FROMyer,teamwhereyer.team_id(+)=1SELECT*FROMyerRIGHTJOINteamON1SELECT*FROMyerFULLJOINteamONyer.team_id需要注意的是MySQL不支持全外连接,否则的话全外连接 左右表匹配的数据+左表没有匹配到的数据+右表没有匹配到的数据。SQL92SQL99在两个SQL标准下的查询如下。1SELECTb.yer_name,b.heightFROMyerasa,1SELECTb.yer_name,b.heightFROMyerasaJOIN运行结果(6条记录SQL99和SQL92至此我们讲解完了SQL92和SQL99标准下的连接查询,每一行的组合。在SQL99中使用的CROSSJOIN。不过SQL92在这三种连接操作中,和SQL99还存在着明SQL92中的WHERE和SQL99中的JOIN你能看出在SQL92中进行查询时,会把所有需要连接的表都放到FROM之后,然后在WHERE中写明连接的条件。而SQL99在这方面更灵活,它不需要把所有需要连接的表都放到FROM之后,而是采用JOIN的方式,每次连接一,可以多次使用JOIN进行连接。SQL99SELECTFROMJOINtable2ONtable1和table2JOINtable3ONtable2和table3它的嵌套逻辑类似我们使用的FORfort1infort2iniffort3inifoutputt1+t2+SQL99采用的这种嵌套结构非常清爽,即使再多的表进行连接也都清晰可见。如果你采用SQL92,可读性就会大打最后一点就是,SQL99SQL92NATURALJOINJOINUSING。它们在实际中是比较常用的,省略了ON后面的等值条件判断,让SQL语句更加简洁。DBMSSQLDBMS要参考你正在使用的DBMS文档,这里我整理了一些需要不是所有的DBMS虽然SQL99标准提供了全外连接,但不是所有的DBMS都支持。不仅MySQL不支持,Access、、MariaDB等数据库软件也不支持。不过在Oracle、DB2、SQLServerOracle没有表别名SQLAS,不过在Oracle中是不存在AS的,使用表别名的时候,直接在表名后面写上表别名即可,比如yerp,而不是yerASp。是一款轻量级的数据库软件,在外连接上只支持左如table1RIGHTJOINtable2,在你可以写table2LEFTJOINtable1,这样就可以得到相同的效多表连接就相当于嵌套for循环一样,非常消耗资源,会让SQL查询性能下降得很严重,因此不要连接不必要的表。在许多DBMS中,也都会有最大连接表的限制。在连接时记WHERE语数据行,因此在多表连接的时候记了WHERE语句, DBMS自身数据表进行条件判断,因此在大部分DBMS中都对自连接可以说是SQL中的操作,通过两篇文章的学习,你已经从多个维度对连接进行了了解。同时,我们对SQL的两个重要标准SQL92和SQL99进行了学习,在我们需要进行外连接的时候,建议采用SQL99标准,这样更适合做业务报表的时候,我们会用到SQL中的连接操作(JOIN),因此我们需要理解和熟练掌握SQL标准中连接的使用,以及不同DBMS中对连接的语范。剩下要做我今天讲解了SQL99的连接操作,不妨请你做一个小练习。请你编写SQL查询语句,查询不同身高级别(对应height_grades表)对应的球员数量(对应yer表)。 售卖。页面已增加防盗追踪,上一 下一 1 6连接的内部执行步骤,比如先根据连接生成中间表数据作者回复:完整的SELECT3、GROUPBY8、ORDERBY4种连接及相关的关键字执行的顺序?4SELECTg.height_level,count(*)FROMheight_gradesasg,yeraspWHEREp.heightBETWEENg.height_lowestANDg.height_highestGROUPBYg.height_level;…1 2SELECTh.height_level,COUNT(*)ASnumFROMheight_gradesAShJOINyerASpONp.yer_heightBETWEENh.height_lowestANDh.height_highestGROUPBYh.height_levelORDERBYh.height_levelASC2selectheight_level,count(yer_name)asyer_numfromyeraspleftjoinheight_gradesashonp.heightbetweenh.height_lowestandh.height_highestgroupbyheight_level; 1selecth.height_level,count(*)asnumfromyerpjoinheight_gradeshonp.heightbetweenh.height_lowestandh.height_highestgroupby11有个疑问NATURALJOIN与sql92的等值连接完全等价吗?NATURALJOIN是要求两 才连接,等值连接有这个要求吗?比如a.teamid=段比如key,这时候a.key<>b.keyNATURALJOI…height_gradesash,yeraspwherep.heightBETWEENh.height_lowestand作者回复:SQL查询语句是面向集合的思维方式,你需要思SELCETCOUNT(*)ASnum,b.height_levelFROMyerASaLEFTJOINheight_gradesASWHEREa.heightBETWEENb.heigt_lowestyerASp,FROMyerJOINheight_gradesONyer.heightBETWEE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家兔产房管理技术要点
- 预约系统操作管理指南
- 番茄晚疫病综合防治方案
- 高血压患者饮食控制指引
- 产后月子期营养滋补配餐标准
- 蛋鸭产蛋期营养调控技术方案
- 紧急疏散救援现场指挥手册
- 风电场质量控制方案
- 农产品电商直播销售合规规范
- 化学品转移运输应急预案
- 电力碳交易专员碳交易操作考试题目及答案
- 2026浙江金华市金东城市建设投资集团限公司招聘9人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年国际商务单证员考试试卷及答案解析(国际贸易实务)
- 2026国家电投集团河北公司(雄安公司)招聘1人备考题库及完整答案详解1套
- 模具厂安全培训制度
- 雨课堂学堂在线学堂云《The intangible cultural heritage textile - let the world understand the beauty of China(天津工业)》单元测试考核答案
- 2025年12月22日新疆事业单位面试真题及答案解析(博州-阿克苏)
- 化学滤料吸附法恶臭废气治理技术规范编制说明
- 电商运营主管电商平台运营策略考核表
- 钻机安全操作规程
- 2025-2030年新能源汽车充电设施售后服务与盈利模式研究报告
评论
0/150
提交评论