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的主要内容,如果未能解决你的问题,请参考以下文章

cgb2106-day09

cgb2106-day17

cgb2106-day18

cgb2106-day14

cgb2106-day12

cgb2106-day03