SQL
1、SQL通用语法
1. SQL语句可以使用单行或多行书写,用分号结尾
2. 可使用空格和缩进来增强语句的可读性
3. MySQL数据库不区分大小写,关键字建议使用大写
4. 3种注释方式:--,#,/* */
2.SQL分类
1. DDL(Data Definition Language):操作数据库、表
2. DML(Data Manipulation Language):增删改表中的数据
3. DQL(Data Query language):查询表中的数据
4. DCL(Data Control Language)
DDL:操作数据库、表
1)操作数据库 CRUD
1.C(Create)
* create database if not exists db3 character set gbk;
创建db3数据库,判断是否存在,并指定字符集为GBK
2.R(Retrieve)
* 查询所有数据库的名称
* show databases
* 查询某个数据库的字符集,查询某个数据库的创建语句
* show create database 数据库名称;
3.U(Update)
* 修改数据库的字符集
* alter database 数据库名称 character set 字符集名称;
4.D(Delete)
* drop database 数据库名称;
5.使用数据库
* 查询当前正在使用的数据库名称
* select database();
* 使用数据库
* use 数据库名称;
2)操作表:CRUD
1.C
* 创建表:create table 表名(
列名1 数据类型1,
列名2 数据类型2,
...........
列名n 数据类型n
);
* 复制表: create table 表名1 like 表名2;
* 注意:最后一列不需要逗号(,);
* 数据类型:
* int
* double
* date:日期,只包含年月日,yyyy-mm-dd
* datetime:日期,包含年月日时分秒 yyyy-mm-dd hh:mm:ss
* timestamp:时间戳
* varchar:字符串类型
2.R
* 查询某个数据库中所有表的名称
* show tables;
* 查询表的结构
* desc 表名;
3.U
* 修改表名:alter table 旧名 rename to 新名
* 修改表的字符集: alter table 表名 character set 字符集
* 添加列:alter table 表名 add 列名 数据类型1
* 修改列名 类型:
alter table 表名 change 列名 新列名 新数据类型:类名和数据类型都改
alter table 表名 modify 列名 新数据类型:只改数据类型
* 删除列:
alter table 表名 drop 类名
4.D:
* 删除表:drop table (if exists) 表名
DML:增删改表中的数据
1)增加数据
* 语法:insert into 表名(列名1,列名2,.......)values(值1,值2,.........)
* 注意:
1.列名和值要一一对应
2.除了数字类型,其他类型需要使用引号包围(单双都可以)
2)删除数据
* 语法:delete from 表名 where 条件
* 注意:
1.不加条件,则会删除所有记录
2.若要清空表,用truncate table 表名;
3)修改数据
* 语法: update 表名 set 列名1 = 值1,列名2=值2,......... where 条件
* 注意:
1.如果不加条件,则表中所有数据都会被修改
DQL:查询表中的数据
1)排序查询
* 语法:order by 子句
* select * from 表名 order by 排序字段1 排序方式1,排序字段2 排序方式2........
* 排序方式:
* ASC:升序,默认
* DESC:降序
* 注意:如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件
2)聚合函数:将一列数据作为一个整体,进行纵向计算
* count:计算个数
* 一般选择非空的列:主键
* max:计算最大值
* min:计算最小值
* sum:计算和
* avg :计算平均数
* 注意:聚合函数的计算,排除null值
解决方案:
1、选择不包含非空的列进行计算
2、IFNULL函数
3)分组查询:统计具有相同特征的某一类数据
1.语法: select 分组字段/聚合函数 from 表名 group by 分组字段;
2.注意:
* 分组之后查询的字段:分组字段,聚合函数
* where 和having的区别?
where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来。
* where后不能跟聚合函数,Having后可以进行聚合函数的判断
4)分页查询
1. 语法:limit 开始的索引,每页查询的条数;
公式:开始的索引 = (当前的页码 - 1)* 每页显示的条数
2. 分页操作是一个“方言”
1.查询语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
2.基础查询
1. 多个字段的查询
select 字段名1,字段名2,字段名3.....from 表名;
2. 去除重复
* select distinct
3. 计算列
* 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
* ifnull(表达式1,表达式2):null参与的运算,计算结果都为Null
其中的:
表达式1:哪个字段需要判断是否为null
表达式2:为null时所替换的值
4. 起别名:
* as
3.起别名
1. where子句后跟条件
2. 运算符
* Between … and ...
* in
* like:模糊查询
* is null
* &&
* ||
* !