当前位置: 代码迷 >> 综合 >> 表单查询、约束、运算符
  详细解决方案

表单查询、约束、运算符

热度:98   发布时间:2023-10-18 00:20:32.0

1.dual表常用在没有查询目标的SELECT语句块中,它只包含一行数据

        查询当前日期       SELECT sysdate FROM dual;

       在当前日期的基础上加3天  select sysdate+3    

from dual;

2.约束,保证数据的完整性

--约束分类:  1.primary key ,2.unique  3.not null  4. default  5.check  6. foreign key  

--语法:  alter table 表名  add constraint 约束名 约束类型(primary key/unique/check/foreign key)(字段)

-- references 表名(字段名)

-- notnull  default 

-- create table (id int, s_name varchar2(20)  not null default 默认值 )  

--级联删除外键对应的数据行

--create table course (  c_id int , c_name varchar2(20)  );

--alter table course add constraint pk_c_id primary key(c_id);  

--create table student (s_id int,s_name varchar2(20),c_id int ) 

--alter table student add constraint fk_c_id foreign key(c_id) references course(c_id) on delete cascade; 

--当主表中数据删除,子表中的行就删除

on delete set null 

--删除约束: 

alter table 表名 drop constraint 约束名 

3.关于表单查询相应操作

别名查询 select sal as "员工工资"  from emp;

使用运算符查询  select sal,sal+500 as "加薪后的" from emp;

查询员工的ename+”职位是:”+job

SELECT ename||‘ 的职位是'||job AS "Employees Details" FROM emp;

--查询员工编号不等于7369的员工信息  !=  <>

 select empno,ename  from emp  where empno<>7369 

--查询员工表,要求 员工编号 大于如下列表中的任意一个值即可  7369,7521,7499  

select empno,ename from emp where empno>all(7369,7521,7499)

      any 列表中任意一个   all 列表中所有的。

--表示什么范围内,between ... and 

select empno,ename,sal  from emp  where sal between 1800 and 3000; 

--查询没有福利的员工

select empno,ename,sal,comm from emp  where comm is null;

--列出员工编号不是数字的员工信息  

select empno,ename  from emp where empno is not nan

 

LIKE:匹配字符串

IN:匹配列表值

BETWEEN:匹配范围值

IS NULL:匹配空值

IS NAN:匹配非数字值

--匹配'_M%',表示第一个是任意字母,第二个是M,%表示最后可以是任意字母

SELECT *FROM emp WHERE ename LIKE '_M%';

--列出姓名中有%的员工信息 

(ESCAPE选项告知数据库如何区分通配符和要匹配的字符,可以使用反斜杠(\))

select empno,ename from  emp where job like '%\%%' escape '\'; 

--查询emp表中入职日期大于1982-1-1 ,同时工资大于900的员工信息

select empno,ename,hiredate,sal from  emp where hiredate>'01-1月-1982'  and sal>900

--删除表中所有记录 delete from t1;

--消除重复  distinct,消除重复的job值 

select distinct job from emp3;

ORDER BY是按照升序(ASC)排序,也可以使用DESC指定为降序排序

例如,查询EMP表,先按empno升序排列,再按ename降序排列(如果第一个相同,再按第二个排序)

SELECT *FROM EMP ORDER BY empno ASC, ename DESC;

--处理NULL值,NULL值被查询出来的时候没有显示信息,如何告知用户这是空字符串还是NULL,这可以通过NVL()函数来进行处理

SELECT empno,ename ,NVL(comm, 0) FROM EMP;

--使用&+参数名(手工输入啦)

例如:查询员工编号为某数值的员工

SELECT * FROM EMP WHERE EMPNO=&arg;

4.综合查询

--检索员工表中员工姓名和雇佣时间  ,要求是年-月-日形式,中文显示

--函数 to_char 转换函数字符格式  日期--字符串   to_char(时间字段,转换格式)  

   select ename 员工姓名, to_char(hiredate,'yyyy-mm-dd') 雇佣时间   from emp;

--检索员工表中员工的姓名及全年的收入  

   select ename 员工姓名, (sal+nvl(comm,0))*12 全年收入  from  emp;

--检索emp表中部门编号是30的员工姓名,月收入及提成,并要求结果按月收入升序,然后按提成降序显示

   select ename,deptno,sal,comm from emp where deptno=30 order by 3,4 desc;

--选择公司中没有管理者的员工姓名及工作  

   select  ename,job from emp  where mgr is null;

--找出部门10中的所有经理和部门20中的所有办事员的详细资料

   select * from emp where (deptno=10 and job='MANAGER')  or

   (deptno=20 and job='CLERK') ;

--找出在(任何年份的)2月受聘的所有员工 

--取到月份,hiredate,  靠to_char(日期字段,转换格式) 

   select ename,hiredate from emp where to_char(hiredate,'MM')='02';

--对于每个员工,显示其加入公司的天数  

select ename,sysdate-hiredate 天数差 from emp;

  相关解决方案