• MySQL小记——DDL、DML、DQL


    目录

    数据库概念

    关系型数据库

    MySQL使用

    SQL语言

    sql分类

    DDL:操作数据库和表

    操作数据库

    操作表

    DML:数据操作语言,用来增删改数据库记录

    1.插入数据

    2.删除数据

    3.修改数据

    DQL:查询

    条件查询

    模糊查询

    字段的运算和去重

    排序 order by

    聚合函数

    分组 group by 

    分页 limit


    数据库概念

    存储数据的仓库,用于存储和管理数据

    关系型数据库

    由行和列组成的这种二维表,而且表和表之间有对应关系。

    MySQL就是关系型数据库的一种。


    MySQL使用

    1.登录

    cmd-->mysql -uroot -p密码

    2.退出

    exit


    SQL语言

    结构化查询语言

    通过sql语言可以操作所有的关系型数据库。每种数据库之间会存在差异,称为 "方言"。

    sql分类

    DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
    DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(增、删、改)
    DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
    DQL(Data Query Language):数据查询语言,用来查询记录(数据)。


    DDL:操作数据库和表

    操作数据库

    创建:create database 数据库名称;

    删除:drop database 数据库名称;

    修改字符集:alter database 数据库名称 character set gbk;

    查询:show databases;   查询所有数据库名称

                show create database 数据库名称;      查看建库语句,可以看到编码

    切换库:use 库名

    操作表

    就是创建表头(列,字段)

    常见字段的数据类型:

         int:整型 id int,
         * double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;     money double(5,2)
          char(10):固定长度字符串类型;
          name char(10)        "张三"
          varchar(10):可变长度字符串类型;
           例:name varchar(10)    "张三"             
           text:字符串类型;存大格式的文本 比如存个小说 一般不用
           blob:字节类型;存字节类型的数据  比如电影字节  图片字节 但是一般不会把字节数据存到数据库当中
            date:日期类型,格式为:yyyy-MM-dd; 2020-10-12
            time:时间类型,格式为:hh:mm:ss 14:30:30
            datetime:日期时间类型   yyyy-MM-dd hh:mm:ss 2020-10-12 14:30:30
            * timestamp:时间戳类型     yyyy-MM-dd hh:mm:ss
            * 如果该类型的字段不给赋值,则默认当前时间

    创建:

    create table 表名(

                列名1 类型1,
                列名2 类型2,
                   ...
                 列名n 类型n

    );

    create table student(
        id int, -- 编号
        sname varchar(10), -- 姓名
        age int, -- 年龄
        sal double(6,2), -- 工资
        birthday date -- 生日
    );

    删除表:  drop table 表名;

    查看库中所有表:show tables;

    查看表结构:desc 表名;

    增加一个表头:alter table student add(phone char(11));

    删除一个表头:alter table student drop phone;

    修改表头名称:alter table student change id sid int;

    修改表头数据类型:alter table student modify sal int ;

    或:alter table student change sal sal double(5,2);

    修改表名:alter table student rename to stu;

    DML:数据操作语言,用来增删改数据库记录

    1.插入数据

    插入所有:

    insert into student(id,name,age)  values (1,'zhangsan',23);

    简写:

    insert into student values (1,'zhangsan',23);

    个别字段插入:

    insert into student(id,name) values(2,'lisi');

    2.删除数据

    1.全部删除:

    delete from student;

    2.where  条件删除   

    =、!=、<、<=、>、>=、and (&&) 、or (||)

    delete from student where id=1;

    3.修改数据

    1.没有条件修改

    update student set sname='wangwu',age=30;

    2.有条件修改

    update student set sname='zhangsan',age=20 where id=1;

    DQL:查询

    1.查询表中所有数据

    select * from student;

    建议全写,而不是写个*

    select id,sname,age,sal,birthday from student;

    2.查询个别字段

    select sname,id from student;

    条件查询

    =、!=、<>(不等于)、<、<=、>、>=;

    BETWEEN…AND;  在什么范围之间
    IN(set);
    IS NULL;为空
    IS NOT NULL; 不为空
    AND; 并且
    OR;   或者
    NOT;非

    1.等值查询

    select * from emp where empno=7566;

    2.between....and

    select * from emp where sal between 2000 and 5000;

    3.in

    select * from emp where empno in(7499,7788,7934,55555);

    4.null值(is null / is not null)

    select * from emp where comm is null;

    5.as 字段别名     as可不写

    select empno as 员工工号,ename as 员工姓名,sal 工资 from emp;

    select empno 员工工号,ename 员工姓名,sal 工资 from emp;

    6.表别名

    select empno 员工工号,ename 员工姓名,sal 工资 from emp e where e.empno=7499;

    模糊查询

    % 通配多个任意字符

    _ 通配单个任意字符

    1.姓名包含M

    select * from emp as e where ename like '%M%';

    2.以S开头

    select * from emp as e where ename like 'S%';

    3.以S结尾

    select * from emp as e where ename like '%S';

    4.第二个字母是A

    select * from emp as e where ename like '_A%';

    5.五个字母组成

    select * from emp as e where ename like '_____';

    字段的运算和去重

    查询年薪

    SELECT empno,ename,sal,comm,sal*12 AS 年薪 FROM emp;

    null值参与运算结果是null,若想要把null值当作0,用ifnull

    IFNULL(comm,0) 如果comm是null,就取0 不是null 取你原本的值

    去重

    select distinct sal from emp where sal=3000;

    排序 order by

    升序 asc

    降序 desc

    聚合函数

    对列做运算

    -- 统计员工有多少人
    SELECT COUNT(empno) AS 总人数 FROM emp;

    -- 传入* 也可以
    SELECT COUNT(*) AS 总人数 FROM emp;

    -- 工资最值
    SELECT MAX(sal) AS 最高工资  FROM emp; 
    SELECT MIN(sal) AS 最低工资  FROM emp; 

    -- 平均工资
    SELECT AVG(sal) AS 平均工资  FROM emp; 

    -- 总工资
    SELECT SUM(sal) AS 总工资  FROM emp; 

    分组 group by 

    和聚合函数配合使用

    -- 比如我按部分编号分组  比如有三个部门 然后我求每个部门的平均工资  那展示出来的数据应该有三条

    SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp GROUP BY deptno;

    -- 按照岗位分组,统计每种岗位多少人

    SELECT job '岗位',COUNT(job) '岗位人数' FROM emp GROUP BY job;

    -- 1.例如查询 每个部门的部门编号 以及每个部门工资大于1500的人数,分组之前要进行筛选

    -- where 在分组之前进行条件的筛选,符合条件的参与分组,不符合条件的不参与分组。
    SELECT deptno '部门编号',COUNT(empno) '部门人数' FROM emp WHERE sal>1500 GROUP BY deptno;


    -- 2.例如 我要查询 各个部门平均工资 大于2000 的部门

    -- having:在分组之后,对结果集的筛选
    SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp GROUP BY deptno HAVING AVG(sal)>2000;

    SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp GROUP BY deptno HAVING 部门的平均工资>2000;

    -- 3. 例如我要查询 各个部门  员工工资大于1500 的平均工资  并且平均工资 大于2000的部门
    SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp WHERE sal>1500 GROUP BY deptno HAVING 部门的平均工资>2000;

    -- having 和where的区别?
        
            -- * where和having
            --     * where:在分组之前对条件进行限定。不满足条件,就不会参与分组
            -- * having:在分组之后,对结果集的筛选
            
            
                    
    -- 4. 例如我要查询 各个部门  员工工资大于1500 的平均工资  并且平均工资 大于2000的部门,升序排列
    SELECT deptno '部门编号',AVG(sal) '部门的平均工资' 
    FROM emp WHERE sal>1500 
    GROUP BY deptno HAVING 部门的平均工资>2000 
    ORDER BY 部门的平均工资 ASC;    

    分页 limit

    limit 起始索引,每页的条数


     -- 第一页
    SELECT * FROM emp LIMIT 0,3;
    -- 第二页
    SELECT * FROM emp LIMIT 3,3;
    -- 第三页
    SELECT * FROM emp LIMIT 6,3;

    -- 第四页
    SELECT * FROM emp LIMIT 9,3;

    -- 第五页
    SELECT * FROM emp LIMIT 12,3;

    -- 起始索引=(页码-1)*每页条数

  • 相关阅读:
    Spring(十一)- Spring Bean的依赖注入注解
    每年AP考试报名时间是什么时候?
    【微服务架构组件之配置中心一】Nacos
    Python3 运算符
    存储更弹性,详解 Fluid “ECI 环境数据访问” 新功能
    学习路之PHP--lumen安装配置
    Gartner公布《2023中国ICT技术成熟度曲线》,得帆信息入选低代码代表厂商
    rk3588编译Ubuntu固件,Linux SDK开发
    【Hyperledger Fabric 学习】部署智能合约到通道上
    电解电容寿命与哪些因素有关?
  • 原文地址:https://blog.csdn.net/m0_63138660/article/details/130672477