这里的增删改查主要是对应表中的数据,不像前一篇那个列类型,耳机具体的哪一条数据
Insert
其实我们前面都用过好多次了
比如下面那个
可以
关于那个表名后面加不加(列类型),下面有解释
INSERT INTO shanpin VALUES(1,'拖鞋',12.6);
INSERT INTO shanpin VALUES(2,'辣条',2.8);
添加多个数据间加逗号
注意事项
1.正常,类型匹配,特殊情况的话,'30’这样mysql底层会使其强转为int类型,当然你前提你字符串存储的是个int类型的呗,'30’这样就能匹配int,'abc’就不能,其实按规范写就行
2.长度匹配
3.类似函数,参数和实参一 一对应
4.字符串和日期类型用单引号括起来!
5.允许null可以添加null
6.可以通过写多个括号添加多个数据 INSERT INTO tablename VALUES (第一组数据)(第二组数据)(第三组数据)
7.如果要添加一组完整的数据,可以不写前面的列类型,如果只添加其中几个数据,一定要写对应添加的列类型,其他不添加的会赋默认值
8.如果没有默认值,报错(默认值一般为NULL,如果你添加了NOT NULL且没有DEFAULT会报错)如果指定了DEFAULT 指定默认值,那么就会赋值,指定的默认值
update
UPDATE table_name
SET 列名=值/表达式
WHERE
WHERE条件不写的话,就是对应所有的数据的这一列进行修改
对应代码
# 演示一下操作表中具体数据的
DROP TABLE employee
CREATE TABLE employee(
id INT NOT NULL DEFAULT 0,
`name` VARCHAR(32),
salary DOUBLE) CHARSET utf8 COLLATE utf8_bin;-- 区分大小写utf8
DESC employee
-- 添加几个数据吧,INSERT
INSERT INTO employee (`name`,salary)-- 写列名就是你要添加对应的参数,其他参数没有默认值null
-- 有默认值为默认值,没默认值还not null报错
VALUES('小袁',10000);
SELECT * FROM employee
INSERT INTO employee() -- 不写列名就是所有参数都添加,按照对应写就ok
VALUES(1,'小王',6000),(2,'小张',7000),(3,'小李',8000)-- 可以添加多个,数据间加逗号
-- 修改一下表的数据,update
UPDATE employee
SET salary=5000 -- 后面没有WHERE的话就是对整列所有数据进行修改
SELECT * FROM employee
UPDATE employee
SET salary=3000
WHERE `name`='小王' -- 把指定小王的薪水调为3000,只修改对应小王那一行对应列的数据
UPDATE employee
SET salary=10000
WHERE `name`='小袁' -- 把指定小袁的薪水调为10000,只修改对应小袁那一行对应列的数据
效果
使用细节
1和2正常的
主要是3小心点
4的话
UPDATE empolyee
SET id=5,salary=5000
WHERE `name`='小袁'
这样就会把小袁的id和salary全修改
delete
还是不带where就删除表中所有记录,带WHERE只删除对应行的
测试用例:
1.删除employee中name为小王的记录
2.删除employee中所有的记录
代码
# Delete语句演示
DELETE FROM employee
WHERE `name`='小王'
SELECT * FROM employee
DELETE FROM employee -- 不带where删除表中所有数据,不删除表
效果
还是记得写where,除非你是真的想删除表中所有数据,小心被开除
细节
select!
基本语法
主要看下面代码喽
代码
# 学生表
CREATE TABLE student(
id INT NOT NULL DEFAULT 1,
`name` VARCHAR(20) NOT NULL DEFAULT '',
chinese FLOAT NOT NULL DEFAULT 0.0 ,
english FLOAT NOT NULL DEFAULT 0.0,
math FLOAT NOT NULL DEFAULT 0.0);
INSERT INTO student
VALUES(1,'小袁',89,78,90),(2,'张飞',67,98,56),(3,'宋江',87,78,77),
(4,'关羽',88,98,90),(5,'赵云',82,84,76),(6,'欧阳锋',55,85,45),(7,'黄蓉',75,65,30);
-- 查询表中所有的数据
SELECT * FROM student
-- 查询表中所有的姓名和对应的英语成绩
SELECT `name`,english FROM student
-- 过滤表中重复的数据
SELECT DISTINCT * FROM sudent -- 这个过滤数据是针对我们查询的数据来是说的
-- 你如果查询*只有所有列相同的数据会过滤,所以还是全部输出奥
-- 要查询的记录,每个字段相同,才能去重
SELECT DISTINCT english FROM student
-- 只显示5行因为,小袁和宋江的英语分相同,张飞与关羽英语分相同
-- 删了两条数据就剩五个了
1and3.效果图
2.效果图
4.效果图
as和表达式的列查询
第一句话就是,列名除了可以是单个列名,也可以是(列名1+列名2+常数)的表达式!!!
第二句,就是显示的时候起个别名来代替原先的列名
我知道你看不懂,不过别着急,我也看不懂,不如一起往下看
代码
-- select使用
-- 统计每个学生的总分
SELECT `name` ,(chinese+english+math) FROM student
-- 给所有的学生总分加10分
SELECT `name`,(chinese+english+math+10) FROM student
-- 使用别名表示学生分数
SELECT `name` AS '名字',(chinese+english+math+10) AS total_score FROM student
筛选范围WHERE的艺术
WHERE可以接一些运算符来,确定你想要的数据
比如你只想找english>80的
WHERE english>80即可,会返回英语大于80的数据
注意逻辑运算变为了and,or和not
between and 是[ ]左闭右闭
IN(100,200) 是100或200,不是100到200!!!
代码
# Where的艺术
SELECT * FROM student
WHERE `name`='赵云'
SELECT * FROM student
WHERE english>80
SELECT *,(math+english+chinese) AS total_score FROM student
WHERE (math+english+chinese)>200
-- 数学过60并且id大于4
SELECT * FROM student
WHERE math>60 AND id>4
-- 英语成绩大于语文成绩
SELECT * FROM student
WHERE english>chinese
-- 查询总分大于200,数学成绩小于语文成绩,且姓赵的同学
-- '赵%'表示只要以赵开头就可以
SELECT * FROM student
WHERE math<chinese AND (math+chinese+english)>200 AND `name` LIKE '赵%'
筛选结果排序
对于筛选的结果进行排序展示
# 筛选排序
-- 数学排序后输出,(升序)
SELECT * FROM student
ORDER BY math ASC
-- 总分从高到低顺序排序
SELECT *,(math+english+chinese) AS total_name FROM student
ORDER BY total_name DESC-- 可以用select指定的列名/AS后的名也可以
-- 对姓小的吧,总分从高到低
-- 先添加一个吧
INSERT INTO student
VALUES(8,'小牛',70,88,96)
SELECT *,(math+english+chinese) AS total_score
FROM student
WHERE `name` LIKE '小%'
ORDER BY total_score DESC
效果
就显示多一根,用as方便查看,然后排序也用哪个as后面的别名
看你想怎么显示喽
也可以
SELECT `name`,(math+english+chinese) AS total_score
FROM student
WHERE `name` LIKE '小%'
ORDER BY total_score DESC