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_info
VALUES
( 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);