Oracle-03

数据查询语言----DQL

1、基础查询

1)查询员工表

select empno,ename from emp_xu; //查询指定字段(员工号/员工姓名)
select * from emp_xu; // * 表示全部字段,查询所有
select * from emp_xu where empno=1005; //有条件查询

2)列别名---给列起别名

列名 as 列名1select empno,ename,salary,salary*12 [as] year_sal from emp_xu; //错误

3)空值 null

a. 任何数据类型都可以取空值null(插入数据)

b. 空值和任何的数据类型进行算数运算,结果都是null

c. 空值和字符数据做连接操作(||),结果相当于空值不存在

例如:计算员工月薪(薪水+奖金)select ename,salary,bonus,salary+bonus as mon_salary from emp_xu; //错误

4)空值处理函数

语法:nvl(d1,d2);  //如果d1为空(null),则用d2代替;反之,d1不为空,则直接用d1

select ename,salary,bonus,salary+nvl(bonus,0) as mon_salary from emp_xu; //不为空时取bonus,为空取0

注意:空值处理函数的两个参数可以是数值、字符、日期,但是两个参数的数据类型必须一致

5)插入null

要求:empno 1013;ename  欧阳锋,其他字段都为空

a.全部字段
insert into emp_xu values(1013,‘欧阳锋‘,null,null,null,null,null,null);
注意:全部字段的写法,如果最后缺少一个空会报错,null和什么都不写是不同的
b.指定字段
insert into emp_xu(empno,ename) values(1013,‘欧阳锋‘);

6)连接(拼接)操作  ||

eg:查询员工信息,将员工的姓名和职位连接在一起select empno,ename||position from emp_xu;select empno,ename|| ‘is‘ nvl(position,‘no position‘) meg from emp_xu;

注意:“||”符号表示两个数据进行连接操作,类似于java中的两个字符串之间的“+”号

7)复制表

select * from emp_xu;create table temp_emp as select * from emp_xu; //复制表

8)去重  distinct

distinct表示去重,必须只能紧跟在select后面

eg:查询有哪些部门号

//选择部门表,可能会存在某种情况,在员工表中可能存在某个部门没有员工select distinct deptno from dept_xu;

eg:查询每个部门不重复的职位(不同部门是可以有相同职位)

select distinct deptno,position from emp_xu;

9)大小写问题

注意:sql语句大小写不敏感(不区分大小写),数据区分大小写(单引号里面的数据是区分大小写)

//查询职位是‘Analyst‘的员工信息
SELECT * from emp_xu where POSITION=‘Analyst‘;
select * from emp_xu where position=‘analyst‘; //找不到,单引号里面的数据是区分大小写

注意:大小写转换函数(用于忽略大小写)

lower():字符数据转换成小写

upper():字符数据转换成大写

select lower(‘CD‘) from dual;//dual是虚表,‘cd‘
select * from emp_xu where lower(position)=‘analyst‘;//加上lower就找到了

10)介于两个数据之间

between 低值 and 高值  --------> 闭区间 [低值,高值]

eg:查询入职日期在2009年的员工姓名和入职日期select ename,hiredate from emp_xu where hiredate between ‘01-1月-09‘ and ‘31-12月-09‘;

11)in 关键字的使用

表示判断在不在列表项中,只要满足其中一个即可

eg:查询职位是‘Manager‘或者‘Analyst‘的员工的姓名的职位select ename,position from emp_xu where position in(‘Manager‘,‘Analyst‘,null); //关键字 in(表示判断在不在列表项中,只要满足其中一个即可)

注意:

a. 添加了null对结果没有影响

b, 其中‘欧阳锋‘的position为空,在结果中并没有出来(两个null不能比较,两个空不等,空值null不能和任何数据类型(包括自己)进行比较,position是null,列表项中有null,判断结果是false)

12)模糊查询

模糊查询使用‘like‘关键字

a. %表示0到多个字符

b. _表示1个字符

eg: 查询员工姓名,包含‘张‘字的员工信息select * from emp_xu ename like ‘%张%‘;eg:查询职位中第二个字符是‘a‘的员工姓名和职位select ename,position from emp_xu where position like ‘_a%‘;eg:查询当前用户下表名是EMP_开头的表select table_name from user_tables where upper(table_name) like ‘EMP\_%‘ escape ‘\‘;//_有特殊含义,要转义,escape指明转义字符注意:如果要查询的数据中有特殊字符(_%),在模糊查询匹配是需要进行转义

注意:如果要查询的数据中有特殊字符(_%),在模糊查询匹配是需要进行转义

13)

eg:查询哪些员工没有奖金

select ename,bonus from emp_xu where bonus=null; //为选定行,错误,null不可以与任何数值类型进行比较
select ename,bonus from emp_xu where bonus is null;

注意:测试null值时需要用is null,null不能用等于和不等于(<>)跟任何值进行判断

14)否定形式

eg:查询哪些员工有奖金
select ename,bonus from emp_xu where bonus is not null;
eg:查询薪水不在5000至10000的员工
select ename,salary from emp_xu where salary not between 5000 and 10000;//不包含临界值
eg:查询不是20号部门也不是30号部门的员工
select ename,deptno from emp_xu where deptno<>20 and deptno<>30;//null值显示不出来
select ename,deptno from emp_xu where deptno not in(20,30);//表示不在列表项中,需要同时满足
select ename,deptno from emp_xu where deptno not in(20,30,null);//错误,为选定行

注意:not in 时,列表项中如果有null,结果就是未选定行报错

in 时,列表项中有null,对结果没有影响

原文地址:https://www.cnblogs.com/xslzwm/p/9583533.html

时间: 2024-08-30 14:51:56

Oracle-03的相关文章

03.风哥Oracle数据库入门必备Linux基础系列视频教程(Oracle零基础教程)

03.风哥Oracle数据库入门必备Linux基础系列视频教程(Oracle零基础教程)链接:https://pan.baidu.com/s/19C4vzPKq8EwKtJublmIB3w 提取码:lez8 请分享链接到5个QQ IT交流群后,加入以下QQ群找群主获取更多免费视频. 更多视频教程,请加入QQ群(只加一个即可):189070296336282998 原文地址:http://blog.51cto.com/oracle18c/2314272

Oracle 11g SQL fundamentals 03 -- 日期操作函数

1.Oracle日期在内部的表示是数值格式,精确度从世纪到秒. 2.默认的日期表示格式为DD-MON-RR  (不是YY) YY 与 RR 的区别: 3.日期操作函数 示例: NEXT_DAY的第二个参数也可以是数字,表示几天后的日期.LAST_DAY是求该日期所在月份的最后一天. ROUND('DD-11-2014','MONTH')是精确到月,‘日’1-15号算这个月的 ('01-11-2014'),超过15号算下个月的 ('01-12-2014'). ROUND('DD-MON-2014'

oracle学习 第二章 限制性查询和数据的排序 ——03

这里,我们接着上一小节2.6留下的问题:如果要查询的字符串中含有"_"或"%",又该怎样处理呢? 开始今天的学习. 2.7  如何使用转义(escape)操作符 可以是用个转义(escape)关键字来完成此任务.为了进行练习,我们必须先创建一个临时的表,之后再往该表中插入1行记录,其包含通配符.可能您现在还可能十分不理解例2-13和例2-14的SQL语句.没有问题,您只要照着输入就可以了. 例 2-13 SQL> CREATE TABLE dept_temp

Oracle数据库零散知识03

21,存储过程,简化复杂操作,增加数据独立性,提高安全性,提高性能 与函数创建对比: create or replace function fun_01(v_01 in number) return number--必须要求有返回值 as result number; begin result := power(v_01,2); return result; end; / Function created. select fun_01(9) from dual; FUN_01(9) ------

转 oracle 开发 第03章 sqlplus

目录 1.查看表结构 desc 2.编辑SQL语句 append.list.change.run 3.保存.检索并运行文件 save.get.start.edit.spool 4.格式化列 column 5.设置页面大小 pagesize 6.设置行大小 linesize 7.清除列格式 clear 8.使用变量 define 9.创建简单报表 10.帮助信息 help 1.查看表结构 desc DESC customers; 2.编辑SQL语句 append.list.change.run S

Oracle学习03【持续更新】

Oarcle继续学习中...... /* 以下代码是对emp表/dept表/salgrade表进行显示宽度设置 */ col empno for 9999; col ename for a10; col job for a10; col mgr for 9999; col hiredate for a12; col sal for 9999; col comm for 9999; col deptno for 99; col dname for a14; col loc for a14; col

Oracle 11g SQL fundamentals 03 -- 类型转换函数

Oracle的数据类型转换分为两种:一种是隐式转换,另一种是显式转换.在用的时候尽量用显式转换. 隐式转换通常为Varchar2或char转换为  number和date或者反过来.例,hir_date>'1-JAN-2014'字符串隐式转换为date类型,select '53.5'+23 from dual为字符串隐式转换为number类型. 显式转换: 显式类型转换通过to_number,to_char,to_date达到 数值类型与字符串类型 日期类型与字符串类型 之间的相互转换. TO_

oracle学习 第一章 简单的查询语句 ——03

1.1最简单的查询语句 例 1-1 SQL> select * from emp; 例 1-1 结果 这里的 * 号表示所有的列,它与在select 之后列出所有的列名是一样的.查询语句以分号( ; )结束.emp(employee)是一个员工表. 1.2 在查询语句中如何选择特定的列 在平时的使用过程中我们需要的往往只是一张表中的某一条或者某几条数据而已,但上面查询的结果可能看起来比较乱.如果我们指向知道若干个特定列的信息,使用select 语句很容易就可以做到.就好比我们去菜市场买东西,不会

03.01 Oracle数据泵导出导出(expdp/impdp)命令举例(上)

Oracle数据泵导出导出(expdp/impdp)命令举例(上) ##实验目的: 使用数据泵迁移数据 ##实验环境: Oracle 11.2.0.4,利用数据库自带的scott示例用户进行试验测试 实验步骤概述: 1.首先需要创建Directory 2.使用expdp导出用户数据 2.1 只导出scott用户的元数据,且不包含统计信息: 2.2 只导出scott用户的数据: 2.3 只导出scott用户下的emp,dept表及数据: 2.4 只导出scott用户下的emp,dept表结构: 2

Oracle PLSQL Demo - 03.流程判断[IF ELEIF ELSE]

declare v_job varchar2(50) := 'Programmer'; v_sal number; begin if v_job = 'Programmer' then v_sal := 6000; elsif v_job = 'Senior Programmer' then v_sal := 8000; else v_sal := 10000; end if; dbms_output.put_line(v_sal); end;