• 实验 ·SQL语言综合练习


    学号:																姓名:
    

    一、按以下方式建立建立部门(dept)

    Create table dept(
      dno char(10) primary key,
    	Dname char(40),
    	Dloc char(40));
    
    Insert into dept
    	Values(‘10’,’研究所’,’北京’);
    Insert into dept
      Values(‘11’,’经营部’,’潍坊’);
    Insert into dept
      Values(‘12’,’办公室’,’潍坊’);
    

    问题:对于给定的部门编号,编写语句块,按以下格式输出该部门的新息:

    部门编号:XXX

    部门名称:XXX

    部门所在位置:XXX

    DECLARE
       CURSOR dept_cur IS 
       select dno,dname,dloc from dept;
       dept_record dept%ROWTYPE
    BEGIN
       OPEN dept_cur;
       LOOP
       	FETCH dept_cur INTO dept_record;
       	EXIT WHEN depu_cur%NOTFPUND;
       	dbms.output.put_line('部门编号:'|| dept_record.dno);
       	dbms.output.put_line('部门名称:'|| dept_record.Dname)
       	dbms.output.put_line('部门所在位置:'|| dept_record.Dloc)
    END;
    

    二、SQL综合练习

    Create table emp(
    	编号 char(20) primary key,
    	姓名 char(20),
    	性别 char(4),
    	出生年月 date,
    	入职日期 date,
    	岗位 char(20),
    	薪水 number,
    	部门编号 char(10));
    
    Insert into dept
    	Values(‘10001’,’张力’,’男’,to_date(‘1998-7-1’,’YYYY-MM-DD’),to_date(‘1998-1-1’,’YYYY-MM-DD’),’研究员’,6100,’10’);
    
    Insert into dept
    	Values(‘10002’,’赵军’,’男’,to_date(‘1998-6-1’,’YYYY-MM-DD’),to_date(‘1998-1-1’,’YYYY-MM-DD’),’研究员’,7000,’11’);
    
    Insert into dept
    	Values(‘10003’,’王张力’,’男’,to_date(‘1989-1-1’,’YYYY-MM-DD’),to_date(‘1998-1-1’,’YYYY-MM-DD’),null,5800,’12’);
    

    针对关系模式:雇员(编号,姓名,性别,出生年月,入职日期,岗位,薪水,部门编号)
    部门(部门编号,部门名称,所在城市)
    写出完成以下操作的SQL命令。

    1、写出创建“部门”表的命令

    create table 部门(
     部门编号 varchar2(10) primary key,
     部门名称 varchar2(20),
     所在城市 varchar2(20)
    );
    

    2、查询男性雇员的信息

    select * from 雇员 where(
     性别='男'
    );
    

    3、查询暂时未分配岗位的雇员编号和姓名

    select 编号,姓名 from 雇员 where(
     岗位 is NULL
    );
    

    4、该单位共设置了哪些岗位

    select 岗位 from 雇员;
    

    5、查询薪水低于6000的雇员编号、姓名及岗位

    select 编号,姓名,岗位 from 雇员 where(
     薪水 < 6000
    );
    

    6、查询90年之前入职的雇员信息

    select * from 雇员 where(
     入职日期 < to_date('1990-1-1','yyyy-mm-dd')
    );
    

    7、查询“张”姓雇员信息

    select * from 雇员 where(
     姓名 like '张%'
    );
    

    8、查询所有雇员的编号、姓名、性别和部门名称

    select 编号,姓名,性别,部门名称 from 雇员,部门 where(
     emp.部门编号=dept.部门编号
    );
    

    9、查询与“王军”岗位相同的雇员信息

    select * from 雇员 where(
     岗位=(select 岗位 from 雇员 where 
         姓名='王军')
    );
    

    10、薪水低于6000的提高10%

    update 雇员 
    set 薪水=薪水*1.1 where(
     薪水 < 6000
    );
    

    11、向部门表插入一条新纪录:1004,研究所、北京

    insert into dept 
    values('1004','研究所','北京');
    

    12、删除部门表中部门编号为1004的纪录

    delete from dept where(
     部门编号='1004'
    );
    

    13、统计单位的雇员总人数

    select count(编号) from 雇员;
    

    14、统计男性雇员的人数

    select count(编号) from 雇员 where(
       性别='男'
    );
    

    15、统计男女雇员各有多少人

    select count(编号) from 雇员
    group by 性别;
    

    16、12部门男女雇员各有多少人

    #1

    select count(*) as 人数  /*这种方法不推荐,效率不高*/
    from 雇员
    group by 性别
    having 部门编号='12';
    

    #2

    这位就是爱吃肉rodalao写的效率会比上面的好很多

     /*推荐这种方法*/
    select 部门编号 count(*) as 人数
    from 雇员
    where 部门编号 = '12'
    group by 性别;
    

    17、人数不足3人的岗位有哪些

    select 岗位 from 雇员
    group by 岗位
    having count(*) < 3;
    

    18、统计单位的薪水总额

    select sum(薪水) from 雇员;
    

    19、统计各部门的薪水总额、平均、最高和最低薪水

    select sum(薪水) as 薪水总额,
       ave(薪水) as 平均薪水,
       max(薪水) as 最高薪水,
       min(薪水) as 最低薪水
    from 雇员
    group by 部门编号;
    

    20、删除部门表

    drop table dept;
    
  • 相关阅读:
    深度学习GPU集群管理软件 OpenPAI 简介
    图片加数字盲水印
    Kubernetes核心概念简介
    一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)
    【OfficeWebViewer】在线预览Word,Excel~
    【Java】大文本字符串滤重的简单方案
    Java应用集群下的定时任务处理方案(mysql)
    《将博客搬至CSDN》
    [转]Fiddler抓取Android真机上的HTTPS包
    [Java Collection]List分组之简单应用.
  • 原文地址:https://www.cnblogs.com/cafu-chino/p/11971889.html
Copyright © 2020-2023  润新知