- 对表中的数据操作分为4大类,增加数据,删除数据,查找数据,修改数据。
- 对表中的数据进行增删查改操作简称为CRUD。Create(增),Retrieve(查找),Updata(修改),Delete(删除)
- CRUD的操作是对表中的数据进行操作的,是SQL语句中的DML(Data Manipulation Language)数据操作语言。
Create操作
对表中新增数据,SQL语法为:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
table_name
是要插入数据的表的名称。(column1, column2, column3, ...)
是要插入数据的列的列表。如果省略列名列表,则应提供值的完整列表,按照表中列的顺序插入值。VALUES
关键字后面跟着括号内的值列表,这些值按照列的顺序与列名对应。
使用案例
首先创建一张表,表中包含id
,name
,age
列。 id做为主键且自增。
- 单行数据+全列插入
单行数据的全列插入,可以省略列名列表,直接在 INSERT INTO 语句中指定 VALUES 语句。比如对上面进行全列插入
insert into user values (2,'李四',18);
- 多行数据+指定列插入
当有多行数据时,values
后面加逗号分隔符 并且在表名后面指定插入的列。 比如对上面的user表插入多行数据,指定name和age列。
insert into user(name,age) values ('王五',19),('赵六',20),('田七',29);
- 插入时更新
插入时由于主键已经存在,插入相同的值会导致插入失败。可以选择进行同步更新操作。
比如下表插入数据时,由于主键已经存在导致插入失败。
此时可以选择性的进行同步更新操作语法:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...)
ON DUPLICATE KEY UPDATE 列名 = value [, column = value] ...
比如对上表id为1的更新为name为周八,age为19的。
insert into user values (1,'周八',17) on duplicate key update name='周八',age=19;
- 替换
当主键和唯一键没有冲突时就直接插入。
如果主键和唯一键冲突,那么先删除在进行插入。
语法和insert一样,就是把insert换为replace。
比如上表替换周八为张三。
replace into user(id,name,age) values(1,'张三',19);
Retrieve操作
在表中查找数据,语法为
SELECT column1, column2, ...
FROM table_name
WHERE condition;
column1, column2, ...
是要检索的列名,可以是表中的任何列,也可以是表达式或聚合函数的结果。table_name
是要从中检索数据的表的名称。condition
是可选的 WHERE 子句,用于指定筛选条件,只有满足条件的行才会被检索。
使用案例
- 创建一个表用来模拟成绩表,表中包含学号,姓名,数学和计算机成绩列。
2. 向表中插入一批数据
- select全列查询
全列查询一般使用select * form 表名查询即可。 - 指定列查询
比如只查询id,name和math
select id,name,math from exam_tb;
- 查询字段为表达式
比如查询一下math和computer的成绩和
select id,name,math+cpmputer from exam_tb;
也可以将查询结果指定别名 比如将math和computer重命名为total
select id,name,math+cpmputer as total from exam_tb;
as可以省略
- 查询结果去重
使用distinct关键字进行去重
WHERE条件
在使用SELECT进行查询时,还可以使用WHERE条件进行筛选。有条件就会有比较和逻辑运算符。
MySql提供的比较运算符如下:
逻辑运算符
使用案例
先创建一个表,在表中插入一些数据。
筛选数学成绩大于80的。
筛选数学成绩在80-90的。
筛选成绩是99或者88的同学
筛选姓王的
还可以使用字段进行比较,比如筛选计算机成绩好于数学的。
使用as重命名的字段不能作为where筛选条件
null查询
与null进行比较的时候使用=
和!=
是不安全的,比较的结果是null。但是比较的结果只有真假两个结果。直接使用=
和!=
是不安全的。
使用<=>比较是安全的。但是null是0是1,也是未定义的,和0和1比较的结果都是1。