ps:本文章只是个人的笔记,不喜勿喷,若发现问题还望及时私信我,谢谢
数据查询语言(凡是带有select关键字的都是查询语句)关键字:select
数据操作语言(凡是对表中的数据进行增删改的都是DML)关键字:insert
delete
update
数据定义语言(凡是带有create,drop,alter的都是DDL,DDL主要操作的是表的结构,不是对表的数据)
事务控制语言,包括:事务回滚rollback
,事务提交commit
是对数据控制的语言:例如“授权”--grant
,“撤销授权”--revoke
行:row,列:column
数据库中主要的结构是表:table
在数据库中导入某一存在的数据库文件:source 路径
,ps:路径中尽量不要出现中文
怎么查看表中的数据:
select * from 表名;
不看表中的数据,只看表中结构:
describe 表名;
这里可以简写问desc
create database ......;
show databases;
select version;
show tables;
show database();
\c
;
结尾查询一个字段:select 字段名 from 表名;
查询多个字段:select * from 表名;
(使用*即查询全部,但是这样查询的效率比较低,可读性也比较差)
起别名和python中类似,利用as
,别名中存在的有空格,可以将别名用引号括起来,一般推荐使用''
,在这里as其实也可以用
空格进行替代。
select ....as .... from 表名;
字段中可以使用数学表达式,别名是中文字符是可以使用''
顾名思义,就是在查询的时候附带的有条件来进行限制查询
语法格式:
select .... from .... where 条件;
条件 | 表示 |
---|---|
等于 | = |
不等于 | != |
两个之间 | >=a and <=b 或者 between...and.... |
包含 | in(多个参数用, 进行隔开) ps:这个也就相当于多个or |
或者 | or |
并且 | and |
模糊查询 | like % 匹配任意字符 _ 匹配一个字符(查询_ 时利用转义字符\ 即可正常查询 ) |
查询NULL | is (在数据库中NULL不能使用= ,需要使用is NULL ,因为NULL这里不是一个值) |
在某一次筛选中需要同时用到and,or,and会优先于or进行执行,因为and的优先级比or的高
利用关键字order by
,来进行排序
一般默认升序,降序在其后面加上desc
关键字即可
多个字段的排序,即字典序,就是在此字段下相同时,按照下一个字段进行排序。order by 字段1,字段2;
,这里字段之间用,
进行隔开
关键字查询的顺序:from => where => select => order by,也就是说一般而言,排序是放在最后面
语法格式:
select ... from ... where ....order by ...;
Ps:单行处理函数是一个输入一个输出,多行处理函数是多个输入一个输出。
常见的单行处理函数:lower;upper;substr取子串:substr(被取的字符串,起始位置,在数据库中不存在起始位置为0的位置,长度);concat进行字符串的拼接;length取长度;trim去掉空格;str_to_date
字符串-->日期;date_format
格式化日期;format设置千分位;round进行四舍五入:round(数or数字字段,保留的位数一般为正数当其为负数时也就是向小数点左边移动);rand()随机数;ifnull可以将null值转化为一个具体的值,当进行运算的数值中存在null时,那么运算的结果也是null,ifnull中存在两个参数(字段,为null时替换的值)
注:select 字符串 from 表名;
,(这里的字符串要包含引号)其结果是:
mysql> select 'hello' name from emp;
+-------+
| name |
+-------+
| hello |
| hello |
| hello |
| hello |
| hello |
+-------+
所以总的来说,select后面可以跟的东西有:字段名,字符串;
补充:
case...when...then........else...end;
在sql语句中还存在这样的一个语句,类似于编程语言中的if..else if...else
。
分组函数包括5个:sum,max,min,avg,count,(博客园中不支持公式渲染,难受)
注意:1. 先分组,才能够进行使用分组函数 2.没有分组时,默认为一组
- 分组函数会自动忽略null
- count(某一个字段)统计该字段下不是null的个数,count(*)统计所有的行数
- 分组函数不能够用在where后面
在一些情况下,需要先进行分组然后才能够进行查询
语法格式:
select...from...where...group by...order by...;
执行顺序:from=>where=>group by=>having=>select=>order by
一般建议使用group by之后查询的字段是:分组的字段or分组函数,使用其他的字段是毫无意义的,在其他的数据库中是会报错的。
多个字段进行分组的话直接在group by中加入一个,
即可
使用having
可以对已经分完的组进行过滤筛选,一般推荐优先选择where
这分组之前就将其筛选好,实在不行才推荐使用having