以char27为结束符oracle,oracle 数据库基础

本文详细介绍了SQL的基本概念和常用操作,包括数据查询、过滤、排序、函数应用及表连接等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键字

DISTINCT

过滤where

where 将不满足的过滤掉

连接符||

把列与列,列与字符串连接在一起,用“||”表示,可以用来合成。

select last_name || job_id from employees;

条件:将符合的条件选择处理 where

select employee_id ,job_id,last_name fromemployees where department_id = 90;

字符和日期

字符和日期要包含在单引号中。

字符大小写敏感,日期格式敏感。

默认的日期格式是 DD-MON-RR

where解析顺序从右到左

BETWEEN .. AND...

select last_name ,job_id  from employees  where salary between 3000 and 5000;

IN(set):等值与列表的值

select last_name ,job_id,manager_id  from employees  where manager_id in (100);

LIKE:模糊查询

% 代表零个或多个字符(任意个字符)。

_ 代表一个字符。

IS NULL:空值

逻辑运算

And,Or,Not

order by

使用 ORDER BY 子句排序

ASC(ascend): 升序[z8]

DESC[z9] (descend): 降序

ORDER BY 子句在SELECT语句的结尾。

例如:select last_name,job_id,department_id,hire_date from  employees order by hire_date;

按别名;来排序也可以:

select last_name,job_id,department_id,salary* 12 sal,hire_date from  employeesorder by sal;

转小写函数:LOWER

LOWER('HHHHHHHH')

select lower('HHHHHHHH') from dual;

输出结果:

hhhhhh

转大写:UPPER

UPPER('SQLCOURSE')

select UPPER('SQL Course') from dual;

输出结果

SQL COURSE

函数

字符控制函数

CONCAT('Hello', 'World')          HelloWorld

SUBSTR[z12] ('HelloWorld',1,5)                  Hello

LENGTH('HelloWorld')                        10

LPAD[z13] (salary,10,'*')

RPAD(salary, 10, '*')

INSTR[z14] ('HelloWorld', 'W')           6

TRIM[z15] ('H' FROM 'HelloWorld')          elloWorld

replace[z16] ('abcd', 'b', 'm')                                amcd

数字函数

ROUND: 四舍五入

ROUND(45.926,2)                     45.93

TRUNC:    截断

TRUNC(45.926,2)                      45.92

MOD: 求余

MOD(1600,300)                         100

日期和函数:

函数SYSDATE

日期

select last_name,(sysdate-hire_date)/7 fromemployees where department_id =  90;

例子:昨天  今天 明天

select (sysdate-1) 昨天,sysdate 今天,(sysdate+1)明天

2  from dual;

昨天           今天           明天

-------------- ----------------------------

25-8月 -13     26-8月 -13     27-8月 -13

日期函数

转换函数

隐式

16.1、TO_CHAR 函数对日期的转换

TO_CHAR(date,'format_model')

必须包含在单引号中而且大小写敏感。

可以包含任意的有效的日期格式。

日期之间用逗号隔开。

TO_CHAR 函数

对数字的转换

TO_CHAR(number,'format_model')

TO_NUMBER 函数

将字符转换成数字:

TO_NUMBER(char[,'format_model'])

使用 TO_DATE

函数将字符转换成日期:

TO_DATE(char[, 'format_model'])

NVL函数

1、 :将空值转换成一个已知的值:

不忽略空值

NVL函数使分组函数无法忽略空值

SELECT COUNT(DISTINCT department_id)

2  FROM  employees;

COUNT(DISTINCTDEPARTMENT_ID)

----------------------------

11

忽略空值

select avg(commission_pct) from employees;

AVG(COMMISSION_PCT)

-------------------

0.222857142857143

NVL2 函数

NVL2 (expr1, expr2,expr3) : expr1不为NULL,返回expr2;为NULL,返回expr3

NULLIF 函数

NULLIF (expr1, expr2) :相等返回NULL,不等返回expr1

COALESCE 函数

COALESCE与NVL相比的优点在于COALESCE可以同时处理交替的多个值。

如果第一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE。

即:找第一个不为空的值。

分组函数(重点)

使用GROUP BY 子句数据分组。使用HAVING 子句过滤分组结果集

组合函数:avg,count,max,min,sum

组合函数语法:

SELECT     [column,] group_function(column),...

FROM                table

[WHERE  condition]

[GROUPBY      column]

[ORDERBY      column

COUNT(DISTINCT expr)

返回expr非空且不重复的记录总数

SELECT COUNT(DISTINCT department_id)

2  FROM  employees;

COUNT(DISTINCTDEPARTMENT_ID)

----------------------------

11

group by:分组数据

SELECT              column, group_function(column)

FROM               table

[WHERE            condition]

[GROUP BYgroup_by_expression]

[ORDER BY       column];

可以使用GROUPBY子句将表中的数据分成若干组

包含在GROUP BY 子句中的列不必包含在SELECT 列表中

group by 增强

多个列分组

过滤分组:HAVING子句

条件:

1、行已经被分组。

2.使用了组函数。

3.满足HAVING子句中条件的分组将被显示。

语法:

SELECT     column,group_function

FROM                table

[WHERE   condition]

[GROUP BYgroup_by_expression]

[HAVINGgroup_condition]

[ORDER BY       column]

多表中获得数据

使用外连接可以查询不满足连接条件的数据。

外连接的符号是(+)。

希望:在最后的结果中包含某些不成立的记录

elect d.deptno, d.dname, count(e.empno)人数from emp e,dept d

where e.deptno(+)=d.deptnogroup by d.deptno,d.dname;

左外连接

where e.deptno=d.deptno不成立的时候,等号左边代表的表任然被包含

右外连接

where e.deptno=d.deptno不成立的时候,等号右边代表的表任然被包含

满外联接

NATURAL JOIN 自然链接

(用比较少)

会以两个表中具有相同名字的列为条件创建等值连接。

在表中查询满足等值条件的数据。

如果只是列名相同而数据类型不同,则会产生错误。

自连接

使用 USING 子句创建连接(用比较少)

内容:在NATURALJOIN 子句创建等值连接时,可以使用USING 子句指定等值连接中需要用到的列。

使用USING可以在有多个列满足条件时进行选择。

不要给选中的列中加上表名前缀或别名。

NATURAL JOIN和USING子句经常同时使用。

使用ON 子句创建连接

自然连接中是以具有相同名字的列为连接条件的。

可以使用ON 子句指定额外的连接条件。

这个连接条件是与其它条件分开的。

ON 子句使语句具有更高的易读性。

使用 ON 子句创建多表连接

SELECT employee_id, city, department_name

FROM  employees e

JOIN  departments d

ON    d.department_id = e.department_id

JOIN  locations l

ON    d.location_id = l.location_id;

单函数操作

操作数据对象;接受参数返回一个结果;只对一行进行变换;每行返回一个结果;可以转换数据类型;可以嵌套;参数可以是一列或一个值

嵌套函数

条件表达式

在SQL语句中使用IF-THEN-ELSE逻辑

1、 if语句格式:

If 条件 then 语句1;

语句2;

End if;

2. IF 条件  THEN  语句序列1;

ESLE   语句序列 2;

END   IF;

3. IF  条件  THEN 语句;

ELSIF语句  THEN  语句;

ELSE    语句;

END  IF;

单表查询

单表查询比较简单这里就不做详细介绍

查询奖金是null的查询语句

--查询奖金为null的员工

1、select * from empwhere comm=null

第一种查出来是null的

2、select * from empwhere comm is null

多表查询

通过表的别名,将同一张表视为多张表

SQL> select d.ename||'的老板是'||b.ename

2  from emp d,emp b

3  where d.mgr=b.empno

什么时候用子查询:在查询是基于未知的值时应使用子查询

注意问题:

1、  括号

2、  合理书写风格

3、  可以在子查询的where,select,having[z26] ,from 后面放置

4、  不可以在group by 后面放置子查询

5、强调from后面的子查询

6、  主查询和子查询可以不是同一张表,只要子查询返回的结果主查询可以使用即可

7、单行子查询(返回值只有一条)只能使用单行操作

主查询里面可以有多个子查询

单行子查询

只返回一行。

使用单行比较操作符。

多行子查询

In:等于列表中的任何一个

Any:集合中任意一个值

All:和子查询返回的所有值比较

使用等值和不等值连接在SELECT 语句中查询多个表中的数据。

使用自连接

处理数据DML(数据操作语言)

关键字:insert update delete select  增删改查数据库里面的数据

Insert : insert : insert into table (cloum,….)values();

地址符&(增删改查都可以用)

当输入地址符,并带参数的时候会让我们自己在输入

更新update

Update  table set colum = value ………. Where id =?

update emp set sal=700,ename='lisi' where empno=1000

在update中使用子查询

删除:delete

delete和truncate区别:

1、delete是DML(可以回滚)语句,truncate是DDL语句(不可以回滚)

2、delete不回释放空间,truncate会

3、delete会产生碎片,truncate不会 (碎片会影响查询效率)

4、delete可以闪回,truncate不可以

5、.(MYSQL中讲) delete是逐条删除;truncate先摧毁表 再重建

Oracle 中delete 比truncate 快

格式: Delete  from  table where id =?

6.删除中使用子查询

Oracle 中delete 比truncate 快

事务

由增删改组成,

事务步骤:

1、  起始标志 :DML语句

2、  结束标志:提交-à显示

事务是不能跨越(DML和DDL)

回滚存储点[z28] :savepoint a;

Oracle事务隔离级别:3个

串行会影响性能(锁)

Read only oracle事务

DDL(数据定义语言)

是针对数据库表,表结构字段的操作

关键词:create/alter/drop/truncatetable

create/drop view/sequence/index/synonym

1、  子查询建表

Create  tabletablename  as select * from table;

2、  修改表

2.1追加新的列

ALTER TABLE table

ADD             (column datatype[DEFAULT expr]

[, column datatype]...);

例子:alter table test1add photo blob;

2.2修改现有的列

ALTER TABLE table

MODIFY       (columndatatype[DEFAULT expr]

[, column datatype]...);

2.3删除一个列

ALTER TABLE table

DROP         column     (column);

例子:alter table test1drop column photo;

2.4 重命名表(改变表的名称)

ALTER TABLE table_namerename column old_column_name

tonew_column_name

例子:alter table test1rename column tname to username;

3、  删除

3.1数据和结构都被删除

3.2所有正在运行的相关事物被提交

3.3所有相关索引被删除

3.4DROP TABLE 语句不能回滚,但是可以闪回

drop table tablename;

集合运算

集合运算关键字:union,union all,INTERSECT

union 去掉重复元素后的所有记录(并集)

显示员工当前和之前的工作情况,每次记录显示一次。

select * from emp where deptno=10

union

select* from emp where deptno=20;

union All:返回两个集合的所有记录,包括重复的

INTERSECT 运算符返回同时属于两个集合的记录

集合注意事项

1. 参与运算的各个集合必须列数相同 且类型一致

2. 采用第一个集合的表头作为最后的表头

3. 如果排序,必须在每个集合后使用相同的orderby

select deptno,job,sum(sal) from emp groupby deptno,job

union

select deptno,to_char(null),sum(sal) from emp group by deptno

union

select to_number(null),to_char(null),sum(sal) from emp;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值