当前位置: 首页 > news >正文

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

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

实验指导书(删掉了图)

【实验目的】

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'

相关文章:

  • STM32江科大-----PWR电源控制
  • 机器学习中的对抗规范化:从问题到解决方案
  • 多模态思维链AI医疗编程:从计算可持续性到开放域推理的系统性解决方案
  • 自然语言处理的进化:BERT模型深度剖析
  • 现代c++获取linux系统磁盘大小
  • Linux搭建环境:从零开始掌握基础操作(四)
  • 详细解释MCP项目中安装命令 bunx 和 npx区别
  • Python爬虫第四战(使用防盗链下载视频)
  • Redux部分
  • 关于postman的使用(一)
  • JVM知识
  • oracle数据库单个表空间达到32G后程序报错表空间不足问题排查、处理
  • LeetCode详解之如何一步步优化到最佳解法:27. 移除元素
  • ubuntu20.04 Android14编译环境配置
  • Spring中IOC的重点理解(笔记)
  • Dify智能体平台源码二次开发笔记(6) - 优化知识库pdf文档的识别
  • 如何处理Python爬取视频时的反爬机制?
  • OTP认证系统解析与安当ASP身份认证解决方案
  • 全面排查与修复指南:MSVCP140.dll丢失的解决方法
  • 基于骨骼识别的危险动作报警系统设计与实现
  • 网站建设模块需求/百度推广按点击收费
  • wordpress留言板页面/长春关键词优化报价
  • 个人网站怎么申请注册/徐州网站设计
  • 微软网站开发工具/管理人员课程培训
  • 做二手房产网站多少钱/如何做推广最有效果
  • 云南省住房和城乡建设厅官方网站/2021年重大新闻事件