目录
一、SQL语句分类
1、DDL(Data Definition Language):数据定义语言,用来定义数据库对象,如数据库、表、列等等。关键字:create、drop、alter等等。
2、DML(Data Manipulation Language):数据操作语言,用来对数据库表中的数据进行增删改。关键字:insert、delete、update等等。
3、DQL(Data Query Language):数据查询语言,用来查询数据库中表的记录(数据)。关键字:select、where等等。
4、DCL(Data Control Language):数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT、REVOKE等等。
二、各类语句具体用法
1、DDL(操作数据库)
(1.1)C(create):创建
①创建数据库
create database 数据库名称;
②创建数据库时,判断不存在,再创建
create database if not exists 数据库名称;
③创建数据库,并指定字符集
create database 数据库名称 character set 字符集名;
(1.2)R(retrieve):查询
①查询所有数据库的名称
show databases;
②查询某个数据库的字符集,即查询某个数据库的创建语句
show create database 数据库名称;
(1.3)U(update):修改
①修改数据库的字符集
alter database 数据库名称 character set 字符集名称;
(1.4)D(delete):删除
①删除数据库
drop database 数据库名称;
②判断数据库存在,存在再删除
drop database if exists 数据库名称;
2、DDL(操作表)
(2.1)C(create):创建
①语法格式:
create table 表名(
列名1 数据类型1 NOT NULL AUTO_INCREMENT,
列名2 数据类型2,
...
列名n 数据类型n,
PRIMARY KEY(主键列名)
);
AUTO_INCREMENT:定义列的自增属性,一般用于主键,新增一行数据时该列的值会自动加1。
②复制表
create table 表名 like 被复制的表名; //只复制表结构
create table 表名 select * from 被复制的表名; //复制表结构及数据
(2.2)R(retrieve):查询
①查询某个数据库中所有的表名称
show tables;
②查询表结构
desc 表名;
(2.3)U(update):修改
①修改表名
alter table 表名 rename to 新的表名;
②修改表的字符集
alter table 表名 character set 字符集名称;
③添加一列
alter table 表名 add 列名 数据类型;
④修改列名称、类型
alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;
⑤删除列
alter table 表名 drop 列名;
(2.4)D(delete):删除
①删除表
drop table 表名;
drop table if exists 表名;
3、DML(增删改表中数据)
(3.1)插入数据
①语法格式:
insert into 表名 (列名1, 列名2, ... 列名n) values (值1, 值2, ... 值n);
注意:如果表名后不指定列名,则默认给所有列插入值,即values括号内每个列的值都要定义好。
(3.2)删除数据
①语法格式:
delete from 表名 where 条件;
注意:如果不加条件,则删除表中所有数据。
如果要删除所有数据,建议使用:
truncate table 表名;
(3.3)修改数据
①语法格式:
update 表名 set 列名1 = 值1, 列名2 = 值2,... where 条件;
注意:如果不加任何条件,则更新表中所有数据。
4、DQL(查询表中的数据)
(4.1)语法格式
select 字段 from 表名
where 条件
group by 分组 having 分组后的条件
order by 排序
limit 分页限定
(4.2)基础查询
①多个字段的查询
select 字段名1, 字段名2, ... from 表名;
查询所有字段可以使用:
select * from 表名;
②去除重复的结果集
select distinct 字段名 from 表名;
③计算列
sql语句中有许多方便查询的函数,后续会单独写一篇关于常用函数的博客,这里以ifnull为例。
ifnull(表达式1, 表达式2)
表达式1:需要判断是否为null的字段名
表达式2:该字段为null时要替换的值
④起别名
使用as或者直接空格
例如:
//使用as
select math as M,
english as E
from student;
//直接空格
select math M,
english E
from student;
(4.3)条件查询
条件查询即where子句后跟查询条件
常见运算符:
>大于 <小于 >=大于等于 <=小于等于 =等于 <>不等于
between...and and
in or
is null is not null 等等
聚合函数:count max min sum avg 等等
模糊查询:like 占位符:①下划线 _ :单个任意字符
②百分号 % :多个任意字符
例如:
select * from student where name like '马%'; //查询所有姓马的同学
select * from student where name like '_马%'; //查询名字里第二个字是马的同学
(4.4)分组查询
①语法格式:group by 分组字段;
将查询结果按照1个或多个字段进行分组,字段值相同的为一组。
例如:
//根据性别分组,查询男生和女生的数学平均分
select sex, AVG(math) from student group by sex;
②where和having的区别:
where在分组前进行限定,若不满足条件则不参与分组。
having在分组后进行限定,若不满足条件,则不会被查询出来。
where后不能跟聚合函数,having可以进行聚合函数的判断。
(4.5)排序查询
①语法格式:
order by 排序字段1 排序方式1, 排序字段2 排序方式2, ... ;
②排序方式:
ASC:升序,默认
DESC:降序
(4.6)分页查询
①语法格式:
limit 开始的索引, 每页查询的条数;
②公式:
开始的索引 = (当前页码 - 1)* 每页查询的条数
例如:
select * from student limit 0,3; //第1页
select * from student limit 3,3; //第2页
limit是MySQL的“方言”。