DML操作表和DQL查询表
DML操作表中数据
DML操作是用于对表中的记录进行增删改操作。
1 .插入操作
# 格式
INSERT [INTO] 表名 [字段名] VALUES (字段值);
解析:
INSERT INTO 表名:表示往哪张表中添加数据
(字段名 1, 字段名 2, …):要给哪些字段设置值
VALUES (值 1, 值 2, …):设置具体的值
- 插入全部字段–方法一(所有的字段名都写出来)
# 格式
INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3);
# demo
insert into employee (id,name,birthday) values (1, '孙悟空', '1999-12-09');
- 插入全部字段–方法二(不写字段名)
# 格式
INSERT INTO 表名 VALUES (值 1, 值 2, 值 3);
# demo
insert into employee values (2, '猪八戒', '1999-12-10');
- 插入部分数据
# 格式
INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);
# demo
insert into employee (id,name) values (1, '孙悟空');
注意:
- 没有添加数据的字段会使用 NULL;
- 插入的数据应与字段的数据类型相同;
- 数据的大小应在列的规定范围内,例如:不能将一个长度为 80 的字符串加入到长度为 40 的列中;
- 在 values 中列出的数据位置必须与被加入的列的排列位置相对应。在 mysql 中可以使用 value,但
不建议使用,功能与 values 相同; - 字符和日期型数据应包含在单引号中,MySQL 中也可以使用双引号;
- 不指定列或使用 null,表示插入空值。
2.表复制的相关操作
如何将一张已经存在的表中的数据复制到另一张表中。
首先创建一张表employee1
create table employee1 like employee;
再将表employee中的所有列内容复制到employee1中:
# 格式
INSERT INTO 表名 1 SELECT * FROM 表名 2;
# demo
insert into employee1 select * from employee;
如何将表employee中的部分列内容复制到employee2中;
首先创建一张表employee2
create table employee2 like employee;
再将表employee中的部分列内容复制到employee2中:
# 格式
INSERT INTO 表名 1(列 1, 列 2) SELECT 列 1, 列 2 FROM student;
# demo
insert into employee2(name,age) select name,age from employee;
3.更新表中的数据
# 格式
UPDATE 表名 SET 列名=值 [WHERE 条件表达式]
解析:
UPDATE 表名:需要更新的表名
SET:修改的列值
WHERE:符合条件的记录才更新
- 不带条件修改(会修改所有字段的值)
# 格式
UPDATE 表名 SET 字段名=值;
# demo
update employee set name ='小明';
-
带条件修改(修改满足条件的部分列值)
# 格式 UPDATE 表名 SET 字段名=值 WHERE 字段名=值; # demo update employee set name ='john' where id=2;
4.删除表中的数据
# 格式
DELETE FROM 表名 [WHERE 条件表达式]
解析:
DELETE from 表名:从哪个表中删除记录
WHERE: 符合条件的记录才删除
- 不带条件删除数据(会删除所有记录)
# 格式
DELETE FROM 表名;
# demo
delete from employee;
- 带条件删除数据
# 格式
DELETE FROM 表名 WHERE 字段名=值;
# demo
delete from employee where name ='小明';
3.使用truncate进行删除记录
# 格式
TRUNCATE TABLE 表名;
TRUNCATE TABLE employee;
注意 :
如果使用truncate进行删除记录,相当于删除表的结构,再创建一张表
truncate和delete的区别:
-
truncate是用于清空表中的数据;delete不加条件是删除表中数据;
-
truncate清空表中数据后,数据的id会从1开始,delete不是从一开始还是在之前的末尾插入记录;
DQL查询表中记录
1、基础查询
语法:
select 查询列表 from 表名
特点:
①查询列表可以是:表中的字段、常量值、表达式、函数
②查询的结果是一个虚拟的表格
操作:
①查询表中的单个字段
SELECT name FROM stu;
②查询表中多个字段
SELECT stu_number,name FROM stu;
③查询表中的全部字段(也可以把每个字段一个一个列出来查询)
SELECT * FROM stu;
④查询常量值
SELECT 100;
SELECT 'john';
SELECT 100%100;
SELECT version();
2、取别名
使用AS
①SELECT 100 AS 结果;
使用空格和字段名隔开
①SELECT stu_number ‘学号’,name ‘姓名’ from stu
好处:
①便于理解
②如果要查询的字段有重复的情况,使用别名可以区分
注意:如果取的别名有特殊符号或者是数据库关键字,比如OUT,空格,#号等,需要给别名加上引号。
3、去重
在查询语句中,select后面加上distinct。
SELECT DISTINCT * FROM employee ;
4、+号的作用
作用:仅仅只有做加法运算功能。
例如:
①两个操作数都是数值型,做加法运算
SELECT 122+20;
②其中一个是字符型,会试图将字符型数值转换成数值型,成功就做加法运算,以下结果为242
SELECT "222"+20;
③其中一个是字符型,会试图将字符型数值转换成数值型,失败就会将字符型数值转换成0,在做加法运算,以下结果为20
SELECT "john"+20;
④只有有一个字符为null,结果就是null
SELECT NULL+20;
如果要把两个字符型数值连在一起,就要使用concat函数。
stu_number,name
分别是stu表中的字符型字段名
SELECT CONCAT(stu_number,`name`) from stu;
5、条件查询
语法:select 查询列表 from 表名 where 条件
分类:
①按条件表达式筛选
> < = != <> >= <=
<>:这个符号的意思是不等于的意思,又大于,又小于自然是不等于的意思。
例如:
SELECT * FROM stu WHERE age > 22;
②按逻辑表达式筛选
&& || !
and or not
例如:
SELECT * FROM stu WHERE age <> 22 AND `name` <> '小红';
③模糊查询(条件查询的一种)
like,between and,in,is null,<=>
Like:
例如:
SELECT * FROM stu WHERE `name` LIKE '%红%';
注意:like一般和通配符一起使用,常用通配符
%:代表0到多个字符,包括0
_ :代表任意单个字符
特殊情况:查询带有_的字段,需要转义
SELECT * FROM stu WHERE `name` LIKE '\_%';
between and:等价于大于等于第一个值,小于等于第二个值
SELECT * FROM stu WHERE age between 22 AND 23;
注意:可以提高语句的简洁度;包含临界点;临界值不能颠倒;
in:判断某个字段的值是否属于in列表中的某一项
例如:
SELECT age,name FROM stu WHERE stu_number in(003,002);
注意:可以提高语句的简洁度;in列表的值类型必须统一或兼容;不支持通配符
is null:为空的字段值
例如:
SELECT age,name FROM stu WHERE money IS NULL;
6、排序查询
语法:select 查询列表 from 表名 [where 条件] order by 排序列表 [ASC|DESC]
基本排序, ASC是从小到大的排序,DESC是从大到小的排序
SELECT age FROM stu ORDER BY age ASC;
按条件排序
SELECT age FROM stu WHERE age > 22 ORDER BY age ASC;
按多个字段排序,姓名长度是按照正序排列的,age是按照逆序排列的
SELECT LENGTH(`name`) 姓名长度,age FROM stu ORDER BY 姓名长度 ASC,age DESC;
特点:
①ASC表示升序;DESC表示降序;不写默认是ASC
②ORDER BY子句中支持单个字段,多个字段,函数,别名等
③ORDER BY一般是放在查询语句的最后,limit子句除外
7、组合排序
同时对多个字段进行排序,如果第 1 个字段相等,则按第 2 个字段排序,依次类推。
在 SQL 中,你可以使用 ORDER BY
子句来同时对多个字段进行排序。如果第一个字段相等,则按照第二个字段排序。
格式:
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];
例如:
SELECT column1, column2, column3
FROM table_name
ORDER BY column1, column2;
在上面的查询语句中,table_name
是你要查询的表名,column1
和 column2
是你要排序的字段名。通过在 ORDER BY
子句中指定多个字段,你可以实现按照这些字段的顺序进行排序。
8、分组查询
格式:SELECT 字段名 FROM 表名 group by 字段名 [having] 条件
例如:
SELECT sex FROM stu GROUP BY sex;
SELECT sex FROM stu GROUP BY sex HAVING sex<>'女';
注意:
having 与 where 的区别:
①对查询结果进行分组前,将不符合 where 条件的行去掉,即在分组之前过滤数据,即先过滤再分组;
②where 后面不可以使用聚合函数;
③having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤;
④having 后面可以使用聚合函数。