DDL(数据定义语言)
查询
- 查询所有数据库:
show databases;
- 查询当前数据库:
select database();
- 查询当前数据库所有表:
show tables;
- 查询表结构:
desc 表名;
- 查询建表语句:
show create table 表名;
- 查询所有数据库:
使用
- 使用数据库:
use 数据库名;
- 使用数据库:
创建
创建数据库:
create database [if not exists] 数据库名;
创建表操作
create table 表名( 字段1 字段类型 [约束] [comment 字段1注释], ... 字段n 字段类型 [约束] [comment 字段2注释] )[ comment 表注释];
约束
概念:约束是作用域表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确性、有效性和完成性
约束 描述 关键字 非空约束 限制该字段值不能null not null 唯一约束 保证字段的所有数据都是唯一、不重复的 unique 主键约束 主键是一行数据的唯一标识,要求非空且唯一 primary key (自动增长) 前提:必须是主键,自动增长 auto_increment 默认约束 保存数据时,如果未指定该字段值,采用默认值 default 外键约束 让两张表的数据建立连接,保证数据的一致性和完整性 foreign key
数据类型
删除
- 删除数据库:
dorp database [if exists] 数据库名;
- 删除表:
drop table [if exists] 表名;
- 删除数据库:
修改
- 添加字段:
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
- 修改字段类型:
alter table 表名 modify 字段名 新数据类型(长度)
- 修改字段名或字段类型:
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
- 删除字段:
alter table 表名 drop column 字段名;
- 修改表名:
rename table 表名 to 新表名;
- 添加字段:
注意事项:上述语句中的database,也可以替换成schema。如:create schema db01;
(databases不可以这样)
DML(数据操作语言)
insert语法
- 指定字段添加数据:
insert into 表名 (字段名1,字段名2) values (值1, 值2);
- 全部字段添加数据:
insert into 表名 values (值1, 值2, ...);
- 批量添加数据(指定字段):
insert into 表名 (字段名1, 字段名2) values (值1, 值2), (值1, 值2);
- 批量添加数据(全部字段):
insert into 表名 values (值1, 值2, ...), (值1, 值2, ...);
注意事项:
- 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
- 字符串和日期型数据应该包含在引号中。
- 插入的数据大小,应该在字段规定的范围内。
- 指定字段添加数据:
update语法
- 修改数据:
update 表名 set 字段名1 = 值1, 字段名2 = 值2, ... [where 条件];
注意事项:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
- 修改数据:
delete语法
- 删除数据:
delete from 表名 [where 条件];
注意事项:
- DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
- DELETE语句不能删除某一个字段的值(如果要操作,可以使用UPDATE,将该字段的值置为NULL)。
- 删除数据:
DQL(数据查询语言)
基本查询
- 查询多个字段:
select 字段1, 字段2, 字段3 from 表名;
- 查询所有字段(通配符):
select * from 表名;
- 设置别名:
select 字段1 [as 别名1], 字段2 [as 别名2] from表名;
(as关键字可以省略) - 去除重复记录:
select distinct 字段列表 from 表名;
- 查询多个字段:
条件查询(where)
语法:
select 字段列表 from 表名 where 条件列表;
比较运算符
比较运算符 功能 > 大于 >= 大于等于 < 小于 <= 小于等于 = 等于 <> 或 != 不等于 between … and … 在某个范围之内(含最小、最大值) in( … ) 在in之后的列表中的值,多选一 like 占位符 模糊匹配(_匹配单个字符,%匹配任意个字符) is null 是null 逻辑运算符
逻辑运算符 功能 and 或者 && 并且(多个条件同时成立) or 或者 || 或者(多个条件任意一个成立) not 或 ! 非,不是
分组查询(group by)
聚合函数
介绍:将一列数据作为一个整数,进行纵向计算。
语法:
select 聚合函数(字段列表) from 表名;
函数 功能 count 统计数量 max 最大值 min 最小值 avg 平均值 sum 求和 - 注意事项
- null值不参与所有聚合函数运算。
- 统计数量可以使用:count(*) count(字段) count(常量),推荐使用count(*)
- 注意事项
分组查询
- 语法:
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤的条件];
- where与having区别
- 执行时机不同:where是分组之前进行过滤,不满足where条件,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
- 判断条件不同:where不能对聚合函数进行判断,而having可以。
- 注意事项
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
- 执行顺序:where > 聚合函数 > having
- 语法:
排序查询(order by)
条件查询:
select 字段列表 from 表名 [where 条件列表] [group by 分组字段] order by 字段1 排序方式, 字段2 排序方式;
排序方式:
- ASC:升序(默认值)
- DESC:降序
注意事项
如果是多个字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
分页查询(limit)
- 语法:
select 字段列表 from 表名 limit 起始索引,查询记录数;
- 注意事项
- 其实索引从0开始, 起始索引 = ( 页码 − 1 ) ∗ 每页展示记录数 起始索引 = (页码 - 1) * 每页展示记录数 起始索引=(页码−1)∗每页展示记录数
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
- 如果查询的是第一页数据,起始索引可以省略,直接简写为limit n。
- 语法:
案例设计
根据需求,完成员工性别信息的统计
select if(gender = '1' ,'男性员工', '女性员工') as 性别, count(*) from tb_emp group by gender;
根据需求,完成员工职位信息的统计
select (case job when 1 then '班主任' when 2 then '讲师' when 3 then '学工主管' when 4 then '教研主管' else '未分配职位' end) as 职位, count(*) from tb_emp group by jog;
流程控制函数
if(表达式,tvalue,fvalue)
:当表达式为true时,取值tvalue;当表达式为false时,取值fvaluecase expr when value1 then result1 [when value2 then value2 ...] [else result] end