Oracle 数据库常用sql语句及知识

《Oracle 数据库》

一、常用sql语句:

1.连接系统管理员账号:conn system/system(安装时口令);

2.创建新账号:create user Leo(账号名) identified by Leo(密码);

3.给新账号授权:grant connect,resource to Leo;

4.从某个账户收权:revoke resource from Leo;

5.连接新账号:conn Leo/Leo;

6.显示当前客户:show user;

7.查看表结构:desc s_emp(表名);

8.无需密码以dba身份登陆:conn / as sysdba;  //为所欲为的方式,危险

9.增删改查基本语法:

增:insert into e_product(id,name,price) values(10001,‘红米手机‘,599);

删:delete from e_product where id = 10001;

改:update e_product set name=‘小米电视‘,price = 2999 where id=10001;

查:select id,name,price from e_product where id = 10001;

二、数据库函数

1.NVL(commission,0);这个函数可以将一个字段(例:commission)中的null值替换成0,以便于运算。例如计算提成的时候,有些员工没有提成。

案例:列出每个员工的一年的总收入?(NVL)

select (NVL(commission_pct,0)/100+1)*12*salary from s_emp;

2.to_char(sysdate,‘yy‘):以自定义格式显示日期;

案例:找出入职时间是 90年的所有员工信息?

select first_name,start_date,to_char(start_date, ‘yy‘)from s_emp where to_char(start_date, ‘yy‘)=90;

3.lower(字段)/upper(字段): 将某个字段的值变成全小写/全大写,以匹配未知大小写的字符;

案例:当不知道‘Carmen’在数据库是大小写的时,找出‘Carmen’的工资?

select first_name ,salary from s_emp where lower(first_name) = ‘carmen‘;

4.substr(attribute,indexFrom,length):截取属性值为字符串的部分字符,从indexFrom开始,截取长度为length。indexFrom为负表示倒数第几个。

案例:列出每个员工名字(last_name)的最后两个字符?

select id,substr(last_name, -2, 2) from s_emp;

5.round(attribute,index): 求出某个属性的近似值, 四舍五入第index位。index为负数的时候表示小数点向左第几位,整数向右第几位。

案例:列出员工的工资的近似值,精确到十位?

select id,first_name, round(salary,-1) from s_emp;

6.trunc(attribute,index);求出某个属性的近似值,去掉index位及之后的零头。index为负数的时候表示小数点向左第几位,整数向右第几位。

案例:列出员工工资的近似值,去掉100元以下的零头?

select id,first_name,trunc(salary,-2) from s_emp;

7.sysdate:获取当前系统时间。当前系统时间的格式收到本地化的严格影响,因此想要获取自己需要的格式必须通过tochar(sysdate,‘yy-mm-dd hh:mi:ss‘)获得;

案例:查出下一天、下一分钟、下一秒的时间

select to_char(sysdate,‘yy-mon-dd hh24:mi:ss‘) as now, to_char(sysdate+1,‘yy-mon-dd hh24:mi:ss‘) as nextday, to_char(1/(24*60)+sysdate ,‘yy-mon-dd hh24:mi:ss‘) as nextmin,to_char(1/(24*60*60)+sysdate,‘yy-mon-dd hh24:mi:ss‘)as nextSec from dual;

8.day:在日期中表示星期几。

案例:求某(今)天是星期几

select to_char(sysdate,‘day‘) from dual;

9.to_date(‘2015-11-09‘,‘yyyy-mm-dd‘):将字符串格式的日期转换成日期。

10.last_day(sysdate):获得给定日期的当月的最后一天的日期。

9和10案例:找出今年的天数

select  last_day(to_date(‘1215‘,‘mm/yy‘))+1 - to_date(‘010115‘,‘dd/mm/yy‘) from dual;

11.avg(attribute):某个字段值得平均数。

案例:列出提成的平均值?

select avg(commission_pct) from s_emp;

12.count(attribute) : 某个字段记录的个数;

案例:求出有提成的员工个数?

select count(*) from s_emp where commission_pct is not null;

13.group by :按照...分组。by后面可以跟多个字段,即按照多个字段分组。

案例1:求出各部门的平均工资?(单个字段)

select dept_id,avg(salary) from s_emp group by dept_id;

案例2:求出各部门不同职位的平均工资?(多个字段)

select dept_id,title,avg(salary) from s_emp group by dept_id,title;

14.having:过滤掉分组以后不想要的结果。

案例:求出各部门不同职位的平均工资且只显示平均工资高于2000的结果?

select dept_id,title,avg(salary) from s_emp group by dept_id,title having avg(salary)>=2000;

三、数据库关键字

1.distinct :写在select中字段前面用于去重;

案例:select distinct name from s_dept;

2.between ... and ... : 某字段的值在一个闭区间【】之间;

案例:select * from s_emp where salary between 1500 and 2000;

3.in:某字段的值在一个枚举范围之中;

案例:select first_name,salary,dept_id from s_emp where dept_id in(31,42,43);

4.like:模糊匹配字符串,与_和%连用;

案例:select * from s_emp where first_name like ‘_e%‘;

5.escape:字符串中有些符号具有特殊含义,如下划线_表示模糊匹配中单个字符,但是如果仅想表示下划线则需要使用escape设置转义字符。

案例:select table_name from dba_tables where table_name like‘[email protected]_%‘ escape ‘@‘;

6. is null:获得某个字段的值是空的记录;

案例:列出哪些员工没有提成?

select id,first_name from s_emp where commission_pct is null;

7.desc:按照某一字段降序排列,与order by连用。

案例:按工资降序显示员工的信息?

select * from s_emp order by salary desc;

8.asc:按照某一字段升序排列,与order by 连用。

案例:按提成升序显示员工的信息?

select * from s_emp order by commission_pct asc;

注意:null值按照“无穷大”位置排列;

9.order by :排序。by后面可并列多个字段,优先级按照先后顺序。

案例:先工资降序,再按提成升序显示员工?

select * from s_emp order by salary desc,commission_pct asc;

四、多表查询

1.join...on...:将两个表连起来。on后面是两个表的关联条件。

案例:列出员工名字和部门名字?

方法1.select first_name||‘ ‘||last_name , name from s_emp e,s_dept d where e.dept_id = d.id ;

方法2.select e.first_name||‘ ‘||e.last_name ,d.name from s_emp e join  s_dept d on e.dept_id = d.id;

注释:Oracle中|| 表示加号,‘‘表示字符串。

2.三表关联查询(两种方法)

案例:列出‘Carmen’在哪个地区上班?

--方法一:(Oracle、sqlserver语法)

select r.name

from s_emp e,s_region r,s_dept d

where e.dept_id = d.id and d.region_id = r.id and e.first_name = ‘Carmen‘;

--方法二:(数据库通用语法)

select r.name

from s_emp e join s_dept d on e.dept_id = d.id join s_region r on d.region_id = r.id

where e.first_name= ‘Carmen‘;

五、DDL数据定义语言

1.创建表:

CREATE TABLE E_CATEGORY

(

ID NUMBER(12, 0) NOT NULL

, T_CATEGORY VARCHAR2(25)

, CONSTRAINT TABLE1_PK PRIMARY KEY

(

ID

)

ENABLE

);

2.向表中插入数据

INSERT INTO "SYSTEM"."E_CATEGORY" (ID, T_CATEGORY) VALUES (‘1‘, ‘智能手机‘)

INSERT INTO "SYSTEM"."E_CATEGORY" (ID, T_CATEGORY) VALUES (‘2‘, ‘数码相机‘)

INSERT INTO "SYSTEM"."E_CATEGORY" (ID, T_CATEGORY) VALUES (‘3‘, ‘笔记本电脑‘)

INSERT INTO "SYSTEM"."E_CATEGORY" (ID, T_CATEGORY) VALUES (‘4‘, ‘衬衫‘)

INSERT INTO "SYSTEM"."E_CATEGORY" (ID, T_CATEGORY) VALUES (‘5‘, ‘外套‘)

INSERT INTO "SYSTEM"."E_CATEGORY" (ID, T_CATEGORY) VALUES (‘6‘, ‘休闲裤‘)

3.修改表结构:添加一个字段;

alter table e_category add bigcate varchar2(25);

4.修改表结构:添加一个外键;

alter table e_product add constraint fk_product_bigcate  foreign key(p_category) references e_bigcate(id);

5.修改表结构:修改一个字段:

alter table e_product modify  p_cdate timestamp(8);

6.修改表结构:修改字段名;

alter table e_product rename column p_name to name;

7.修改表结构:删除外键:

alter table e_product drop constraint fk_product_category;

8.修改表结构:修改外键:

思路:先删除后添加

视图:

create view 视图名 as select ...

序列(sequence):

min:max:increm://sequenc:currval:nextval;

index:索引:1.加快检索速度

数据库的逻辑结构:数据库-表-段-区-块;

锁:for update---行级锁  当关闭连接或提交的时候释放锁;

时间: 2024-10-24 17:28:12

Oracle 数据库常用sql语句及知识的相关文章

Oracle数据库常用Sql语句大全

一,数据控制语句 (DML) 部分 1.INSERT  (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, --) VALUES ( 值1, 值2, --); INSERT INTO 表名(字段名1, 字段名2, --)  SELECT (字段名1, 字段名2, --) FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: 'GOOD DAY' 如果字段值里包含单引号' 需要进行字符串转换, 我们把它替换成两个单引号''. 字符串类型的字段值超过

Oracle 数据库常用SQL语句(2)查询语句

一.SQL基础查询 1.select语句 格式:select 字段 from 表名; 2.where 用于限制查询的结果. 3.查询条件 > < >= <= = != 4.与 或(AND,OR) 5.在 不在(IN,NOT IN) 练习:查询工号为1,9,11,16且工资低于1000的员工. 6.在 [a,b] (between val1 and val2) 查询工资大于1000,小于1500的员工. select * from s_emp where salary between

oracle数据库常用SQL语句

1)删除表的一列 ALTER TABLE 表名 DROP COLUMN 列名; 2)增加表的一列 且默认值为0alter table 表名 add 字段名 类型 default '0'; 3)修改表的字段为NULLALTER TABLE 表名 MODIFY 要修改的字段名字 NULL; 4)修改表的字段名alter table 表名 rename column 原字段名 to 目标字段名;

Oracle 数据库常用操作语句大全

Oracle 数据库常用操作语句大全 一.Oracle数据库操作 1.根据删除的时间查询出被删除的数据 select * from szdj_work_plan AS OF TIMESTAMP TO_TIMESTAMP('2018-1-19 16:51:37', 'yyyy-mm-dd hh24:mi:ss') where subject='测试一下删除0119' 1.表中唯一的最大的值 select hibernate_sequence.nextval from dual 1.创建数据库 cr

Oracle维护常用SQL语句

数据库人员手边系列:Oracle维护常用SQL语句 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name; 2.查看表空间物理文件的名称及大小 select tables

Oracle数据库入门——sql语句和函数详解

一.oracle常用数据类型 一.  数据定义语言(ddl) 数据定义语言ddl(data definition language)用于改变数据库结构,包括创建.更改和删除数据库对象. 用于操纵表结构的数据定义语言命令有: create table alter table truncate table drop table eg. --创建tb_stu表数据结构 create table tb_stu( id number, name varchar2(20) );   --修改tb_stu表数

Oracle数据库常用SQL函数

1.SQL函数的概念: 函数一般是在数据上执行的,它给数据的转换和处理提供了方便.只是将取出的数据进行处理,不会改变数据库中的值.(类似于java中的方法但函数只是将数据库中的数据取出(复制)到函数中进行运算,并不会修改数据库中的数据) 2.Sql函数可以分为组函数和单行函数. –单行函数对单个数值进行操作,并返回一个值–组函数又被称作聚合函数,用于对多行数据进行操作,并返回一个单一的结果,组函数仅可用于选择列表或查询的having子句 3.单行函数的分类: 单行函数分为字符函数.数字函数.日期

ios数据库常用sql语句

SQlite常用语句 由于sql语句在程序代码中以字符串的形式存在,没有代码提示,不细心很容易出错,而且不容易被查出来.sql语句字符串是单引号. 写sql语句的时候一定要细心呀.如果写不好可以找公司后台专门做数据库的同事帮你. 注:SQlite语句 不区分大小写 1.创建表语句create table Student (Student 是表名)IF NOT EXISTS 表不存在 才创建gender text 表示其类型 字符串 存储类型:NULL 值是空值INTEGER 值是整型REAL 值

Oracle数据库的sql语句性能优化

在应用系统开发初期,由于开发数据库数据比较少,对于查询sql语句,复杂试图的编写等体会不出sql语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要问题之一.系统优化中一个很重要的方面就是sql语句的优化.对于海量数据,劣质sql语句和优质sql语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就行,而是要写出高质量的sql语句,提高系统的可用性. Oracle的sql调优第一个复杂的主题,甚至需要长