学习day18

学习的内容:
今天学习了昨天作业很需要用到的 子查询 :在WHERE 查询条件中的限制条件不是一个确定的值,而是
来自另外一个查询的结果。
查询软件部门下的所有员工:
SELECT * FROM emp e WHERE e.deptno = (SELECT d.deptno FROM dept d WHERE d.dname='软件部')

多行子查询:如果子查询返回了多行记录,则称这样的嵌套查询为多行子查询。常用到的操作符:IN、ALL、ANY等。
特别注意e.sal>ANY( )是 e.sal>ANY中最小的值。

多列子查询:
SELECT * FROM emp e1 WHERE (e1.sal,e1.comm) = (SELECT e2.sal,e2.comm FROM emp e2 WHERE e2.ename='张青');


分页查询limit 子句:当表中的数据很多时,可以使用分页查询,以降低对数据库服务器的压力。使用limit
子句实现分页查询。
SELECT * FROM emp LIMIT 0,2; #第一个数字是第几条开始,第二个为查出几条数据,关系为:start=(pageIndex-1)*pageSize

执行顺序:from>where>group>having>select>order by>limit


单行函数,对于每一行的数据计算后得到一行输出结果;
多行函数,是多行数据参与运算后得到一行输出结果。


大小写转换函数:UPPER、LOWER
获取子字符串函数:SUBSTR


字符串有两种连接方式:1.使用字符串连接函数CONCAT; 2.用加号来链接。


还有数学函数:ROUND(x,[y])和日期函数:NOW()等;


数据库的设计过程大致可分为5 个步骤:
1. 需求分析:在本阶段主要是得到准确并且完整的用户需求信息,包括数据及其处理。
2. 概念模型:通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS 的数据模型。
3. 物理模型:为概念模型选取一个物理数据库,如MySQL、Oracle、SQLServer。
4. 运行验证:在上述设计的基础上,收集数据并具体建立一个数据库,运行一些典型的应用任
务来验证数据库设计的正确性和合理性。


三大范式:第一范式、第二范式、第三范式。
第一范式:第一范式要求单个表中每个列必须是原子列(每一列都是不可再分的最小数据单元)、
列不存在重复属性、每个实体的属性也不存在多个数据项。
第二范式:第二范式是在满足第一范式的基础上,要求数据表里的所有数据都要和该数据表的主键
有完全依赖关系。
第三范式:第三范式是在满足第二范式的基础上,每一个非主键列都直接依赖主键列,不依赖其
它非主键列,即数据库中不能存在传递函数依赖关系。
优点:
1. 范式化的数据库更新起来更加快;
2. 范式化之后,只有很少的重复数据,只需要修改更少的数据;
3. 范式化的表更小,可以在内存中执行;
4. 很少的冗余数据,在查询的时候需要更少的distinct 或者group by 语句。
缺点:
1. 范式化的设计会产生更多的表
2. 在查询的时候经常需要很多的表连接查询,导致查询性能下降


JDBC(Java Data Base Connectivity,java 数据库连接)是一种用于执行SQL 语句的Java API,
可以为多种数据库库提供统一访问,它由一组用Java 语言编写的类和接口组成。
JDBC 可做三件事:
1. 与数据库建立连接 2. 将 Java 中拼写的SQL 语句发送到数据库中执行 3. 处理执行结果


下午就是讲了JDBC的增、删、改和查:
添加jar包:新建项目--->新建lib--->拷贝jar包至该目录下--->项目右键--->build path--->
configure build path--->libraries--->add jars--->选中lib目录下的jar包
步骤:
public static void main(String[] args) throws SQLException {
    String url = "jdbc:mysql://localhost:3306/score";
    String username = "root";
    String password = "root";
    Connection connection = null;
    PreparedStatement ps = null;
    ResultSet rs = null;
    //1.加载驱动
    try {
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取Connection
        connection = DriverManager.getConnection(url,username,password);
        //3.拼写sql语句(增删改查相似,语句不同)
        String sql = "select * from student";
        //4.获取PrepareStatement
        ps = connection.prepareStatement(sql);
//5.发送并执行sql语句:增删改
// int i = ps.executeUpdate();
        //*5.发送并执行sql语句:查询
        rs = ps.executeQuery();
//6.返回结果:增删改
// system.out.println(i);
        //*6.返回结果:查询
        while(rs.next()) {
            String studentId = rs.getString("studentid");
            String studentname = rs.getString("studentname");
            int age = rs.getInt("studentage");
            String gender = rs.getString("studentsex");
            String address = rs.getString("studentaddress");
            String classid = rs.getString("classid");
            System.out.println(studentId+","+studentname+","+age+","+gender+","+address+","+classid);
        }
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SQLException e) {
        // TODO: handle exception
    }finally {
        //7.关闭资源
        rs.close();// 增删改 可以不用这一步
        ps.close();
        connection.close();
    }


}


学习的问题:
孰能生巧,磨刀不误砍柴工,用功学好基础知识,一步一步走踏实。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值