cgb2111-day05

2024-08-22 06:48
文章标签 day05 cgb2111

本文主要是介绍cgb2111-day05,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一,作业
      • --1,测试
    • 二,扩展 视图
      • --1,概述
      • --2,测试
      • --3,总结
    • 三,扩展 SQL优化
      • --1,测试
      • --2,总结
    • 四,扩展 三范式
      • --1,概述
      • --2,三范式的规则
    • 五,JDBC
      • --1,概述
      • --2,使用步骤
      • --3,入门案例
        • 1, 找到jar包,并拷贝进项目
        • 2, 编写代码
      • --4,练习
        • 1,去数据库里,创建user表(id,name,pwd)并且插入数据
        • 2,去idea写jdbc的代码,查询user表里的所有数据
    • 作业:

一,作业

–1,测试

#练习1:查询research部门的所有员工姓名和工资
#笛卡尔积
SELECT a.ename,a.sal FROM emp a,dept b
WHERE a.deptno=b.deptno  #两个表的关系
AND b.dname='research'#业务条件
#连接查询
SELECT a.ename,a.sal FROM emp a JOIN dept b
ON a.deptno=b.deptno  #两个表的关系
WHERE b.dname='research'#业务条件
#子查询
SELECT ename,sal FROM emp WHERE deptno=(SELECT deptno FROM dept WHERE dname='research'
)#练习2:查询jack所在的部门信息
#笛卡尔积
SELECT b.* FROM emp a,dept b
WHERE a.deptno=b.deptno #两个表的关系
AND a.ename='jack' #业务条件
#连接查询
SELECT b.* FROM emp a JOIN dept b
ON a.deptno=b.deptno #两个表的关系
WHERE a.ename='jack' #业务条件
#子查询
SELECT * FROM dept WHERE deptno=(SELECT deptno FROM emp WHERE ename='jack'
)#练习3:查询总监的部门信息
#笛卡尔积
SELECT a.* FROM dept a,emp b
WHERE a.deptno=b.deptno#两个表的关系
AND b.job='总监' #业务条件
#连接查询
SELECT a.* FROM dept a JOIN emp b
ON a.deptno=b.deptno#两个表的关系
WHERE b.job='总监' #业务条件
#子查询
SELECT * FROM dept WHERE deptno=
( SELECT deptno FROM emp WHERE job='总监')
#练习4:查询李军的平均分
#笛卡尔积
SELECT AVG(b.degree) FROM students a,scores b
WHERE a.sno=b.sno
AND a.sname='李军'
#连接查询
SELECT AVG(b.degree) FROM students a JOIN scores b
ON a.sno=b.sno
WHERE a.sname='李军'
#子查询
SELECT AVG(degree) FROM scores WHERE sno=(SELECT sno FROM students WHERE sname='李军'
)
#练习5:查询陈冰能讲的课程名
#笛卡尔积
SELECT a.cname FROM courses a,teachers b
WHERE a.tno=b.tno
AND b.tname='陈冰'
#连接查询
SELECT a.cname FROM courses a JOIN teachers b
ON a.tno=b.tno
WHERE b.tname='陈冰'
#子查询
SELECT cname FROM courses WHERE tno=(SELECT tno FROM teachers WHERE tname='陈冰'
)

二,扩展 视图

–1,概述

视图:就是一张特殊的表,用来缓存查询的结果

–2,测试

#查询名字里有a的员工的信息
SELECT * FROM emp WHERE ename LIKE '%a%'
#1,创建 
#语法:create view 视图名 as 查询的SQL语句
CREATE VIEW empview AS SELECT * FROM emp WHERE ename LIKE '%a%'
#2,使用
SELECT * FROM empview

–3,总结

#好处是:
#提高SQL的复用性.
#屏蔽了真实的业务表的复杂性
#被所有人共享
#坏处是:
#视图一旦创建成功,就无法被优化
#视图中存了和业务中大量重复的数据,"浪费空间"
#视图通常用来查询,不便于更新

三,扩展 SQL优化

–1,测试

#1.使用索引的细节:
SHOW INDEX FROM students#查看索引
EXPLAIN SELECT * FROM students WHERE sname LIKE '%王%'#失效!
EXPLAIN SELECT * FROM students WHERE sname LIKE '王%'#生效
EXPLAIN SELECT * FROM students WHERE sname LIKE '%王'#失效!EXPLAIN SELECT * FROM students WHERE sno=103#失效的,因为sno是varchar类型
EXPLAIN SELECT * FROM students WHERE sno='103' #生效#2.批量插入:优化事务管理
INSERT INTO dept VALUES(NULL,'ios','guangzhou');
INSERT INTO dept VALUES(NULL,'ios2','guangzhou2');
INSERT INTO dept(dname,loc) VALUES('ios3','guangzhou3');
INSERT INTO dept(loc) VALUES('guangzhou4');
#一次性向数据库插入三条数据,只需要一次事务管理
INSERT INTO dept(loc) VALUES('guangzhou5'),('beijing'),('shanghai');

–2,总结

1, 查询语句中的*尽量换成 字段名称
2, 查询条件where中,尽量用and不用or. 尽量把查询条件的范围控制到最小
3, 查询条件中,尽量用= 别用!= <> , 尽量别用in
4, 表设计时,字段类型尽量用varchar代替char, 尽量用数字代替字符串
5, 索引: 单表中的索引最好控制在5个以内,
模糊查询时,只有一种可以让索引生效: 确定开始元素 ‘abc%’
写SQL时注意字符串的标准写法,
where name=123,name的索引会失效
where name=‘123’,name的索引会生效
注意复合索引的最左特性,如果不遵循会导致复合索引失效
6, 多表联查: 可以使用三种方式 笛卡尔积/连接查询/子查询
尽量不要有太多表联查,阿里的开发规范规定了最多三张表
连接查询相对高效,最高效的是内连接,因为内连接只是查交集
但是,在工作中,使用左连接是最多的,也会使用子查询

四,扩展 三范式

–1,概述

对于数据库的设计人员,必须要遵循的规范,就叫做范式.
常见的范式有三范式: 1NF 2NF 3NF
好处是: 可以让数据减少冗余

–2,三范式的规则

第一范式: 1NF, 是指 表里的字段值不能再被分割了
第二范式: 2NF, 是指 遵循了1NF的基础上,再遵循2NF.
是指 表里都应该设计主键字段(主属性),
其他的非主属性,应该都围绕着主属性展开描述.
第三范式: 3NF, 是指 遵循了前两范式
是指 字段之间的依赖性是直接的,而不是还要间接的产生依赖,导致查询关闭变得复杂

五,JDBC

–1,概述

全称叫java database connectivity,专门用来完成 利用一段java程序 来操作 数据库 的事情.
是一套标准,是一套规范. 本质上就是一个jar包(一堆的java工具类)

–2,使用步骤

1, 找到jar包,并拷贝进项目
2, 利用工具类 通过java连接数据库 (用户名root 密码root 数据库名cgb211101 数据库的端口号3306)
3, 通过java程序 发起SQL语句
4, 数据库把执行结果, 返回给java程序

–3,入门案例

1, 找到jar包,并拷贝进项目

创建java工程: File - New - Project - 选择java - next - next - 输入工程名 - Finish
导入jar包: 找到你的jar包,复制…选中idea里的项目,粘贴…
编译jar包: 选中jar包,右键,add as library…

2, 编写代码
package cn.tedu.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;//利用jdbc,操作数据库
//需求:查询部门表的所有数据
public class Test1 {public static void main(String[] args) throws Exception {//1,注册驱动Class.forName("com.mysql.jdbc.Driver");//2,获取数据库的连接//String url = "协议://数据库的服务器的IP地址:端口号/数据库名";String url = "jdbc:mysql://localhost:3306/cgb211101";Connection c = DriverManager.getConnection(url,"root","root");//3,获取传输器Statement s = c.createStatement();//4,执行SQL--查询部门表的所有数据ResultSet r = s.executeQuery("select * from dept");//执行查询的SQLSystem.out.println("java程序与数据库连接成功!!");//5,处理结果--遍历结果//next()从来判断,只要r里有数据就返回true.没数据就返回falsewhile( r.next() ){//获取不同类型的数据getXxx()int deptno = r.getInt(1); //获取第N列的值String dname = r.getString(2);String loc = r.getString(3);System.out.println(deptno+dname+loc);}//6,关闭资源closer.close();//关闭结果集resultsets.close();//关闭传输器statementc.close();//关闭连接Connection}
}

–4,练习

1,去数据库里,创建user表(id,name,pwd)并且插入数据
CREATE TABLE `user` (`id` int(11) NOT NULL auto_increment,`name` varchar(100) default NULL,`pwd` varchar(20) default NULL,PRIMARY KEY  (`id`)) ;
INSERT INTO USER VALUES(NULL,'jack','123456');
INSERT INTO USER VALUES(NULL,'rose','123');
2,去idea写jdbc的代码,查询user表里的所有数据
package cn.tedu.jdbc;import java.sql.*;//写jdbc的代码,查询user表里的所有数据
public class Test2 {public static void main(String[] args) throws Exception {//1,注册驱动Class.forName("com.mysql.jdbc.Driver");//2,获取连接ConnectionString url="jdbc:mysql://localhost:3306/cgb211101?characterEncoding=utf8";Connection c = DriverManager.getConnection(url, "root", "root");//3,获取传输器StatementStatement s = c.createStatement();//4,执行SQL,查询的SQL语句会保存数据库返回的数据,存入结果集ResultSetResultSet r = s.executeQuery("select * from user");//executeQuery()用来执行查询的SQL//executeUpdate()//用来执行 增删改的SQL//5,处理数据库返回的结果while(r.next()){//next()判断有没有数据,有数据就返回true,没数据就返回false//getXxx() 获取不同类型的数据int id = r.getInt("id");//参数是列名或者是列的索引1 2 3String name = r.getString("name");String pwd = r.getString("pwd");System.out.println(id+name+pwd);//拼串}//6,关闭资源r.close();//关闭结果集s.close();//关闭传输器c.close();//关闭连接}
}

作业:

1, 复习数据库的所有语法,包括扩展的面试点
2, jdbc的代码每个敲三遍
3, 提供jdbc的工具类,提高代码的复用性(封装第一步第二步的代码)
4, 务必保证jdbc的释放资源的代码一定要执行,提供解决方案

这篇关于cgb2111-day05的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095548

相关文章

C++复习day05

类和对象 1. 面向对象和面向过程的区别是什么?(开放性问题) 1. **抽象级别**:- **面向对象**:以对象(数据和方法的集合)为中心,强调的是数据和行为的封装。- **面向过程**:以过程(函数或子程序)为中心,强调的是步骤和顺序。2. **数据和方法的关系**:- **面向对象**:数据和处理数据的方法封装在对象中,对象可以包含数据和操作数据的方法。- **面向过程**:数据和处理

python进阶篇-day05-网络编程(TCP)与进程

day05网络编程 一. 网编三要素 ip 概述 设备(电脑, 手机, IPad, 耳机...)在网络中的唯一标识. 分类 按照 代数 划分: IPv4: 4字节, 十进制来表示, 例如: 192.168.13.157 IPv6: 8字节, 十六进制来表示, 理论上来讲, 可以让地球上的每一粒沙子都有自己的IP. Ipv4 常用类别划分: ​ 城域网: 第1段是网络地址

day05-面向对象-异常Lambda算法正则

一、⭐异常⭐ 1.1 异常 1.2 异常处理 1.2.1 抛出异常(throws) 在Java的方法调用中,如果一个方法中出现了异常,本方法自己不处理,默认是会抛给调用方法去处理的此时要注意的是,如果发生的是非运行时异常,需要在方法上明确使用throws关键字声明抛出​格式public void 方法名 throws 异常1 ,异常2 ,异常3 ..{方法体throw new E

IO进程day05(线程、同步、互斥、条件变量、进程间通信IPC)

目录 【1】线程 1》什么是线程 1> 概念  2> 进程和线程的区别 3> 线程资源  2》 函数接口 1> 创建线程:pthread_create 2> 退出线程:pthread_exit 3> 回收线程资源 练习1:通过父子进程完成对文件的拷贝(cp) 练习2:输入输出,quit结束  【2】同步 1》概念  2》同步机制 3》函数接口 【3】互斥 1》概念

Python大数据之Hadoop学习——day05_hive基本操作

一.SQL,Hive和MapReduce的关系 用户在hive上编写sql语句,hive把sql语句转为mapreduce程序去执行 二.Hive的架构映射流程 三.MetaStore元数据管理三种模式 metastore服务配置有3种: 内嵌模式、本地模式、远程模式(推荐) 内嵌模式本地模式远程模式Metastore单独配置、启动否否是Metadata存储介质Derby

Day05-Unity Time类

🏆 个人愚见,没事写写笔记 🏆《博客内容》:Unity3D开发内容 🏆🎉欢迎 👍点赞✍评论⭐收藏 🔎目标:Unity Time类 ☀️实现: Time相关内容主要用作游戏中参与位移,计时,时间暂停等。 一.时间缩放比例 1.时间停止 Time.timeScale = 0f; 2.恢复正常(默认) Time.timeScale = 1f; 3.时间倍数 /

苍穹外卖-day05(SpringBoot+SSM的企业级Java项目实战)

苍穹外卖-day05 课程内容 Redis入门 Redis数据类型 Redis常用命令 在Java中操作Redis 店铺营业状态设置 功能实现:营业状态设置 效果图: 选择营业中,客户可在小程序端下单: 选择打烊中,客户无法在小程序端下单: 1. Redis入门 1.1 Redis简介 Redis是一个基于内存的key-value结构数据库。R

云计算第二阶段---DBA Day05-DAY07

DBA   Day05         这周的内容涉及到的是各类数据库的服务配置与数据的备份与恢复操作. 环境准备: 设置   ip 地址 和主机名   安装mysql,mysql-server --->启动 yum -y install mysql mysql-server #装mysql环境包systemclt start mysqld #启动服务

入门Java编程的知识点—>数组(day05)

重点掌握数组是什么?为什么要使用?如何进行数组的定义? 数组 数组是用来存储同一类型多个元素的存储结构,数组是引用数据类型. 存储同一类型的多个元素如何理解? 生活中: 衣柜→可以存储多个衣服 | 鞋柜→可以存储多个鞋子 | 橱柜→可以存储多个餐具 程序中:int[] →可以存储多个整数 | double[]→可以存储多个小数 | char[]→ 可存储多个字符 适用性:当在程

cgb2111-day04

文章目录 一,多表联查--1,准备表和数据 二,笛卡尔积--1,概述--2,测试 三,连接查询--1,概述--2,测试 四,子查询--1,概述--2,测试 五,综合练习--1,测试 六,扩展:索引--1,概述--2,测试--3,总结 作业 一,多表联查 –1,准备表和数据 create table courses(cno varchar(5) not null,cna