欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 【数据库原理及安全实验】实验三 查询语句

【数据库原理及安全实验】实验三 查询语句

2025/4/19 14:12:05 来源:https://blog.csdn.net/xinghuayu_lin/article/details/147272733  浏览:    关键词:【数据库原理及安全实验】实验三 查询语句

这一次挺入机的,全程无难点。

实验指导书(删掉了图)

【实验目的】

1) 掌握使用SQL语言进行各种查询的操作的操纵方法。

【实验原理】

1) 在现有的数据库上进行各种查询(select)操作,select,一个选择语句,可以有除ORDER BY,FOR UPDATE,和 LIMIT 子句以外的所有特性(甚至在加了括

弧的情况下那些语句也可以用)。

2) 通过“use databasename;”语句或”展开数据库->右击 databasename->选择新建查询“,选择要操作的数据库,再执行查询、插入等操作命令,不选择数据

库则会出现报错。

【实验环境】

windows7

SQL SERVER 2008

【实验步骤】

1.1开始→程序→Microsoft SQL Server 2008 R2→SQL Server Management Studio。

1.2 在“连接到服务器”对话框中,选择“Windows身份验证”,服务器名称为localhost,点击“连接”,进入SQL Server Management Studio操作界面。

1.3 单击“新建查询”按钮,在上部的空白输入SQL语句,建立起实验要操作的数据库test1,并在库中建立表、数据。单击执行按钮,下部的空白区显示该语句的运行情况。(注:以下操作均在上部的空白区输入SQL语句,单击执行后,下部的空白区显示该语句的运行情况。)

1) 创建数据库。

create database test1;

2) 创建二维表(通过“use databasename;”语句或”展开数据库->右击 databasename->选择新建查询“,选择要操作的数据库,再执行查询、插入等操作命令)。

Create table s(Sno char(2) primary key,sname varchar(10) not null,status int,city varchar(10));create table p(pno char(2) primary key,pname varchar(10) not null,color varchar(6),weight int);create table j(jno char(2) primary key,jname varchar(20) not null,city varchar(10));create table spj(sno char(2) foreign key references s(sno),pno char(2) foreign key references p(pno),jno char(2) foreign key references j(jno),qty int,primary key(sno,pno,jno));

3) 为各二维表插入数据。

insert into s values('s1','精益',20,'天津');insert into s values('s2','盛德',10,'北京');insert into s values('s3','东方红',30,'北京');insert into s values('s4','丰泰盛',20,'天津');insert into s values('s5','为民',30,'上海');insert into p values('p1','螺母','红',12);insert into p values('p2','螺栓','绿',17);insert into p values('p3','螺丝刀','蓝',14);insert into p values('p4','螺丝刀','红',14);insert into p values('p5','凸轮','蓝',40);insert into p values('p6','齿轮','红',30);insert into j values('j1','三建','北京');insert into j values('j2','一汽','长春');insert into j values('j3','弹簧厂','天津')insert into j values('j4','造船厂','天津')insert into j values('j5','机车厂','唐山');insert into j values('j6','无线电厂','常州');insert into j values('j7','半导体厂','南京');insert into spj values('s1','p1','j1',200);insert into spj values('s1','p1','j3',100);insert into spj values('s1','p1','j4',700);insert into spj values('s1','p2','j2',100);insert into spj values('s2','p3','j1',400);insert into spj values('s2','p3','j2',200);insert into spj values('s2','p3','j4',500);insert into spj values('s2','p3','j5',400);insert into spj values('s2','p5','j1',400);insert into spj values('s2','p5','j2',100);insert into spj values('s3','p1','j1',200);insert into spj values('s3','p3','j1',200);insert into spj values('s4','p5','j1',100);insert into spj values('s4','p6','j3',300);insert into spj values('s4','p6','j4',200);insert into spj values('s5','p2','j4',100);insert into spj values('s5','p3','j1',200);insert into spj values('s5','p6','j2',200);insert into spj values('s5','p6','j4',500)

1.4 在数据库test1中进行下列查询操作。

1) 查询所有供应商情况,先按城市升序排列,城市相同按供应商名称降序排列。

select * from s order by city,sname desc

2) 查询所有零件情况,先按零件名称升序排列,零件名称相同按重量降序排列。

select * from p order by pname,weight desc

3) 查询项目名中含有“厂”的项目情况。如图6所示

select * from j where jname like '%厂%'

4) 查询供应商名称中第二个字为“方”的供应商情况。如图7所示

select * from s where sname like '_方_'

5) 查询所有零件中的最大、最小、平均重量。如图8所示

select MAX(weight) as 最大重量,MIN(weight) as 最小重量,AVG(weight) as 平均重量 from p

6) 查询零件中名为“螺丝刀”的零件的种类数、平均重量。如图9所示

select count(*) as 种类数,AVG(weight) as 平均重量 from p where pname like'螺丝刀'

7) 查询供应商S1所供应的各种零件的名称和数量。如图10所示

select pname,qty from p join spj on p.pno=spj.pno where spj.sno='s1'

8) 查询工程J1所使用的各种零件的名称和数量。如图11所示

select pname,qty from p join spj on p.pno=spj.pno where jno='j1'

9) 查询没有使用红色螺丝刀的工程名称。如图12所示

select jname from p join spj on spj.pno=p.pno join j on j.jno=spj.jno where p.color='红'

10) 查询没有供应红色螺丝刀的供应商名称。

select sname from s join spj on spj.sno=s.sno join p on spj.pno=p.pno where p.color not like'红'

11) 查询所用零件数量超过500的工程项目号。

select jno from spj where qty>=500

12) 查询所用零件种类超过3种的工程项目名称。

select jname from j where jno in(select jno from spj group by spj.jno having COUNT(*)>3)

13) 查询使用了全部零件的工程项目名称。

select jname from j where not exists (select * from p where not exists (select * from spj where j.jno=spj.jno and p.pno=spj.pno))

14) 查询至少供应了工程J1所使用的全部零件的供应商名称。

select sname from s where exists (select * from spj where s.sno=spj.sno and exists(select pno from spj where jno='j1'))

15) 查询供应情况,显示内容为供应商名称、零件名、工程名称、数量。

select sname,pname,jname,qty from s join spj on s.sno=spj.sno join p on p.pno=spj.pno join j on j.jno=spj.jno

16) 查询“东方红”供应商供应情况,显示供应的零件名、工程名称、数量。

select pname,jname,qty from spj join s on spj.sno=s.sno join p on spj.pno =p.pno join j on spj.jno=j.jno where sname='东方红'

【实验思考】

  1. select ‘AB’+‘CD’的执行结果是
  2. 以上实验在课堂内完成的同学,可以做mysql查询操作的实验内容。

实验结果

1.4的第1步到第3步查询操作结果如下

图 1 第1步到第3步查询操作结果

1.4的第4步到第8步查询操作结果如下

图 2第4步到第8步查询操作结果

1.4的第9步到第10步查询操作结果如下

图 3第9步到第10步查询操作结果

1.4的第11步到第14步查询操作结果如下

图 4第11步到第14步查询操作结果

1.4的第15步到第16步查询操作结果如下

图 5第15步到第16步查询操作结果

实验结论:(严禁copy)

实验结果符合课上所学的查询操作语句

SELECT [DISTINCT] <列名或表达式列表>   -- 必需:选择要返回的列或计算结果FROM <表名或视图>                     -- 必需:指定数据来源[WHERE <条件表达式>]                  -- 可选:行级过滤[GROUP BY <分组列>]                  -- 可选:分组聚合[HAVING <分组过滤条件>]              -- 可选:分组后过滤[ORDER BY <排序列> [ASC|DESC]]       -- 可选:结果排序[LIMIT/OFFSET <行数限制>];           -- 可选:分页

思考题:

select ‘AB’+‘CD’的执行结果是?

答:在 MySQL 中,+ 是算术运算符,而不是字符串连接符。因此:

如果 'AB' 和 'CD' 无法转换为数值,MySQL 会将其视为 0。

最终结果为 0 + 0 = 0。

正确字符串拼接方法(MySQL):

select concat('AB', 'CD'); -- 输出: 'ABCD'

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词