这一次挺入机的,全程无难点。
实验指导书(删掉了图)
【实验目的】
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='东方红'
【实验思考】
- select ‘AB’+‘CD’的执行结果是
- 以上实验在课堂内完成的同学,可以做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'