1. 表操作的指令
-- 创建一个数据库-- CREATE DATABASE stu_system CHARACTER SET utf8 COLLATE utf8_general_ci;-- 创建一个数据表-- CREATE TABLE stu_info(-- si_id INT,-- si_name VARCHAR(30),-- si_score INT,-- si_start_time DATETIME-- );-- 删除一个表-- DROP TABLE stu_info;-- 给已经存在的表格,添加一个新的字段 -- ALTER TABLE 表名 ADD 字段名 类型 [FIRST] [AFTER 字段名]-- 我要在分数的后面添加一个班级的字段-- ALTER TABLE stu_info ADD si_class INT AFTER si_score;-- 修改字段的类型-- ALTER TABLE stu_info MODIFY si_score DOUBLE;-- 查看表的创建信息SHOW CREATE TABLE stu_info-- 创建一个数据库-- CREATE DATABASE stu_system CHARACTER SET utf8 COLLATE utf8_general_ci;-- 创建一个数据表-- CREATE TABLE stu_info(-- si_id INT,-- si_name VARCHAR(30),-- si_score INT,-- si_start_time DATETIME-- );-- 删除一个表-- DROP TABLE stu_info;-- 给已经存在的表格,添加一个新的字段 -- ALTER TABLE 表名 ADD 字段名 类型 [FIRST] [AFTER 字段名]-- 我要在分数的后面添加一个班级的字段-- ALTER TABLE stu_info ADD si_class INT AFTER si_score;-- 修改字段的类型,这个只能修改类型-- ALTER TABLE stu_info MODIFY si_score DOUBLE;-- 修改字段的名称和类型-- ALTER TABLE stu_info CHANGE si_score si_stu_score INT;-- 查看表的创建信息-- SHOW CREATE TABLE stu_info;
2. 数据增 删改的指令
-- 添加-- 为表中添加一条数据-- INSERT INTO 表名 VALUES(数据,数据,数据)-- INSERT INTO stu_info VALUES-- (1,"xiaoming",98,1,"2021-8-27 08:55:25");-- 为指定的字段添加一条数据-- 不指定的字段,需要能够为空-- INSERT INTO 表名(字段名,) VALUES(数据,)-- INSERT INTO stu_info ( si_id, si_name )-- VALUES-- ( 2, "xiaohong" );-- 一次性的添加多条数据INSERT INTO stu_infoVALUES ( 3, "xiaobai","男", 75, 2, "2021-8-27 08:55:25" ), ( 4, "xiaolv","男", 80, 3, "2021-8-27 08:55:25" ), ( 5, "xiaolan","男", 65, 5, "2021-8-27 08:55:25" ), ( 6, "xiaohei", "男", 55, 3, "2021-8-27 08:55:25" ), ( 7, "xiaoqing","男", 78, 2, "2021-8-27 08:55:25" ), ( 8, "daming", "男", 95, 1, "2021-8-27 08:55:25" );-- 修改数据-- UPDATE 表名 SET 字段 = 数值 WHERE 条件。、-- 修改小红的信息-- UPDATE stu_info SET -- si_stu_score = 83,si_class=3,si_start_time="2021-8-27 08:55:25"-- WHERE si_name = "xiaohong"-- ;-- -- 将所有的3班的人数据都变为75分-- UPDATE stu_info SET -- si_stu_score = 75-- WHERE si_class = 3;-- 删除数据-- DELETE FROM stu_info WHERE si_name = "xiaohong";-- 关于约束-- 主键 非空 唯一 默认数据DROP TABLE stu_info;-- 约束有两种添加方式:-- 第一种 创建表的时候添加CREATE TABLE stu_info( -- 创建ID字段,主键约束,自动增长 si_id INT PRIMARY KEY AUTO_INCREMENT, -- 姓名字段,唯一约束,不为空 si_name VARCHAR(30) UNIQUE NOT NULL , -- 以下字段,都不能为空 si_sex VARCHAR(2) NOT NULL DEFAULT "男", si_score INT NOT NULL, si_class INT , si_start_time DATETIME);INSERT INTO stu_info ( si_id, si_name,si_score )VALUES ( 2, "xiaohong",95);-- 第二种 创建表之后,进行修改-- ALTER TABLE 表名 CHANGE COLUMN 字段 字段+信息 约束ALTER TABLE stu_info CHANGE COLUMN si_class si_class INT NOT NULL;
3. 查询指令
-- -- 查询出所有的数据-- SELECT * FROM stu_info;-- -- -- 只查询姓名和班级-- SELECT si_name,si_class FROM stu_info;-- -- -- 只想知道有哪些班级-- -- 类似于这样的需求,通常都不用全部显示,可以去重-- SELECT DISTINCT si_class FROM stu_info;-- -- -- 对于查询到的结果还可以运算-- SELECT DISTINCT si_class+2 FROM stu_info;-- -- -- 我们可以给查询到的表头起一个别名-- SELECT DISTINCT si_class+2 as 班级加2 FROM stu_info;-- -- SELECT DISTINCT si_name as 姓名,si_class as 班级 FROM stu_info;-- -- -- 带条件的查询-- -- -- 查及格的同学的姓名-- SELECT si_name as 姓名,si_score as 分数 FROM stu_info WHERE-- si_score >=60;-- -- 查询分数段再70到80之间的同学-- SELECT si_name as 姓名,si_score as 分数 FROM stu_info -- WHERE-- si_score BETWEEN 70 AND 80;-- -- (si_score>=70)AND(si_score<=80);-- -- 查询1班和3班同学的姓名和分数-- SELECT si_name as 姓名,si_score as 分数,si_class FROM stu_info -- WHERE-- si_class =1 OR si_class=3;-- -- 查询姓 "xiao"的同学-- -- like 是模糊匹配-- SELECT si_name as 姓名,si_score as 分数,si_class FROM stu_info -- WHERE-- si_name like "xiao%"-- -- 查询名字中含有l的同学-- SELECT si_name as 姓名,si_score as 分数,si_class FROM stu_info -- WHERE-- si_name like "%l%"-- -- 查询以第2个字母是i的同学-- SELECT si_name as 姓名,si_score as 分数,si_class FROM stu_info -- WHERE-- si_name like "_i%"-- -- -- -- 对查询的结果进行排序 -- -- ORDER BY DESC降序 ASC 升序 默认是升序-- SELECT * FROM stu_info ORDER BY si_score DESC;-- -- -- 内置函数 -- -- COUNT 获取计数-- -- 获取一下3班有多少个同学-- select COUNT(*) as 3班学生数 FROM stu_info WHERE si_class =3;-- -- -- MAX 获取最大值-- -- 获取全校第一名-- select MAX(si_score) FROM stu_info ;-- -- SUM 获取和-- select SUM(si_score) FROM stu_info ;-- -- AVG 获取平均值-- select AVG(si_score) FROM stu_info ;-- -- NOW 获取当前时间-- select NOW();-- 分组 GROUP BY -- 我们对于某一个字段进行分组-- 就是把相同的数据作为一组,我们可以对一组中某些字段 做函数操作-- 从而获取出属于这一组的信息。SELECT si_class,AVG(si_score), COUNT(*) FROM stu_info GROUP BY si_class;-- 多表查询,在两张表中进行查询-- 分别查询两个表select * FROM stu_info;select * FROM class_info;-- 直接多表查,得到的是笛卡尔积矩阵乘法select * FROM stu_info,class_info;-- 查询学生信息,以及它对应的班级信息select * FROM stu_info,class_info WHERE stu_info.si_class = class_info.ci_id;-- 我要查询xiaobai的老师是谁-- 在多表查询的结果中,按照条件去筛选select si_name,ci_teacher_name FROM stu_info,class_info WHERE stu_info.si_class = class_info.ci_id AND si_name = "xiaobai";-- 子查询-- IN EXISTS ANY ALL-- 想要获取所有女教的学生-- 先获取出所有的女老师INSERT INTO class_info VALUES (5,"hanmeimei",7,"女");-- (1,"dunlaoshi",1,"男"),-- (2,"dunlaoshi",3,"男"),-- (3,"gailaoshi",4,"男"),-- (4,"dahong",5,"女");SELECT* FROM stu_info WHERE si_class IN (SELECT ci_id FROM class_info WHERE ci_sex = "女");-- 在一个查询中,需要用到另外一个查询的结果-- -- 获取全校第一名-- 先获取了最高分,然后把分数去最高分的结果中去匹配,然后就能够-- 获取出全部信息。SELECT * FROM stu_info WHERE si_score IN(select MAX(si_score) FROM stu_info);