数据库-day05

SQL练习

#查询男教师人数
select count(1) ,tname from  teachers 
where tsex ="男" 
GROUP BY tname ;
#having tsex='男';  #having里不能出现没查过的列名
#查询女学生的所有信息
select * from students  where ssex ="女";
#查询每个班里的女学生的人数和名字
select count(1),sname ,class from students where ssex ="女" GROUP BY class 
#查询最年长和年轻的学生
select max(sbirthday),min(sbirthday) from students 
#查询大于平均年龄的学生
select * from students where sbirthday<(
select avg(sbirthday) from students 
);

Oralce --虚表dual

dual是一个虚拟表,mysql没有哦,用来构成select的语法规则,oracle保证dual里面永远只有一条记录,用它可以做很多事情。

select 1 from dual							#虚拟出一个数字列
select 'abc' from dual					#虚拟出一个字符串列
select sysdate from dual					#获取系统当前日期
select sys_guid() from dual				#获取uuid

Oralce – 序列 sequence

和MySQL里的主键,,,自动递增效果一样。Oracle可以指定开始位置,递增规则。
创建序列
数据库-day05

select sname ,ssex,
      case ssex when  '0' then '女'  else '男'  end sex
from stu

select * from stu where rownum<2
--dual虚表
select sysdate from dual
--2.使用序列,自己指定开始位置和变化位置
select ID_SEQ.currval from dual --currval查询当前的值
select ID_SEQ.Nextval from dual --Nextval查询下一次的值
insert into stu(sid) values(ID_SEQ.Nextval)--只给sid列赋值,其他列都是null
Select * from stu ---sid 确实使用了序列的值

alter session set nls_date_format= 'yyyy-mm-dd'

insert into stu values ('hi',1,'2000-01-01','ios',ID_SEQ.Nextval) 
--以后插入新数据时,sid都可以用序列的值

Oralce --视图

数据库-day05

--视图:好处是提高查询效率,缺点是SQL无法优化
create or replace view StuView as
  --要把查询结果缓存到视图里
  select * from stu where sname like '%o%';
  
  -- 2.使用视图
    select * from stu where sname like '%o%';
    select * from StuView---不需要次次写相同的需求了,因为都缓存到视图了

Oralce --触发器

数据库-day05
数据库-day05

create or replace trigger Stu_update_Tril
  before update on stu  
  for each row
  
  select * from stu
  --触发器
declare
  -- local variables here
begin
--判断如果满足了条件,就执行触发器的功能
    IF :NEW.SSEX>5 THEN  
         :NEW.SSEX := 1;--把新的值设置成1
    END IF;
end Stu_update_Tril;

使用触发器

--使用触发器
update stu set ssex=10;--满足了触发器条件,ssex改成了触发器规定的1

update stu set ssex=3;--不满足触发器的条件
select *from stu

三.JDBC

专门用来 通过java程序 连接 数据库。是一套标准,本质上就是用jar包里的各种工具类
开发步骤************************************
1.导入jar包
数据库-day05
2.创建工程:
File-New-Project-选java-next-next-输入工程名-finish
创建lib文件夹:选中工程-右键-new-Directory-起个名字lib-finish
拷贝jar包:从磁盘里找到下载好的jar包,复制粘贴到lib文件夹里
数据库-day05
3.编译jar包:
数据库-day05
数据库-day05
练习测试

package cn.tedu.test;

import java.sql.*;

//测试jdbc
public class Test1 {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
        //Class.forName("com.mysql.cj.jdbc.Driver");//高版本jar包的路径
        Class.forName("com.mysql.jdbc.Driver");//低版本
        //2.连接数据库(用户名,密码,ip地址,端口号)

       // String url ="使用的协议 IP地址 端口号 数据库名";
        String url ="jdbc:mysql://localhost:3306/test2";
        String user ="root";//连接
        String pwd = "root";
        //3,获取传输器
        Connection conn = DriverManager.getConnection(url, user, pwd);
        //4,执行SQL -- 查询部门表的所有数据
        Statement st = conn.createStatement();

        String sql = "select * from t";
        executeQuery执行了查询的语句,并且把结果封装给了ResultSet结果集
        ResultSet rs = st.executeQuery(sql);
        //5.结果集
        while(rs.next()){//next()判断有没有下一条数据,又返回true,没有返回false
            //获取数据:根据列的编号 或者 列名
            //            int num = rs.getInt(1);//获取第1列的数据
//            String name = rs.getString(2);//获取第2列的数据
//            String loc = rs.getString(3);//获取第3列的数据
            int num = rs.getInt("depto");//获取deptno列的数据
            System.out.println(num);// 1 2 3 
            String s1 = rs.getString("dname");//获取dname列的数据
            System.out.println(s1);//
            String s2 = rs.getString("loc");//获取loc列的数据
            System.out.println(s2);//

        }
        //6.释放资源
        rs.close();//释放结果集
        st.close();//释放传输器
        conn.close();//释放连接
    }

}

利用jdbc向dept表中插入数据

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class test2 {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.连接数据库(用户名,密码,ip地址,端口号)

        // String url ="使用的协议 IP地址 端口号 数据库名";
        String url2 ="jdbc:mysql://localhost:3306/test2";
        String user2 ="root";//连接
        String pwd2 = "root";
        Connection conn2 = DriverManager.getConnection(url2, user2, pwd2);
        //3,获取传输器
        Statement st2 = conn2.createStatement();
        //4,执行SQL
        //利用jdbc向dept表中插入数据
        String sql2 ="insert into t values(15,'jaxa','三区')";
        //executeUpdate用来执行增删改的SQL,返回影响行数
        int rs2 = st2.executeUpdate(sql2);
        //5,解析结果集
        System.out.println("数据插入成功");
        //6,释放资源
        //rs2.close();
        st2.close();
        conn2.close();
    }
}
上一篇:JavaSE学习 Day05 - Java方法详解


下一篇:Java语言学习day05--7月2日