数据定义(alter)
语法
掌握以下操作语句的一般格式:
\1. CREATE DATABASE DATABASE_NAME; //创建数据库
\2. DROP DATABASE DATABASE_NAME; //删除数据库
3.CREATE TABLE <表名> (<列名> <数据类型> [列级完整性约束条件] [,<列名> <数据类型> [ 列极完整性约束条件]]…[, <表级完整性约束条件>]);//创建表
4.ALTER TABLE <表名> [ADD <新列名> <数据类型> [完整性约束]] [DROP<完整性约束名>] [MODIFY<列名> <数据类型>];//修改表
重命名表:
alter table 表名 rename 新表名
添加列:
alter table 表名 add 列名 列数据类型 after 插入位置(省略after自动添加到最后)
修改列:
alter table 表名 alter 列名 列新名 新数据类型
删除列:
alter table 表名 drop 列名
5.DROP TABLE <表名> [RESTRICT|CASCADE]; //删除表 注意RESTRICT|CASCADE的区别
例题
参照课本82页【例3-1】至85页【例3-8】完成基本表的定义、修改和删除语句,每例保存截图
补充【3-9】:在学生表性别一列后添加一列“民族”,默认值“汉”。
alter table s add column 民族 char default ‘汉’;
补充【3-10】:修改学生表,将“学院”列名修改为“专业”列名,数据类型为char(20).
alter table s change 学院 专业 char(20);
补充【3-11】:将学生表重命名为:新学生表
alter table s raname 新学生;
单表查询
语法
例题
(1)查询学生表中全体学生的详细记录;
select * from s;
(2)查询所有学生的姓名以及年龄;
select sname,sage from s;
(3)查询考试成绩有不及格的学生的学号;
select sno from sc where grade<60;
(4)查询年龄在20~23岁之间的学生的姓名、院名
select sname,sdept from s where sage between 20 and 23;
(5)查询计算机系的女生信息;
select * from s where sex=‘女’ and sdept=‘计算机’;
(6)查询名字中第二个字为“明”字的男学生的姓名和系名
select sname,sdept from s where sname like ‘-明%’;
(7)查询姓李的学生的姓名、学号和性别
select sname ,sno ,sex from sname like ‘李_’;
(8)查询选修了课程的学生学号;
select sno from sc where sno not null;
(9)查询所有名字不是姓王的同学的姓名、性别和年龄;
select sname ,sex ,sage from s where sname not like ‘王%’;
(10)查询选修了“18101”号课程且成绩在70~80之间的同学的学号;
select sno from sc where cno=18101 and grade between 70 and 80;
(11)查询选修了‘18101’或‘18102’且成绩大于等于80分的学生学号和课程号
select sno ,cno from sc where cno in (18101,18102) and grade >=80;
(12)查询课程名中带有‘_’的课程名;
select cno from c where cname like ‘%/_%’ escape ‘/’;
(13)查询年龄最小的三名同学的姓名;
select sname from s where order by sage asc limit 3;
(14)查询名字中第二个字为‘小’的学生姓名。
select sname from s where sname like ‘_小%’;
(15)查询.2000年以后出生的学生信息,并按姓氏拼音字母顺序从前往后排列。
select * from s where year(now( ))- sage >=2000 order by sname asc;
(16)查询没有成绩的学生的学号和课程号;
select sno ,cno from sc where grade is null ;
(17)选修上课编号为18101且成绩在80-90 之间的学生学号和成绩,并将成绩乘以系数0.75 输出,设置标题newgrade;
select sno,grade0.75 as newgrade from sc where cno=18101 and grade between 80 and 90;
(18) 选修上课编号为18101或18102的学生的学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同则按学号的升序排列;
select sno,grade from sc where cno in (18101 , 18102 ) order by grade desc , sno;
(19)求各个课程号及相应的选课人数。
SELECT Cno,COUNT(Sno) from SC GROUP BY Cno;
(20)查询选修了3门以上课程的学生学号。
SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) >3;
(21)查询有3门以上课程是90分以上的学生的学号及(90分以上的)课程数
SELECT Sno, COUNT( * ) FROM SC WHERE Grade>=90 GROUP BY Sno HAVING COUNT(*)>=3;
高级查询
语法
例题
1.查询每个学生及其选修课程的详细情况。
采用自然连接方式完成。
select s. * ,c. * ,grade from c inner join sc on c.cno=sc.cno inner join s on s.sno=sc.sno;
采用左连接形式完成。
select s. *,c . *,grade from c left join sc on sc on c.cno=sc.cno inner join s on s.sno=sc.sno;
采用右连接形式完成。
select s. *c, c. * ,grade from sc right join s on sc.sno=sc.sno inner join c on sc.cno=c.cno;
\2. 查询每个学生的学号、姓名、选修的课程号、课程名及成绩等信息。
select sno , sname ,cno , cname ,grade from s inner join sc on s.sno =sc.sno inner join c on sc.cno=c.cno;
\3. 查询选修“180103”号课程且成绩在80分以上的所有学生的姓名情况
select sname from s inner sc on s.sno =sc.sno where cno=‘180103’ and grade >80
\4. 查询与“王晓梅”在同一个系学习的学生的详细信息。
select * from s where sdept in ( select sdept from s where sname = ‘王晓梅’);
\5. 查询其他系中比“计算机系”中的任何一同学的年龄大的同学的详细信息。
select * from s where age > ( select max(age) from s where sdept =‘计算机’);
\6.查询其他系中比电信系某一学生年龄小的学生姓名及年龄的的详细信息。
select * from s where age<(select min(age) from s where sdept = ‘电信’);
\7.查询没有选修“180104”号课程的学生的所有详细信息。
select s. * from s inner join sc on sc.sno=s.sno where s.sno not in (select sno from sc where cno=‘180104’);
\8. 查询在“计算机系”或性别为“女”的学生的所有详细信息(用集合查询)。
select * from s where sdept =‘计算机’ union select * from s where sex =‘女’;
\9. 查询既选修了180101又选修了180102的学生学号(用集合查询)
select sno from sc where cno=180101 intersect select sno from sc where cno =180102;
\10. 查询既选修了180101又选修了180102的学生学号(用嵌套查询)
select sno from sc where cno=180101 and sno in (select sno from sc where cno= 180102);
\11. 查询男生除了年龄小于20岁的学生的详细信息。(用集合查询)。
select * from s except select sno from s where age > 20;
12.查询学号为091504的学生所学课程的课程号、课程名(用嵌套查询)
select c.cno ,cname from c inner join sc on sc.cno= c.cno where sno=091504;
\13. 查询“孙志鹏”没有选修的课程号和课程名。
select c.cno ,cname from c where c.cno not in (select c.cno from c inner join sc on c.cno=sc.cno inner join s on s.sno =sc.sno where sname=‘孙志鹏’);
14.查询全部学生都选修了的课程编号和课程名称。(选做题)
1.select c.cno,cname from c where not exists (select * from s where not exists ( select * from sc where sc.sno=s.sno and sc.cno=c.cno) );
2.select c.cno,cname from c where cno in(
select distinct cno from sc
group by cno having count( * ) =(select count( * ) from s)
)
数据操纵(增删改)
例题
\1. 在表S中插入学生学号091510,姓名:李波,性别男,年龄22,系部:经管。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Ln3ca2H-1575869507137)(file:///C:/Users/怀志华/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png)]
\2. 将学号’091510’,选课180104的信息插入到SC表中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZxtUue4t-1575869507138)(file:///C:/Users/怀志华/AppData/Local/Temp/msohtmlclip1/01/clip_image004.png)]
\3. 建立新表S2,将年龄大于20的学生记录存入到此表中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MToCqOfy-1575869507138)(file:///C:/Users/怀志华/AppData/Local/Temp/msohtmlclip1/01/clip_image006.png)]
\4. 把课程名为“操作系统”的选课信息从表SC中删除。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aXKjtMhW-1575869507138)(file:///C:/Users/怀志华/AppData/Local/Temp/msohtmlclip1/01/clip_image008.png)]
\5. 将女生的成绩提高10%
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0UP7Ekei-1575869507139)(file:///C:/Users/怀志华/AppData/Local/Temp/msohtmlclip1/01/clip_image010.png)]
6.把成绩最低的学生成绩加10分。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sONgWvtq-1575869507139)(file:///C:/Users/怀志华/AppData/Local/Temp/msohtmlclip1/01/clip_image012.png)]
7.将成绩最高的前3名学生的成绩减去10分。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lH3pj90I-1575869507139)(file:///C:/Users/怀志华/AppData/Local/Temp/msohtmlclip1/01/clip_image014.png)]
\8. 把选课成绩不及格的学生的成绩改为空值。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YS5fuYKl-1575869507140)(file:///C:/Users/怀志华/AppData/Local/Temp/msohtmlclip1/01/clip_image016.png)]
9.将学号’091503’学生的系部改成机械工程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hQgicGuH-1575869507140)(file:///C:/Users/怀志华/AppData/Local/Temp/msohtmlclip1/01/clip_image018.png)]
\10. 删除S2中所有数据。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Ei2rF2o-1575869507141)(file:///C:/Users/怀志华/AppData/Local/Temp/msohtmlclip1/01/clip_image020.png)]
视图
create view course as select cno,cname from c;
对视图的结果进行查询:
2. 创建视图female_view,显示计算机系女生的详细信息。
create view female as select * from s where sdept=‘计算机’ and sex=‘女’;
3. 创建视图sex_view,显示男生和女生的人数。
create view sex as select sex as 性别 ,count(*) as 人数 from s group by sex;
4. 创建视图grade_view,显示成绩不及格的学生学号、姓名、课程名和成绩信息。
create view grade as select s.sno,sname,cname,grade from s inner join sc on s.sno=sc.sno inner join c on c.cno=sc.cno where grade<60;
**5.**创建视图two_view,显示被两名以上同学选修的课程详细信息。
create view two as select c.* from c inner join sc on c.cno=sc.cno where c.cno in (select cno from sc group by cno having count(sno)>2);
6. 创建视图SC_ view,显示选修了课程的学生的学号,姓名,课程名和成绩信息。
create view sc_ as select s.sno,sname,cno,grade from s inner join sc on s.sno=sc.sno where grade is not null;
女生的信息还在
**7.**查询视图SC_ view,显示每个学生的平均成绩。
select sno,avg(grade) as 平均成绩 from sc_ group by sno;
**8.**查询视图female_view,显示计算机系女生年龄最小的学生信息。
select * from female group by sno having min(age);
9. 向course_view视图插入一条记录:180106,网络安全,48.然后查看此视图和C表的记录有无变化,为什么?
insert into course values (‘180106’,‘网络安全’,48);
插入时会报错,因为视图course只有两列属性,而插入的数据又三列;
若修改数据,只插入两列,结果为:
视图course
视图和表的数据都发生了改变;
10. 修female_view视图信息,将学号091501的姓名王英改为王颖,并查看该视图及基于的基本表信息。
update female set sname=‘王颖’ where sno=‘091501’;
11. 删除course_view视图中“操作系统”课程,并查看视图和基本表。
delete from course where cname=‘操作系统’;
索引
1. 为学生-课程数据库中的S,C,SC三个表建立索引。其中S表按学号升序建唯一索引,C表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。
S表索引:
create unique index s_s on s(sno ASC);
c表索引:
create unique index c_c on c(cno ASC);
SC表索引:
create unique index sc_sc on sc(sno ASC,cno DESC);
**2.**在S表的Sname(姓名)列上建立一个聚簇索引。
create cluster index s_sname on s(sname);
1. 用alter table语句修改表结构的方法创建课程名唯一索引。
alter table teaching.c add unique index(cname);
4. 删除S表的Stusname索引。
drop index s_s on s;
5.workbench****导入friend.sql文件,并运行。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jwDmY83n-1575869507141)(file:///C:/Users/怀志华/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BFkbII90-1575869507141)(file:///C:/Users/怀志华/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg)]
**6.**查询friend_club中,性别为女的信息,查看运行速度。
select * from friend_club where sex=‘女’;
7.****在no编号列创建索引后,再次执行查询语句,查看运行速度。
create unique index friend_no on friend_club(no);
mysql备份(导出)
mysqldump -uroot -pqwe123 -P3306 teaching s sc c>d:\demo\hzhdb.sql
不加–database,不加空格,不加分号
3n-1575869507141)]
[外链图片转存中…(img-BFkbII90-1575869507141)]
**6.**查询friend_club中,性别为女的信息,查看运行速度。
select * from friend_club where sex=‘女’;
7.****在no编号列创建索引后,再次执行查询语句,查看运行速度。
create unique index friend_no on friend_club(no);
mysql备份(导出)
mysqldump -uroot -pqwe123 -P3306 teaching s sc c>d:\demo\hzhdb.sql
不加–database,不加空格,不加分号