数据库的增删改查
CREATE TABLE lovostudebt(
studentCode VARCHAR(20) PRIMARY KEY,
studentName VARCHAR(20),
age INT,
sex VARCHAR(10),
grade INT,
clasddName VARCHAR (20)
)DEFAULT CHARSET=utf8;
INSERT INTO lovostudebt (studentCode,studentName,age,sex,grade,clasddName)
VALUES('xh1001','jacky','20','男','90','T01'),
('xh1002','simth','30','男','75','T02'),
('xh1003','jay','18','男','80','T01'),
('xh1004','helen','19','女','75','T02'),
('xh1005','lily','22','女','90','T03'),
('xh1006','Green','23','男','85','T02'),
('xh1007','RedChar','18','男','60','T01'),
('xh1008','Kevin','17','女','45','T03');
SELECT *FROM lovostudebt;
DROP TABLE lovostudebt;
-- 得到所有学生的总分 sum 表示求和
SELECT SUM(grade) AS '总分' FROM lovostudebt;
-- 等到所有学生的最高分 max 表示求最大值
SELECT MAX(grade) AS '最高分' FROM lovostudebt;
-- 得到所有学生的最低分,min表示求最小值
SELECT MIN(grade) AS'最低分' FROM lovostudebt;
-- 得到所有学生的平均分 ,avg表示求平均分
SELECT AVG(grade) AS'平均分' FROM lovostudebt;
-- 得到所有学生的总人数
-- COUNT (geade)同级总人数,会忽略该列为null的记录。
-- COUNT (*)不会忽略该列为null的记录。
SELECT COUNT(grade)AS'人数' FROM lovostudebt;
SELECT COUNT(*)AS'人数' FROM lovostudebt;
-- 分组查询每个班级的总分
-- GROUP BY 是以什么进行分组
SELECT clasddName,SUM(grade) AS'总分' FROM lovostudebt GROUP BY clasddName;
-- 分组查询每个班级的平均分 最高分 最低分 参考人数
-- clasddName 班级名称
-- 分组之后在select 中出现的字段,织女呢个是分组字段(group by 后面的字段)或者是聚合函数
SELECT clasddName,SUM(grade) AS'总分',
AVG(grade) AS'平均分',
MAX(grade) AS '最高分',
MIN(grade) AS'最低分',
COUNT(grade) AS'参考人数'
FROM lovostudebt GROUP BY clasddName;
-- 查询平均分在85以上的学生
-- where 后面不能跟聚合函数,因为where执行在GROUP by之前
-- having 执行在分组之后,可以跟聚合函数
SELECT clasddName FROM lovostudebt GROUP BY clasddName HAVING AVG(grade)>=75;
-- 查询那个班有女生,并说出女生的人数
SELECT clasddName AS'班级名称',COUNT(sex) AS '女生人数' FROM lovostudebt WHERE sex='女' GROUP BY clasddName;
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
studentCode INT, -- 学号
studentName VARCHAR(20), -- 学生成绩
subjectName VARCHAR(20),
grade INT, -- 成绩
classID INT -- 班级编号
)DEFAULT CHARSET=utf8;
CREATE TABLE class(
id INT PRIMARY KEY AUTO_INCREMENT,
className VARCHAR (20) -- 班级
)DEFAULT CHARSET=utf8;
-- 增加外键约束
ALTER TABLE student ADD CONSTRAINT fk_class FOREIGN KEY (classID) REFERENCES class(id);
INSERT INTO class (className) VALUES('T01'),('T02'),('T03'),('T04');
SELECT *FROM class;
DROP TABLE class;
INSERT INTO student(studentCode, studentName,subjectName,grade,classID )
VALUES(1,'张三','计算机基础',60,1),
(1,'张三','C语言',88,1),
(1,'张三','关系型数据库基础',90,1),
(2,'王五','计算机基础',80,2),
(2,'王五','C语言',70,2),
(2,'王五','关系型数据库基础',55,2),
(3,'李四','C语言',66,4),
(3,'李四','关系型数据库基础',90,4);
SELECT* FROM student;
DROP TABLE student;
-- 显示C语言这门课程的最高分和得最高分的学生姓名
SELECT MAX(grade),studentName FROM student WHERE subjectName='计算机基础'
AND grade=(SELECT MAX(grade) FROM student WHERE subjectName='计算机基础');
SELECT * FROM student WHERE subjectName='计算机基础' ORDER BY grade DESC LIMIT 0,1;
-- 显示所有学生信息,要求将班级编号转化为班级名称
SELECT s.*,(SELECT className FROM class AS c WHERE c.id = s.classID) AS'班级名称' FROM student AS s;
-- 查询比王五c语言考得更好的学生
SELECT * FROM student WHERE subjectName ='c语言' AND
grade >(SELECT grade FROM student WHERE subjectName='c语言' AND studentName='王五');
-- 查询关系型数据库和张三同分的学生信息
SELECT *FROM student WHERE subjectName ='关系型数据库基础' AND
grade=(SELECT grade FROM student WHERE subjectName ='关系型数据库基础'
AND studentName='张三' )AND studentName!='张三';
-- 查询那个班级有学生
SELECT className FROM class WHERE id IN (SELECT DISTINCT classID FROM student);
-- 查询那个班级没有学生
SELECT className FROM class WHERE id NOT IN (SELECT DISTINCT classID FROM student);
-- 找出每门课程的最高分和学生姓名
SELECT * FROM student s1 WHERE grade IN(
SELECT MAX(grade) FROM student s2
WHERE s1.subjectName=s2.subjectName GROUP BY subjectName);
-- 查询所有学生姓名、科目、成绩、所在班级
SELECT s.studentName,s.subjectName,s.grade,c.className FROM
student s JOIN class c ON s.classID=c.id;
SELECT s.studentName,s.subjectName,s.grade,c.className FROM
student s ,class c WHERE s.classID=c.id;
CREATE TABLE t_student(
id INT PRIMARY KEY AUTO_INCREMENT,
StudentName VARCHAR (20),
chinese INT,
math INT,
english INT,
cardCode VARCHAR (20) -- 考试号
)DEFAULT CHARSET=utf8;
INSERT INTO t_student(StudentName,chinese,math,english,cardCode)
VALUES('张无忌','90','80','70','12121525121'),
('王振天','44','88','74','12454545551'),
('胡凯','73','58','99','11245454545'),
('李金','70','90','84','52524645254');
SELECT*FROM t_student;
DROP TABLE t_student;
-- 将张无忌的语文更改为95分,数学改为85分,
UPDATE t_student SET chinese='95',math='85' WHERE StudentName= '张无忌'; -- 可以换成ID
-- 将数学成绩都加5分
UPDATE t_student SET math=math+5;
-- 将姓张的人英语减10分
-- 张%,表示通配符,匹配张开始的所有字符串(张三,张四,张五)
-- %张%,表示(刘张云,杨张云)
UPDATE t_student SET english=english-10 WHERE StudentName LIKE '张%'
-- 增加学校列
ALTER TABLE t_student ADD school VARCHAR(30);
-- 修改张无忌的学校为成都十二中,胡凯学校为成都七中
UPDATE t_student SET school='成都十二中' WHERE id=1;
UPDATE t_student SET school='成都七中' WHERE id=3;
-- 修改学校为null的记录,学校更改为成都四中
UPDATE t_student SET school='成都四中' WHERE school IS NULL;
-- 删除胡凯
DELETE FROM t_student WHERE studentName='胡凯';
-- 删除60-70之间的记录
DELETE FROM t_student WHERE english>=60 AND english<=70;
-- 也可以写成
DELETE FROM t_student WHERE english BETWEEN 60 AND 70;
-- 删除所有
TRUNCATE TABLE t_student;
-- 查询所有记录
-- *表示该表中所有的字段
SELECT * FROM t_student;
-- 查询所有学生的姓名和语文成绩
SELECT studentName,chinese FROM t_student;
-- AS表示给该列取别名
SELECT studentName AS'姓名',chinese AS '语文' FROM t_student;
-- DISTINCT 去除重复的记录
SELECT DISTINCT school FROM t_student;