数据库笔记01
ps:本文章只是个人的笔记,不喜勿喷,若发现问题还望及时私信我,谢谢
关于SQL语句的分类
DQL
数据查询语言(凡是带有select关键字的都是查询语句)关键字:select
DML
数据操作语言(凡是对表中的数据进行增删改的都是DML)关键字:insert
delete
update
DDL
数据定义语言(凡是带有create,drop,alter的都是DDL,DDL主要操作的是表的结构,不是对表的数据)
TCL
事务控制语言,包括:事务回滚rollback
,事务提交commit
DCL
是对数据控制的语言:例如“授权”--grant
,“撤销授权”--revoke
基本知识
-
行:row,列:column
-
数据库中主要的结构是表:table
-
在数据库中导入某一存在的数据库文件:
source 路径
,ps:路径中尽量不要出现中文 -
怎么查看表中的数据:
select * from 表名;
-
不看表中的数据,只看表中结构:
describe 表名;
这里可以简写问
desc
MySQL常用命令
- 创建数据库:
create database ......;
- 查看数据库:
show databases;
- 查看数据库的version:
select version;
- 查看某一个数据库中表:
show tables;
- 查看现在使用的某一数据库:
show database();
- 结束某一语句:
\c
- SQL不区分大小写,一般以
;
结尾
简单查询
-
查询一个字段:
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