Requête simple et requête de connexion de la base de données de rapports expérimentaux du cours "Principes et applications des bases de données"

Requête simple et requête de connexion de la base de données de rapports expérimentaux du cours "Principes et applications des bases de données"

1. Le but de l'expérience

1. Maîtrisez la syntaxe de la requête simple et de la requête de connexion, maîtrisez le regroupement et le tri dans la requête de données, ainsi que la connexion externe et l'auto-connexion.
2. Maîtrisez l'utilisation de SQL Server Management Studio et modifiez efficacement les instructions de requête en fonction des avertissements d'erreur.

2. Processus expérimental et analyse

1. Contenu expérimental
1. Opération de requête simple. Y compris expression de condition de sélection, sortie d'expression simple, application d'alias, requête floue, tri de données, regroupement de données, etc.
2. Connectez l'opération de requête. Y compris connexion équivalente, connexion naturelle, produit cartésien, auto-connexion, connexion externe.
2. Processus expérimental Première
expérience:
créer un tableau et insérer des données La
structure du tableau dans la base de données des étudiants au choix est la suivante:
étudiants (numéro d'étudiant, nom, âge, sexe, département);
cours (numéro du cours, nom du cours, crédits, cours précédent);
cours au choix ( Numéro d'étudiant, numéro de cours, note);
l'opération de requête de données suivante est implémentée dans la base de données facultative des étudiants.

    --创建学生表
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

Améliorez l'expérience:
créez une table et insérez des données
(1) Établissez la base de données des départements des employés, la base de données comprend la table des employés et la table des départements et saisissez les données dans la table.
Tableau des
employés Numéro d'employé Nom Sexe Âge Département
1010 Li Yongnan 20 11
1011 LiuChennv19 12
1012 WangMinnu22 12
1014 ZhangLiman21 13

Tableau du
département Numéro du département Nom du département Téléphone
11 Section de production 566
12 Section de planification 578
13 Premier atelier 467
14 Institut de recherche

      --创建职工部门
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. Résultats expérimentaux

Expérimentez un:

Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici

Améliorer l'expérience:

Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici

4. Analyse expérimentale

① Analyser les résultats expérimentaux, les résultats
obtenus grâce à l'instruction SQL
② expliquer les problèmes rencontrés dans le processus expérimental et comment les résoudre.
Recherchez la classe antécédente indirecte de chaque cours (c'est-à-dire la classe antécédente de la classe antécédente). Je ne peux pas la requête en douceur de
résoudre
cette opération appartiennent à la table pour se connecter avec lui - même, nous devons ZD programme prend deux alias pour les distinguer.

```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




Publié 10 articles originaux · gagné 12 · visité 1853

Je suppose que tu aimes

Origine blog.csdn.net/qq_44236958/article/details/105606300
conseillé
Classement