初识MySQL数据库以及语法使用(个人理解心得)

#新建表

#使用数据库
USE MYSCHOOL
DROP DATABASE IF EXISTS grade
#删除表
DROP TABLE subject;
DROP TABLE grade;
#创建表并添加字段 DEFAULT NULL代表默认值为null
CREATE TABLE subject(
LoginPwd VARCHAR(20) NULL,
StudentNo INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT’学号’,
StudentName VARCHAR(2000) DEFAULT NULL COMMENT’学生姓名’,
Sex TINYINT(1) DEFAULT 0 COMMENT’性别,取值0或1’,
Phone VARCHAR(50) NOT NULL COMMENT’联系电话,可选填’,
Address VARCHAR(1000)NOT NULL COMMENT’地址,可选填’,
BornDate DATETIME DEFAULT NULL COMMENT’出生时间’,
GradeId INT(11) DEFAULT NULL COMMENT’年级编号’,
Email VARCHAR(50) NOT NULL COMMENT’邮箱账号,可选填’,
IdentityCard VARCHAR(18) DEFAULT NULL COMMENT’身份证号’
);
CREATE TABLE grade(
GradeId INT(11) NULL AUTO_INCREMENT PRIMARY KEY COMMENT’年级编号’,
Gname INT(11) COMMENT ‘年级’
);

#查看表结构
DESC grade;
SELECT * FROM subject;
#向表中添加数据
INSERT INTO grade(GradeId) VALUES(1);
INSERT INTO grade(GradeId) VALUES(2);
INSERT INTO grade(GradeId) VALUES(3);

INSERT INTO subject(StudentNo,StudentName,Sex,Phone,Address,GradeId,
Email,IdentityCard) VALUES(1011,“郭靖”,1,12522222152,‘襄阳’,1,‘guojing@qq.com’,320324199987755);
INSERT INTO subject(StudentName,Sex,Phone,Address,
Email,IdentityCard) VALUES(“杨过”,1,12522222153,‘古墓派’,‘guoer@qq.com’,320324199987769);
INSERT INTO subject(StudentName,Sex,Phone,Address,
Email,IdentityCard) VALUES(“小龙女”,1,12522222154,‘古墓派古墓’,‘longer@qq.com’,320324199987764);
#根据 studentNo修改邮箱和密码
UPDATE subject SET Email=‘longer1314@qq.com’,LoginPwd=1314520 WHERE StudentNo=1015;

#通过语句添加外键
ALTER TABLE subject
ADD CONSTRAINT KEY_SUBJECT_GRADEID
FOREIGN KEY (GradeId)
REFERENCES grade(GradeId);



#新增的一个年级s1
INSERT INTO grade (GradeId,Gname) VALUES(1,‘S1’);

#如果gradeID的主键没有被subject引用,可以直接删除
DELETE FROM grade WHERE GradeId=4;

#如果gradeID的主键被subject引用,那么
#想要删除GradeId表中的一条记录,必须先更新’subject’表中的外键的值为null,再删除GradeId中的年级
UPDATE subject SET GradeId=NULL WHERE GradeId=1;
DELETE FROM grade WHERE GradeId=1;
UPDATE subject SET GradeId=NULL WHERE GradeId=2;
DELETE FROM grade WHERE GradeId=2;
UPDATE subject SET GradeId=NULL WHERE GradeId=3;
#注册一个学生
INSERT INTO SUBJECT(StudentName,Sex,Phone,Address,GradeId,
Email,IdentityCard) VALUES(“黄蓉”,0,15212345678,“襄阳”,1,‘jinggege520@qq.com’,3201526202132);
#删除grade下面所有的表 删除失败,grade表与student表有主外键关系
TRUNCATE grade;

– 查询所有学生表中的所有学生信息
SELECT * FROM student;
– 查询
– 所有学生表中的学生编号 学生名字,学生电话等某个字段的信息
– student,result 中共有StudentNo,所以需要用表名.字段名
– student.StudentNo 找到student表中的StudentNo字段
– 从student,result表中
SELECT
student.StudentNo AS 学生编号,StudentName 学生名字,Phone ‘学生 电话’
FROM student,result;

#从成绩表中查询课程编号 DISTINCT去掉重复关键字
SELECT DISTINCT subjectno,studentno FROM result;

#查询学生编号为1000的学生,考试的成绩和考试的时间
SELECT StudentNo,StudentResult,ExamDate FROM result WHERE StudentNo=1000;

#查询郭靖学生的考试的成绩和考试的时间
#SELECT StudentResult,ExamDate FROM result WHERE studentno = 学生编号
#学生编号 SELECT Studentno FROM student WHERE StudentName=‘郭靖’
SELECT StudentResult,ExamDate FROM result WHERE studentno=(SELECT Studentno FROM student WHERE StudentName=‘郭靖’);

#select 列名…from 表名 where 条件
#多个条件的或 用 and (并且) or (或者) 衔接

#查询年级为 大一 的 学生编号 和 学生姓名
#student和grade 有gradeid相关联
#查找studentno, studentname 从 student表中
#条件是gradeid
#从grade中查找年级为大一的年级id
#通过年级id查找学生表中的studentno, studentname
SELECT studentno, studentname FROM student
WHERE gradeid
=(SELECT gradeID FROM grade WHERE gradename=‘大一’)

#查询MySQL版本
SELECT version();

查询 subjectname classhour/10 classhour 从SUBJECT表中 多个字段之间加 “,”

SELECT subjectname AS 课程名称 , classhour/10 ‘均课时’ ,classhour AS 总课时 FROM SUBJECT

#查询名字为郭靖 并且地址为北京海淀区中关村大街1号 的学生信息
SELECT * FROM student WHERE StudentName =‘郭靖’ AND ADDRESS =‘北京海淀区中关村大街1号’

#查询名字为郭靖 或者地址为北京海淀区中关村大街1号 的学生信息

SELECT * FROM student WHERE StudentName =‘郭靖’ OR ADDRESS =‘北京海淀区中关村大街1号’

#查询地址为空的信息 IS NULL IS NOT NULL(不为空)
SELECT * FROM student WHERE address IS NULL

#查询所有课时在110到120 之间的信息 BETWEEN AND
SELECT * FROM SUBJECT WHERE classhour BETWEEN 110 AND 120;

#查询所有课时名称包含数学的信息 LIKE
SELECT * FROM SUBJECT WHERE subjectname LIKE ‘%数学%’

#查询所有课时在110到120 之间的信息 IN
SELECT * FROM SUBJECT WHERE classhour IN (110,120,130);
SELECT * FROM SUBJECT WHERE classhour = 110 OR classhour = 120 OR classhour = 130;

#查询所有姓李的学生所有成绩
SELECT studentno ‘“李”同学的学号’,studentresult ‘“李”同学的成绩’ FROM result
WHERE studentno IN (SELECT studentno FROM student WHERE studentname LIKE ‘李%’)

#表名1 inner join 表名2 on 条件 (内连接) 两个表每条记录 排列组合 1 1
2 2
3
4
排列
然后经过 on 条件 匹配符合条件的
1 1 假如符合条件 就打印出此信息
1 2 假如不符合条件 就不打印出此信息
然后
2 1
2 2 判断条件是否符合
继续
.
.
.
直到最后
4 1 假如符合条件 就打印出此信息
4 2 假如不符合条件 就不打印出此信息
SELECT subjectname ,gradename FROM
SUBJECT
INNER JOIN
grade
ON
grade.GradeID=subject.GradeID;

#(外连接)(左外连接)
#以左表做为主表,左表每条记录和右表匹配
#无论满不满足条件 左表都会打印出来,
#如果ON grade.GradeID=subject.GradeId 条件不满足 ,
#右表里面的内容为null打印出来
#如果ON grade.GradeID=subject.GradeId 条件满足 ,
#左表的一条记录+右表符合条件的那一条记录 然后打印出来

SELECT gradename ,subjectname
FROM
grade
LEFT JOIN
SUBJECT
ON
grade.GradeID=subject.GradeId

#(外连接)(右外连接) 右表 左表
排列组合 1 1
2 2
满足条件
1 1
2 2
不满足条件
1 null
2 null
#以右表做为主表,右表每条记录和左表匹配
#无论满不满足条件 右表都会打印出来,
#如果ON subject.GradeId=grade.GradeID 条件不满足 ,
#右表里面的内容为null打印出来
#如果ON subject.GradeId=grade.GradeID 条件满足 ,
#右表的一条记录+左表符合条件的那一条记录 然后打印出来

SELECT gradename ,subjectname
FROM
grade
RIGHT JOIN
SUBJECT
ON
grade.GradeID=subject.GradeId

#内连接案例
#查询学生编号 学生的名字 课程编号 课程名字 考试成绩

#1.查找三表之间的关联 result表中有 StudentNo 和 SubjectNo 与其他表相关联
SELECT student.studentno ,studentname ,subject.subjectno,subjectname ,StudentResult
FROM student
INNER JOIN result
ON student.StudentNo=result.StudentNo
INNER JOIN SUBJECT
ON subject.SubjectNo=result.SubjectNo

#2.查询大一年纪 上课的课程名字 课程编号
SELECT GRADENAME ,SUBJECTNAME,SUBJECTNO FROM GRADE INNER JOIN SUBJECT
ON GRADE.GradeID=SUBJECT.GradeID WHERE gradename=‘大一’

排序

#ORDER BY排序 DESC降序排序 ASC升序排序
案例!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SELECT student.studentno,studentName,StudentResult,subjectname FROM result INNER JOIN student
ON result.StudentNo=student.StudentNo
INNER JOIN SUBJECT
ON subject.SubjectNo=result.SubjectNo
WHERE subjectname=‘数据库结构-1’
ORDER BY studentresult DESC

SELECT GRADENAME ,SUBJECTNAME,SUBJECTNO FROM GRADE INNER JOIN SUBJECT
ON GRADE.GradeID=SUBJECT.GradeID WHERE gradename=‘大一’
ORDER BY SUBJECTNO ASC 升序排序 OR DESC降序排序

#limit 从第几条开始 ,显示多少条记录

select * from result limit 5,5

#分页查询
#每页显示五条记录,显示第一页的数据,从第一条开始 在MySQL中从0开始
select … from … limit 0,5

#每页显示五条记录,显示第二页的数据,从第6条开始 在MySQL中从5开始

select … from … limit 5,5

#每页显示五条记录,显示第一页的数据,从第10条开始 在MySQL中从10开始

select … from … limit 10,5
select … from … limit 每页的开始条数,每页显示的条数

每页开始条数
第一页开始条数 (当前页-1)*每页显示条数
第二页开始条数 (当前页-1)*每页显示条数
第三页开始条数 (当前页-1)*每页显示条数
.
.
.

	#分页规则
			
			select ......  from  ......  limit   (当前页-1)*每页显示条数,每页显示条数;

#查询所有学生信息,每页显示5条记录,查出第三页的数据
当前页:第三页 每页显示条数:每页显示5条记录
(当前页-1)*每页显示条数 (3-1)*5
select * from student limit 10,5

案例!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#查询数据库结构-2的考试成绩
#由高到低
#学生学号,姓名打印

#第一次查询前5条记录
SELECT student.studentno,studentname,StudentResult FROM student
INNER JOIN result
ON student.StudentNo=result.StudentNo
INNER JOIN SUBJECT
ON subject.SubjectNo=result.SubjectNo
WHERE subjectname=‘数据库结构-2’
ORDER BY StudentResult DESC
LIMIT 5

#第二次查询6-10条记录
SELECT student.studentno,studentname,StudentResult FROM student
INNER JOIN result
ON student.StudentNo=result.StudentNo
INNER JOIN SUBJECT
ON subject.SubjectNo=result.SubjectNo
WHERE subjectname=‘数据库结构-2’
ORDER BY StudentResult DESC
LIMIT 5,5

#查询前十名信息LIMIT 10 且成绩大于80(学号,姓名,课程名,分数)

SELECT student.studentno 学号,studentname 姓名,subjectname 课程名字,StudentResult 考试成绩 FROM student
INNER JOIN result
ON student.StudentNo=result.StudentNo
INNER JOIN SUBJECT
ON subject.SubjectNo=result.SubjectNo
WHERE subjectname=‘JAVA第一学年’ AND StudentResult>80
ORDER BY StudentResult DESC
LIMIT 10;

子查询

案例!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#查询课程为高等数学-2且分数不小于80分的学生的学号和姓名

SELECT studentno,studentname FROM student WHERE studentno IN
(SELECT studentno FROM result WHERE StudentResult>=80 AND
subjectno=(
SELECT subjectno FROM SUBJECT WHERE SubjectName=‘高等数学-2’
)
)

MySQL函数

#MySQL·数学函数
#向上取整
SELECT CEIL (20.5)

#向下取整
SELECT FLOOR (20.5)

#截取字符串
SELECT SUBSTR(“abcd”,1,2)

#字符串转日期
SELECT STR_TO_DATE (‘2020-04-01’,’%Y-%m-%d’)

#查找字段StudentNo 在student表中一共有多少条
SELECT COUNT(StudentNo) FROM student

#查找字段StudentNo 在student表中的 SUM() 求和 AVG() 平均数 MAX() 最大值 MIN() 最小值…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值