一、简单的认识外键
1.外键:连接多张表的关键列,用于保证数据的一致性。
ALTER TABLE student
ADD CONSTRAINT fk_student_grande FOREIGN KEY(grandeId) REFERENCES grande (grandeId);
2.逻辑外键(推荐使用),物理外键不推荐使用,但是防止笔试题中出现。
3.增加语句
INSERT INTO 表名 (字段名列表)values(值列表1);
增加多条数据
INSERT INTO 表名 (字段列表) values (值列表1)(值列表2)()…多个数据的值
4.修改数据表中的列的值
updaate 表名 set 要修改的字段/列=修改的值,…
[where 条件]如果不加where条件,那么就会进行全表的更新
where后面可以加各种的运算符,< > <= >= !=/<> =
between …and… and or not
5.删除
delete from 表名 [where 条件]
6.注意delete和truncate的区别
delete和truncate都可以清空列表内的所有的内容,但是①delete后面可以添加where条件,但是truncate后面不能添加条件
②delete删除会保留自增序列,但是truncate删除不会保留自增序列。它会清空表内所有的内容。
③delete不会影响事务,而truncate会影响事务,它会提前提交事务
二、开始基本的创建表操作
表的创建
#科目表
create table `subject` (
subjectNo int primary key auto_increment comment '科目的编号',
subjectName varchar(50) comment '科目的名称';
classHour int comment '课时',
gradeId int comment '年级编号';
);#表后面可以加注释
#年级表
create table `grade`(
gradeId int primary key auto_increment comment `年级编号`,
gradeName varchar(50) comment `年级名称`
);#表后面可以添加表的注释
#成绩表
create table `result`(
studentNo int comment `学生编号`,
subjectNo int comment `课程编号`,
examDate Datetime comment `考试时间`,
studentResult double comment `考试成绩`
);
#学生表
create table student(
studentNo int primary key auto_increment '学生编号',
loginPwd varchar(20) comment '学生密码',
studentName varchar(20) comment '学生名字',
sex varchar(20) comment '性别',
gradeId int comment '年级编号',
idenntityCard varchar(30) comment '身份证信息'
);
#添加信息到学生表
insert into student
(studentNo,loginPwd,studentName,sex,gradeId,identityCard)
valuse(1000,'111111','郭靖','男',1,'232323232323'),
(10001,'111112','小韩','女',1,'23232323245645'),
(10002,'111113','小宋','男',1,'232323237897');
#添加科目信息
insert into subject
(subjectName,classHour,gradeId)
values('高等数学',110,1),
('C语言',120,3),
('大学物理',130,9);
#添加年级信息
insert into grade
(gradeName)
values('大一'),
('大二'),
('大三');
#插入成绩
inset into student.result
(studentNo,subjectNo,examDate,studentResult)
values(1000,'2019-03-25',94),
(1001,'2019-03-26'),
(1003,'2019-03-28');
三、DQL数据查询语言 SELECT
1.掌握MySQL的查询语句(基本的完整语法)
select [all查询全部 | distinct 去重]
#决定查询哪列的信息
#[]可以省略不写,{}必须写
{全列* | table* | [table.field1[as alias1][,table.field2][,as alias2]]}
#决定从哪些数据中查询数据
from table_name [as table_alias]
[left | out | linner join table name2]#联合查询/连接查询
[where…]指定结果需要满足哪些条件
[group by] #指定结果按照那个字段来进行分组
[having]#过滤分组的记录必须满足哪几个条件
[order by ]#指定查询记录按照一个或者是多个条件进行排序
[limit { [offset,] row_count | row_count offset offset}]
#指定查询的记录从哪条到哪条
#在可视化的mysql中是注释的意思单行注释--也是单行注释/**/是多行注释
#1.查询所有的信息
select
* #决定查询哪列*代表表中的所有的列
from
student ; #不写条件where表示决定查询所有的学生
#2.为老师查询学生们的通讯录,姓名,性别,手机号,邮箱,地址
select
student.studentName,student,sex,address,phone,email
from
student;
#3.查询上述信息并将信息以中文展示
select
studentName as '学生姓名',sex as '性别', address as '地址',
phone as '电话', email as '邮箱'
from
student;
#4.查询所有的学生的性别 all默认代表查询全部的信息
select
all stu.sex
from
student as stu;
#5.distinct会将所有查询列的信息进行筛选去掉重复的
select
distinct stu.sex
from
student as stu;
#6.查询课时在100-200之间的科目名称
select
subjectName , classHour
from
`subject`
where
classHour between 100 and 200;
#7.查询null值,/非null 必须使用is 或者是 is not null
select
studentName
from
student
where
phone is not null;
#8.掌握模糊查询
#like
#8.查询姓郭的学生姓名和性别
select
studentName,sex
from
student
where
studentName like '郭%';
#9.查询姓贾的但是名字 是俩个字的学生的 信息、
select
*
from
student
where
studentName like '贾_';
#10. %是匹配0个或者是任意多个字符,_匹配的是一个字符,
#11.查询地址包含西城的信息
select
*
from
student
where
address like '%西城%';
#12.in 范围查询
#查询学号是1001和1002的学生的信息
select
*
from
student
where
studentNo = 1001 or studentNo = 1003;
#13.in 范围查询
#查询学号是1001和1002的学生的信息
select
*
from
student
studentNo in (1001,1003);
3.理解连接查询的原理
#当查询的数据来自于多张表的时候,需要通过外键和连接用算符来查询信息
#连接查询分类:
①内连接(inner join)显示内连结,隐试内连结,自连接
②外链接(outter join) 左外连接(left [outter] join) 右连接(right [outter] join)
4.掌握内连结查询
#显示内连结
#1.查询科目名称和对应年级名称
select
subjectName as 科目名称, gradeName as 年级名称
from
subject
inner join grade
on subject.gradeId = grade.gradeId;
#2.用别名进行优化
select
sub.subjectName as 科目名称,g.gradeName as 年级名称
from
subjec as sub
inner join grade as g
on sub.gradeId = g.gradeId
#3.三表连查
#查询学生的姓名,科目名称。成绩
select
stu.studentName,sub,subjectName,r.studentResult
from result r
inner join student stu
on r.studentNo= stu.studentNo
inner join subject sub
on r.subjectNo= sub.subjectNo;
#4.常用隐试内连结实现上述功能
#可以理解为是交集,如果有不存在的外键信息,则无法查询到
#查询学生的姓名,科目名称。成绩
select
stu.studentName,sub.subjectName,r.studentResult
from
student stu, subject sub,result r
where
stu.studentNo = r.studentNo and sub.subjectNo = r.subjectNo;
#5.掌握外链接查询(左外连接)
左外连接:left outter join
#以左表为主,左边的表的信息全部查询出来,右边表的信息进行匹配对应,
如果没有相应的匹配对应会以null进行显示
#1.查询所有的课程名称,班级名称
select
sb.subjectName,g.gradeName
from
subject as sb
left join grade g
on sb.gradeId = g.gradeId
#6.理解自连接查询(在一张表中进行查询)
#查询游戏名称并且将其分类名称查询出来
select
e1.categoryName as 游戏名称,e2.categoryName as 分类名称
from
category e1,category e2
where
e1.pid = e2.id;