语句分类
DQL:(*)
数据查询语言 (凡是带有select关键字的都是查询语句)
DML:(*)
数据操作语言 (凡是对表中的数据进行增删改的都是DML)
DML主要是操作表中的数据
insert 增
delete 删
update 改
DDL:
数据定义语言 (凡是带有create、drop、alter的都是DDL)
DDL 主要操作的是表的结构,不是表中的数据
create 新建,等同于增
drop 删除
alter 修改
TCL:
事务控制语言
事务提交 commit
事务回滚 rollback
DCL:
数据控制语言
授权 grant
撤销权限 revoke
- - - - - -
常用命令 (sql语句不区分大小写)
退出MySQL: exit
查看MySQL中有哪些数据库: show databases; (以分号结尾,分号是英文的分号)
选择使用某个数据库: use 数据库名称;
创建数据库: create database 数据库名称;
查看某个数据库下有哪些表: show 数据库名称;
查看MySQL的数据库版本号: select version();
查看当前使用的是那个数据库: select database();
MySQL 是不看见分号不执行,分号表示结束
\c 用来终止一条命令的输入
查询表中的数据: select * from 表名;
查询表的结构: desc 表名; (desribe的缩写)
简单查询
查询一个字段
select 字段名 from 表名;
select和from都是关键字;
字段名和表名都是标识符。
查询两个字段或多个字段
用逗号隔开
查询所有字段
1. 把所有字段都写上,用逗号隔开
2.使用 * (效率低,可读性差)
给查询的列起别名
select 列名 as 别名 from 表名; (as关键字只是将显示的查 询结果改变,原表是不变的)
as关键字可以省略
起别名有空格可以用单引号
字段可以使用数学表达式
select语句永远都不会进行修改操作
数据库中的字符串都是用单引号(标准)
条件查询
语法格式
select 字段1,字段2,字段3...... from 表名 where 条件;
在数据库当中null不能使用等号衡量,需要使用 is null
and 和 or 同时出现,and 优先级较高,想让 or 先执行需要加小括号
in 不是一个区间,小括号里面是具体的值
like (模糊查询,支持 % 和 下划线 匹配)
% 匹配任意多个字符
下划线,一个下划线匹配一个字符
(% 是一个特殊符号,_ 也是一个特殊符号)
排序
select 字段 from 表名 order by 字段; (默认是升序)
select 字段 from 表名 order by 字段 desc; (指定降序)
select 字段 from 表名 order by 字段 asc; (指定升序)
多个字段排序
select 字段1,字段2 from 表名 order by 字段1 asc,字段2 asc; (字段1在前起主导,只有字段1相 等的时候,才会考虑启用字段2排序)
数据处理函数
又称为单行处理函数
特点 :一个输入对应一个输出
常见的单行处理函数
lower 转换大小
upper 转换大写
substr 取子串(substr (被截取的字符串,起始下标,截取的长度)起始下标从1开始)
length 取长度
trim 去空格
str_to_date 将字符串转变为日期
date_format 格式化日期
format 设置千分位
round 四舍五入
rand() 生成随机数
ifnull 可以将null转换成一个具体值
null只要参与运算,最终结果都是null
concat 字符串拼接
case...when...then...when...then...else...end (相当于if语句)
分组函数
多行处理函数
特点:多个输入对应一个输出
常见的多行处理函数
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
分组函数在使用的时候必须先进行分组,然后才能使用
如果未分组整张表默认为一组
- 分组函数自动忽略null
- count(*) 统计表中的总行数
count(具体字段) 统计该字段下不为null的元素的总数 - 分组函数不能直接使用在where子句中(where在执行的的时候还未分组 )
- 所有的分组函数可以组合起来一起用
分组查询
select ... from ... group by ...
执行顺序
select ... from ... where ... group by ... order by ...
- from
- where
- group by
- select
- order by
使用having可以对分完组的数据进行进一步过滤
- having不能单独使用
- having不能替代where
- having必须和group by联合使用
优化策略:where和having优先选择where,where实在完成不了的使用having
总结
select ... from ... where ... group by ... having ... order by ...
执行顺序
- from
- where
- group by
- having
- select
- order by