• MySQL数据库基础回顾与复习


    MySQL数据库

    一、原理定义概念

    定义

    1. 数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库

    2. 数据库是长期储存在计算机内、有组织的、可共享的数据集合

    3. 分类:

      (1)非结构化数据:

      • 数据相对来讲没有固定的特点,这种数据非常不便于检索
      • 但是生活中很多都是非结构化数据

      (2)半结构化数据:

      • 数据之间有着相同的存储结构 属性:值

      • 每一条数据的属性可以不同

        • 张三:
          • 三号学生
        • 李四:

      (3)结构化数据

      • 创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据

      • 数据之间有着相同的存储结构 属性 值

      • 同一个结构模型中每一条数据的属性都是相同的,但是值有可能不同,这些数据非常便于存储和管理

      • 于是针对这些数据,专门设计一套数据存储的软件,现在我们说的数据库主要用来存储这些数据

    4. 产品

      • sqlserver -->微软
      • Mysql -->Java-->Oracle收购
        • 免费
      • Oracle-->Oracle
        • 收费
      • DB2-->IBM 份额很少
    5. 问题

      • 我们所有的数据库都放在软件中
      • 我们要获取到数据,就需要使用软件给我们提供的访问数据的接口
      • 最痛苦的就是程序员,我们就要为存储数据学习不同的数据库
      • 于是有人开始倡导:使用统一的操作数据库的方式
    6. SQL

      • sql一般指结构化查询语言(Structured Query Language),简称SQL.

      • 全世界所有的结构化数据库都适用

      • 分类

        1. DQL:Data Query Language 数据查询语言

          定义数据库的一些组件 表 索引 视图 自增序列...

        2. DML:Data Manipulate Language 数据操纵语言

          数据库的增、删、改、查

        3. DDL:Database Definition Language 数据定义语言

          Create Drop Alter

          1. DCL:Data Control Language 数据库控制语言

          权限

          事务的提交:commit

          事务的回滚:rollback

    7. SQL语言属于第四代语言,而java c++ 才属于第三代

    安装

    自己百度,我用的是Mysql80+Navicat16

    概念

    关系模型中常用的概念

    • 关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名
    • 元组:可以理解为二维表中的一行,在数据库中经常被称为记录
    • 属性:可以理解为二维表中的一列,在数据库中经常被称为字段
    • 域:属性的取值范围,也就是数据库中某一列的取值限制
    • 关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成
    • 关系模式:指对关系的描述。其格式为:关系名(属性1,属性2, ... ... ,属性N),在数据库 中成为表结构

    scott用例表

    • emp 员工信息表
    字段名中文类型空?默认值克其他说明
    EMPNO🔑雇员编号int(11)主键
    ENAME雇员名称varchar(255)
    JOB岗位工种varchar(255)
    MGR上级int(11)
    HIREDATE雇佣日期date
    SAL工资decimal
    COMM奖金|津贴decimal
    DEPTNO部门编号int(11)外键,dept表的deptno 关联
    • dept部门信息表
    字段名中文类型空?默认值其他说明
    DEPTNO🔑部门编号int(11)主键
    DNAME部门名称varchar(255)
    LOC地址varchar(255)
    • salgrade薪资区间表
    字段名中文类型空?默认值其他说明
    GRADE等级int(11)
    LOSAL最低薪资int(11)
    HISAL最高薪资int(11)

    二、SQL-DQL语句

    1. 格式

      select 列名*N from 表名 where 查询条件1 and/or 查询条件2 group by 列 Having 分组条 件 Order by 排序

    2. 规则

      • sql在书写的时候除了查询条件之外,大小写都可以

        select * from user where uname ='zs';

        SELECT * FROM USER WHERE UNAME = 'zs';

        保持大小写风格

      • -- 属于SQL语句的注释

      • 所有的查询条件为字符串时,需要用''进行修饰,否则就会当做列名去处理

    3. select查询列和别名

    emp是存储员工信息的表

    1. -- 查询所有员工信息(*通配符,默认查询所有的列)
    2. select * from emp;
    3. -- 查询员工的姓名
    4. select ename from emp;
    5. -- 查询员工的薪资 select sal from emp;
    6. -- 查询员工的姓名和薪资
    7. select ename , sal from emp;
    8. select ename sal from emp;
    9. select ename sal comm from emp;
    10. -- 查询员工的姓名和薪资,推荐使用单引号
    11. select ename '员工姓名', sal "薪资" from emp;
    12. -- 查询到的数据可以直接进行运算
    13. select ename ,sal ,sal * 12 from emp;
    14. select ename ,sal ,comm ,(sal+comm) * 12 from emp;

    4.select的条件查询

    • 普通条件查询 = > < != <> >= <=

    1. -- 查询员工编号为7369的员工
    2. select ename,sal from emp where empno = 7369;
    3. -- 查询员工姓名叫做
    4. SMITH select ename,deptno,job from emp where ename = 'SMITH';
    5. select ename,deptno,job from emp where ename = 'smith';
    6. -- 查询薪资大于2000的员工姓名
    7. select ename from emp where sal > 2000;
    8. -- 查询工作为SALESMAN
    9. select * from emp where job = 'SALESMAN';
    10. -- 查询部门在20的员工
    11. select * from emp where deptno = 20;
    12. -- 查询薪资不等于2000的员工
    13. select * from emp where sal != 2000;
    14. select * from emp where sal != 2000;
    • in 在某个范围中查找
    1. -- 查询 员工编号 为 7369 7788 7881的员工信息
    2. select * from emp where empno in (7369,7788,7881);
    3. -- 查询 员工编号除了 7369 7788 7881之外的所有员工信息
    4. select * from emp where empno not in(7369,7788,7881);
    5. -- 查询除了10,20部门之外的所有员工
    6. select * from emp where deptno not in (10,20);
    • null值查询
    1. -- 查询不发放津贴的员工信息
    2. select * from emp where comm is null;
    3. -- 查询发放津贴的员工信息
    4. select * from emp where comm is not null;
    • "空值"、"NULL" 和 "0" 的含义
    1. 空值(Empty Value)

      • "空值" 通常表示数据字段中没有包含任何值,它是一个没有内容的状态。
      • 在关系型数据库中,一个字段可以被设置为空,这意味着该字段可以不包含任何值。
      • 空值不等同于零或空字符串,它表示完全没有值。
    2. NULL

      • "NULL" 是数据库中表示缺少数据或未知数据的特殊值。
      • 在数据库中,如果一个字段没有被赋予任何值,那么它会被视为 "NULL"。
      • "NULL" 不同于零,它表示缺少值,而不是特定的数值。
    3. 0

      • "0" 是一个具体的数值,表示零。
      • 它是一个有效的数值,不同于空值或 "NULL"。
      • "0" 代表一个明确的数值,通常表示没有数量或值为零。
    • 范围比较
    1. -- 查询薪资范围在1000-4000之间的员工信息 [1000.4000]
    2. select * from emp where sal between 1000 and 4000;
    • 模糊查询 % _
    1. -- 查询名字中有S的员工
    2. select * from emp where ename like '%S%';
    3. -- 查询名字最后一个字符是S
    4. select * from emp where ename like '%S';
    5. -- 查询名字第一个字符是S
    6. select * from emp where ename like 'S%';
    7. -- 查询名字第二个字符是A
    8. select * from emp where ename like '_A%';
    9. -- 查询名字中有%的员工
    10. select * from emp where ename like '%\%%';
    11. -- 查询名字第8 188个字符是A,这是需要一些特殊的手段-》函数
    12. -- % 代表任意字符的任意次数 _任意字符的一次
    • 多条件联合查询 and or

    (1)and 必须前后同时满足条件才能返回结果

    (2)or前后有一个满足条件就能返回结果

    1. -- 查询在20部门并且薪资大于2000的员工
    2. select * from emp where deptno =20 and sal >2000;
    3. -- 查询在20部门或者薪资大于2000的员工
    4. select * from emp where deptno = 20 or sal >2000;
    5. --查询不在20部门并且薪资小于2000的员工
    6. select * from emp where deptno <> 20 and sal <2000;

    5.select结果排序 order by

    • 使用asc是升序排列(默认),使用desc可以降序排序

    • 单列

    1. -- 按照薪资进行排序(默认升序)
    2. select * from emp order by sal;
    3. -- 按照薪资进行排序(降序)
    4. select * from emp order by sal desc;
    5. -- 按照薪资进行排序(升序)
    6. select * from emp order by sal asc;
    7. -- 按照津贴进行排序(null排在最前面)
    8. select * from emp order by comm;
    • 多列
    1. -- 多个排序的列
    2. select * from emp order by deptno,sal;
    3. -- 多个排序的列(部门升序 薪资降序)
    4. select * from emp order by deptno,sal desc;
    5. -- 多个排序的列(工作,薪资)
    6. select * from emp order by job,sal;

    6.select结果分页

    1. -- 每次查询前N行
    2. SELECT
    3. *
    4. FROM
    5. emp
    6. LIMIT 4;
    7. -- 查询第N页,每页显示M个
    8. select * from emp limit 0,3;
    9. select * from emp limit 3,3;
    10. select * from emp limit 6,3;
    11. select * from emp limit (n-1)*M,M;
    12. -- 查询薪资大于1000的逆序排列,然后显示前5条记录
    13. select * from emp where sal >1000 order by sal desc limit 0,5 ;

    7.SQL语句错误

    select enane from emp

    1054 - Unknown column 'enane' in 'field list'
    将来出现错误的时候,直接将错误编号输入到百度查询或者询问Gpt3.5即可

    单行函数

    1. 函数都是数据口提前给我们准备好的,所以我们可以直接可以调用,使用函数可以让指定的列计算出我们需要的数据

    2. 单行函数

      • 指的是操作一行数据返回一行数据,操作10行数据返回10行数据

      • 字符串函数

        函数名称作用
        LENGTH计算字符串长度函数,返回字符串的字节长度
        CONCAT合并字符串函数,返回结果为连接参数产生的字符串,参数可以是一个或多个
        INSERT替换字符串函数
        LOWER将字符串中的字母转换为小写
        UPPER将字符串中的字母转换为大写
        LEFT从左侧截取字符串,返回字符串左边的若干个字符
        RIGHT从右侧截取字符串,返回字符串右侧的若干个字符
        TRIM删除字符串左右两侧的空格
        REPLACE字符串替换函数,返回替换后的新字符串
        SUBSTRING截取字符串,返回从指定位置开始的指定长度的字符串
        REVERSE字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串

    1. -- 长度
    2. - select ename,length(ename) from emp;
    3. -- 截取
    4. - select ename,SUBSTR(ename,1,3) from emp;
    5. - select * from emp where substr(ename,5,1)='S';
    6. -- 大小写
    7. - select ename, upper(ename),lower(ename) from emp;
    8. -- 拼接
    9. - select CONCAT(empno,'=',ename) from emp;
    10. -- 替换
    11. - select ename,REPLACE(ename,'T','—') from emp;

    • 日期函数
    函数名称作用
    CURDATA 和 CURRENT_DATE两个函数作用相同,返回当前系统的日期值
    CURTIME 和 CURRENT_TIME两个函数作用相同,返回当前系统的时间值
    NOW 和 SYSDATE两个函数作用相同,返回当前系统的日期和时间值
    UNIX_TIMESRAMP获取UNIX时间戳函数,返回一个以UNIX时间戳为基础的无符号整数
    FROM_UNIXTIME将UNIX时间戳转换为时间格式,与UNIX_TIMESTAMP互为反函数
    MONTH获取指定日期中的月份
    MONTHNAME获取指定日期中的月份英文名称
    DAYNAME获取知道那个日期对应的星期几的英文名称
    DAYOFWEEK获取指定日期对应的一周的索引位置值
    WEEK获取指定日期是一年中的第几周,返回值的范围为052或153
    DAYOFYEAR获取指定日期是一年中的第几天,返回值范围是1~366
    DAYOFMONTH获取指定日期是一个月中的第几天,返回值范围是1~31
    YEAR获取年饭,返回值范围是1970~2069
    TIME_TO_SEC将时间参数转换为秒数
    SEC_TO_TIME将秒数转换为时间参数,与TIME_TO_SEC互为反函数
    DATE_ADD 和 ADDDATE两个函数功能相同,都是向日期添加指定的时间间隔
    DATE_SUB 和 SUBDATE两个函数功能相同,都是向日期减去指定的时间间隔
    ADDTIME时间加法运算,在原始时间上添加指定时间
    SUBTIME时间减法运算,在原始时间上减去指定时间
    DATEDIFF获取两个日期之间间隔,返回参数1减去参数2的值
    DATE_FORMAT格式化指定的日期,根据参数返回值那个格式的值
    WEEKDAY获取指定日期在一周内的工作日索引

    1. -- 获取当前系统时间
    2. - select hiredate,sysdate() from emp;
    3. - select hiredate,CURRENT_DATE(),CURRENT_TIME(),CURRENT_TIMESTAMP() from emp;
    4. -- 日期转换
    5. - select DATE_FORMAT(sysdate(),'%Y-%m-%d %H:%i:%s')
    6. - select hiredate, date_format(now(),'%Y年%m月%d日 %H时%i分%s秒') from emp;
    7. -- 分别获取 年月日 时分秒 星期
    8. - select
    9. - SECOND MINUTE HOUR DAY WEEK MONTH YEAR
    10. -- 日期的加减操作
    11. - select hiredate,ADDDATE(hiredate,9),ADDDATE(hiredate,-9) from emp;
    12. - select DATE('2012-11-11') ;
    • 数字函数
    函数名称作用
    ABS求绝对值
    SQRT求二次方根
    MOD求余数
    CEIL 和 CEILING两个函数功能相同,都是返回不小于参数的最小整数,即向上取整
    FLOOR向下取整,返回值转化为一个BIGINT
    RAND生成一个0~1之间的随机数,传入整数参数时,用来产生重复序列
    ROUND对所传参数进行四舍五入
    SIGN返回参数的符号
    POW 和 POWER两个函数的功能相同,都是所传参数的次方的结果值
    SIN求正弦值
    ASIN求反正弦值,与函数SIN互为反函数
    COS求余弦值
    ACOS求反余弦值,与函数COS互为反函数
    TAN求正切值
    ATAN求反正切值,与函数TAN互为反函数
    COT求余切值

    1. -- 向上取整 向下取整
    2. - select ceil(12,1),floor(12.9)
    3. -- mod abs pow PI rand round TRUNCATE(直接进行截取,不进行四舍五入)
    4. -- 保留多少位有效数字
    5. - select round(1.4999999,2),round(1.4999999),round(1.4999999,-1)
    6. - select TRUNCATE(1.4999999,2)
    • 转换函数
    1. -- 日期--》字符串
    2. - date_format(date,expr)
    3. - select DATE_FORMAT(sysdate(),'%Y-%m-%d %H:%i:%s');
    4. -- 字符串--》日期
    5. - 要注意字符串和格式的匹配
    6. - select STR_TO_DATE('2020-4-16 17:15:24','%Y-%c-%d %H:%i:%s');
    7. -- 数字--》字符串
    8. - 直接拼接一个字符串即可,可以自动转换
    9. -- 字符串--》数字
    10. - 依靠函数提供的参数
    • 转换函数

      (1)空值的处理

      if null (exp1,exp2) exp1 != null ? exp1 : exp2

      select IFNULL (comm,888) from emp;

      (2)加密算法

      select MD5('123456');

      select

      AES_ENCRYPY('123456','abcd'),AES_DECRYPT(AES_ENCRYPT('123456','abcd'),'abcd')

    今天就预习到这里后续有时间会在继续补充的,有点小累!!!

  • 相关阅读:
    【MySQL基础】-【数据处理之增删改】
    《Groovy程序设计》读书笔记
    基于银河麒麟V10SP1的git使用方法-上传篇
    Sophos Firewall OS (SFOS) 19.0 GA
    华为OD机试2024(JS,C++,JAVA,PYTHON)-寻找相同子串
    阅读笔记——RetinaFace: Single-stage Dense Face Localisation in the Wild
    简单理解精确率(Precision),召回率(Recall),准确率(Accuracy),TP,TN,FP,FN
    【工作中问题解决实践 六】基于反射及类装饰模式的数据对比框架
    JVM基础面试题
    安装vue vue-server-renderer报错
  • 原文地址:https://blog.csdn.net/qq_57747969/article/details/133556321