热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据库小笔记

sql结构化查询语言DQL数据查询语言DML数据操作语言DDL数据定义语言创建对象表视图索引DCL数据控制语言权限概念关系:可以理解是一张二维表,关系型

  • sql结构化查询语言
    DQL数据查询语言
    DML数据操作语言
    DDL数据定义语言 创建对象 表视图 索引
    DCL数据控制语言 权限

  • 概念
    关系:可以理解是一张二维表,关系型数据库就是二维表数据库 关系名是表名
    元组:二维表的一行,或是记录
    属性:一列 ,字段
    域:取值范围

  • DQL
    格式:select 列名 from 表名 where 条件1 and/or 条件2 groud by 列 having 分组条件 order by 排序
    注释格式 –
    条件用字符串来代表用双引号""括起来
    模糊查询 like %代表是任意多个字符 _代表是一个字符
    多条件联合查询 and or
    范围查询 在一个连续值的范围之内 between 1 and 10
    对查询结果进行排序 order by asc是升序默认 desc是降序 也可以进行多个列排序
    分页:limit
    select * from table limit 4 每次查询前4行
    select * from table limit 0,4 分别查询第几页 默认是从零开始的,每页显示几条数据
    举例:select * from table where sal>1000 order by sal desc limit 0,4

  • 函数 是数据库里的方法,直接调用
    单行函数:指的是操作一行数据返回一行数据,
    字符串函数:
    长度 select name,length(name)from emp;
    拼接 select concat(name,"=",sex) from emp;
    替换 select name,replace(sex,“1”,“男”)from emp;
    dual假表 是为了满足from后面的条件不然报错,
    其他函数:
    空值的处理 ifnull(a,b) a=null 显示b
    加密算法md5 不可逆加密 select MD5(123) from dual;
    多行函数 :处理多行数据只返回一个结果,把数据分成多个组,返回的数据条数和组数一样
    max最大值 min最小值 avg平均值 sum求和 count求总数
    注意不要把普通的列和组函数写在一起,语法不会错但是结果是错的,
    在这里插入图片描述
    在这里插入图片描述
    就是说这个很坑,数据库不报错,因为是先执行了组函数, 求出了一个值,在显示一条数据只能是名字的第一条数据了

  • 数据分组
    按照一个条件进行分组,每一个组返回对应结果,
    group by可以对指定列进行分组,
    having是可以对分组进行过滤
    where是行级过滤,处理表中的行数据,having是分组过滤,处理的是查询出来分组后的数据,
    能使用where就不要使用having ,
    注意分组的列和普通的列不能放在一起,会发生错乱
    select job,avg(sal) from emp group by job; 这是按照jop来分组,显示分组,显示分组sal的最大值,是可以的
    select job,avg(sal),name from emp group by job 这样是不会报错但是name是错误的,要注意分组列和普通列不能在一起 ,不能和组函数在一起,

  • 单表查询执行顺序
    from-where-group by-having-select-order by

  • 多表关联 99关联
    自然连接:会自动进行关联列相同的数据 也就等值连接
    select e.name,d.name from emp e,dept d where e.deptno=d.deptno and e.sal >2000; 这个是92语法 不用自动关联表,关联条件写在where后面
    select e.name,d.name from emp e natural join dept d where e.sal>2000; 99关联 用natura join来关联表
    还有一种是使用using关键字来进行指定条件的等值连接
    select e.name,d.name from emp e join dept d using(deptno) ; 这个就是可以使用指定等值列
    on 关键字可以可以进行等值连接和非等值连接 添加条件在on后面
    select e.name,d.name from emp e join dept d on(e.deptno=d.deptno);
    select e.name,d.name from emp e join dept d on(e.sal between s.losal and s.hisal);
    三表关联 :
    select e.name,d.name,s.grade from emp e,dept d,salgrads s where e.deptno = d.deptno and e.name = s.name 92语法
    select e.name,d.name,s.name from emp e join dept d join salgrade on(e.sal=s.sal and s.sal =d.sal);
    外连接: 多表连接时查询出的数据会忽视null数据 使用外连接可以得道被忽视的孤儿数据, 包含null数据
    left join right join 全外连接 使用union关键字 或是union all
    union 作用是将两个sql语句查询出来的数据合并在一起, 注意这查询出来的字段要一样
    union会去重复数据 union包含重复数据,

    多表连接时要注意 给表起别名,别名是表首字母,关联条件要有,没有会出现笛卡尔乘积,多表查询的条件是等值或是不等值,
    语法包含了99语法和92语法,
    99语法就是表关联是关联语句 关联条件 和条件语句都是分开的,
    92语法不用表关联,条件可以放到where后面
    等值连接用using关键字 非等值连接用on
    select from table1 join table2 using(等值列)
    select from table1 join table2 on (条件)

  • 其他连接
    自连接 自己连自己 像是有病
    select e.name,m,name from emp e,emp m where e.mgr = m.empno;
    子连接 就是将一条sql语句查询结果作为数据源成为另一条sql的查询条件
    select name,sal from emp where sal=(select min(sal) from mp)
    可以用于from或是where后面

  • 还有数据库必学技能,
    导出表成文档
    导出成sql文件

  • mysql中的执行计划
    可以根据执行计划看到优化器的过程,
    可以通过explain关键字来模拟优化器执行sql语句,
    了解一下数据库查询过程 查询请求-sql解析-处理-生成执行计划 -数据库使用引擎来执行执行计划-返回结果
    启动执行计划 如图
    在这里插入图片描述

  • Explain 中的列详解
    id :是查询执行顺序 id值越高优先执行,id值相同表示从上到下执行,是同一组,
    select_type:查询类型是什么样的,
    simple 表示查询中不包含子查询或是union
    primary 有子查询是在外层
    derived 是子查询 在from后面
    subquery 在select 或是 where后面包含了子查询
    table:显示是哪个表
    partitions:显示是哪个分区
    type:这个是重要的列,显示了连接使用了什么类型,最好到最差的连接类型是system ,const,eq_reg,ref,range,index和all
    就是说了查询效率,
    system查询出一条数据,all表中只有一个条数据
    const 表示速度快,返回只有一条数据,
    possibe_keys: 查询条件字段涉及到的索引,
    key : 实际上使用到的索引,没有使用则为null,
    key_len:表示索引中使用的字节数,
    rows : 估算出所需要读取的行数,
    fitered:显示通过条件过滤出的行数的百分值,

  • 存储引擎
    数据库依赖数据引擎进行创建,查询,更新和删除数据,不同的引擎提供不同的存储机制,索引技巧,mysql使用innoDB引擎,
    innoDB引擎底层是B+树,支持事务处理,

  • 数据库的三大范式
    范式就是对表结构就行规范,表结构要满足数据不要冗余,
    第一个范式 :每一列保证数据的原子性, 都是不能在分开的最小单元,
    第二个范式:一个表描述一个事情,
    第三范式:表中的普通列不要相互依赖,


推荐阅读
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 本文探讨了在不同场景下如何高效且安全地存储Token,包括使用定时器刷新、数据库存储等方法,并针对个人开发者与第三方服务平台的不同需求提供了具体建议。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • binlog2sql,你该知道的数据恢复工具
    binlog2sql,你该知道的数据恢复工具 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • Excel技巧:单元格中显示公式而非结果的解决方法
    本文探讨了在Excel中如何通过简单的方法解决单元格显示公式而非计算结果的问题,包括使用快捷键和调整单元格格式两种方法。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 本文介绍了实时流协议(RTSP)的基本概念、组成部分及其与RTCP的交互过程,详细解析了客户端请求格式、服务器响应格式、常用方法分类及协议流程,并提供了SDP格式的深入解析。 ... [详细]
  • 探讨密码安全的重要性
    近期,多家知名网站如CSDN、人人网、多玩、开心网等的数据库相继被泄露,其中大量用户的账户密码因明文存储而暴露无遗。本文将探讨黑客获取密码的常见手段,网站如何安全存储用户信息,以及用户应如何保护自己的密码。 ... [详细]
  • 在Java开发中,保护代码安全是一个重要的课题。由于Java字节码容易被反编译,因此使用代码混淆工具如ProGuard变得尤为重要。本文将详细介绍如何使用ProGuard进行代码混淆,以及其基本原理和常见问题。 ... [详细]
  • 在iOS开发过程中,当开发团队使用多台Mac设备时,可能会遇到无法继续申请新证书的问题。本文介绍了如何通过导出.p12文件来解决这一问题,并确保团队成员能够在不同设备上共享同一个证书。 ... [详细]
author-avatar
欣然沐羽民_699
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有