Java基础十一

 问:什么是关系型数据库管理系统?
 答:由关系、数据、数据之间的约束三者所组成的数据模型则称为RDBMS,即关系型数据库管理系统。
 问:简述结构化查询语言的分类
 答:SQL(Structured Query Language)结构化查询语言
     SQL可分为:
        -数据定义语言(DDL) Data Definition Lauguage
 CREATE(创建)\DROP(删除表结构)\ALTER(修改)\TRUNCATE(删除表数据,保留表结构)
-数据操纵语言(DML) Data Manipulation Lauguage  执行完后需要执行事物控制语句提交后才能真正的将改变应用到数据库中
 INSERT(将数据插入到表中)\UPDATE(更新数据表中已存在的数据)\DELETE(删除数据表中的数据)
-事物控制语言(TCL) Transaction Control Lauguage
 COMMIT(提交)\ROLLBACK(回滚)\SAVEPOINT(保存点)
-数据查询语言(DQL) Data Query Lauguage
 SELECT语句
-数据控制语言(DCL) Data Control Lauguage
          GRANT(授权)/REVOKE(收权)/CREATE USER(创建用户)
 表是二维的,有行和列组成。行表示横排数据,也称作记录(Record),列是竖排数据,也被称作字段(Field)
 表是关系数据库的基本存储结构,一个关系数据库由多个数据表(Table)组成。
     
 表与表之间的关联关系:一对一,一对多,多对多
 # CHAR定长字符串,最大支持2000字节:查得快,浪费空间
 # VARCHAR、VARCHAR2变成字符串,最大支持4000字节:节约空间,查得慢
     VARCHAR  所有数据库都支持
     VARCHAR2 只有Oracle数据库支持 
 # DATE定义日期时间的数据,长度是7个字节
 # 创建表  CREATE TABLE 表名
 # 查看表的结构 DESC 表名
 # 删除表 DROP TABLE 表名
   DROP TABLE employee_zhangchao_sc;
   DESC employee_zhangchao_sc;
   CREATE TABLE employee_zhangchao_sc(
      id NUMBER(4),
      name VARCHAR2(20),
      gender CHAR(1) DEFAULT 'M',
      birth DATE,
      salary NUMBER(6,2),
      job VARCHAR2(30),
      deptno NUMBER(2)
   );
   在数据库中,所有类型的默认值都是NULL。即当插入数据时,若某个字段没有指定值时,默认就将NULL作为值插入。
   可以在创建表的时候通过使用DEFAULT关键字来单独指定默认值。


   字符串的字面量是使用单引号括起来的,这一点与java不同。
     
   NOT NULL 约束
   当一个字段使用NOT NULL约束后,该字段在任何情况下值不允许为空


 # 修改表
   1.修改表名
     RENAME old_name TO new_name
     将employee表改为myemp
     RENAME employee TO myname
 
 DECODE函数
  --可以实现分支结构。
  --如果第一个参数等于第二个参数,那返回第三个参数
  --如果第一个参数等于第四个参数,那么返回第五个参数
  --如果都不满足,返回最后一个
  SELECT ename,job,salary,DECODE(job,
                               'MANAGER',salary*1.2,
                               'ANALYST',salary*1.1,
                               'SALESMAN',salary*1.05,
                               salary) bonus
  FROM emp_zhangchao_sc;
####查询条件
  ##DISTINCT   过滤重复
    --去除后面指定字段的重复行。
    --DISTINCT必须紧跟在SELECT关键字之后!SELECT与DISTINCT之间不能用其他任何字段
    SELECT DISTINCT job FROM emp_zhangchao_sc;    --查看公司有哪些岗位?
####排序
  ##ORDER BY
    --可以根据后面指定的字段对结果进行升序或者降序排列。其中ASC是升序,DESC是降序
    --通常ASC可以不写,不写默认就是升序。
    --ORDER BY子句只能写在SELECT语句中最后一个子句上
####集合操作  字段的数量和类型必须一致(但可以用NULL补)
  ##UNION      --取并集,但重复的记录只会出现一次。
  ##UNION ALL  --取并集,重复的记录会重复出现
  ##INTERSECT  --取交集,保留上边和下边都有的
  ##MINUS      --取差集,保留上边有,下边没有的
    SELECT ename,job,salary FROM emp_zhangchao_sc
    WHERE job = 'MANAGER'
    MINUS
    SELECT ename,job,salary FROM emp_zhangchao_sc
    WHERE salary >2500;
####聚合函数
    --聚合函数又称为 多行函数,分组函数
    --聚合函数可以将多条记录进行统计,然后得出一个结果
    --所以聚合函数是用来统计使用的
    --聚合函数忽略NULL值
    #MAX(),MIN() 用来统计最大值与最小值
    #AVG(),SUM() 求平均值与总和
    #COUNT() 统计记录总数
####高级分组函数
    #ROLLUP(a,b,c)   
      SELECT year_id,month_id,day_id,SUM(sales_value)
      FROM sales_zhangchao
      GROUP BY ROLLUP(year_id,month_id,day_id)--需求是分组逐个递减才使用  --按照:年月日、年月、年、SUM(sales_value)
      ORDER BY year_id,month_id,day_id;
    #CUBE(a,b,c)
      --CUBE分组方式是全方位的。
      --分组方式是2的参数个数次方。abc ab ac bc a b c 全表
      --但有些记录根本没意义
      SELECT year_id,month_id,day_id,SUM(sales_value)
      FROM sales_zhangchao
      GROUP BY CUBE(year_id,month_id,day_id)
      ORDER BY year_id,month_id,day_id;--有些记录根本每月意义
    #GROUPING SETS 比较灵活
      --允许指定不同的分组方式,然后将这些分组统计的结果并在一个结果集中。
      SELECT year_id,month_id,SUM(sales_value)
      FROM sales_zhangchao
      GROUP BY GROUPING SETS(
                (year_id,month_id),year_id  --将按照每个参数进行分组统计  --按照:年月、年统计
      )
      ORDER BY year_id,month_id;
####分组
  ##GROUP BY
    --GROUP BY子句可以将结果集按照指定的字段值相同的记录看做一组
    --配合聚合函数使用可以对不同分组的记录分别进行统计后然后得到结果
    --在SELECT当中使用了聚合函数,那么不在聚合函数中的其他单独字段必须出现在GROUP BY子句中,反过来不是必须得
    --GROUP BY可以按照多个字段进行分组。分组原则是这些字段值的组合相同的看做一组
      SELECT AVG(salary),deptno,job FROM emp_zhangchao_sc
      GROUP BY deptno,job;
  ##HAVING子句   --WHERE子句先过滤,HAVING子句后过滤
     --HAVING子句必须紧跟在GROUP BY子句之后,作用是添加条件来过滤不同的分组
     --HAVING可以使用聚合函数作为过滤条件(WHERE不能使用聚合函数作为过滤条件)
     SELECT MAX(salary),MIN(salary),deptno FROM emp_zhangchao_sc
     GROUP BY deptno
     HAVING AVG(salary)>2500;
####排序函数
  ##ROW_NUMBER   -生成连续且唯一的数字
     SELECT ename,salary,deptno,
     ROW_NUMBER() OVER(
        PARTITION BY deptno
        ORDER BY salary
     )rank
     FROM emp_zhangchao_sc;  --工资相同,排名不同
  ##RANK         -生成不连续也不唯一的数字
     SELECT ename,salary,deptno,
     RANK() OVER(
        PARTITION BY deptno
        ORDER BY salary
     )rank
     FROM emp_zhangchao_sc;  --工资相同,排名相同,名次不连续
  ##DENSE_RANK   -生成连续但不唯一的数字   (工资相同,排名相同,名次连续)
####DECODE函数
    --可以实现分支结构。
    --如果第一个参数等于第二个参数,那返回第三个参数
    --如果第一个参数等于第四个参数,那么返回第五个参数
    --如果都不满足,返回最后一个
    SELECT ename,job,salary,DECODE(job,
                                  'MANAGER','VIP',
 'SALESMAN','VIP',
 'OTHER') part
    FROM emp_zhangchao_sc;
    结合GROUP BY使用:
    SELECT COUNT(*),DECODE(job,
                           'MANAGER','VIP',
  'SALESMAN','VIP',
  'OTHER') part
    FROM emp_zhangchao_sc
    GROUP BY DECODE(job,
                    'MANAGER','VIP',
           'SALESMAN','VIP',
   'OTHER');
####关联查询
  ##内连接   满足所有满足连接连接的数据记录
    SELECT e.ename,d.dname
    FROM emp_zhangchao_sc e JOIN dept_zhangchao_sc d 
    ON e.deptno = d.deptno --连接条件
    WHERE d.dname = 'SALLES';--过滤条件
  ##外连接 
   #左外连接:以JOIN左侧的表为驱动表,该表所有记录都要显示出来,那么当某条记录不满足连接条件时
             --那么来自JOIN右侧表中的字段值全部显示为NULL
    --LEFT OUTER JOIN
        SELECT e.ename,e.job,e.d eptno,d.dname,d.loc
        FROM emp_zhangchao_sc e,dept_zhangchao_sc d 
        WHERE e.deptno = d.deptno(+);--左外连接效果    
   #右外连接:同理   RIGHT OUTER JOIN
        SELECT e.ename,e.job,e.deptno,d.dname,d.loc
        FROM emp_zhangchao_sc e,dept_zhangchao_sc d 
        WHERE e.deptno(+) = d.deptno;--右外连接效果  
   #全外连接:同理   FULL OUTER JOIN
  ##自连接
    --当前表的一条记录对应当前表自己的多条记录,这种设计就是自连接,自连接时用来解决数据内容相同
    --但是数据间又存在上下级关系的树状结构的情况。
    SELECT e.ename,m.ename
    FROM emp_zhangchao_sc e,emp_zhangchao_sc m
    WHERE e.mgr = m.empno;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值