Mysql中的子查询等操作

时间:2023-01-05 00:51:34

1.delete和truncate 区别?
1.1 delete慢 ,Truncate快

1.20delete记录日志,所以慢 truncate不记录日志

1.31 删除所有记录后,主键值delete 不是从1编号,Truncate会从1开始编号

1.43 truncate不能删除有外键的主表

1.5 delete 可以 加where ,删除部分记录

2.两种引擎
InnoDB:支持事务
MyISAM:

3.添加 insert into grade(字段名称) values(对应)
修改 update 表名 set 列名=‘新值’ where 主键=xxxx
删除 delete from 表名 where 主键=yyy

4. 5种约束
检查约束
主键约束
外键约束
非空约束
默认值约束
唯一约束

1.两种一次性向表中进N条记录的方案
方案一:
要求:目标表不存在
create table 新表(select * from student)

方案二:
要求:目标表必须存在
insert into 新表的名称 select * from 原始表
2.简单查询 关于*会引起全表扫描问题

3.查找姓名是“微冷的雨”的信息
SELECT * FROM student
WHERE studentName='微冷的雨'

4.注意事项
--01.SQL关键字不区分大小写

--02.字符串和日期类型都需要[[[[[[单引号]]]]

--03.起表名的时候,千万不要起得太好,例如不要使用User作为表名。
-- 如果表名和关键字重复了,我们可以通过``取消转义。
select * from `User`

--04.千万注意新建查询窗口中的中文空格。
select * from Message
5.别名
别名方案 AS
6.常量列
SELECT *,'汉族'AS 民族 FROM student
7.关于null讲解
必须懂

8.聚合函数
count:统计一张表中总共有多少条数据
select SUM(StudentResult) as 总分 from Result
select AVG(studentresult) as 平均分 from Result
select MAX(studentresult) as 最高分 from Result
select min(studentresult) as 最高分 from Result
9。常用函数
9.1字符串函数
9.2日期时间函数
9.3数学函数
10.Order
11.排序 limit

 

代码

##检索所有邮箱为NULL的学生
SELECT * FROM student WHERE email
##如果说有一条记录真实值 'xxx' 你如何锁定
###统计成绩表中有几条记录?
SELECT SUM(studentresult) FROM result
##字符串函数
SELECT UPPER('ABCd明天是周五 ,注意提交演讲稿')
###截取
SELECT SUBSTRING('T14正在讲解MySQL,结束后有一个考试',8,5)
###字符串拼接
SELECT CONCAT('str1','str2','str3')
###替换函数
SELECT INSERT('这是MySQL数据库',3,5,'Oracle')
###在mYSQL获取默认的时间
SELECT NOW()
####只获取系统的日期,不获取时间
SELECT CURDATE()
#####只获取系统时间
SELECT CURTIME()
###获取当前日期是该年中的第几周?
SELECT WEEK(NOW())
###查看强哥已经活了多少天
SELECT DATEDIFF(NOW(),'1992-06-01')
###SQL标准 SQL 99
SELECT ADDDATE(NOW(),-3)

####数学函数 ceil() 天花板 向上取整 floor() 向下取整 rand()随机数

SELECT CEIL(2.0001)


####Order by 排序的依据字段
SELECT * FROM student ORDER BY sex,borndate DESC

###分页 limit 参数一(该页数据从第几条开始,下标从0开始),参数2(页大小/每页显示记录数)
SELECT * FROM student LIMIT 2,2
###练习
###1.查询2016年2月17日考试前5名的学员的学号和分数
SELECT studentno,studentresult
FROM result
WHERE examdate>='2017-07-13' AND examdate<'2017-07-14'
ORDER BY studentresult DESC LIMIT 5
SELECT * FROM result
###2.将所有女学生按年龄从大到小排序,从第2条记录开始显示6名女学生的姓名、年龄、出生日期、手机号信息
SELECT studentname,CEIL(DATEDIFF(NOW(),borndate)/365) AS 年龄,borndate,phone
FROM student
WHERE sex='男'
ORDER BY 年龄 DESC
LIMIT 1,6

###3.查询参加2016年2月17日考试的所有学员的最高分、最低分、平均分
SELECT MAX(studentresult) AS 最高分,MIN(studentresult) AS 最低分,AVG(studentresult) AS 平均分
FROM result
WHERE examdate>='2017-7-13' AND examdate<'2017-7-14'

SELECT * FROM result

###子查询 必须知道什么是子查询 select * from (子查询)
###年龄比彪哥小的学生信息
SELECT * FROM student WHERE bornDate<(SELECT borndate FROM student WHERE studentname='彪哥')

##查询参加 最近一次 Logic Java 考试成绩的学生的最高分和最低分
SELECT MAX(studentresult) AS 最高分,MIN(studentresult) AS 最低分
FROM result
WHERE examdate=(SELECT MAX(examdate) FROM result WHERE subjectid=(SELECT subjectid FROM SUBJECT WHERE subjectname='语文'))
AND subjectid=(SELECT subjectid FROM SUBJECT WHERE subjectname='语文')

###查询 JavaLogic 考试成绩为 60分的学生姓名
SELECT studentname FROM student
WHERE studentno IN
(
SELECT studentno FROM result
WHERE studentresult=77
AND subjectid=
(
SELECT subjectid FROM SUBJECT
WHERE subjectname='语文'
)
)
SELECT * FROM result
####查询 最近一次 未参加 语文 考试的 学生名单(studentname)
SELECT studentname FROM student
WHERE studentno NOT IN
(
SELECT studentno FROM result
WHERE subjectid=
(
SELECT subjectid FROM SUBJECT
WHERE subjectname='语文'
) AND examdate=
(
SELECT MAX(examdate) FROM result
WHERE subjectid=
(
SELECT subjectid FROM SUBJECT
WHERE subjectname='语文'
)
)
)
AND gradeid=
(
SELECT gradeid FROM SUBJECT
WHERE subjectname='语文'
)


##检查“Logic Java”课程最近一次考试成绩
##如果有 80分以上的成绩,显示分数排在前5名的学员学号和分数
SELECT studentno,studentresult FROM result
WHERE EXISTS
(
SELECT * FROM result
WHERE subjectid=
(
SELECT subjectid FROM SUBJECT
WHERE subjectname='语文'
)
AND examdate=
(
SELECT MAX(examdate) FROM result
WHERE subjectid=
(
SELECT subjectid FROM SUBJECT
WHERE subjectname='语文'
)
)
AND studentresult>80

)
AND subjectid=
(
SELECT subjectid FROM SUBJECT
WHERE subjectname='语文'
)
AND examdate=
(
SELECT MAX(examdate) FROM result
WHERE subjectid=
(
SELECT subjectid FROM SUBJECT
WHERE subjectname='语文'
)
)
AND studentresult>60
ORDER BY studentresult DESC
LIMIT 5

 

SELECT * FROM student
WHERE EXISTS
(
SELECT * FROM result WHERE studentresult>100
)