实验二:简单查询和连接查询一、实验目的:熟练掌握用SQL语句实现的简单查询和多个数据表连接查询。
二、实验内容:(一)完成下面的简单查询:①查询所有“天津”的供应商明细;②查询所有“红色”的14公斤以上的零件。
③查询工程名称中含有“厂”字的工程明细。
(二)完成下面的连接查询:①等值连接:求s表和j表的相同城市的等值连接。
②自然连接:查询所有的供应明细,要求显示供应商、零件和工程的名称,并按照供应、工程、零件排序。
③笛卡尔积:求s和p表的笛卡尔积④左连接:求j表和spj表的左连接。
⑤右连接:求spj表和j表的右连接。
三、完成情况:成功完成各项查询任务查询的sql语句如下:SELECT*FROM SWHERE CITY='天津';SELECT*FROM PWHERE COLOR='红'AND WEIGHT>=14;SELECT*FROM JWHERE JNAME like'%厂';SELECT*FROM S,JWHERE S.CITY=J.CITY;select SPJ.SNO,S.SNAME,SPJ.PNO,P.PNAME,SPJ.JNO,J.JNAME,SPJ.QTYfrom S,P,J,SPJwhere S.SNO=SPJ.SNO AND P.PNO=SPJ.PNO AND J.JNO=SPJ.JNOORDER BY QTY;select*from S,PSELECT J.JNO,J.JNAME,J.CITY,SPJ.SNO,SPJ.PNO,QTYFROM J LEFT JOIN SPJ on(J.JNO=SPJ.JNO);SELECT J.JNO,J.JNAME,J.CITY,SPJ.SNO,SPJ.PNO,QTYFROM J right JOIN SPJ on(J.JNO=SPJ.JNO);SELECT J.JNO,J.JNAME,J.CITY,SPJ.SNO,SPJ.PNO,QTYFROM SPJ right JOIN J on(J.JNO=SPJ.JNO);四、实验结果:①查询所有“天津”的供应商明细;SNO SNAME STATUS CITYS1 精益 20 天津S4 丰盛泰 20 天津②查询所有“红色”的14公斤以上的零件。
PNO PNAME COLOR WEIGHTP1 螺母红17P4 螺丝刀红19P6 齿轮红35(会出现这样的情况,是因为在实验一中,执行过将所有红色零件的weight加5,所以会如此)③查询工程名称中含有“厂”字的工程明细。
JNO JNAME CITYJ3 弹簧厂天津J4 造船厂天津J5 机车厂唐山J6 无线电厂常州J7 半导体厂南京(第一次查询结果居然为空,,,经检查,原来是模糊查询那块儿,谓词应该用like自己却忘了,还是用的=)①等值连接:求s表和j表的相同城市的等值连接。
SNO SNAME STATUS CITY JNO JNAME CITYS2 盛锡 10 北京J1 三建北京S3 东方红 30 北京J1 三建北京S1 精益 20 天津J3 弹簧厂天津S4 丰盛泰 20 天津J3 弹簧厂天津S1 精益 20 天津J4 造船厂天津S4 丰盛泰 20 天津J4 造船厂天津(查询结果是怎么排序的呢?)②自然连接:查询所有的供应明细,要求显示供应商、零件和工程的名称,并按照供应、工程、零件排序。
SNO SNAME PNO PNAME JNO JNAME QTYS4 丰盛泰 P5 凸轮 J1 三建90S1 精益 P1 螺母 J3 弹簧厂90S1 精益 P2 螺栓 J2 一汽90S2 盛锡 P5 凸轮 J2 一汽100S5 为民 P2 螺栓 J4 造船厂100S4 丰盛泰 P6 齿轮 J4 造船厂190S1 精益 P1 螺母 J1 三建190S3 东方红 P1 螺母 J1 三建200S3 东方红 P3 螺丝刀 J1 三建200S5 为民 P3 螺丝刀 J1 三建200S5 为民 P6 齿轮 J2 一汽200S2 盛锡 P3 螺丝刀 J2 一汽200S4 丰盛泰 P6 齿轮 J3 弹簧厂290S2 盛锡 P3 螺丝刀 J1 三建400S2 盛锡 P3 螺丝刀 J5 机车厂400S2 盛锡 P5 凸轮 J1 三建400S2 盛锡 P3 螺丝刀 J4 造船厂500S5 为民 P6 齿轮 J4 造船厂500S1 精益 P1 螺母 J4 造船厂690(排序规则似乎说的不是很明确,我就按供应数量排序啦) ③笛卡尔积:求s和p表的笛卡尔积SNO SNAME STATUS CITY PNO PNAME COLOR WEIGHT S1 精益 20 天津P1 螺母红17S1 精益 20 天津P2 螺栓绿17S1 精益 20 天津P3 螺丝刀蓝14S1 精益 20 天津P4 螺丝刀红19S1 精益 20 天津P5 凸轮蓝40S1 精益 20 天津P6 齿轮红35S2 盛锡 10 北京P1 螺母红17S2 盛锡 10 北京P2 螺栓绿17S2 盛锡 10 北京P3 螺丝刀蓝14S2 盛锡 10 北京P4 螺丝刀红19S2 盛锡 10 北京P5 凸轮蓝40S2 盛锡 10 北京P6 齿轮红35S3 东方红 30 北京P1 螺母红17S3 东方红 30 北京P2 螺栓绿17S3 东方红 30 北京P3 螺丝刀蓝14S3 东方红 30 北京P4 螺丝刀红19S3 东方红 30 北京P5 凸轮蓝40S3 东方红 30 北京P6 齿轮红35S4 丰盛泰 20 天津P1 螺母红17S4 丰盛泰 20 天津P2 螺栓绿17S4 丰盛泰 20 天津P3 螺丝刀蓝14S4 丰盛泰 20 天津P4 螺丝刀红19S4 丰盛泰 20 天津P5 凸轮蓝40S4 丰盛泰 20 天津P6 齿轮红35S5 为民 30 上海P1 螺母红17S5 为民 30 上海P2 螺栓绿17S5 为民 30 上海P3 螺丝刀蓝14S5 为民 30 上海P4 螺丝刀红19S5 为民 30 上海P5 凸轮蓝40S5 为民 30 上海P6 齿轮红35(几乎忘了啥是笛卡尔积,看书上的定义,才明白,可是还不明白其求法,然后百度一下,,,直接从两个表中查询一下,不经过任何连接就可以形成两个表的笛卡尔积)④左连接:求j表和spj表的左连接。
JNO JNAME CITY SNO PNO QTYJ1 三建北京S1 P1 190J1 三建北京S2 P3 400J1 三建北京S2 P5 400J1 三建北京S3 P1 200J1 三建北京S3 P3 200J1 三建北京S4 P5 90J1 三建北京S5 P3 200J2 一汽长春S1 P2 90J2 一汽长春S2 P3 200J2 一汽长春S2 P5 100J2 一汽长春S5 P6 200J3 弹簧厂天津S1 P1 90J3 弹簧厂天津S4 P6 290J4 造船厂天津S1 P1 690J4 造船厂天津S2 P3 500J4 造船厂天津S4 P6 190J4 造船厂天津S5 P2 100J4 造船厂天津S5 P6 500J5 机车厂唐山S2 P3 400J6 无线电厂常州NULL NULL NULLJ7 半导体厂南京NULL NULL NULL(消息 155,级别 15,状态 1,第 2 行'OUT' 不是可以识别的 join 选项。
可以去掉out的,这样就可以查询正确,,不知道书上为何还要加个out)右连接JNO JNAME CITY SNO PNO QTYJ1 三建北京S1 P1 190J3 弹簧厂天津S1 P1 90J4 造船厂天津S1 P1 690J2 一汽长春S1 P2 90J1 三建北京S2 P3 400J2 一汽长春S2 P3 200J4 造船厂天津S2 P3 500J5 机车厂唐山S2 P3 400J1 三建北京S2 P5 400J2 一汽长春S2 P5 100J1 三建北京S3 P1 200J1 三建北京S3 P3 200J1 三建北京S4 P5 90J3 弹簧厂天津S4 P6 290J4 造船厂天津S4 P6 190J4 造船厂天津S5 P2 100J1 三建北京S5 P3 200J2 一汽长春S5 P6 200J4 造船厂天津S5 P6 500右连接:求spj表和j表的右连接。
JNO JNAME CITY SNO PNO QTYJ1 三建北京S1 P1 190J1 三建北京S2 P3 400J1 三建北京S2 P5 400J1 三建北京S3 P1 200J1 三建北京S3 P3 200J1 三建北京S4 P5 90J1 三建北京S5 P3 200J2 一汽长春S1 P2 90J2 一汽长春S2 P3 200J2 一汽长春S2 P5 100J2 一汽长春S5 P6 200J3 弹簧厂天津S1 P1 90J3 弹簧厂天津S4 P6 290J4 造船厂天津S1 P1 690J4 造船厂天津S2 P3 500J4 造船厂天津S4 P6 190J4 造船厂天津S5 P2 100J4 造船厂天津S5 P6 500J5 机车厂唐山S2 P3 400J6 无线电厂常州NULL NULL NULLJ7 半导体厂南京NULL NULL NULL五、问题及解决:1.查询红色零件wight大于14。
(会出现上述的情况,是因为在实验一中,执行过将所有红色零件的weight加5,所以会如此)2.查询工程名称中含有“厂”字的工程明细。
(第一次查询结果居然为空,,,经检查,原来是模糊查询那块儿,谓词应该用like 自己却忘了,还是用的=)3.(排序规则似乎说的不是很明确,我就按供应数量排序啦)4.(几乎忘了啥是笛卡尔积,看书上的定义,才明白,可是还不明白其求法,然后百度一下,,,直接从两个表中查询一下,不经过任何连接就可以形成两个表的笛卡尔积)5.(消息 155,级别 15,状态 1,第 2 行'OUT' 不是可以识别的 join 选项。
可以去掉out的,这样就可以查询正确,,不知道书上为何还要加个out)六、回答思考题提出的问题:查看实验内容2中左连接和右连接的执行结果是否一致,为什么?答:j表和spj表的左连接查询结果与spj表和j表的右连接的查询结果两者是相同的,但是与j表和spj表的右连接查询结果两者是不同的。
、七、实验总结:在做实验之前,听过课看过书之后,总感觉sql语句很简单,可以随手写来,可是到真的上机写语句实现的时候,就会发现原来并非想象中的那么简单。
好多细节,都是不曾留意的到的,只有真正去实现的时候,各种各样的错误就会显现出来。
所以不是自己觉得会就是真正的会,会与不会只有通过尝试,你做对了那才算是会,做错了即使你觉得那是粗心那也叫不会。