cgb2106-day05
Posted cgblpx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cgb2106-day05相关的知识,希望对你有一定的参考价值。
一,视图
–1,概述
可以把SQL的查询结果缓存起来,存入视图中.
好处: 简化了SQL的编写
坏处: 没法做SQL的优化,占用空间.
–2,测试
#1.创建视图:缓存了查询结果
CREATE VIEW `cgb2106`.`emp_view`
AS
#以下的SQL执行的结果会被缓存到视图中
(SELECT * FROM emp WHERE ename LIKE '%a%');
#2.使用视图
#SELECT * FROM emp WHERE ename LIKE '%a%'
SELECT * FROM emp_view
#直接查的视图,视图就是一张特殊的表,最好只做查询
二,SQL练习
–1,测试
SELECT * FROM emp #低效
SELECT empno,ename,job,sal FROM emp #高效
SELECT * FROM emp WHERE empno=100
SELECT * FROM emp WHERE job LIKE '总%'#高效
SELECT * FROM emp WHERE job LIKE '_总'#_通配一个字符
SELECT * FROM emp WHERE job LIKE '%总%'#%通配n个字符
SELECT * FROM emp WHERE empno>100 AND empno<300
SELECT * FROM emp WHERE empno BETWEEN 100 AND 300#包含
SELECT * FROM emp
#where ename='rose' and job='副总' #并且关系
#where ename='jack' or job='员工' #或者关系
WHERE ename='jack' OR ename='rose' #或者关系
#WHERE ename in('jack','rose')
#查询>45岁的人的名字
SELECT sname FROM students
#where里不能用聚合函数max min sum avg count
WHERE YEAR(NOW())-YEAR(sbirthday) > 45
#按照年龄排序
SELECT *,YEAR(NOW())-YEAR(sbirthday) AS age
FROM students
ORDER BY age
#查询年龄最大的
#desc limit 1
SELECT sname,MIN(sbirthday) FROM students
GROUP BY sname
#查询高于平均工资的员工信息
SELECT * FROM emp WHERE sal > (
SELECT AVG(sal) FROM emp
)
#查询部门地址在二区的员工信息
SELECT deptno FROM dept WHERE loc='二区'
SELECT * FROM emp WHERE deptno IN (2,3)
SELECT * FROM emp WHERE deptno IN (
SELECT deptno FROM dept WHERE loc='二区'
)
#笛卡尔积/join/子查询
#练习1: 查询李军的总得分
SELECT SUM(degree) FROM scores WHERE sno=(
SELECT sno FROM students WHERE sname='李军'
)
SELECT SUM(b.degree) FROM
students a,scores b
WHERE a.sno=b.sno AND a.sname='李军'
SELECT SUM(b.degree) FROM
scores b LEFT JOIN students a
ON a.sno=b.sno
WHERE a.sname='李军'
#练习2: 查询易天负责的课程名称
SELECT cname FROM courses WHERE tno=(
SELECT tno FROM teachers WHERE tname='易天'
)
SELECT b.cname FROM
courses b LEFT JOIN teachers a
ON a.tno=b.tno
WHERE a.tname='易天'
SELECT b.cname FROM
teachers a,courses b
WHERE a.tno=b.tno AND a.tname='易天'
三,SQL优化的方案
–1,总结
1, 尽量使用字段名代替*
2, 做表设计时,字段的类型最好是varchar代替char
3, 字段里的值,最好用数字代替字符串
4, 尽量把过滤条件精细,能用and不用or
5, 索引的设计,最多5个,不能太多
6, 模糊查询,尽量要确定开始元素,让索引生效
7, 数据库对数字没有严格的要求,name=123索引失效,name='123’索引生效
8, 无用的索引最好及时删除
四,JDBC
–1,概述
是一种 专门用来 通过java程序操作数据库的标准
–2,使用步骤
导入jar包(存放了大量java工具类的压缩包)
使用工具类,连接数据库
通过程序发起SQL,操作数据库
数据库把结果返回给java程序
java程序解析结果
–3,导入jar包
创建lib文件夹: 选中project-右键-new-directory
导入jar包: 找到你磁盘里的mysql的jar包,复制,直接粘贴到lib里
编译jar包: 选中jar包-右键-add as library
检查: jar包前面的箭头可以展开
–4,入门案例
package cn.tedu.test;
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,注册驱动 Driver
Class.forName("com.mysql.jdbc.Driver");
//2,获取连接(用户名 密码 端口号 库名)
// 协议 IP地址:端口号 库名
String url = "jdbc:mysql://localhost:3306/cgb2106";
Connection c = DriverManager.getConnection(url,"root","root");
//3,获取传输器
Statement s = c.createStatement();
//4,执行SQL --executeQuery执行查询的SQL
ResultSet r = s.executeQuery("SELECT * FROM dept");
//5,处理结果集
while( r.next() ){//next()判断有没有数据,有数据就返回true
String a=r.getString(1);//获取第1列的数据
// String b=r.getString("deptno");//获取指定字段名的值
String b=r.getString(2);//获取第2列的数据
String d=r.getString(3);//获取第3列的数据
System.out.println(a+b+d);
}
//6,释放资源
r.close();//结果集
s.close();//传输器
c.close();//连接
}
}
以上是关于cgb2106-day05的主要内容,如果未能解决你的问题,请参考以下文章