DML操作表和DQL查询表(学会并使用数据库day2)

DML操作表中数据

DML操作是用于对表中的记录进行增删改操作。

1 .插入操作

# 格式
INSERT [INTO] 表名 [字段名] VALUES (字段值);

解析:

INSERT INTO 表名:表示往哪张表中添加数据

(字段名 1, 字段名 2, …):要给哪些字段设置值

VALUES (值 1, 值 2, …):设置具体的值

  1. 插入全部字段–方法一(所有的字段名都写出来)
# 格式
INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3);
# demo
insert into employee (id,name,birthday) values (1, '孙悟空', '1999-12-09');
  1. 插入全部字段–方法二(不写字段名)
# 格式
INSERT INTO 表名 VALUES (值 1, 值 2, 值 3);
# demo
insert into employee values (2, '猪八戒', '1999-12-10');
  1. 插入部分数据
# 格式
INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);
# demo
insert into employee (id,name) values (1, '孙悟空');

注意

  1. 没有添加数据的字段会使用 NULL;
  2. 插入的数据应与字段的数据类型相同;
  3. 数据的大小应在列的规定范围内,例如:不能将一个长度为 80 的字符串加入到长度为 40 的列中;
  4. 在 values 中列出的数据位置必须与被加入的列的排列位置相对应。在 mysql 中可以使用 value,但
    不建议使用,功能与 values 相同;
  5. 字符和日期型数据应包含在单引号中,MySQL 中也可以使用双引号;
  6. 不指定列或使用 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:符合条件的记录才更新
  1. 不带条件修改(会修改所有字段的值)
# 格式
UPDATE 表名 SET 字段名=值;
# demo
update employee set name ='小明';
  1. 带条件修改(修改满足条件的部分列值)

    # 格式
    UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
    # demo
    update employee set name ='john' where id=2;
    

    4.删除表中的数据

# 格式
DELETE FROM 表名 [WHERE 条件表达式]
解析:
DELETE from 表名:从哪个表中删除记录
WHERE: 符合条件的记录才删除
  1. 不带条件删除数据(会删除所有记录)
# 格式
DELETE FROM 表名;
# demo
delete from employee;
  1. 带条件删除数据
# 格式
DELETE FROM 表名 WHERE 字段名=值;
# demo
delete from employee where name ='小明';

3.使用truncate进行删除记录

# 格式
TRUNCATE TABLE 表名;
 TRUNCATE TABLE employee;

注意

如果使用truncate进行删除记录,相当于删除表的结构,再创建一张表

truncate和delete的区别

  1. truncate是用于清空表中的数据;delete不加条件是删除表中数据;

  2. 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 是你要查询的表名,column1column2 是你要排序的字段名。通过在 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 后面可以使用聚合函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yjg_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值