从零开始MySQL-第4章 C[create]R[read]U[update]D[deletet]
1.Insert
--创建一张商品表goods(id int, goods_name varchar(10), price double)
--添加两条记录
CREATE TABLE `goods`(id INT,goods_name VARCHAR(10),price DOUBLE
);
--添加数据
INSERT INTO `goods`(id, goods_name, price)
VALUES(10, '华为手机', 2000);
INSERT INTO `goods`(id, goods_name, price)
VALUES(20, '苹果手机', 3000);
SELECT * FROM goods;DESC employee;
INSERT INTO `employee` VALUES (001, '孙悟空', '202-10-01', '202-10-01 11:11:11', '弼马温', 5000, '无', '无');
SELECT * FROM employee;
INSERT INTO `employee`(id , user_name, brithday , job, salary, resume, image)
VALUES (001, '孙悟空', '202-10-01', '弼马温', 5000, '无', '无');INSERT INTO table_name (column, ...)
VALUES(value, ...);values中的值跟插入语句中的顺序对应
-- 1. 插入的数据应与字段的数据类型相同
-- 例如:把'abc'添加到int类型会错误(ps:因更换电脑,这里是VScode+mysql8)

如果是 '10' ,mysql则会自己转化为int。
-- 2. 数据的长度应在列的规定范围内。
-- 例如:不能将一个长度为80的字符串加入到长度为40的列中。

-- 3. 在values中列出的数据位置必须与被加入的列的排列位置相对应。
如果不对应,相当于第一种错误情况。
-- 4. 字符和日期型数据应包含在单引号中。

-- 5. 列可以插入空值[前提是该字段允许为空],insert into table valu(null)。

当不允许时,则会报错

-- 6. insert into tab_name(列名..) values(),(),() 形式可以添加多条记录。

-- 7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称。

-- 8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加,否则报错。
CREATE TABLE `goods`(id INT,goods_name VARCHAR(10),price DOUBLE NOT NULL DEFAULT 100
);-- 如果某个列 没有指定not null,那么当添加数据时,没有给定值,则会默认给null。
2.Update
-- 1. 将所有员工薪水修改为5000元。
UPDATE employee SET salary = 5000; --如果没有带where条件,会修改所有的记录
-- 2. 将姓名为 小妖精 的员工薪水修改为3000元。
UPDATE employeeSET salary = 3000WHERE user_name = '小妖精';
-- 3. 将 老妖精 的薪水 在原有的基础上增加1000元。
UPDATE employeeSET salary = salary + 1000WHERE user_name = '老妖精';
-- 可以修改多个列
UPDATE employeeSET salary = salary + 1000, job = '捶背'WHERE user_name = '老妖精';
SELECT * FROM employee;3.Delete
-- 删除表中名称为 '老妖精'的记录。
DELETE FROM employeeWHERE user_name = '老妖精';
-- 删除表中所有记录
DELETE FROM employee;
SELECT * FROM employee;细节:
1.如果使用where子句,将删除表中所有数据
2.Delete语句不能删除某一列的值(可以使用update设为 null 或者 '')
UPDATE employee SET job = ''  WHERE user_name = '老妖精';3.使用delete语句仅删除记录,不删除表本身。如果要删除表,使用drop table语句。drop table 表名;
DROP TABLE employee;4.Select
SELECT [DISTINCT] * | (column, ...)
FROM tablename;
注意事项:
1.select指定查询那些列的数据。
2.column指定列名。
3.*号代表查询所有列。
4.FROM 指定查询那张表。
5.DISTINCT可选,指显示结果时,是否去掉重复数据。
4.1多表
4.2单表
-- 查询表中所有学生的信息
SELECT * FROM student;
-- 查询表中所有学生的姓名和对应的英语成绩。
SELECT `name`, english FROM student;
-- 过滤表中重复数据distinct
SELECT DISTINCT * FROM student;
SELECT DISTINCT math FROM student;
-- 要查询的记录,每个字段都相同,才会去重
SELECT DISTINCT `name`, english FROM student;
-- 统计每个学生的总分
SELECT `name`, (chinese + english + math) FROM student;
-- 在所有学生总分加10分的情况
SELECT `name`, (chinese + english + math + 10) FROM student;
-- 使用别名表示学生分数
SELECT `name`, (chinese + english + math + 10) AS total_score FROM student;SELECT `name` as '姓名', (chinese + english + math + 10) AS '总分-' FROM student;
SELECT * FROM student;
-- 1. 查询姓名为崴比巴步2的学生成绩
SELECT * FROM student WHERE `NAME` = '崴比巴步2';
-- 2. 查询英语成绩大于50分的同学
SELECT * FROM student WHERE english > 50;
-- 3. 查询总分大于200分的所有同学
SELECT * FROM student WHERE (chinese + english + math) > 200;
-- 4. 查询math大于60并且(and)id大于4的学生成绩
SELECT * FROM student WHERE math > 60 AND id > 4;
-- 5. 查询英语成绩大于语文成绩的同学
SELECT * FROM student WHERE english > chinese;
-- 6. 查询总分大于200分 并且 数学成绩小于语文成绩的,带巴字的同学
SELECT * FROM student WHERE (chinese + english + math) > 200 AND math < chinese AND `NAME` LIKE '%巴%';-- 1. 查询英语分数在 60 - 90 之间的同学
SELECT * FROM student WHERE english >= 60 AND english <= 90;
SELECT * FROM student WHERE english BETWEEN 60 AND 90;--[闭区间]
-- 2. 查询数学分数为89,90,91的同学
SELECT * FROM student WHERE math = 89 OR math = 90 OR math = 91;
SELECT * FROM student WHERE math IN (89, 90, 91);
-- 3. 查询所有姓崴的同学的成绩
SELECT * FROM student WHERE `NAME` LIKE '崴%';
-- 4. 查询数学分 > 80 ,语文分> 80 的同学
SELECT * FROM student WHERE math > 80 OR chinese > 80;
-- 5. 查询语文分数在70 - 80 之间的同学
SELECT * FROM studentWHERE chinese BETWEEN 70 AND 90;
-- 6. 查询总分在189,190,191的同学
SELECT * FROM studentWHERE (chinese + english + math) IN (189, 190,191);
-- 7. 查询所有姓李 或者 姓宋的
SELECT * FROM studentWHERE `NAME` LIKE '李%' OR `NAME` LIKE '宋%';SELECT column1, ...
FROM table;
ORDER BY column asc|desc, ..
1.Order by 指定排序的列, 排序的列既可以是表中的列名,也可以是select语句后指定的列名。
2.升序[默认]asc、降序desc
3.ORDER BY 子句应位于SELECT语句的结尾。
-- 对数学成绩排序后输出[升序]
SELECT * FROM studentORDER BY math;
-- 按总分从高到低的顺序输出[降序]
SELECT NAME, (chinese + english + math) AS total_score FROM studentORDER BY total_score DESC;
-- 对姓崴的同学成绩排序输出(升序) 
SELECT NAME, (chinese + english + math) AS total_score FROM studentWHERE `NAME` LIKE '崴%'ORDER BY (chinese + english + math) ASC;