课程回顾

  • 主键约束+自增 primary key auto_increment
  • 去重 distinct
  • is null 和 is not null
  • and 和 or
  • 比较运算符 > < >= <= = !=和<>
  • 两者之间 between x and y
  • in
  • 模糊查询 like _一个未知 %0或多个未知字符
  • 排序 order by 字段名 asc(升序默认)/desc降序
  • 分页 limit 跳过的条数,请求的条数
  • 别名 select name 名字 from emp;
  • 数值计算 select sal*5 from emp;
  • 聚合函数: 平均值avg() 最大值max 最小值min 求和sum 计数count(*)
  • 分组查询: group by 字段名
  • having: 用于写聚合函数条件
  • 各个关键字的顺序: select * from 表名 where 普通字段条件 group by 分组字段名 having 聚合函数条件 order by 排序字段名 limit 跳过条数,请求条数;

子查询(嵌套查询)

use empdb;

  1. 查询工资大于2号部门平均工资的员工信息
    select avg(sal) from emp where dept_id=2;
    select * from emp where sal>(select avg(sal) from emp where dept_id=2);
  2. 查询工资高于程序员最高工资的员工信息
    select max(sal) from emp where job=“程序员”;
    select * from emp where sal>(select max(sal) from emp where job=“程序员”);
  3. 查询工资最高的员工信息
    select * from emp where sal=(select max(sal) from emp);
  4. 查询和孙悟空相同工作的员工信息
    select * from emp where job=(select job from emp where name=‘孙悟空’) and name!=‘孙悟空’;
  5. 查询拿最低工资员工的同事们的信息(同事指同一部门)
    select min(sal) from emp;
    select dept_id from emp where sal=(select min(sal) from emp);
    select * from emp where dept_id=(select dept_id from emp where sal=(select min(sal) from emp)) and sal!=(select min(sal) from emp);

关联关系

  • 指一个项目中创建的表和表之间存在的业务关系
  • 有哪几种关系?
    • 一对一:有AB两张表,A表中一条数据对应B表中的一条数据, 同时B表中的一条数据也对应A表中的一条.

    • 一对多:有AB两张表,A表中一条数据对应B表中的多条数据, 同时B表中的一条数据对应A表中的一条.

    • 多对多: 有AB两张表,A表中一条数据对应B表中的多条数据, 同时B表中的一条数据也对应A表中的多条.

表和表之间如何建立关系

  • 一对一: 在AB 任意一张表里面添加一个建立关系的字段 指向另外一张表的主键

  • 一对多: 在一对多的两张表中, 在"多"的表里面添加建立关系的字段 指向另外一张表的主键

  • 多对多: 创建一个单独的关系表, 表里面有两个字段指向另外两个表的主键

  • 多对多举例: 苍老师: 小红,小花,小绿 传奇哥: 小花,小绿
    create table t(id int primary key auto_increment,name varchar(20));
    create table s(id int primary key auto_increment,name varchar(20));
    create table t_s(tid int ,sid int);
    insert into t values(null,‘苍老师’),(null,‘传奇哥’);
    insert into s values(null,‘小红’),(null,‘小花’),(null,‘小绿’);
    insert into t_s values(1,1),(1,2),(1,3),(2,2),(2,3);

    老师表:t
    学生表:s
    关系表:t_s

    1. 查询每个老师名字和对应的学生名字
      select t.name,s.name
      from t join t_s ts on t.id=ts.tid join s on s.id=ts.sid;
    2. 查询苍老师的学生姓名
      select s.name
      from t join t_s ts on t.id=ts.tid join s on s.id=ts.sid where t.name=“苍老师”;

关联查询

  • 查询存在关联关系的表的查询方式称为关联查询
  • 关联查询的方式包括: 等值连接, 内连接, 外连接

等值连接

  • 格式: select * from A,B where 关联关系 and 其它条件;
  1. 查询工资高于2000的员工的姓名和对应的部门名
    select e.name,d.name
    from emp e,dept d where e.dept_id=d.id and sal>2000;
  2. 查询程序员的姓名,工资,部门名,部门地点
    select e.name,sal,d.name,loc
    from emp e,dept d where e.dept_id=d.id and job=‘程序员’;

内连接

  • 等值连接和内连接查询到的是一样的数据, 推荐使用内连接
  • 格式: select * from A join B on 关联关系 where 其它条件;
  1. 查询工资高于2000的员工的姓名和对应的部门名
    select e.name,d.name
    from emp e join dept d on e.dept_id=d.id where sal>2000;
  2. 查询程序员的姓名,工资,部门名,部门地点
    select e.name,sal,d.name,loc
    from emp e join dept d on e.dept_id=d.id where job=‘程序员’;

外连接

  • 等值连接和内连接查询到的是两个表的交集数据
  • 外连接查询到的是一张表的全部和另外一张表的交集
  • 格式: select * from A left/right join B on 关联关系 where 其它条件;
    insert into emp(name) values(“灭霸”);
  1. 查询所有员工姓名和对应的部门名
    select e.name,d.name
    from emp e left join dept d on e.dept_id=d.id;
  2. 查询所有部门的名字,地址, 和对应的员工姓名,工资.
    select d.name,loc,e.name,sal
    from emp e right join dept d on e.dept_id=d.id;

关联查询总结

  1. 如果查询的数据是两个表的交集数据,使用等值连接或内连接(推荐)
  2. 如果查询的是一张表的全部和另外一张表的交集则使用外连接.

JDBC

  • Java DataBase Connectivity: Java数据库连接
  • 学习JDBC主要学习的就是如何通过Java语言和数据库软件进行连接并执行SQL语句.
  • JDBC是Sun公司提供的一套用于Java语言和数据库软件进行连接的API (Application Programma Interface)
  • 为什么Sun公司定义JDBC系列接口?
    Sun公司为了避免Java程序员,每一种数据库软件都学习一套全新的方法,通过JDBC接口将方法名定义好, 让各个数据库厂商根据此接口中方法名写各自的实现类(驱动),这样Java程序员只需要掌握JDBC接口中方法的调用即可访问任何数据库软件.
  • 如何通过JDBC连接MySQL
    1. 创建Maven工程
    2. 从苍老师文档服务器中复制以下MySQL驱动的依赖
<!-- 连接MySQL数据库的依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.15</version></dependency>
3. 刷新maven
4. 检查工程目录中 external Libraries 里面 是否出现了  mysql相关的内容


5. 添加Demo01.java 并在main方法中添加以下代码

//1. 获取数据库连接 导包java.sql 异常抛出 参数:数据库连接地址,用户名,密码Connection conn =DriverManager.getConnection("jdbc:mysql://localhost:3306/empdb?characterEncoding=utf8&serverTimezone=Asia/Shanghai","root","root");System.out.println("连接对象:"+conn);//2. 创建执行SQL语句的对象Statement s = conn.createStatement();//3. 执行SQL语句 execute执行s.execute("create table jdbct1(name varchar(20))");//4. 关闭连接conn.close();System.out.println("创建完成!");

Statement执行SQL语句的对象

  • execute(sql); 此方法可以执行任意SQL语句,推荐执行DDL(数据库相关和表相关的SQL语句)
  • int row = executeUpdate(sql); 此方法执行增删改相关的SQL语句 ,方法返回值是一个整数 表示生效的行数
  • ResultSet rs = executeQuery(sql); 此方法执行查询相关的SQL语句 ,方法的返回值为结果集对象, 里面装着查询回来的所有数据

表设计面试题: 晚课7:30公布答案

2021年过年时小明在这些天都收到了许多亲戚\朋友还有同事的红包,也发出了一些红包,有的是微信,有的是支付宝也有现金,请参考下面的题目帮小明设计表格保存红包的信息
(至少包含一张流水表) 先列出需要保存的数据有哪几种

  1. 统计2021年2月15号到现在的所有红包收益

  2. 查询2021年2月15号到现在 金额大于100 所有女性亲戚的名字和金额

  3. 查询三个平台(微信,支付宝,现金)分别收入的红包金额

tedu斌-MySql笔记2112-3相关推荐

  1. tedu斌-MySql笔记2112-1

    数据库 学习数据库阶段内容,主要学习的就是如何对数据进行增删改查操作 DBMS DataBaseManagementSystem,数据库管理系统(数据库软件) 常见的DBMS: MySQL: Orac ...

  2. tedu斌-MySql笔记2112-2

    课程回顾: 数据库相关SQL 查询所有 show databases; 创建 create database db1 charset=utf8/gbk; 查看数据库信息: show create da ...

  3. tedu斌-Web笔记2112-1

    Git地址 https://gitee.com/teduliu/cgb2112.git 课程介绍 web前端: 学习如何搭建页面,如何美化页面,如何给页面添加动态效果 MySQL数据库:学习如何对数据 ...

  4. tedu斌-Web笔记2112-6

    Vue指令(续) v-for="(变量,i) in 数组变量"; 让元素的显示数量和数组进行绑定, 同时遍历数组中的每一个对象,变量代表的是数组中的 每一个对象, i代表的是当前遍 ...

  5. tedu斌-Web笔记2112-5

    JavaScript中自定义对象 //定义一个空的Person对象function Person() {}//实例化一个Person对象let p1 = new Person();//动态添加属性p1 ...

  6. tedu斌-Web笔记2112-4

    JavaScript 作用: 负责给页面添加动态效果. 语言特点: 属于弱类型语言: java: String name = "tom"; int age=18; name=30; ...

  7. mysql事务手写笔记_兴奋了!阿里技术官手写“MySQL笔记”,传授你年薪百万级干货...

    前言 MySQL重要吗?重要!为什么重要?因为它在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展.阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的.My ...

  8. 涂抹mysql 完整_涂抹mysql笔记-管理mysql服务

    $ /mysql/scripts/mysql_install_db --datadir=/mysql/data --basedir=/mysql support-files/mysql.server脚 ...

  9. 涂抹mysql笔记-mysql复制特性

    涂抹mysql笔记-mysql复制特性 mysql复制特性:既可以实现整个服务(all databases)级别的复制,也可以只复制某个数据库或某个数据库中的某个指定的表对象.即可以实现A复制到B(主 ...

最新文章

  1. django-debug-toolbar使用指南
  2. 数据结构无头结点单向不循环链表(C语言版)
  3. 【离散数学中的数据结构与算法】五 排列与组合一
  4. delphi if多个条件_Python从入门到精通——一文读懂if语句用法
  5. matlab计数器清零,51单片机计数器清零
  6. Linux下安装配置git
  7. 欧拉筛+埃式筛求素数
  8. 分享两个软件,listary和Snipaste,以及Listary的配置文件
  9. nodejs下载安装
  10. 红帽linux命令符,红帽子Linux_命令全解.doc
  11. SSM框架整合详细过程
  12. maven(2)——修改maven的setting.xml文件,更改下载地址和镜像
  13. RGMII信号是什么样子的----大揭秘
  14. odoo 12: 字段(Fields)
  15. 转载:50有用的JavaScript和jQuery技术和插件
  16. 二、页面构成与色彩搭配
  17. win7安装OpenCV:计算机中丢失opencv_world300d.dll
  18. 破解Windows7开机密码
  19. linux的系统监视器图片_用Jetson Nano构建一个价值60美元的人脸识别系统
  20. 做一个很出色的程序员

热门文章

  1. LitCTF Writeup By AheadSec
  2. Python的连接符
  3. Centos7 Firewall 防火墙配置规则
  4. 粒子群算法(PSO)初识
  5. 三星刷android l,三星I9250(Galaxy Nexus)怎么刷MIUI
  6. 智慧水务供水管网远程监测系统建设方案
  7. 四大招聘网站 微博推广比拼
  8. 单片机IO口扩展方法
  9. 用jQuery实现轮播图效果(自动播放,能手动切换)
  10. PHP hash_hmac sha256 遇到的坑 解决PHP与JAVA sha256结果不一致