首先我们要明确一下我们操作的是那部分数据
电脑上有一个数据库服务器---》管理着很多个数据库(数据的集)---》很多张数据表(保存着真实的数据)---》很多数据行(记录)---》很多列(字段)
新增(CREATE)
语法:insert into 表名[字段1,字段2] values (值,值);
单行数据+全列插入 insert into 表名 values(值,值...);(简写方式,不写类名,在values列表中按照表中字段顺序设置对应的值)

指定列插入+多行数据
insert into 表名[(指定列...)] values(值[值])
一条insert语句在values部分可以跟很多个values组,每一组表示要插入的一个数据行
一次插入一条数据和一次插入多条数据哪个效率高?
1.执行所有SQL时都有网络开销(这是个不可控因素)
2.写入数据时还有磁盘IO开销
3.每执行一条SQL语句都会开启一个事务,事务的开启和关闭都会消耗系统资源
综合来看(在可控范围内)一次提交多条比一次提交一条效率高
查询(RETRIEVE)
1.全列查询
语法 select*from 表名;(*表中所有的列,这在生产环境中是十分危险的操作,因为在生产环境中,一个表中的数据量会有很多)

2.指定列查询
语法 select 列名[列名...]from 表名;

3.查询结果是一个表达式
效果就是让所有的列中都包含一个表达式的值,他本身不在我们的表中,他在临时表中(列与列也可以进行计算)

4.别名 列名+列名+列名[as]别名(别名中如果包含空格,必须用单引号引起来)

5.去重查询
关键字DISTINCT
语法:select distinct 列名 from 表名(注意:在查询结果中,每一列都相同MYSQL才认为是重复数据)


(因为id不同,所以第一个查询结果不变)
6.排序
order by(用这个子句会在查询结果中根据指定规则排序)
排序规则:1.升序 ASC 2.降序desc
语法:select 列名 from 表名 order by 列名[ASC/DESC](默认升序)
MYSQL中NULL比较特殊
1.无论和什么值运算,结果均为null;
2.NULL始终被判定为false
3.不是0
注意SQL中可以对多个字段进行排序,排序优先级与书写顺序有关(可以为不同字段设置不同的排序规则)

7.条件查询
关键词 where
根据指定的一些条件,过滤掉不符合条件的记录,把符合条件的记录返回给用户
运算符:
1.比较运算符
> >= < <= 和JAVA中用法一样
= 等于 NULL=NULL,结果为NULL !=,<>不等于
<=>等于NULL安全专门针对NULL NULL<=>NULL 结果为1
between a0 and a1 [a0,a1] 区间查询(闭区间)
in (option,..) 列表或者集合,如果是option中任意一个返回true
IS NULL /IS NOT NULL 判断是否为null
Like 模糊匹配 %表示任意多个字符 _表示一个字符(孙% 孙是第一个,后面可以有无数个,有几个_就要有多少个字符)
2.逻辑运算符
AND 类似JAVA中的&&
OR 类似JAVA中的||
NOT 类似JAVA中的!
优先级 NOT>AND>OR
建议通过小括号来指定优先级
语法 :select 列名 from表名 where 列名/表达式(必须完整)运算符 条件;
where子句中不能用别名这与MYSQL执行SQL语句的顺序有关:1.确定表 2.符号条件 3.执行select后面的指定列 4.排序

8.分页查询
关键词:LIMIT
不加限制记录条数的查询是不安全的
语法:
select 列名 from 表名 [where..][order by..] limit n offset s;(查询n条,从s开始)
修改(UPDATE)
语法:
update 表名 set column=expr[,column=expr...][where..][order by..][limit ];
只要找到符合条件的数据行就会一次性符合条件的数据行全部修改了(如果不加条件的修改表中的记录,这是非常危险的操作)

删除(DELETE)
语法:
DELETE FROM 表名[where..][order by..][limit..];
在生产过程中一般不使用DELETE操作,一般会在表中加入一个DELETEBASE字段,用来表示字段是否删除,用update更新就可以实现删除功能,实质上并未删除