cgb2107-day05 ﹏ヽ暗。殇╰゛Y 2021-09-11 03:34 213阅读 0赞 ### 文章目录 ### * * 一,扩展视图 * * \--1,概述 * \--2,测试 * 二,SQL练习 * * \--1,测试 * 三,SQL优化 * * \--1,SQL的执行顺序 * \--2,总结 * 四,JDBC * * \--1,概述 * \--2,使用步骤 * \--3,入门案例 * \--4,练习 * 五,作业 ## 一,扩展视图 ## ### –1,概述 ### 可视化的表,视图当做是一个特殊的表,是指,把sql执行的结果,直接缓存到了视图中。 下次还要发起相同的sql,直接查视图。 使用: 1,创建视图 2,使用视图 ### –2,测试 ### create view 视图名 as SQL语句; select * from 视图名; #视图:就是一个特殊的表,缓存上次的查询结果 #好处是提高了SQL的复用率,坏处是占内存无法被优化 #1.创建视图 CREATE VIEW emp_view AS SELECT * FROM emp WHERE ename LIKE '%a%' #模糊查询,名字里包含a的 #2.使用视图 SELECT * FROM emp_view ## 二,SQL练习 ## ### –1,测试 ### 参考帖子里的内容:[https://blog.csdn.net/u012932876/article/details/117359992][https_blog.csdn.net_u012932876_article_details_117359992] #统计每个岗位的老师有几个人 SELECT COUNT(1),prof FROM teachers GROUP BY prof #按照非聚合列分组 HAVING prof='副教授' #having分组后再过滤 #统计每个系最年长的老师 SELECT depart,MIN(tbirthday) FROM teachers GROUP BY depart #order by tbirthday #按照数字升序 #查询大于平均年龄的老师 SELECT AVG(tbirthday) FROM teachers #'19690708250000.0000000000' SELECT * FROM teachers WHERE tbirthday<( SELECT AVG(tbirthday) FROM teachers ) #查询男老师能上的课程 #子查询:in子查询,因为第一次查到了多个结果 SELECT cname FROM courses WHERE tno IN( SELECT tno FROM teachers WHERE tsex='男') #连接查询:小表驱动大表,高效 SELECT courses.cname FROM courses INNER JOIN teachers ON teachers.tno=courses.tno #表关系 WHERE teachers.tsex='男' #业务条件 #笛卡尔积 SELECT courses.cname FROM teachers,courses WHERE teachers.tno=courses.tno #表关系 AND teachers.tsex='男' #业务条件 #了解insert into #给指定列插入指定值,多个列名用逗号隔开,多个值也是逗号隔开 INSERT INTO dept(dname) VALUES('java开发部') ## 三,SQL优化 ## ### –1,SQL的执行顺序 ### ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_20_color_FFFFFF_t_70_g_se_x_16] ### –2,总结 ### 参考帖子里的内容:[https://blog.csdn.net/u012932876/article/details/117359992][https_blog.csdn.net_u012932876_article_details_117359992] 1,用字段名代替\* 2,where里能用and就不用or 3,设置字段类型时,能用varchar就不用char 4,字段值尽量用数字代替字符串 5,给常用来作为查询条件的字段,设计索引,但是,单表的索引控制再5个以内 6,观察SQL的性能,使用explain关键字,本质上就是看有没有用到索引 7,模糊查询,where name like ‘张%’ ,是高效的写法,甚至可以让索引生效 8,where name=123,会导致索引失效。 where name=‘123’,会让name字段的索引生效 。。。。 ## 四,JDBC ## ### –1,概述 ### 全称是java database connectivity,专门用来通过Java程序 操作 数据库。 JDBC还是一套标准,支持对各种数据库产品的操作。 MySQL数据库使用JDBC:提供了一个jar包(很多的工具类)。 ### –2,使用步骤 ### 1,创建工程,导入MySQL提供的jar包并编译:把jar包复制到工程里,编译jar包(选中jar包右键add as library…) 2,通过Java连接数据库,需要指定一些连接数据库的参数:用户名,密码,端口号,ip地址,指定库名。 3,发起SQL语句并执行 4,处理结果集 ### –3,入门案例 ### package cn.tedu.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; //测试 jdbc //1,导入jar包 2,连接数据库 public class Test1 { public static void main(String[] args) throws Exception { //1,注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2,获取数据库的连接 //数据传输协议 数据库的ip 端口号 数据库名 String url = "jdbc:mysql://localhost:3306/cgb2107"; Connection c = DriverManager.getConnection(url,"root","root"); //3,获取传输器 Statement s = c.createStatement(); //4,利用传输器执行SQL,返回结果 ResultSet r = s.executeQuery("select * from dept");//执行查询语句 //5,处理结果 while( r.next() ){ //next()判断有数据吗,有就返回true //解析数据,用getXxx()获取每个字段的值--参数可以是字段名或者字段索引 int a = r.getInt(1);//获取第1列的值 System.out.println(a); String b = r.getString("dname");//获取dname字段的值 System.out.println(b); String loc = r.getString(3);//获取第3列的值 System.out.println(loc); } //6,释放资源 r.close();//结果集 s.close();//传输器 c.close();//连接 } } ### –4,练习 ### package cn.tedu.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; //练习jdbc public class Test2 { public static void main(String[] args) throws Exception { // method(); method2(); } //利用jdbc,完成新增的功能 private static void method2() throws Exception{ //1,注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2,获取数据库的连接 //数据传输协议 数据库的ip 端口号 数据库名 String url = "jdbc:mysql://localhost:3306/cgb2107"; Connection c = DriverManager.getConnection(url,"root","root"); //3,获取传输器 Statement s = c.createStatement(); //4,利用传输器执行 增删改的SQL //executeUpdate()用来执行增删改的SQL,只返回影响行数 int rows = s.executeUpdate( "INSERT INTO emp(ename,job) VALUES('rose','副总')"); //5,释放资源 //r.close();//结果集 s.close();//传输器 c.close();//连接 } //利用jdbc,查询emp表的所有数据 private static void method() throws Exception { //1,注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2,获取数据库的连接 //数据传输协议 数据库的ip 端口号 数据库名 String url = "jdbc:mysql://localhost:3306/cgb2107"; Connection c = DriverManager.getConnection(url,"root","root"); //3,获取传输器 Statement s = c.createStatement(); //4,利用传输器执行SQL,返回结果 ResultSet r = s.executeQuery("select * from emp"); //5,处理结果 while(r.next()){ //如果有数据,next()返回true for(int i=1;i<9;i++){ //自己数表里一共有几列,就循环几次 Object a = r.getObject(i);//参数是字段的索引1 2 3... System.out.println(a);//打印每列得到的值 } } //6,释放资源 r.close();//结果集 s.close();//传输器 c.close();//连接 } } ## 五,作业 ## 需求: 模拟用户登录现象 1,需要你自己创建user表,并提供一些字段(id name password) 2,向表中添加记录,如1 jack 123456 3,编写JDBC程序,完成登录 4,本质上就是向发起了select语句: select \* from user where name=‘jack’ and password=‘123456’ 5,当用户输入正确的用户名和密码时,提示登录成功,否则提示登录失败 [https_blog.csdn.net_u012932876_article_details_117359992]: https://blog.csdn.net/u012932876/article/details/117359992 [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_20_color_FFFFFF_t_70_g_se_x_16]: /images/20210911/0d77a82ccbd6444498a091879186e62a.png
相关 cgb2107-day17 文章目录 一,IOC的xml方式--了解 \--1,项目结构 \--2,创建Hello类 \- 待我称王封你为后i/ 2022年09月11日 10:29/ 0 赞/ 153 阅读
相关 cgb2107-day08 文章目录 一,模拟 服务器解析浏览器发来的数据 二,CSS选择器 \--1,概述 \--2,简单选择器 旧城等待,/ 2021年09月11日 03:36/ 0 赞/ 261 阅读
还没有评论,来说两句吧...