Consulta simple y consulta de conexión de la base de datos del informe experimental del curso "Principios y aplicaciones de la base de datos"
1. El propósito del experimento.
1. Domine la sintaxis de consulta simple y consulta de conexión, competente en la agrupación y clasificación en consulta de datos, así como la conexión externa y la auto-conexión.
2. Domine el uso de SQL Server Management Studio y pueda modificar las declaraciones de consulta de manera competente de acuerdo con las advertencias de error.
2. Proceso experimental y análisis
1. Contenido experimental
1. Operación de consulta simple. Incluyendo expresión de condición de selección, salida de expresión simple, aplicación de alias, consulta difusa, clasificación de datos, agrupación de datos, etc.
2. Conecte la operación de consulta. Incluyendo conexión equivalente, conexión natural, producto cartesiano, auto-conexión, conexión externa.
2. Proceso
experimental Experimento uno:
construir una tabla e insertar datos La
estructura de la tabla en la base de datos electiva de los estudiantes es la siguiente:
estudiantes (número de estudiante, nombre, edad, sexo, departamento);
cursos (número de curso, nombre del curso, créditos, curso anterior);
cursos optativos ( Número de estudiante, número de curso, grado);
la siguiente operación de consulta de datos se implementa en la base de datos electiva de estudiantes.
--创建学生表
create table student
(
s_num int PRIMARY KEY,
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) PRIMARY KEY,
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
Mejore el experimento:
cree una tabla e inserte datos
(1) Establezca la base de datos del departamento de empleados, la base de datos involucra la tabla de empleados y la tabla de departamentos, e ingrese los datos en la tabla.
Tabla de
empleados Número de empleados Nombre Género Edad Departamento
1010 Li Yongnan 20 11
1011 LiuChennv19 12
1012 WangMinnu22 12
1014 ZhangLiman21 13
Tabla del
departamento Número del departamento Nombre del departamento Teléfono
11 Sección de producción 566
12 Sección de planificación 578
13 Primer taller 467
14 Instituto de investigación
--创建职工部门
create table employee
(
职工号 int PRIMARY KEY,
姓名 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. Resultados experimentales
Experimento uno:
Mejora el experimento:
4. Análisis experimental.
① Analice los resultados experimentales; los resultados
obtenidos a través de la declaración SQL
② explican los problemas encontrados en el proceso experimental y cómo resolverlos.
Consulte la clase de antecedente indirecto de cada curso (es decir, la clase de antecedente de la clase de antecedente). No puedo consulta sin problemas
resolver
esta operación pertenecen a la mesa para conectar con ella misma, entonces necesitamos curricular toma dos alias para distinguir entre ellos a 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