SQL笔记 -- 黑马程序员

SQL目录


文章目录

  • SQL目录
  • 一、SQL分类
    • 1、DDL
    • 2、数据类型
    • 3、DML
    • 4、DQL
      • 1)基本查询
      • 2)条件查询
      • 3)聚合函数查询
      • 4)分组查询
      • 5)排序查询
      • 6)分页查询
      • 5、DCL

        一、SQL分类

        分类说明
        DDL数据定义语言,用来定义数据库对象(数据库,表,字段)
        DML数据操作语言,用来对数据库表中的数据进行增删改
        DQL数据查询语言,用来查询数据库中表的记录
        DCL数据控制语言,用来创建数据库用户、控制数据库的访问权限

        1、DDL

        1. DDL的数据库操作

          • 查询

            • 查询所有数据库

              show datadases;
              
            • 查询当前数据库

              select datadase();
              
            • 创建

              create database [if not exists] 数据库名 [default charset 字符集] [coliate 排序规则]
              
            • 删除

              drop datadase [if exists] 数据库名
              
            • 使用

              use 数据库名
              
            • DDL的表操作

              • 查询

                • 查询当前数据库所有表

                  show tables;
                  
                • 查询表结构

                  desc 表名
                  
                • 查询指定表的建表语句

                  show create table 表名
                  
                • 创建

                  create table 表名(
                  	字段1 字段1类型[comment 注释],
                  	字段2 字段3类型[comment 注释],
                  	字段3 字段4类型[comment 注释],
                  	...
                  	字段n 字段n类型[comment 注释]
                  )[comment 注释];
                  
                • 修改

                  • 添加字段

                    alter table 表名 add 字段名 类型(长度)[comment 注释][约束];
                    
                  • 修改字段的数据类型

                    alter table 表名 modify 字段名 新数据类型(长度);
                    
                  • 修改字段的数据类型

                    alter table 表名 change 旧字段名 新字段名 类型(长度)[comment 注释][约束];
                    
                  • 删除字段

                    alter table 表名 drop 字段名;
                    
                  • 修改表名

                    alter table 表名 rename to 新表名;
                    
                  • 删除

                    • 删除表

                      drop table [if exists] 表名;
                      
                    • 删除指定表,并重新创建该表

                      truncate table 表名;
                      

        2、数据类型

        • 数值型
          类型大小有符号(SIGNED)范围无符号(UNSIGNED)范围
          TINYINT1 byte(-128. 127)(0,255)
          SMALLINT2 bytes(-32768, 32767)(0.65535)
          MEDIUMINT3 bytes
          INT或INTEGER4 bytes
          BIGINT8 bytes
          FLOAT4 bytes
          DOUBLE8 bytes
          DECIMAL依赖于M(精度)和D(标度)的值依赖于M(精度)和D(标度)的值
          • 字符型
            类型大小描述
            CHAR0-255 bytes定长字符串
            VARCHAR0-65535 bytes变长字符串
            TINYBLOB0-255 bytes不超过255个字符的二进制数据
            TINYTEXT0-255 bytes短文本字符串
            BLOB0-65 535 bytes二进制形式的长文本数据
            TEXT0-65 535 bytes长文本数据
            MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据中等长度文本数据
            MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
            LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
            LONGTEXT0-4 294 967 295 bytes极大文本数据
            • 日期型
              类型大小范围格式
              DATE31000-01-01 至 9999-12-31YYYY-MM-DD
              TIME3-838:59:59至 838:59:59HH:MM:SS
              YEAR11901至2155YYYY
              DATETIME81000-01-01 00:00:00至 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS
              TIMESTAMP41970-01-01 00:00:01 至 2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS

              3、DML

              • 添加数据

                • 给指定字段添加数据

                  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 表名 set 字段名1 = 值1, 字段名2 = 值2 [where 条件];
                  

                  注意:修改语句的条件可以有,如果没有,则修改整张表的所有数据。

                • 删除数据

                  delete from 表名 [where 条件];
                  

                  注意:

                  • delete语句的条件可以有,如果没有,则修改整张表的所有数据。
                  • delete语句不能删除某一个字段的值(可以用update)

                    4、DQL

                    • 语法 — 编写循序

                      select 
                      	字段列表
                      from 
                      	表名列表
                      where
                      	条件列表
                      group by
                      	分组字段列表
                      having
                      	分组后条件列表
                      order by
                      	排序字段列表
                      limit
                      	分页参数
                      
                    • 执行顺序

                      from 表名列表
                      	where 条件列表	
                      		group by 分组字段列表
                      			having 分组后条件列表
                      				select 字段列表
                      					order by 排序字段列表
                      						limit 分页参数
                      

                      1)基本查询

                      • 查询多个字段

                        select 字段1, 字段2, 字段n from 表名;
                        
                        select * from 表名;
                        
                      • 设置别名 - as 可以不写

                        select 字段1 [as 别名], 字段2 别名, 字段n from 表名;
                        
                      • 去除重复记录

                        select distinct 字段列表 from 表名;
                        

                        2)条件查询

                        • 语法

                          select 字段列表 from 表名 where 条件列表;
                          
                        • 条件

                          比较运算符功能
                          <> 或 !=不等于
                          between … and …某个范围之内(含最小,最大值)
                          is null空,null
                          in()在in之后的列表中的值,多选一
                          like 占位符模糊匹配( _ 匹配单个字符,% 匹配任意字符)
                          ’ ‘ 单引号。‘___’ ‘%’
                          逻辑运算符功能
                          and 或 &&并且
                          or 或 ||或者
                          not 或 !

                          3)聚合函数查询

                          • 将一列数据作为一个整体,进行纵向计算。

                            函数功能
                            count统计数量
                            max最大值
                            min最小值
                            avg平均值
                            sum求和
                          • 语法

                            select 聚合函数(字段列表) from 表名;
                            

                            NULL 不进行计算。

                            4)分组查询

                            • 语法

                              select 字段列表 from [where 条件] group by 分组字段名 [having 分组后过滤条件];
                              
                            • where与having区别

                              执行时机不同: where是分组之前进行过滤不满足where条件,不参与分组;而having是分组之后对结果进行过滤。

                              判断条件不同::where不能对聚合函数进行判断,而having可以。

                            • 注意

                              执行顺序::where > 聚合函数 > having 。

                              分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

                              5)排序查询

                              • 语法

                                select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2;
                                
                              • 排序方式

                                • asc — 升序(默认)
                                • desc — 降序
                                • 注意:

                                  如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

                                  6)分页查询

                                  • 语法

                                    select 字段列表 from 表名 limit 起始索引, 查询记录;
                                    
                                  • 注意

                                    • 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数。
                                    • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
                                    • 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 查询记录。

                                      5、DCL

                                      • 管理用户

                                        • 查询用户

                                          use mysql;
                                          select * from user;
                                          
                                        • 创建用户

                                          create user '用户名'@'主机名' identified by '密码';
                                          create user '用户名'@'%' identified by '123456';# 任意主机用%表示
                                          
                                        • 修改用户密码

                                          alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
                                          
                                        • 删除用户

                                          drop user '用户名'@'主机名';
                                          

                                          注意:

                                          1. 主机名可以使用 % 通配。
                                        • 权限控制

                                          权限说明
                                          all, all privileges所有权限
                                          select查询数据
                                          insert插入数据
                                          update修改数据
                                          delete删除数据
                                          alter删除表
                                          drop删除数据/表/视图
                                          create创建数据库/表
                                          • 查询权限

                                            show grants for '用户名'@'主机名';
                                            
                                          • 授予权限

                                            grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
                                            
                                          • 撤销权限

                                            revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
                                            

                                            注意:

                                            1. 多个权限之间,用逗号分隔开。
                                            2. 授权时,数据库名和表名可以使用 * 进行通配,表示所有。