cgb2107-day05
Posted cgblpx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cgb2107-day05相关的知识,希望对你有一定的参考价值。
文章目录
一,扩展视图
–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
#统计每个岗位的老师有几个人
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的执行顺序
–2,总结
参考帖子里的内容: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,当用户输入正确的用户名和密码时,提示登录成功,否则提示登录失败
以上是关于cgb2107-day05的主要内容,如果未能解决你的问题,请参考以下文章