数据库实验和语句练习

sql语句知识
基于教材:数据库系统概论第六版
重点
计算日期

to_char(sysdate,'yyyy')-to_char(sbirth,'yyyy')

在这里插入图片描述
输出保留两位小数

round(y,2)--y为数据,2为位数,不指定时保留整数
declare
   x student.sno%type:='101388';
   y sc.grade%type;
begin 
  test_student(x,y);
  dbms_output.put_line('avg_grade is '||round(y,2));
end;

数据定义

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

create table spj(
sno varchar(30),
pno varchar(30),
jno varchar(30),
qty number(5),
primary key (sno,pno,jno),
foreign key (sno) references s(sno),
foreign key (pno) references p(pno),
foreign key (jno) references j(jno));

输入数据

在这里插入图片描述
在这里插入图片描述

alter table s
 add sphone varchar(30);

alter table s
 add smanager varchar(30);
 
alter table j
 drop constraint SYS_C007992;--删除约束名
 
alter table spj 
 modify qty number(12,2);
 --注意,要先将qty列的数据删除再修改数据类型。
 
alter table s
drop column smanager;
 

在这里插入图片描述

索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

create unique index in_j on j(jname);
create index in_p on p(pname);

在这里插入图片描述
在这里插入图片描述
导出表
在这里插入图片描述
导入表
在这里插入图片描述
在这里插入图片描述
忽略创建错误导出整个文件选yes,其余回车

数据查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

--1
select pname,color
from p
where weight between 10 and 20;
--2
select avg(weight)
from p;
--3
select *
from p,spj
where p.pno = spj.pno and spj.sno='s3';
--4查询各个供应商号及其供应了多少类零件。
select sno,count(distinct pno)--------!!!!!!distinct
from spj
group by sno;
--5
select sno,count(distinct pno)
from spj
group by sno
having count(distinct pno)>2;
--6
select *
from p
where pname like '螺%';
--7
select jno,count(distinct sno)
from spj
group by jno;
--8查询供应数量在1000—2000之间(包括1000和2000)的零件名称。!!!!!!!!!!
select pname,sum(qty)
from p,spj
where p.pno = spj.pno
group by pname
having sum(qty) between 1000 and 2000;

在这里插入图片描述

在这里插入图片描述

--1--命名操作
select cname 课程名,cproperty 课程性质,credit 学分,chour 学时
from course;
--2
select sno,sname,smajor,scollege
from student
where smajor like '%大数据%';
--3----计算出生日期
select sname,to_char(sysdate,'yyyy')-to_char(sbirth,'yyyy')
from student
where smajor='计算机科学与技术';
--4
select * 
from student 
where smajor='软件工程' and to_char(sbirth,'yyyy')='1995'
order by sbirth asc;---不会排序 升序ascending order
                 -- 降序descending order
--5
select cno,count(sno),max(grade)
from sc
group by cno;
--6----复杂一些
select cname,chour,cterm
from course
where cproperty='选修' and cno in(
 select cno
 from sc
 group by cno
 having count(sno)>60
);

select cname,chour,cterm
from course
where cno in
(select sc.cno
from course,sc
where course.cno=sc.cno and cproperty='选修'
group by sc.cno
having count(sno) > 60);
--7
select scollege,count(sno)
from student 
group by scollege ;

难题

在这里插入图片描述

--8----(只有成绩在60分以上,才能获得课程学分) 
select student.sno,sname,sum(credit)
from student,sc,course
where student.sno=sc.sno and sc.cno=course.cno and scollege ='信息工程学院' and grade>=60
group by (student.sno,student.sname);

在这里插入图片描述


--9
--错误例子,原因,班级不同,保证授课表和学生表的班级相同
select cname,sname,grade,sclass,tno
from student,sc,course
where student.sno=sc.sno and sc.cno=course.cno and course.cno in(
select tc.cno 
from tc,teacher
where tc.tno = teacher.tno and tname='吴春燕')
order by grade asc;
--正确
select  cname,sname,grade
from sc,student,course,teacher,tc
where sc.sno = student.sno and sc.cno = course.cno and teacher.tno = tc.tno and sc.cno=tc.cno and tname = '吴春燕' 
and student.sclass=tc.sclass---!!!!!!!!!班级不同
order by grade asc;

---测试部分
select *
from sc,tc,teacher,student
where sc.cno=tc.cno and tc.tno=teacher.tno and student.sno=sc.sno and student.sclass=tc.sclass and tname='吴春燕';

select * 
from teacher natural join tc
where tname='吴春燕'; 

班级不同
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

--10
select student.sno
from student,sc,course
where student.sno=sc.sno and sc.cno=course.cno and cname='中间件技术'
intersect--集合
select student.sno
from student,sc,course
where student.sno=sc.sno and sc.cno=course.cno and cname='Java EE技术';


select student.sno
from student,sc,course
where student.sno=sc.sno and sc.cno=course.cno and cname='中间件技术' and student.sno in(
select student.sno--嵌套
from student,sc,course
where student.sno=sc.sno and sc.cno=course.cno and cname='Java EE技术');

--11
select sname,smajor,sbirth
from student
where sbirth<to_date('1994/1/1','yyyy/mm/dd');

--12
select student.sno,sname,count(cno)
from student,sc
where student.sno=sc.sno
group by (student.sno,sname)
having count(distinct cno)>5;

select sno,sname
from student
where sno in( 
select sno
from sc
group by sno
having count(cno) > 5);
--13-----!!!!!出错
select sname,to_char(sysdate,'yyyy')-to_char(sbirth,'yyyy') age
from student s1--一行
where to_char(sysdate,'yyyy')-to_char(sbirth,'yyyy')<
(select avg(to_char(sysdate,'yyyy')-to_char(sbirth,'yyyy'))--求平均
from student s2
where s1.scollege=s2.scollege);--少写了个s;

--14---授课表没有它的信息
select tname
from teacher 
where  tno not in(---出错!!!!!!!!写的not exists
select tno 
from tc);
--15
select *
from student 
where to_char(sysdate,'yyyy')-to_char(sbirth,'yyyy')>(
select max(to_char(sysdate,'yyyy')-to_char(sbirth,'yyyy'))
from student
where smajor='计算机科学与技术');

数据更新与视图

数据库安全性

包括
用户(创建,修改,删除)
权限(授予,回收)
角色(创建)(授予,回收)
角色是权限的集合,dba代表所有权限

存储过程触发器

问题
在这里插入图片描述
创建完成以后要运行一下,不然不会被保存
在这里插入图片描述
输出的结果在上面

实验1 Mysql数据库SQL语句练习实验主要是为了帮助学习者熟悉使用Mysql数据库SQL语句。通过实践练习,学习者可以掌握SQL语句的基本语法和常用操作,进一步理解数据库的概念和原理。 在实验中,学习者将使用Mysql数据库,通过编写和执行SQL语句来完成一系列操作。这些操作包括创建数据库和表、插入和更新数据、查询和筛选数据等。通过实践练习,学习者可以逐步掌握不同类型的SQL语句和各种功能。 实验1的内容可以包括以下几个方面: 1. 创建数据库:学习者可以使用CREATE DATABASE语句创建一个新的数据库,定义数据库的名称和字符集等属性。 2. 创建表:学习者可以使用CREATE TABLE语句创建一个新的表,定义表的结构和字段,包括字段名、数据类型、约束等。 3. 插入数据:学习者可以使用INSERT INTO语句向表中插入数据,根据表的结构和字段定义,逐个插入数据记录。 4. 更新数据:学习者可以使用UPDATE语句更新表中的数据,根据条件选择需要更新的记录,并修改相应的字段值。 5. 查询数据:学习者可以使用SELECT语句查询表中的数据,根据条件筛选需要的记录,并选择要显示的字段和排序方式。 6. 删除数据:学习者可以使用DELETE FROM语句删除表中的数据,根据条件选择需要删除的记录。 通过实验1的练习,学习者可以逐步掌握Mysql数据库SQL语句的基本用法和常见操作,提高对数据库的理解和应用能力。此外,实验1还可以培养学习者的数据处理和分析能力,为进一步学习数据库相关内容打下基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值