MySql详解(二)

一、分组查询

  1. 语法:

    select col_name1,col_name2... from tb_name group by having ...;
    
  2. 练习:

    执行下面的SQL,创建orders表并插入数据create table orders(id int,product varchar(20),price float);insert into orders(id,product,price) values(1,'小米手机',900);insert into orders(id,product,price) values(2,'奥妙洗衣液',60);insert into orders(id,product,price) values(3,'乐视TV',90);insert into orders(id,product,price) values(4,'联想键盘',80);insert into orders(id,product,price) values(5,'奥妙洗衣液',60);insert into orders(id,product,price) values(6,'小米手机',900);~对订单表中商品归类后,显示每一类商品的总价select * from orders group by product;select count(*) from orders group by product;select sum(price) from orders group by product;~查询购买了几类商品,并且每类总价大于100的商品select product,sum(price) 总价 from orders group by product having        sum(price)>100;~查询单价小于100而总价大于100的商品的名称.
    select * from orders where price<100 group by product having sum(price) > 100;
    
  3. where和having的区别
    1. where和having子句都可以进行过滤 , 但是使用场景有所不同 。
    2. where对分组之前的数据进行过滤,不能使用聚合函数和别名
    3. having子句对分组之后的数据进行过滤 , 可以使用聚合函数和别名 。
    4. 使用where子句的地方一般都可以用having代替 , 但是使用having的地方一般不能使用where代替。

二、数据库备份与恢复

  1. 备份数据库

    1. 注意在新开的cmd窗口中 , 不要登录mysql
    2. 备份命令: mysqldump -u用户名 -p >备份数据存放位置
  2. 恢复数据
    1. 方式一: 在cmd中(不登录mysql)

      1. 恢复命令: mysql -u用户名 -p <数据存放位置
    2. 方式二: 在mysql客户端中
      1. 恢复命令: source 数据存放位置

三、外键约束

  1. 外键:唯一标识其他表中的一条记录,用来通知数据库两张表字段之间的对应关系, 并让数据库帮我们维护这样关系的键就叫做外键
  2. 外键的作用: 确保数据库数据的完整性和一致性
  3. 添加外键:foreign key(外键) reference 其他表(关联的键)
  4. 案例:

    create table dept(id int primary key auto_increment,name varchar(20));insert into dept values(null, '财务部');insert into dept values(null, '人事部');insert into dept values(null, '科技部');insert into dept values(null, '销售部');create table emp(id int primary key auto_increment,name varchar(20),dept_id int,foreign key(dept_id) references dept(id));insert into emp values(null, '张三', 1);insert into emp values(null, '李四', 2);insert into emp values(null, '老王', 3);insert into emp values(null, '赵四', 4);insert into emp values(null, '刘能', 4);要求:
    (1)执行上面的SQL语句,创建两张表(dept和emp),在创建时先不指定dept_id为外键,尝试删除部门表中的某一个部门。
    (2)将dept和emp表删除重建,在创建时指定dept_id为外键,再次尝试删除部门表中的某一个部门。
    

四、多表设计

  1. 1 - *(一对多):在多的一方添加列保存一的一方的主键来作为外键, 来保存两张表之间的关系
  2. 1 - 1(一对一):在任意一方添加列保存另一方的主键作为外键, 来保存两张表之间的关系
    • *(多对多):在一张第三方的表中分别保存两张表的主键作为外键, 来保存两张表之间的关系,可以把多对多的关系拆分成两个一对多的关系来理解

五、多表查询

  1. 案例:

            create table dept(id int primary key auto_increment,name varchar(20));insert into dept values(null, '财务部');insert into dept values(null, '人事部');insert into dept values(null, '科技部');insert into dept values(null, '销售部');create table emp(id int primary key auto_increment,name varchar(20),dept_id int);insert into emp values(null, '张三', 1);insert into emp values(null, '李四', 2);insert into emp values(null, '老王', 3);insert into emp values(null, '刘能', 5);需求1:查询出部门表和员工表,同时列出部门信息和员工信息。select * from dept,emp;(笛卡尔积查询)select * from dept, emp where emp.dept_id=dept.id;或者select * from dept inner join emp on emp.dept_id=dept.id;
    需求2:查询出部门信息和部门所对应的员工信息,同时列出那些没有员工的部门select * from dept left join emp on emp.dept_id=dept.id;
    需求3:查询出部门信息和部门所对应的员工信息,同时列出那些没有部门的员工select * from dept right join emp on emp.dept_id=dept.id;
    需求4:查询出部门信息和部门所对应的员工信息, 同时列出没有员工的部门和那些没有部门的员工select * from dept full join emp on emp.dept_id=dept.id;###mysql不支持
    
  2. 笛卡尔积查询

    1. 两张表相乘得出来的结果。如果左边表有m条记录,右边有n条记录,则查询出来的结果就是m*n条。这些查询结果中包含大量错误的结果,通常不会使用这种查询。
  3. 内连接查询:查询出左边表(dept)有且右边表(emp)也有的记录。

    select * from emp inner join dept on dept.id=dept_id;
    
  4. 左外连接查询:在内连接查询的基础上,加上左边表有而右边表没有的记录

    1. **查询出部门所对应的员工信息, 同时列出那些没有员工的部门

      select * from dept left join emp on dept.id=dept_id;
      
  5. 右外连接查询:在内连接查询的基础上,加上右边表有而左边表没有的记录。

    1. **查询出部门所对应的员工信息, 同时列出那些没有部门的员工

      select * from dept right join emp on dept.id=dept_id;
      
  6. 全外连接查询:在内连接查询的基础上,加上左边表有而右边表没有的记录 和 右边表有而左边表没有的记录。

    1. **查询出部门所对应的员工信息,同时列出那些没有员工的部门及些没有部门的员工

      select * from dept full join emp on dept.id=dept_id;###mysql不支持全外连接查询
      
  7. 使用union模拟全外连接查询:

    select * from dept left join emp on dept.id=dept_id
    union
    select * from dept right join emp on dept.id=dept_id;
    

大数据WEB阶段(六)MySql详解(二)相关推荐

  1. hadoop大数据平台架构之DKhadoop详解

    hadoop大数据平台架构之DKhadoop详解 大数据的时代已经来了,信息的爆炸式增长使得越来越多的行业面临这大量数据需要存储和分析的挑战.Hadoop作为一个开源的分布式并行处理平台,以其高拓展. ...

  2. 大数据WEB阶段 TransientDateAccessResourceException

    大数据WEB阶段 TransientDateAccessResourceException 一 . 分析 如果数据库保存的字段有时间 , 但是没有给该字段赋值时 ,则该字段默认是0000-00-00 ...

  3. 大数据技术Hbase 和 Hive 详解

    目录 两者的特点 各自的限制 应用场景 大数据技术Hbase 和 Hive 详解, 今天给大家介绍一下关于零基础学习大数据视频教程之HBASE 和 HIVE 是多么重要的技术,那么两者有什么区别呢 ? ...

  4. from mysql partition select_爬虫(九十九)mysql详解二

    **mysql中字段的常见类型: ** 二进制位 bit(长度) tinyint[(长度)] [有无符号unsigned] [位数低于长度时候是否填充零zerofill] 有符号表示范围-128 ~ ...

  5. 大数据WEB阶段 (六)MySql详解(一)

    MySql(二) 一.概述 什么是数据库 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,简而言之就是存储数据的仓库. 数据库的分类 层次式数据库.网络式数据库.关系型数据库 数 ...

  6. 大数据WEB阶段(十三)JSP(一)JSP基础、JSP指令详解、四大域九大隐式对象总结

    JSP基础.指令.四大作用域九大隐式对象总结 (一)JSP基础 一.JSP概述 jsp其实是java动态页面技术 HTML可以用来组织页面但是HTML是一种静态web资源技术无法嵌入动态数据. Ser ...

  7. 大数据WEB阶段(八)Tomcat服务器安装与详解、HTTP协议详解

    Tomcat 一. 服务器 动态web资源运行需要服务器环境 客户端发送请求到服务器 , 服务器调用动态web资源 Servlet容器 . web容器 .服务器 Servlet容器 java中的动态资 ...

  8. 大数据WEB阶段(七)JDBC、数据库批处理、数据库连接池

    JDBC 一.概述 数据库驱动: 数据库厂商提供的用来操作数据库的jar包 JDBC简介 由于各大数据库厂商提供的数据库驱动各不相同, 导致了开发人员的学习成本十分的高. SUN公司为了简化数据库的操 ...

  9. 大数据WEB阶段(十三)JSP(二)JSP标签、EL表达式、JSTL

    JSP标签.EL表达式.JSTL (一)JSP标签技术 一.JSP标签技术概述 jsp本质上是一种动态web资源开发技术 , 看起来像是html , 但其中可以写java代码 , 非常方便用来开发动态 ...

最新文章

  1. android studio 图片的命名规则
  2. 用BenchmarkDotNet给C#程序做性能测试
  3. diy 扫地机器人 滚刷_霍尔传感器在扫地机器人中的作用
  4. CCNA考试中实验题精讲(RIP,OSPF,VLAN)
  5. 节后荐书:Python、PyQt5、Kotlin(评论送书)
  6. jsp分页带条件查询时,点击上一页或下一页,没有按条件查询数据。
  7. Android游戏破解 入门级零基础起步学习破解!MT管理器+修改器使用方法 小白看了绝对有用
  8. android模拟器录制视频教程,夜神安卓模拟器怎么录制视频 夜神安卓模拟器录制视频教程...
  9. 推荐玩游戏的计算机及型号,想买个3000左右的台式电脑,主要玩游戏,求推荐品牌还有型号。...
  10. 扫雷-空白展开算法(优化)-详解
  11. FineReport html5图表简介
  12. vue项目落地(qiankun.js)微前端服务
  13. C# 矩阵库 功能特别强大!!
  14. 杨百万:这么多年不倒 重要的是信奉落袋为安
  15. C语言学习入门(一)
  16. 【JDBC】idea添加mysql-jar包(很轻松)
  17. 5. Mandy Len Catron: Falling in love is the easy part | TED Talk
  18. 011-减法指令SUB及对标志寄存器PSW的影响
  19. CAD小白要怎么查看CAD图纸呢?像建筑CAD图纸怎么快速查看呢?
  20. 6页的试卷怎么打印?想要打印试卷去哪里打印

热门文章

  1. 【bzoj4385】[POI2015]Wilcze doły
  2. 折半查找一个有序数组中的一个元素,即二分法
  3. 实验8.1 指针与数组 6-6 数组循环右移
  4. unity调用python脚本_Unity3d中C#脚本调用另一个C#脚本的方法
  5. Java黑皮书课后题第6章:6.12(显示字符)使用下面的方法头,编写一个打印字符的方法。编写一个测试程序、打印从‘1‘到‘Z‘的字符,每行打印10个,字符之间使用一个空格字符隔开
  6. Linux 内核 up down,信号量机制中的DOWN操作与UP操作详解
  7. mysql 唯一键和主键_MySQL唯一键和主键
  8. S2SH框架入门之使用hibernate进行基础的增删改查
  9. 九度OJ最短摘要的生成
  10. NumPy 数学函数