实验二 数据查询

一.实验目的

1.理解数据库中数据的其他查询方法和应用;

2.学会各种查询要求的实现;

3.学会各种查询的异同及相互之间的转换方法。

二. 实验内容

在实验1的基础上,练习其它查询语句的使用,包括计算列、求和、最大、最小值、各类选择条件、字符匹配、分组和排序,连接查询、嵌套查询及EXISTS查询等,体会各种查询的异同及相互之间的转换,体会各种查询的执行过程,为简单综合应用打下良好的基础。

1.       查询供应商号码为S1的供应商的名称SNAME,所在城市CITY

2.       查询颜色为红色的零件号码

3.       查询工程所在地为天津的工程名称JNAME

4.       查询供应商号和名称,分别用小写字母和大写字母表示供应商代码

5.       查询零件的详细信息,用结果属性名用中文显示。

6.       查询供应工程J1零件P1的供应商号SNO

7.       查询供应商的名称和所在城市,并按照所在城市升序排序,同一个城市的按照供应商的名称降序排序

8.       查询使用供应商S1所供应零件的工程号码

9.       查询各种零件的平均重量

10.   查询零件的总个数

11.   查询所有以“螺”字开头的零件的零件号、零件名和颜色

12.   查询各个供应商供应的零件P3总数量

13.   供应工程J1红色零件的供应商号SNO

14.   工程项目J2使用的各种零件的名称及数量

15.   使用上海产的零件的工程的名称

16.   所有项目的使用零件的情况(无论有没有使用零件),包括项目代码、项目名称、零件代码和零件数量

17.   供应商S1和S3供应的相同的零件编号

18.   没有使用天津产的零件的工程号码

19.   没有使用天津供应商生产的红色零件的工程号

20.   至少用了供应商S1所供应的全部零件的工程号Jno

三. 实验过程与代码

1.       查询供应商号码为S1的供应商的名称SNAME,所在城市CITY

SELECT SNAME,CITY
FROM s
WHERE sno='s1';

2.       查询颜色为红色的零件号码

SELECT PNO 零件号码
FROM p
WHERE color='红';

3.       查询工程所在地为天津的工程名称JNAME

SELECT JNAME
FROM j
WHERE city='天津';

4.       查询供应商号和名称,分别用小写字母和大写字母表示供应商代码

--1) 小写字母表示供应商代码:
SELECT LOWER(SNO)小写字母表示供应商代码,SNAME 名称
FROM s
--2)    大写字母表示供应商代码:
SELECT UPPER(SNO)大写字母表示供应商代码,SNAME 名称
FROM s

5.       查询零件的详细信息,用结果属性名用中文显示。

SELECT PNO 零件代码,PNAME 零件名,COLOR 颜色,WEIGHT 重量
FROM p

6.       查询供应工程J1零件P1的供应商号SNO

SELECT SNO
FROM spj
WHERE JNO='J1'AND PNO='P1';

7.       查询供应商的名称和所在城市,并按照所在城市升序排序,同一个城市的按照供应商的名称降序排序

SELECT SNAME,CITY
FROM s
ORDER BY CITY,SNAME DESC;

如果排序结果感觉跟习惯不同,原因是MySQL编码格式造成的, 们只需要将utf的编码格式换成gb2312(如下图所示),排序规则换成gb2312_chinese_ci就可以实现看似正常一点的排序结果了

8.       查询使用供应商S1所供应零件的工程号码

SELECT DISTINCT JNO
FROM spj
WHERE SNO='S1';

9.       查询各种零件的平均重量

--按名字分类
SELECT PNAME,avg(WEIGHT)平均重量
FROM p
GROUP BY PNAME

10.   查询零件的总个数

SELECT COUNT(*) 零件总数
FROM p

11.   查询所有以“螺”字开头的零件的零件号、零件名和颜色

SELECT PNO 零件号,PNAME 零件名,COLOR 颜色
FROM p
WHERE PNAME LIKE'螺%';

12.   查询各个供应商供应的零件P3总数量

SELECT  SNO,SUM(QTY)零件P3总数量
FROM spj
WHERE PNO='P3'
GROUP BY SNO--“=”可以用“in”来代替:
SELECT  SNO,SUM(QTY)零件P3总数量
FROM spj
WHERE PNO in ('P3')
GROUP BY SNO--“not in”也可以实现:
SELECT  SNO,SUM(QTY)零件P3总数量
FROM spj
WHERE PNO NOT in('P1','P2','P4','P5','P6')
GROUP BY SNO
--但是,怎样显示所有供应商呢(没有供应P3的显示为空)?这就需要进行s表与spj表的连接了
SELECT s1.SNO,SUM(QTY)零件P3总数量
FROM s s1 LEFT OUTER JOIN (SELECT * FROM spj WHERE PNO='P3') s2 ON s1.SNO=s2.SNO
GROUP BY SNO

13.   供应工程J1红色零件的供应商号SNO

--左外连接:
SELECT SNO
FROM p LEFT OUTER JOIN spj ON p.PNO=spj.PNO
WHERE spj.JNO='J1' AND p.color='红'
--等值连接:
SELECT sno
FROM p,spj
WHERE p.pno=spj.pno AND jno='j1' AND color='红'
--嵌套查询
SELECT sno
FROM spj
WHERE jno='j1' AND pno in(SELECT pnoFROM pWHERE color='红')

14.   工程项目J2使用的各种零件的名称及数量

--左外连接:
SELECT p.PNAME,spj.QTY
FROM spj LEFT OUTER JOIN p ON spj.PNO=P.PNO
WHERE JNO='J2';
--等值连接:
SELECT PNAME 零件名,QTY 数量
FROM spj,p
WHERE  spj.PNO=P.PNO and JNO='J2';

15.   使用上海产的零件的工程的名称

--三个表的左外连接:
SELECT  DISTINCT j.JNAME
FROM spj LEFT OUTER JOIN s ON spj.SNO=s.SNO LEFT OUTER JOIN j ON spj.JNO=j.JNO
WHERE s.CITY='上海';
--三层嵌套查询:
SELECT DISTINCT JNAME
FROM j
WHERE jno in(SELECT jno FROM spj WHERE sno in(SELECT sno FROM s WHERE city='上海'));
--三个表的等值连接:
SELECT DISTINCT JNAME
FROM j,s,spj
WHERE j.JNO=spj.JNO AND spj.SNO=s.SNO AND s.CITY='上海'

16.   所有项目的使用零件的情况(无论有没有使用零件),包括项目代码、项目名称、零件代码和零件数量

SELECT  J1.JNO 项目代码,J1.JNAME 项目名称,SPJ1.PNO 零件代码,SPJ1.QTY 零件数量
FROM j J1  LEFT OUTER JOIN spj SPJ1 ON SPJ1.JNO=J1.JNO
ORDER BY J1.JNO;

17.   供应商S1和S3供应的相同的零件编号

--内连接:
SELECT DISTINCT spj1.PNO
FROM spj spj1  INNER JOIN  spj spj2 ON spj1.PNO=spj2.PNO
WHERE spj1.SNO='S1' AND spj2.SNO='S3';
--旧式内连接:
SELECT DISTINCT `FIRST`.PNO
FROM spj FIRST,spj SECOND
WHERE `FIRST`.PNO=`SECOND`.PNO AND `FIRST`.SNO='S1'AND `SECOND`.SNO='S3'

18.   没有使用天津产的零件的工程号码

--EXISTS
SELECT JNO
FROM j
WHERE NOT EXISTS (SELECT * FROM spj WHERE SNO IN (SELECT SNO FROM s WHERE CITY='天津') AND j.JNO=spj.JNO);
--嵌套查询:
SELECT jno
FROM j
WHERE jno not in(SELECT  DISTINCT JNOFROM spjWHERE sno in(SELECT sno FROM sWHERE CITY='天津'));

19.   没有使用天津供应商生产的红色零件的工程号

--Exist方法:
SELECT JNO
FROM j
WHERE NOT EXISTS (SELECT * FROM spj WHERE SNO IN (SELECT SNO FROM s WHERE CITY='天津' ) AND PNO IN (SELECT PNO FROM p WHERE COLOR='红') AND j.JNO=spj.JNO);
--嵌套查询:
SELECT jno
FROM j
WHERE jno not in(SELECT  DISTINCT JNOFROM spjWHERE sno in(SELECT sno FROM sWHERE CITY='天津')AND pno in(SELECT pno FROM pWHERE color='红'));

20.   至少用了供应商S1所供应的全部零件的工程号Jno

SELECT DISTINCT JNO
FROM spj spj1
WHERE NOT EXISTS
(SELECT * FROM spj spj2 WHERE spj2.SNO='S1' AND NOT EXISTS
(SELECT * FROM spj spj3 WHERE spj3.JNO=spj1.JNO AND spj3.PNO=spj2.PNO)
);

四. 实验总结

  1. 查询结果列别名,只需要在select 列名后面+空格,+列别名就可以了。

列表项后面+空格+[表头名],也可以用as代替空格。

  1. 用小写字母表示字符串用LOWER(SNO),用大写字母表示字符串用UPPER(SNO)。
  2. MySQL的字符集和排列规则不同,排序结果是不同的。
  3. 求平均值的函数:avg()
  4. 统计个数的函数:count()
  5. 模糊查询,用LIKE,不是“=”,%代表任意数量的字符,_(下划线)代表一个字符的位置。
  6. 等值连接和左外连接都是将几个表全连接起来,再根据条件查询。
  7. 很多多表查询用嵌套查询非常方便,可以一层一层分析,比较容易。注意:当查询结果属于一个表里的时候才可以用嵌套查询。
  8. Exist查询的原理可以认为类似一个for循环,比如在18题当中,从j1到j7依次带入查询,通过exist判断是否符合条件,符合天津产的零件的条件,exist为true,not exist为false,不输出,不符合天津产的零件的条件时,not exist为true,就可以输出。(仅仅是理解方法,表述不一定恰当)。

数据库实验二之数据查询相关推荐

  1. 数据库实验二 SQL数据定义和操作

    SQL数据定义和操作 欢迎阅读本教程 一.数据定义 二.数据更新 三.数据查询 欢迎阅读本教程 掌握关系数据库语言 SQL 的使用. 使所有的 SQL 作业都能上机通过. 实现内容如下: 数据定义:表 ...

  2. 合肥工业大学—SQL Server数据库实验七:数据查询

    数据查询 1. 单表查询 2. 多表连接查询 1. 单表查询 1. 查询全体学生的信息: -- 查询全体学生的信息 select * from student 2. 根据专业编号(21)查询学生的学号 ...

  3. 数据库原理——实验二《数据查询》

    1.(1)查询选修了课程号为"01","02","03"的学号.课程号和成绩记录 select sno,cno,grade from sco ...

  4. 《数据库原理》实验六 SQL数据查询实验

    本系列传送门: 实验二 SQL Server SSMS工具创建和管理数据库及数据表 实验三 SQL Server SSMS工具添加数据 实验四 SQL的数据定义语句 实验五 数据库完整性约束的实现与验 ...

  5. 数据库 实验二 查询

    一.实验内容 1.用SQL语句表示下列操作,在学生库中实现数据查询. (1)求数学系学生的学号和姓名. (2)求选修了课程的学生学号. (3)求选修001号课程的学生学号和成绩,并要求对查询结果按成绩 ...

  6. 数据库原理与应用实验指导书 实验四:数据查询

    数据库原理与应用 实验指导书 实验四:数据查询 一.实验目的 掌握SELECT语句的基本语法: 熟练掌握模糊查询的用法: 熟练掌握连接查询的用法: 熟练掌握子查询的用法. 二.实验内容 表数据的查询 ...

  7. GIS二次开发:实验二 地图数据访问与渲染

    实验二 地图数据访问与渲染 一.实验目的 熟悉不同数据类型对应的工作空间及其使用: 掌握矢量文件.栅格文件.个人数据库以及文件夹数据库的加载: 掌握ArcGIS engine 中图层的渲染类型及所用接 ...

  8. MySQL学习记录 (二) ----- SQL数据查询语句(DQL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  9. mysql实验训练2 数据查询操作_实验训练2:数据查询操作.doc

    实验训练2:数据查询操作.doc 实验训练2数据查询操作请到电脑端查看实验目的基于实验1创建的汽车用品网上商城数据库Shopping,理解MySQL运算符.函数.谓词,练习Select语句的操作方法. ...

最新文章

  1. SAP MM 物料主数据分类视图的数据会带入批次分类视图里?
  2. vimrepress
  3. 如何保证高可用?java测试工程师测试的方法
  4. windows 安装 reviewboard
  5. 【强化学习入门】马尔科夫决策过程
  6. 你不知道的java对象序列化的秘密
  7. [vue] 你有写过自定义组件吗?
  8. java中import的使用
  9. 剑指offer面试题35. 复杂链表的复制(DFS)(深拷贝)
  10. C语言复习一(内存对齐、大小端)
  11. 换SSD,WIN10系统备份镜像迁移GHOST入坑,DISM好用,修复WINRE,绿联集线器导致USB硬盘供电不足
  12. java如何运行_如何运行java程序
  13. 心如赤子,不贪不骄不纵
  14. KMS激活报错0x8007000D
  15. 万能遥控器小制作(四)
  16. 电子书翻页效果(转)
  17. vue选择图片的几种方式
  18. snap7通过NetToPLCsim工具接入模拟西门子PLC S7-1200步骤简介
  19. MC9S12单片机(学生实验用)PIT编程实例
  20. 计算机用户名被更改了,怎么修改电脑软件名称-如何更改电脑用户名?为什么我的电脑Admi – 手机爱问...

热门文章

  1. mysql数据库的两种备份方式(mysqldump,XBK)超详细
  2. 计算方法 matlab代码,计算方法及其MATLAB实现
  3. PHP 简单案例[5]
  4. 前端性能优化,之还在为多种多样的知识点整理苦恼吗,进来看看吧。
  5. 【Solidity】8. 杂项 - 深入理解Solidity
  6. 当 iPhone X 碰上拟物化的 iOS 6
  7. c语言列指针的形式,C语言:行指针和列指针
  8. 如果问大家什么JDKJREJVM,Java跨平台是什么意思我猜很多人说不出来
  9. Linux man 命令详细介绍
  10. 2022年危险化学品经营单位主要负责人考试题模拟考试平台操作