文章目录
- MySQL基础学习
- 1 数据库基本操作
- 2 数据的查询
- 2.2.1数据插入
- 2.2.2 单表查询
- 2.2.3 order by语句
- 2.2.4 聚集函数(aggregate functions)
- 2.2.5 连接查询
- 2.2.6 自身连接
- 2.2.7 外连接
- 2.2.8 多表连接
- 2.2.9 IN嵌入查询
MySQL基础学习
1 数据库基本操作
1.1 创建数据库
数据库的创建格式为 : create DATABASE <数据库名称>;每个完整的语句需要英文的分号结束,否则无法识别会继续添加语句,数据库的命名不能与系统自带系统的数据库重名,否则会报错,并且大小写无区别。
create DATABASE whx;
1.2 查询数据库
查询数据库的语句格式为:show databases;运行后我们会看到我们创建成功的数据库的名称与系统原有的数据库名称。
show databases;
查询结果
从运行结果来看,我们创建的whx数据库已经在里面了,系统原有四个自带的数据库,奖赏我们自己创建的个人数据库一共五个数据库。
1.3 数据库的连接
数据库的连接语句一般为:use <数据库名称>;我们这里创建的数据库名称为whx。因此我们来连接数据库。
use whx;
运行结果
当我们运行连接数据库的语句后,出现了Database changed,那么则认为我们的数据库连接成功。接下来我们就可以建表、插入数据、查询等基本操作了。
1.4 创建一个学生表
创建表的时候,我们要指定字段的类型。创建表的一般语句格式为:create table <表名>。现在我们来创建一个表。里面包含了学生学号、姓名、性别、出生年月、生源地、所在院系、入学年份。
create table student(
sno int,
sname char(20),
ssex char(4),
sbirthday int,
shometown char(20),
sdept char(15),
senrollyear int);
1.5 插入数据
我们建的表时一个空表,里面没有数据,因此需要我们自己插入数据,插入数据的格式为:insert into student values();一次可以插入多条数据。还有一种可以通过导入的形式将数据表格带入数据库中。然后来查询我们的数据是否插入成功。查询语句格式为:select <查询内容> from <表名> 后面跟筛选条件,我们通过查看插入的为全部数据,因此用select * from student;。
insert into student values
(2005020,'李明','男',198505,'江苏省南京市','计算机系',2003),
(2005021,'王文平','女',198503,'北京市','计算机系',2003),
(2005022,'张江水','男',1985010,'山东省济南市','计算机系',2003),
(2005023,'赵天明','男',198512,'云南省昆明市','计算机系',2003),
(2005024,'杨坤','男',198506,'山西省太原市','计算机系',2003),
(2005025,'项羽','男',198509,'贵州省铜仁市','计算机系',2003);
查询结果
从图中来看,数据已经插入到了我们建的student表中。
2 数据的查询
2.1 建立练习查询的表
建立一个学生信息表命名为students,表中包含学生的学号、姓名、性别、年龄、所在系。建立一个课程表course,里面包含课程号、课程名称、先修课、课程学分。最后建一个选课表sc,里面包含学生学号、课程号、考试成绩。
create table students(
sno int,
sname char(20),
ssex char(4),
sage int,
sdept char(15));
create table course(
cno int,
cname char(20),
cpno int,
ccredit int);
create table sc(
sno int,
cno int,
grade int);
从查询表的结果来看,我们已经成功的建立了三个表,students、course、以及sc。接下来我们要为表中加入数据。
2.2.1数据插入
从查询结果来看,我们的全部数据已经插入到我们所建的表中了。
2.2.2 单表查询
查询全体学生的学号与姓名
select sno,sname from students;
我们可以得到学生的学号与姓名
查询全体学生的学号、姓名、所在系
select sno,sname,sdept from students;
我们得到了所有学生的学号。姓名与所在系。
查询经过计算后的值
查询全体学生的姓名与出生年份
select sname,2004-sage from students;
通过查询,我们可以得到每个学生的出生年份。
distinct的使用
查询sc表中的学生的学号,学号相同的不重复计入。
select distinct sno from sc;
从查询结果来看,sc表中原来有五个选课记录,但是都是两个人选的,因此我们查询学号的时候按以前的方式会得到学号相同的,利用distinct时可以去除重复的学号,每个学号只记一次。
查询计算机系得所有学生
select sname from students where sdept ='cs';
从查询结果来看,计算机系的学生只有两个。where用于判断满足条件的语句,满足条件的才会被查询显示出来,否则不显示。
查询年龄小于20岁的学生的姓名与年龄
select sname,sage from students where sage<20;
从查询结果来看,我们得到的学生信息的年龄都是小于20岁。一共三个人。
查询考试有不及格的学生的学号
select distinct sno from sc where grade<60;
由于没有不及格的学生,因此我们转换为查询90分以上的学生的学号。
select distinct sno from sc where grade=90;
从结果来看,只有一个学生的成绩大于等于90。
查询年龄在20-23之间的学生的姓名,所在系,年龄。
select sname,sage,sdept from students where sage between 20 and 23;
从查询结果来看,满足条件的只有一个学生。他的年龄为20岁。
查询计算机系,数学系,信息系的学生的姓名和性别
select sname,sdept from students where sdept in ('cs','ma','is');
因为此时不在是单独的系名,我们应该使用 sdept in (系名)来读取三个系系名以此来达到查询的目的。
查询学号为200215121得学生得全部信息
select * from students where sno = 200215121;
通过查询结果可知,我们查询到了该学生的信息,包括姓名,学号、性别、所在系、年龄。
查询姓刘的学生的姓名,学号,性别
select sname,sno,ssex from students where sname like '刘%';
从查询结果来看,姓刘的就一个学生。
分别查询学生表中,学生名字里第二个字为晨的学生的信息
select sname,sno,ssex from students where sname like '%晨';
select sname,sno,ssex from students where sname like '%晨%';
从结果来看,查到一个人的名字里面带晨字。
查询不姓刘的学生的信息
select sname,sno,ssex from students where sname not like '刘%';
从查询结果来看,不姓刘的学生一共有三个。
查询所有有成绩的学生的学号与课程号
select sno,cno from sc where grade is not null;
从查询结果来看,所有的学生都参加了考试都有成绩。
2.2.3 order by语句
查询选修3号课程的学生的学号以及成绩,并将分数降序排列
select sno,grade from sc where cno=3 order by grade desc;
从查询结果来看,选修3号课程的学生一共两名学生,得分分别按降序排列。
查询所有学生信息,按系号升序排,系号相同按同系的年龄降序排列
select * from students order by sdept,sage desc;
2.2.4 聚集函数(aggregate functions)
查询学生总人数
select count(*) from students;
从查询结果来看,一共有四名学生,count()为统计元组的个数。
查询选修了课程的学生人数
select count(distinct sno) from sc;
从查询结果来看,sc选课表中一共有两个人选修了课程。
计算1号课程的学生的平均成绩
select avg(grade) from sc where cno=1;
从查询计算的结果可知,选修1号课程的学生的平均成绩为92分。计算平均值需要用到的函数为avg()函数。括号内为要计算的字段。
查询计算学生200215121学生选课的总学分数
select sum(ccredit) from sc,course
where sno=200215121 and sc.cno = course.cno;
从查询结果来看,该学生选修课程的总学分为10学分。
2.2.5 连接查询
查询每个学生以及选修课程情况
select students.*,sc.* from students,sc where students.sno = sc.sno;
从查询结果来看,我们考到了每个学社工的姓名、学号、性别、所在系、选修课程号、考试成绩。
自然连接
select students.sno,sname,ssex,sage,sdept,cno,grade
from students,sc
where students.sno = sc.sno;
从结果来看,我们查询到了跟上面一摸一样的结果,而且上面的sno重复部分只保留了一个。
2.2.6 自身连接
select first.cno,second.cpno
from course first,course second
where first.cpno = second.cno;
2.2.7 外连接
select students.sno,sname,ssex,sage,sdept,cno,grade
from students,sc
where students.sno = sc.sno;
2.2.8 多表连接
select students.sno,sname,cname,grade
from students,sc,course
where students.sno = sc.sno and sc.cno = course.cno;
从运行结果来看,三个表的已经连接上了。
2.2.9 IN嵌入查询
首先第一步查询刘晨所在的系名,再查询所有在刘晨所在系学习的学生。
select sno,sname,sdept
from students
where sdept in(
select sdept
from students
where sname = '刘晨');
从查询结果来看,在cs系学习的一共有两名学生。
教材学习笔记。
参考资料
王珊,《数据库系统简明教程》,高等教育出版社
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)