コース「データベースの原理と応用」の実験報告データベースの簡単なクエリと接続クエリ

コース「データベースの原理と応用」の実験報告データベースの簡単なクエリと接続クエリ

1.実験の目的

1.単純なクエリと接続クエリの構文を習得し、データクエリのグループ化と並べ替え、および外部接続と自己接続に精通している。
2. SQL Server Management Studioの使用方法を習得し、エラー警告に従ってクエリステートメントを適切に変更できるようにします。

2.実験プロセスと分析

1.実験的なコンテンツ
1.単純なクエリ操作。選択条件式、単純な式の出力、エイリアスアプリケーション、ファジークエリ、データの並べ替え、データのグループ化など。
2.クエリ操作を接続します。同等の接続、自然接続、デカルト積、自己接続、外部接続を含みます。
2.実験プロセス
実験1:
テーブルを作成してデータを挿入
する学生選択データベーステーブル構造は、学生
(学生番号、名前、年齢、性別、学科)、
コース(コース番号、コース名、単位、事前コース)、
選択コース(学生番号、コース番号、学年);
以下のデータクエリ操作が学生選択データベースに実装されています。

    --创建学生表
create table student
(
  s_num  int PRIMARYKEY,
  s_name varchar(20)not null,
  s_age int check(s_age between 10 and 35),
  s_sex varchar(10) check(s_sex in('男', '女')),
  s_unit varchar(20)
)
drop table student 
select * from student
--插入数据
insert into student values (1815001,'张三',18,'男','数学系'),
                          (1815002,'李白',30,'女','计算机系'),
						  (1815003,'后裔',11,'男','计算机系'),
						  (1815004,'翠花',25,'女','数学系'),
						  (1815005,'狗蛋',21,'男','机械系');
						  
--创建课程表
create table course
(
c_num varchar(20) PRIMARYKEY,
c_name varchar(20) not null,
c_credit  int check(c_credit in (1,2,3,4,5,6)),
front varchar(20) 
)
--插入数据
drop table course
insert into  course values ('C1','C语言',2,' '),
							('C2','程序设计电路',2,'c1'),
							('C3','数字电路',3,'C1'),
							('C4','计算机组成',3,'C3'),
							('C5','计算机网络',4,'C4'),
							('C6','操作系统',3,'C5');

select * from course
--创建选课表
create table selectCourse
(
 s_num  int,
 c_num varchar(20),
 score numeric(3,1)   ,
 primary key (s_num,c_num),
 foreign key ( s_num) references student(s_num),
 foreign key (c_num) references course(c_num),
)
drop table selectCourse
--插入数据

insert into  selectCourse(s_num, c_num, score ) 
                           values(1815001,'C1',70),
                                 (1815001,'C2',80),
								 (1815001,'C3',88),
								 (1815001,'C4',78),
								 (1815001,'C5',88),
								 (1815001,'C6',98),
								 (1815005,'C3',88),
								 (1815002,'C1',80),
								 (1815003,'C1',88),
								 (1815004,'C1',98)
insert into  selectCourse(s_num, c_num ) 
                                 values(1815005,'C1')

数据查询
--1)求数学系学生的学号和姓名
select  s_num as '学号' ,s_name as '姓名' from  student where s_unit='数学系';

--2)求选修了课程的学生学号
select distinct s_num as '学生学号' from selectCourse where  c_num is not null

--3)求选修C1课程的学生学号和成绩,结果按成绩降序排列,如成绩同按学号升序排列
select s_num as '学号'  ,  score as '成绩' from  selectCourse where   c_num ='C1' and score  is not null order by  score

--4)求选修课程C1成绩在80~90之间的学生学号和成绩,并将成绩乘以0.8输出
select s_num as '学号', score*0.8  as '成绩' from  selectCourse  where   c_num ='C1' and ( score between 80 and 90) order by  score

--5)求数学或计算机系姓张的学生的信息
select * from  student where s_name like '张%' and 
                s_num in (select s_num from  student where  s_unit='计算机系' or s_unit ='数学系')

--6)查询每个学生的选课门数,并输出选修5门以上的学生学号。
select   s_num as '学号'    from  selectCourse   group by s_num  having  count(c_num)>5;

--7)求缺少了成绩的学生的学号和课程号
select   s_num as '学号' ,c_num as '课程号'  from  selectCourse where  score is null

--8)查询各个系的学生人数
select  s_unit as '系'  ,count(s_unit) as '人数 ' from student group by s_unit

--9)求学生的学号、姓名、选修的课程名及成绩
select  student.s_num as '学号'  ,student.s_name  as '姓名' ,
        selectCourse.c_num as '课程名',selectCourse.score as '成绩' 
		from  student join  selectCourse  on student.s_num=  selectCourse.s_num 
                                        
--10)求选修课程C1成绩在80~90之间的学生学号、姓名及成绩
select  student.s_num as '学号'  ,student.s_name  as '姓名' ,
        selectCourse.score as 'C1成绩' 
		from  student join  selectCourse  on student.s_num=  selectCourse.s_num 
		where (selectCourse.score between 80 and 90)
                                        
--11)求选修了学分是3的课程的学生学号。
select  student.s_num as '学号' 
      from  selectCourse 
	  join  student   on student.s_num=  selectCourse.s_num
	  join  course on course.c_num=selectCourse.c_num
	  where  course.c_credit=3

--12)查询每一门课的间接先行课(即先行课的先行课)
SELECT  k1.c_num as '课程号',k1.c_name as '课程名',k2.front  '间接先行课'
FROM  Course as k1 ,
 Course as k2
where k1.front= k2.c_num
SELECT  k2.front
FROM   Course k2

実験の改善:
テーブルの作成とデータの挿入
(1)従業員部門データベースを確立します。データベースには従業員テーブルと部門テーブルが含まれ、データをテーブルに入力します。
従業員テーブル
従業員番号名前性別年齢部署
1010 Li Yongnan 20 11
1011 LiuChennv19 12
1012 WangMinnu22 12
1014 ZhangLiman21 13

部門テーブル
部門番号部門名電話
11製造セクション566
12計画セクション578
13最初のワークショップ467
14研究所

      --创建职工部门
create table employee
(
  职工号 int PRIMARYKEY,
  姓名 varchar(20)not null,
  性别 varchar(10) check(性别 in('男', '女')),
  年龄 int check(年龄 between 10 and 35), 
  所在部门 varchar(20)
)
select * from employee
--插入相关数据
insert into  employee values(1010,'李勇','男',20,11),
                             (1011,'刘晨','女',19,12),
							 (1012,'王敏','女',22,12),
							 (1014,'张立','男',21,13)

--创建部门表
create table department
(
  部门号 varchar(20),
  部门名称 varchar(20)not null,
  电话 varchar(11) 
)
--插入相关数据
insert  into  department   values(11,'生产科',566)
insert  into  department   values(12,'计划科',578)
insert  into  department   values(13,'一车间',467)
insert  into  department (部门号,部门名称)  values(14,'科研所')
数据查询
--1)查询每个职工的信息,及所对应的部门电话。
select 职工号,姓名,性别,年龄,所在部门,电话 from  employee K1 join  department as k2 on  k1.所在部门=k2.部门号

--2)查询每个部门的名称、电话,及部门职工的姓名、年龄。
select 所在部门,电话,姓名,年龄 from  employee join  department  on  employee.所在部门=department.部门号

--3)针对职工表查询每个部门的职工人数。
select 所在部门 , count(所在部门) as  职工人数  from employee  group by 所在部门
 
--4)查询年龄小于20的职工号、所在部门
select 职工号,所在部门  from  employee where  年龄<20

--5)查询年龄小于20的职工号、所在部门名称
select 职工号,部门名称 from  employee join  department  on  employee.所在部门=department.部门号 where  年龄<20

3.実験結果

実験1:

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

実験を改善する:

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

4.実験分析

①実験結果を分析
し、SQLステートメントを通じて得られた結果
②実験プロセスで発生した問題とその解決方法を説明します。
各コースの間接先行クラス(つまり、先行クラスの先行クラス)を照会します。私は、クエリスムーズにすることはできません
解決
自体に接続するためのテーブルに属し、この操作を、そして私たちは、カリキュラムはそれらを区別するために、2つのエイリアスを取るZDする必要があります。

```sql
SELECT  k1.c_num as '课程号',k1.c_name as '课程名',k2.front  '间接先行课'
FROM  Course as k1 ,
 Course as k2
where k1.front= k2.c_num
SELECT  k2.front
FROM   Course k2




元の記事を10件公開 12 件を獲得 1853年を訪問

おすすめ

転載: blog.csdn.net/qq_44236958/article/details/105606300