33、掌握数据库的查询语言 select

一、简单的认识外键
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;

猜你喜欢

转载自blog.csdn.net/weixin_44614066/article/details/88791888