insert(添加数据)
#使用INSERT语句向表中添加数据
INSERT INTO table_name [(column [,column...])];
VALUES (value [,value..]);
代码测试
DESC `employee`; --查询表结构
INSERT INTO `employee` (`id`, `user_name`,`sex`,`birthday`,
`entry_date`,`job`,`salary`,`resume`,`image`)
VALUES ('1101001','张华','男性','1997-01-26','2022-01-10',
'后端开发工程师','120000.6254','负责项目后端开发','图像');
SELECT * FROM `employee`;
INSERT INTO `employee` (`id`, `user_name`,`sex`,`birthday`,`entry_date`,
`job`,`salary`,`resume`,`image`)
VALUES('1101002','李明','女性','1995-07-23','2022-01-12',
'运维工程师','80000.6254','负责项目运维工作','图像');
SELECT * FROM `employee`;
细节说明
1)插入的数据应与字段的数据类型相同(例如:把'abc'添加到int类型会错误);
2)数据的长度应在列的规定范围内(例如:不能将一个长度为80的字符串加入到长度为40的列中);
3)在values中列出的数据位置必须与被加入的列的排列位置相对应;
4)字符和日期型数据应该包含在单引号中;
5)列可以插入null值【前提是该字段允许为null】(例如:inset into table value(null);
6)insert into tab_name (列名...) values (),(),() 形式添加多条记录;
7)如果是给表中的所有字段添加数据,可以不写字段名称(列名...);
8)默认值的使用,当不给某个字段值时,如果有默认值就会添加,否则报错;
测试代码
# insert 语句的细节
-- 插入的数据应与字段的数据类型相同,否则报错;
-- insert into goods (id,goods_name,price)
-- values ('abc',100,'cba');
-- 数据的长度应在列的规定范围内,否则报错;
-- insert into goods (id,goods_name,price)
-- values(123456789,'abcdefghijklmnopqrstuvwxyz',12.3456);
-- 在values中列出的数据位置必须与被加入的列的排列位置相对应;
-- insert into goods (id,goods_name,price)
-- values ('旺仔牛奶',123,6546548);
-- 字符和日期型数据应该包含在单引号中;
-- insert into goods (id,goods_name,price)
-- values(122,菠菜,2113546)
-- 列可以插入null值【前提是该字段允许为null,如果列不允许为空则需要not null在后面修饰】
INSERT INTO goods (id , goods_name,price)
VALUES (123,'面筋',NULL);
-- insert into tab_name (列名...) values (),(),() 形式添加多条记录;
INSERT INTO goods (id,goods_name,price)
VALUES (10,'变形金刚',123.321),
(11,'葫芦娃',321.123),
(12,'孙悟空',456.654);
SELECT * FROM goods;
-- 如果是给表中的所有字段添加数据,可以不写字段名称(列名...);
INSERT INTO goods
VALUES (13,'哪吒',1987.789),
(14,'玉皇',147.741);
SELECT * FROM goods;
-- 默认值的使用,当不给某个字段值时,如果有默认值就会添加,否则报错;
-- 如果某列没有指定not null 那么添加数据时,没有给定值,就会默认给null
INSERT INTO goods(id,goods_name)
VALUES(15,'太上老君');
SELECT * FROM goods;
CREATE TABLE goods2(
id INT,
goods_name VARCHAR(32),
price DOUBLE NOT NULL DEFAULT 105);
SELECT * FROM goods2;
INSERT INTO goods2 (id ,goods_name)
VALUES (1,'罗汉');
SELECT * FROM goods2;
update(修改数据)
#使用update语句修改表中的数据
UPDATE table_name
SET col_name = expr1 [,col_name2= expr2...]
[WHERE where_definition] -- 如果WHERE不写则是对表中的所有数据进行修改
测试代码
DESC employee;
SELECT * FROM employee;
-- 将所有员工的薪水修改为5000元,如果没有带Where语句则会对表中该列中的数据进行修改
UPDATE employee
SET salary = 5000
-- 将表中张华的薪水修改为8000元
UPDATE employee
SET salary = 8000
WHERE user_name = '张华';
SELECT * FROM employee;
-- 将表中李明的薪水增加1200元
UPDATE employee
SET salary = salary + 1200
WHERE user_name = '李明';
SELECT * FROM employee;
-- 修改多个列
UPDATE employee
SET salary = salary+1200, job = '大数据开发'
WHERE user_name = '张华';
SELECT * FROM employee;
使用细节
1)UPDATE语法可以用新值更新原有表行中的各列;
2)SET子句指示要修改那些列和要给予的值;
3)WHERE子句指定应该更新的那一行。如果没有WHERE子句,则更新对应列中所有的行;
4)如需修改多个字段,可以通过set 字段1=值1,字段2=值2...
delete语句(删除数据)
delete form table_name
[where where_definition] --如果不添加这句,就会删除表中的所有数据
测试代码
# delete 语句演示
-- 删除表中名称为'李明'的记录
DELETE FROM employee
WHERE user_name = '李明';
-- 删除表中的所有记录
DELETE FROM employee;
-- delete 语句不能删除某一列的值,(可以使用update设置为null或者' ')
UPDATE employee
SET job = ' '
WHERE user_name = 'tom';
-- 使用delete语句仅删除记录,不删除表本身。
-- 如要删除表,使用drop table语句(drop table 表名)
DROP TABLE employee;
SELECT * FROM employee;
使用细节
1)如果不使用where子句,将删除表中的所有数据;
2)delete 语句不能删除某一列的值,(可以使用update设置为null或者' ');
3)使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句(drop table 表名)。
select(查询数据)
SELECT [DISTINCT] * | {column1,column2,column3...}
FROM table_name;
注意事项:
1)selete指定查询列的数据;
2)column指定列名;
3)*号代表查询所有列;
4)from指定查询的表;
5)distinct指定显示查询结果时是否去掉重复数据。
测试代码
#创建学生表,导入学生信息
-- id,为int类型,不允许为null,默认值为1
-- name,为varvhar类型,不允许为null,默认值为' '
-- 语文成绩,为float类型,不允许为null,默认值为0.0
-- 英语成绩,为float类型,不允许为null,默认值为0.0
-- 数学成绩,为float类型,不允许为null,默认值为0.0
CREATE TABLE `student`(
`id` INT NOT NULL DEFAULT 1,
`name` VARCHAR(32) NOT NULL DEFAULT ' ',
chinese FLOAT NOT NULL DEFAULT 0.0,
english FLOAT NOT NULL DEFAULT 0.0,
math FLOAT NOT NULL DEFAULT 0.0);
DELETE FROM student;
INSERT INTO student (id,`name`,chinese,english,math)
VALUES (1,'tom',98,96,99);
INSERT INTO student (id,`name`,chinese,english,math)
VALUES (2,'jake',88,86,89);
INSERT INTO student (id,`name`,chinese,english,math)
VALUES (3,'lucy',99,99,86);
INSERT INTO student (id,`name`,chinese,english,math)
VALUES (4,'saly',85,79,96);
INSERT INTO student (id,`name`,chinese,english,math)
VALUES (5,'neo',91,79,96);
INSERT INTO student (id,`name`,chinese,english,math)
VALUES (6,'pero',89,69,100);
INSERT INTO student (id,`name`,chinese,english,math)
VALUES (7,'nano',83,71,88);
-- 查询表中所有学生的信息
SELECT * FROM student;
-- 查询表中的所有学生的姓名和英语成绩
SELECT `name` ,english FROM student;
-- 过滤表中的重复信息distinct
SELECT DISTINCT english FROM student;
-- 要查询的记录,每个字段都相同,才会去重
SELECT DISTINCT `name`,english FROM student; -- 只有两种条件都满足重复才会去重
使用表达式对查询的列进行运算
SELECT * | {column1|expression, column2|expression,...}
FROM table_name;
在select语句中可以使用as语句
SELECT column_name as 别名 from 表名;
测试代码
ALTER TABLE `student`
ADD `总分` FLOAT NOT NULL
AFTER `math`;
UPDATE student
SET `总分` = chinese + english + math
WHERE `id`=7;
SELECT * FROM student;
#1.统计每个学生的总分
SELECT `name`,(chinese+english+math)
FROM student;
#2.在所有学生总分加10分的情况
SELECT `name`,(chinese+english+math+10)
FROM student;
#3.使用别名表示学生分数
SELECT `name` ,(chinese+english+math)
AS total_score FROM student;
SELECT `name` AS `名字`,
(chinese+english+math) AS `总分`
FROM student;
UPDATE student
SET `总分` = chinese + english + math
WHERE `name`='tom';
在where子句中经常使用的运算符
比较运算符 | >、<、<=、>=、=、<>、!= | 大于、小于、小于等于、大于等于、等于、不等于、不等于 |
BETWEEN ... ADN ... | 显示在某一区间的值 | |
IN(set) | 显示在in列表中的值,例如:int(100,200) | |
LIKE '张%' NOT LIKE ' ' | 模糊查询(查询姓张的人) 模糊查询 | |
IS NULL | 判断是否为空 | |
逻辑运算符 | and | 多个条件同时成立 |
or | 多个条件任意一个成立 | |
not | 不成立,例如:where not(salary > 100) |
测试代码
#使用where子句,进行过滤查询
SELECT * FROM student;
-- 查询姓名为tom的同学成绩
SELECT * FROM student
WHERE `name`='tom';
-- 查询英语成绩大于90分的同学
SELECT `name`,`english` FROM student
WHERE english > 90;
-- 总分大于200分的同学
SELECT `name`, `总分` FROM student
WHERE `总分` > 200;
SELECT * FROM student
WHERE (chinese + english + math) >200;
-- 查询math大于 90 并且 english小于90的学生成绩
SELECT * FROM student
WHERE math>90 AND english <90;
-- 查询英语成绩大于语文成绩的同学
SELECT * FROM student
WHERE english < chinese;
-- 查询总分大于200分,并且数学成绩小于语文成绩首字母带n的学生
SELECT * FROM student
WHERE `总分`>200 AND math > chinese AND `name`LIKE 'n%';
-- 查询英语成绩在80~90之间的同学
SELECT `name`,english FROM student
WHERE english BETWEEN 80 AND 90;
-- 查询数学成绩为88,98,100的同学
SELECT * FROM student
WHERE math IN(88,98,100);
-- 查询所有名字中带o的同学
SELECT * FROM student
WHERE `name` LIKE '%o%';
-- 查询数学分大于80,语文分大于80的同学
SELECT * FROM student
WHERE math>80 AND chinese>80;
-- 查询语文分数在80-90之间的学生
SELECT * FROM student
WHERE chinese BETWEEN 80 AND 90;
-- 查询总分为263,258,293的同学
SELECT `name`,`总分` FROM student
WHERE `总分` IN(263,258,293);
-- 查询所有姓名里带n或者带a的同学
SELECT `name` FROM student
WHERE `name` LIKE '%n%' OR `name` LIKE '%a%';
-- 查询数学比语文多3分以上的同学
SELECT `name`,`chinese`,`math` FROM student
WHERE (math - chinese) >3;
使用order by子句排序查询结果
SELECT column1,column2,column3...
FROM table_name
order by column asc|desc,...;
注意细节:
1)Order by 指定排序的列,排序的列既可以是表中的列名,也可以是select语句后指定的列名;
2)Asc升序【默认】、Desc 降序;
3)ORDER BY子句应位于SELECT语句的结尾。
测试代码
#order by子句使用
-- 对数学成绩排序后(升序)输出
SELECT `name`,math FROM student
ORDER BY math ASC;
-- 对总分按从高到低(降序)的顺序输出
SELECT `name`,(chinese+english+math) AS `total_score` FROM student
ORDER BY total_score DESC; -- 可以用别名作为排序
-- 对名字最后个字母是n的同学成绩排序后(升序)输出
SELECT * FROM student
WHERE `name` LIKE '%o'
ORDER BY (chinese+english+math) ASC;