id="c_n9"width="1920"height="990"style="position: fixed; top: 0px; left: 0px; z-index: -1; opacity: 0.5;">

数据库笔记01

数据库笔记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

  • 在数据库中导入某一存在的数据库文件(这里其实也就是一个SQL脚本文件,包含了若干的SQL语句):source 路径,ps:路径中尽量不要出现中文

  • 怎么查看表中的数据:

    select * from 表名;
    
  • 不看表中的数据,只看表中结构:

    describe 表名;
    

    这里可以简写问desc

MySQL常用命令

  1. 创建数据库:create database ......;
  2. 查看数据库:show databases;
  3. 查看数据库的version:select version;
  4. 查看某一个数据库中表:show tables;
  5. 查看现在使用的某一数据库:show database();
  6. 结束某一语句:\c
  7. SQL不区分大小写,一般以;结尾

简单查询

  1. 查询一个字段:select 字段名 from 表名;

  2. 查询多个字段:select * from 表名; (使用*即查询全部,但是这样查询的效率比较低,可读性也比较差

  3. 起别名和python中类似,利用as,别名中存在的有空格,可以将别名用引号括起来,一般推荐使用'',在这里as其实也可以用 空格进行替代。

    select ....as .... from 表名;
    
  4. 字段中可以使用数学表达式,别名是中文字符是可以使用''

条件查询

  1. 顾名思义,就是在查询的时候附带的有条件来进行限制查询

  2. 语法格式:

    select ....
    from ....
    where 条件;
    
  3. 条件 表示
    等于 =
    不等于 !=
    两个之间 >=a and <=b 或者 between...and....
    包含 in(多个参数用,进行隔开) ps:这个也就相当于多个or
    或者 or
    并且 and
    模糊查询 like %匹配任意字符 _匹配一个字符(查询_时利用转义字符\即可正常查询 )
    查询NULL is (在数据库中NULL不能使用=,需要使用is NULL,因为NULL这里不是一个值)
  4. 在某一次筛选中需要同时用到and,orand会优先于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.没有分组时,默认为一组

  1. 分组函数会自动忽略null
  2. count(某一个字段)统计该字段下不是null的个数,count(*)统计所有的行数
  3. 分组函数不能够用在where后面

分组查询

在一些情况下,需要先进行分组然后才能够进行查询

语法格式:

select...from...where...group by...order by...;

执行顺序:from=>where=>group by=>having=>select=>order by

一般建议使用group by之后查询的字段是:分组的字段or分组函数,使用其他的字段是毫无意义的,在其他的数据库中是会报错的。

多个字段进行分组的话直接在group by中加入一个,即可

使用having可以对已经分完的组进行过滤筛选,一般推荐优先选择where这分组之前就将其筛选好,实在不行才推荐使用having

posted @ 2022-01-30 11:15  hellozmc  阅读(57)  评论(0编辑  收藏  举报