MySQL数据库02(SQL语句查询、SQL备份与恢复、SQL约束、多表操作)

标签: SQL

Part01:SQL语句查询

1、排序查询:对查询结果进行排序

  • 关键字:order by +字段名 [DESC];//以指定字段名排序,默认升序

  • ASC表示升序,DESC表示降序

    #先将结果按cmark进行升序排序,如果cmark相同再以cid进行降序排序;
    SELECT * FROM mark ORDER BY cmark,cid DESC;
    

2、聚合查询:纵向个数查询

  • 特点:查询到的结果是单一值,优先级比分组低
  • 聚合函数:
    • count:求记录数,count函数会自动忽略空值;//count(*)、count(mark)
      //以下四个通常用于数值的计算
    • max:求最大值;//max(mark);
    • min:求最小值;//min(mark);
    • avg:求平均值;//avg(mark);
    • sum:求和;//sum(mark);

3、分组查询:把查询数据分为几个组

  • 关键字:group by 字段名;//字段名相同的分为一组

  • 如果分组后,还需要条件判断,用关键字having

    SELECT sid,SUM(cmark)  FROM mark GROUP BY sid HAVING SUM(cmark)>520 ;
    
  • 分组查询只能查询分组的字段或聚合函数

  • where和having的区别:

    • where写在基本查询后面,hanving写在分组查询后面;
    • where后面不能写count、sum等聚合函数

4、分页查询:只查询记录中的一部分

  • 关键字:limit 数值1,数值2;//数值1表示下标,从0开始;数值2表示需要查出来的记录数

    #表示从第0条开始,一共查询5条记录
    SELECT * FROM student LIMIT 0,5;
    
  • 分页查询公式:假设每一页要查询n条数据

    • 第1页:limit 0,n;
    • 第2页:limit n,n;
    • 第100页: limit 99*n,n;
    • 第m页:limit (m-1)*n,n;

Part02:SQL备份与恢复

1、选中要备份的数据库,右键选择转储SQL文件
在这里插入图片描述
2、选中连接,右键选择运行SQL文件,选择要恢复的SQL文件
在这里插入图片描述

Part03:SQL约束

1、SQL约束的作用:保证数据完整性

  • 添加数据完整性=添加表约束
  • 数据完整性分类:
    • 实体完整性:对数据行的约束,如:主键约束、唯一约束
    • 域完整性:对数据列的约束,如:该列的数据类型,默认约束(设置默认值),非空约束
    • 引用完整性:对多表关系的约束,如:外键约束

2、主键约束的介绍:

  • 关键字:primary key

  • 作用:保证该字段唯一并且不为空;

  • 添加主键:

    • 在创建表的时候,直接在字段后面添加primary key主键约束;

    • 在创建表的时候,在表的约束区域(所有字段下方)添加主键约束;

      [constraint 自定义名称] primary key (字段名) 
      
    • 在表创建之后,通过修改表结构,给某个字段添加主键

      alter table 表名 add  constraint 约束名 primary key(字段名)
      
  • 删除主键约束:

    Alter table 表名 drop primary key;
    

3、唯一约束的介绍:

  • 关键字:unique

  • 作用:保证该字段唯一,【可以为空】

  • 添加唯一约束:

    • 在创建表的时候,直接在字段后面添加unique唯一约束;

    • 在创建表时,在表的约束区域(所有字段下方)声明唯一约束;

      [constraint 名称] unique (字段名) 
      
    • 在表创建之后,通过修改表结构,给某个字段添加唯一约束;

      alter table 表名 add  constraint 约束名 unique(字段名)
      
  • 删除唯一约束:

    Alter table 表名 drop index 约束名;
    #如果创建时没写约束名,默认名为字段名
    

4、自动增长列:

  • 关键字:auto_increment
  • 作用:把该字段的值交给数据库去维护,数据库默认每次增加1
  • 注意⚠️:自动增长列类型必须是整形,字段增长列必须为键(一般是是主键);可以不为设置为自动增长约束的字段设置值,也可以设置为null;如果自己添加值,会修改自动增长值;
  • 创建自动增长约束:
    • 在创建表的时候,直接在字段后面添加auto_increment自动增长约束;

    • 在表创建之后,通过修改表结构,给某个字段添加自动增长约束;

      alter table 表名 modify 字段名 数据类型 auto_increment;
      

5、非空约束:

  • 关键字:not null

  • 作用:被not null约束的字段,不能为null值;

  • 创建非空约束:

    • 在创建表的时候,直接在字段后面添加not null非空约束;

    • 在表创建之后,通过修改表结构,给某个字段添加非空约束;

      alter table 表名 modify 字段名 数据类型 not null;
      
  • 删除非空约束:

    alter table 表名 modify 字段名 数据类型;
    

6、默认约束:

  • 关键字:default
  • 作用:如果添加记录时没赋值的话,给该字段添加一个默认值;
  • 创建默认约束:
    • 在创建表的时候,直接在字段后面添加default默认约束,并设置默认值;

    • 在表创建之后,通过修改表结构,给某个字段添加默认约束;

      alter table 表名 modify 字段名 数据类型 default 默认值;
      

7、外键约束:

  • 关键字:foreign key…references
  • 作用:连接两表,防止非法数据插入外键
  • 创建外键约束:
    • 在创建表时,在表的约束区域(所有字段下方)声明外键约束;

      [constraint 名称] foreign key (字段名)  references 主表表名 (主表主键字段名)
      
    • 在表创建之后,通过修改表结构,给某个字段添加外键约束

      alter table 表名 add constraint 约束名 foreign key (字段名) references 主表表名 (主表主键字段名)
      

Part04 :多表操作

一、表和表之间的关系:
1、一对多关系:

  • 如:学生和考试成绩、客户和订单、分类和商品、部门和员工
  • 建表原则:
    • 建立两张表,一张叫主表,一张叫从表;
    • 从表中必须有一个字段,引用主表的主键,这个字段我们称为外键;
    • 主表的主键中有的值,从表可以有也可以没有;
    • 但主表的主键中没有的值,从表中不能有;

2、多对多关系:

  • 如:学生和教师、商品和订单、学生和课程、用户和角色
  • 建表原则:
    • 建立一张中间表;
    • 中间表的注意事项⚠️:
      • 【有自己的主键】
      • 必须有两个外键,分别引用两个表的主键;

3、一对一关系:

  • 可以写在一张表中;
  • 若字段太多也可以分多个表;

二、多表查询:
1、交叉查询:

  • 语法:select * from 表1,表2;
  • 总字段=表1字段+表2字段
  • 总记录数=表1记录数+表2记录数
  • 实际上是两表笛卡尔积的结果,没意义;

2、内连接查询:没有的数据不显示

  • 关键字:inner join

  • 隐式内连接查询:不写关键字

    • select * from 主表,从表 where 主表.主键 = 从表.外键;

      #查询“张三”同学的各科成绩
      SELECT m.* FROM mark m,student s WHERE m.sid=s.sid AND sname = '张三';
      
  • 显示内连接查询:写关键字

    • select * from 主表 inner join 从表 on 主表.主键 = 从表.外键;

3、外连接查询:

  • 关键字:outer join
  • 左外连接:以左表为准,左表中的数据必须每条都有,左表有,右表没有的数据补空;
    • 关键字:left outer join
    • select * from 主表 left outer join 从表 where 主表.主键 = 从表.外键;
  • 右外连接:以右表为准
    • 关键字:right outer join
    • select * from 主表 right outer join 从表 where 主表.主键 = 从表.外键;

4、子查询:一条select查询语句结果作为另一条select查询语句的一部分(查询条件,查询结果,表等)

  • 语法:select 字段 from 表名 where (查询条件)

    #查询“张三”同学的各科成绩
    SELECT cid,cmark FROM mark WHERE sid in
               (SELECT sid FROM student WHERE sname = '张三');
    
版权声明:本文为weixin_44090966原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44090966/article/details/89303320

智能推荐

JetBrains 系列开发工具,如何配置 `SCSS` `File Watcher` ,相关输出配置参数详解:webStorm phpStorm IDEA

JetBrains 系列开发工具,如何配置 SCSS File Watcher ,相关输出配置参数详解:webStorm phpStorm IDEA 前言 你目前已经了解了如何使用 SCSS 进行开发,了解了该文章的内容:『 SCSS 日常用法 』 在 JetBrains 系列开发工具中通过 FileWatcher 进行编译的 SCSS 文件都是通过 sass 这个程序进行的。『 如何添加 Fil...

C语言小函数—二进制与十六进制

测试如下 “` int main() { long int num = 15; } “`...

仿微博或微信的文章多图显示(自定义MultiImageView)

按照一般的规矩,先上张图来供大伙看看 如果大致是大伙们需要实现的功能,不烦一观 自定义MultiImageView 工具类 具体使用 app.gradle中添加依赖 implementation 'com.github.bumptech.glide:glide:4.8.0' AndroidManifest.xml中配置联网权限 <uses-permission android:name=&q...

经典进程同步和互斥问题

经典进程同步与互斥问题 前言 一、生产者-消费者问题 1.问题描述 2.问题分析 3.代码 二、读者-写者问题 1.问题描述&&分析 2.代码 三、哲学家进餐问题 1.问题描述&&分析 2.代码 四、理发师问题 1.问题描述&&分析 2.代码 前言 在多道程序设计环境中,进程同步是一个非常重要的问题,下面讨论几个经典的进程同步问题。 一、生产者-消费...

java设计模式——ThreadLocal线程单例

1、定义一个ThreadLocal线程单例,代码如下: 2、定义一个多线程类,代码如下: 3、定义一个测试类,代码如下: 4、输出结果,如下图:...

猜你喜欢

【tensorflow】线性模型实战

线性模型:y = 1.477 * x + 0.089   1. 采样数据 采样噪声eps在均值0,方差0.01的高斯分布中,而后在均匀分布U(0,1)中,区间[-10,10]进行n=100次随机采样:   2. 计算误差 循环计算每个点的预测值与真是值之间差的平方并累加,从而获得训练集上的均芳误差损失值。   3. 计算梯度   4. 梯度更新 对权重w和偏...

常见损失函数和评价指标总结(附公式&代码)

网上看到一篇很实用的帖子关于常见损失函数和评价指标,收藏下来 本文转载于https://zhuanlan.zhihu.com/p/91511706 ------------------------------------------------------------------------------------------------------------------------------...

为什么 4G/5G 的直播延时依然很高

通信技术的发展促进了视频点播和直播业务的兴起,4G 和 5G 网络技术的进步也使得流媒体技术变得越来越重要,但是网络技术并不能解决流媒体直播的高延迟问题。 本文不会介绍网络对直播业务的影响,而是会分析直播中常见的现象 — 主播和观众之间能够感觉到的明显网络延迟。除了业务上要求的延迟直播之外,有哪些因素会导致视频直播的延迟这么高呢? live-streaming  图 1 - ...

springboot 过滤器Filter vs 拦截器Interceptor 详解

1 前言       最近接触到了过滤器和拦截器,网上查了查资料,这里记录一下,这篇文章就来仔细剖析下过滤器和拦截器的区别与联系。 2 拦截器与过滤器之间的区别 从上面对拦截器与过滤器的描述来看,它俩是非常相似的,都能对客户端发来的请求进行处理,它们的区别如下: 作用域不同 过滤器依赖于servlet容器,只能在 servlet容器,web环境下使用 拦截器依赖于sp...

IDEA环境--JavaWeb项目【分页功能实现】

参考链接:https://www.jianshu.com/p/d108d0cd9acf 1、前言 最近在写一些项目,遇到要使用分页功能的地方,就简单的学习了一下,在此总结一下具体实现的过程以及遇到的问题。 分页功能:当我们写一下web项目时会遇到一个页面要显示很多数据,一下子都显示出来效率会很低,也不美观。这就要用到分页,其作用也就是将数据分割成多个页面来进行显示。 2、项目介绍 这只是一个简单的...