一.扩展视图
-1.概述
可视化的表,视图当做是一个特殊的表,是指,把sql执行的结果,直接缓存到了视图中.
下次还要发起相同的sql,直接查视图
使用: 1. 创建视图 2.使用视图
-2 测试
create view 视图名 as sql语句;
select * from 视图名;
#视图: 就是一个特殊的表,缓存上次的查询结果
#好处是提高了sql的复用性,坏处是占内存无法被优化
#1.创建视图
create view emp_view3 as
select * from emp where ename like '%a%' #模糊查询,名字里有包含a的
#使用视图
select * from emp_view3;
二.sql练习
1. 测试
#统计每个岗位的老师有几个人
select count(1) ,prof from teachers
group by prof
having prof = '副教授';
#统计每个系最年长的老师
select depart,min(tbirthday) from teachers
group by depart;
#查询大于平均年龄的老师
select avg(tbirthday) from teachers;
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 t on courses.tno = t.tno and t.tsex = "男";
#笛卡尔积
select c.cname
from teachers t,
courses c
where t.tno = c.tno
and t.tsex = '男';
#了解insert into
# 给指定列插入指定值,多个列名用逗号隔开,多个值也是用逗号隔开
insert into dept(deptno) values ('java开发部')
三.sql优化
-1.sql的执行顺序
- from [left_table] 选择表
- on <join_condition> 链接条件
- <join_type> join <right_table> 链接
- WHERE <where_condition> 条件过滤
- GROUP BY <group_by_list> 分组
- agg_func (COLUMN OR expression),…聚合
- HAVING <having_condition> 分组过滤
- SELECT(9) DISTINCT COLUMN…选择字段.去重
- ORDER BY <order_by_list> 排序
-2 总结
- 用字段名代替*
- where里能用and就不用or
- 设置字段类型时,能用varchar就不用char
- 字段值尽量用数字代替字符串
- 给常用来作为查询条件的字段,设计索引,但是单表的索引控制在5个以内
- 观察sql的性能,使用explain关键字,本质上就是看有没有用到索引
- 模糊查询, where name like ‘a%’, 是高效的写法,甚至可以让索引生效
- where name = 123 会导致索引失效
where name =‘123’ 会让name字段的索引生效
四. jdbc
-1 . 概述
全程是java database connectivity,专门用来通过java程序操作数据库
jdbc还是一套标准,支持对各种数据库产品的操作
MySQL数据库使用jdbc:提供了一个jar包(很多工具类)
-2 使用步骤
1.创建工程,导入MySql提供的jar包并编译: 把jar包复制到工程里,编译jar包
2.通过java连接数据库,需要指定一些连接数据库的参数: 用户名,密码,端口号,ip地址,指定库
3.发起sql语句并执行
4.处理结果集
-3.入门案例
package zhu.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
/**
* @作者: 朱学长
* @时间: 2021/9/1 0001 星期三
*/
public class test1 {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/cgb2022";
Connection conn = DriverManager.getConnection(url,"root","123456");
Statement st = conn.createStatement();
String sql = "select * from dept";
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
for (int i = 1; i <= 3; i++) {
System.out.println(rs.getObject(i));
}
}
rs.close();
st.close();
conn.close();
}
}