第一篇:黑马程序员c语言教程:查看数据库的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 tablespace_name, file_id, file_name, round(bytes/(1024*1024),0)total_space from dba_data_files order by tablespace_name;
3、查看回滚段名称及大小
select segment_name, tablespace_name, r.status,(initial_extent/1024)InitialExtent,(next_extent/1024)NextExtent, max_extents, v.curext CurExtent From dba_rollback_segs r, v$rollstat v Where r.segment_id = v.usn(+)order by segment_name;
4、查看控制文件
select name from v$controlfile;
5、查看日志文件
select member from v$logfile;
6、查看表空间的使用情况
select sum(bytes)/(1024*1024)as free_space,tablespace_name from dba_free_space group by tablespace_name;SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,(B.BYTES*100)/A.BYTES “% USED”,(C.BYTES*100)/A.BYTES “% FREE” FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;
7、查看数据库库对象
select owner, object_type, status, count(*)count# from all_objects group by owner, object_type, status;
8、查看数据库的版本
Select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6)='Oracle';
9、查看数据库的创建日期和归档方式
Select Created, Log_Mode, Log_Mode From V$Database;
ORACLE用户连接的管理
用系统管理员,查看当前数据库有几个用户连接:
SQL> select username,sid,serial# from v$session;如果要停某个连接用
SQL> alter system kill session 'sid,serial#';如果这命令不行,找它UNIX的进程数
SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21 and ses.paddr=pro.addr;说明:21是某个连接的sid数 然后用 kill 命令杀此进程号。
SQL*PLUS使用 a、近入SQL*Plus $sqlplus 用户名/密码
退出SQL*Plus SQL>exit b、在sqlplus下得到帮助信息
列出全部SQL命令和SQL*Plus命令 SQL>help 列出某个特定的命令的信息 SQL>help 命令名
c、显示表结构命令DESCRIBE SQL>DESC 表名
d、SQL*Plus中的编辑命令 显示SQL缓冲区命令 SQL>L 修改SQL命令
首先要将待改正行变为当前行 SQL>n 用CHANGE命令修改内容 SQL>c/旧/新
重新确认是否已正确 SQL>L 使用INPUT命令可以在SQL缓冲区中增加一行或多行 SQL>i SQL>输入内容
e、调用外部系统编辑器 SQL>edit 文件名
可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型,在login.sql文件中定义如下一行
DEFINE_EDITOR=vi f、运行命令文件 SQL>START test SQL>@test 常用SQL*Plus语句
a、表的创建、修改、删除 创建表的命令格式如下:
create table 表名(列说明列表); 为基表增加新列命令如下:
ALTER TABLE 表名 ADD(列说明列表)例:为test表增加一列Age,用来存放年龄 sql>alter table test add(Age number(3)); 修改基表列定义命令如下: ALTER TABLE 表名
MODIFY(列名 数据类型)
例:将test表中的Count列宽度加长为10个字符 sql>alter atble test modify(County char(10)); b、将一张表删除语句的格式如下: DORP TABLE 表名;
例:表删除将同时删除表的数据和表的定义 sql>drop table test c、表空间的创建、删除
--MartriWang@gmail.com 15/06/2007--d.删除表列
ALTER TABLE table_name DROP COLUMN 字段名--del 表中字段 1: create table t2 as select
--以第一个表中的某列建立第二个新表
2: drop table t1;
--删除表1 3: rename t2 to t1;
--把表2改名为表1 Oracle 8i及以上版本中,可以使用以下语句 alter table 表1 drop column 列1;
第二篇:黑马程序员c语言教程:Oracle简介
9.通过子查询建表 通过子查询建表的例子
SQL>CREATE TABLE emp_41 AS SELECT id, last_name, userid, start_date FROM s_emp WHERE dept_id = 41;SQL> CREATE TABLE A as select * from B where 1=2;只要表的结构.10.用子查询建表的注意事项
可以关连多个表及用集合函数生成新表,注意选择出来的字段必须有合法的字段名称,且不能重复。
用子查询方式建立的表,只有非空NOT NULL的约束条件能继承过来, 其它的约束条件和默认值都没有继承过来.根据需要,可以用alter table add constraint ……再建立其它的约束条件,如primary key等.11.Foreign Key的可选参数ON DELETE CASCADE 在创建Foreign Key时可以加可选参数: ON DELETE CASCADE它的含义是如果删除外键主表里的内容,子表里相关的内容将一起被删除.如果没有ON DELETE CASCADE参数,子表里有内容,父表里的主关键字记录不能被删除掉.12.如果数据库表里有不满足的记录存在,建立约束条件将不会成功.13.给表创建和删除同义词的例子 SQL> CREATE SYNONYM d_sum 2 FOR dept_sum_vu;SQL> CREATE PUBLIC SYNONYM s_dept 2 FOR alice.s_dept;SQL> DROP SYNONYM s_dept;
十、ORACLE里的数据字典
1.什么是数据字典?ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库 的产生而产生, 随着数据库的变化而变化, 体现为sys用户下所有的一些表和视图.2.数据字典里存了以下内容: 用户信息
用户的权限信息
所有数据对象信息表的约束条件统计分析数据库的视图等 不能手工修改数据字典里的信息.16
J2EE @ zxw 3.常用的数据字典
Dictionary 存放所有数据表,视图,同义词名称和解释 Dict_columns 数据字典里字段名称的和解释 Dba_users 用户 Dba_tablespaces 表空间
Dba_data_files 数据库的文件 Dba_free_space 空闲表空间 Dba_rollback_segs 回滚段
User_objects 数据对象 User_constraints 约束条件 User_sequences 序列号 User_views 视图 User_indexes 索引 User_synonyms 同义词
Session_roles 用户的角色 User_role_privs 用户的角色权限 User_sys_privs 用户的系统权限 User_tab_privs 用户的表级权限 V$session 实时用户情况 V$sysstat 实时系统统计 V$sesstat 实时用户统计 V$sgastat 实时SGA使用 V$locked_object 实时锁 V$controlfile 控制文件 V$logfile 日志文件 V$parameter 参数文件 4.数据字典的分类 数据字典四大类别
User_ 用户下所有数据库对象
All_ 用户权限范围内所有的数据库对象 Dba_ 所有的数据库对象
V$Content$nbsp;统计分析数据库的视图 赋于oem_monitor权限非DBA用户也可查询V$*视图
5.查询数据字典
SQL> select * from dictionary where instr(comments,'index')>0;SQL> select constraint_name, constraint_type, 2 search_condition, r_constraint_name 3 from user_constraints 4 where table_name = ‘&table_name';十一.控制数据、INSERT(往数据表里插入记录的语句)SQL> insert into 表名(字段名1, 字段名2, ……)values(值1, 值2, ……);SQL> insert into 表名(字段名1, 字段名2, ……)select(字段名1, 字段名2, ……)from 另外的表名 where 条件;可以用&标记变量的方法多次输入记录
快速插入数据的方法, 一般用于大于128M的数据转移 SQL> insert /*+ append */ into 表名
select * from 另外的用户名.另外的表名 WHERE 条件;SQL> commit;注意事项:
用INSERT /*+ APPEND */ 的方法会对target_tablename产生级别为6的独占锁,如果运行此命令时还有对target_tablename的DML操作会排队在它后面, 对OLTP系统在用的表操作是不合适的。17
J2EE @ zxw 2.插入字符串类型的字段的注意事项: 字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’
如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个 单引号’ ’
字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验 ‘’ 标记是NULL, user 标明当前用户
日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒
用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC.年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS NSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型, 方法借用ORACLE里自带的DBMS_LOB程序包.3、UPDATE(修改数据表里记录的语句)SQL> UPDATE 表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 条件;如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验;值N超过定义的长度会出错, 最好在插入前进行长度校验.新功能,可以修改子查询后的结果集
例子:SQL> update(select * from s_dept)set id=50 where id=60;
4、DELETE(删除数据表里记录的语句)SQL> DELETE FROM 表名 WHERE 条件;注意:删除记录并不能释放ORACLE里被占用的数据块表空间.它只把那些 被删除的数据块标成unused.如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间
SQL> TRUNCATE TABLE 表名;此操作不可回退.5、SQL语句的分类 数据定义语言(DDL):create、alter、drop(创建、修改结构、删除)(其他:rename)数据操纵语言(DML):insert、delete、select、update(增、删、查、改)(其他:truncate)
数据控制语言(DCL):grant、revoke(授权、回收)、set role 事务控制:commit、rollback、savepoint(其他:lock table、set constraint、set transaction)
审计控制:audit、noaudit 系统控制:alter system 会话控制:alter session 其他语句:comment(添加注释)、explain plan、analyze、validate、call
6、ORACLE里事务控制 Commit 提交事务 Rollback 回退事务
Savepoint 设置断点, 在事务中标记位置, 事务结束, 断点释放
事务结束的情况遇到commit或者rollback遇到DDL和DCL语句发现错误,如死锁用户退出
SQL*PLUS系统重启或崩溃 7.DML操作的注意事项 18
J2EE @ zxw 以上SQL语句对表都加上了行级锁, 确认完成后, 必须加上事物处理结束的命令COMMIT 才能正式生效, 否则改变不一定写入数据库里.行级锁也未能得到释放.如果想撤回这些操作, 可以用命令 ROLLBACK 复原.在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围, 应该把它限定在较小(一万条记录)范围内,.否则ORACLE处理这个事物用到很大的回退段.程序响应慢甚至失去响应.如果记录数上十万以上这些操作, 可以把这些SQL语句分段分次完成, 其间加上COMMIT 确认事物处理.太过频繁的commit不好
第三篇:黑马程序员c语言教程:Oracle概念(推荐)
七、在执行SQL语句时绑定变量
1.接收和定义变量的SQL*PLUS命令 ACCEPT DEFINE UNDEFINE & 2.绑定变量SQL语句的例子(1)SQL> select id, last_name, salary from s_emp where dept_id = &department_number;Enter value for department_number: 10 old 1: select id, last_name, salary from s_emp where dept_id=&department_number;new 1: select id, last_name, salary from s_emp where dept_id= 10 SQL> SET VERIFY OFF | ON;可以关闭和打开提示确认信息old 1和new 1的显示.3.绑定变量SQL语句的例子(2)SQL> select id, last_name, salary from s_emp where title = '&job_title';Enter value for job_title: Stock Clerk 11
J2EE @ zxw SQL> select id, last_name, salary from s_emp where hiredate >to_date('&start_hire_date','YYYY-MM-DD');Enter value for start_hire_date : 2001-01-01 把绑定字符串和日期类型变量时,变量外面要加单引号 也可绑定变量来查询不同的字段名 输入变量值的时候不要加;等其它符号 4.ACCEPT的语法和例子
SQL> ACCEPT variable [datatype] [FORMAT] [PROMPT text] [HIDE] 说明: variable 指变量名 datatype 指变量类型,如number,char等 format 指变量显示格
式 prompt text 可自定义弹出提示符的内容text hide 隐藏用户的输入符号 使用ACCEPT的例子:
ACCEPT p_dname PROMPT 'Provide the department name: ' ACCEPT p_salary NUMBER PROMPT 'Salary amount: ' ACCEPT pswd CHAR PROMPT 'Password: ' HIDE ACCEPT low_date date format 'YYYY-MM-DD' PROMPT“Enter the low date range('YYYY-MM-DD'):” 4.DEFINE的语法和例子
SQL> DEFINE variable = value 说明: variable 指变量名 value 指变量值
定义好了变良值后, 执行绑定变量的SQL语句时不再提示输入变量
使用DEFINE的例子:
SQL> DEFINE dname = sales SQL> DEFINE dname DEFINE dname = “sales”(CHAR)SQL> select name from dept where lower(name)='&dname';NAME-------------------------sales sales SQL> UNDEFINE dname SQL> DEFINE dname Symbol dname is UNDEFINED 5.SQL*PLUS里传递参数到保存好的*.sql文件里 SQL> @ /路径名/文件名 参数名1[,参数名2, „.] SQL> start /路径名/文件名 参数名1[,参数名2, „.] 注意事项: 一次最多只能获取9个&变量, 变量名称只能是从&1,&2到&9 变量名后不要加特殊的结束符号
如果在SQL*PLUS里要把&符号保存在ORACLE数据库里,要修改sql*plus环境变量define SQL> set define off;
八、概述数据模型和数据库设计 1.系统开发的阶段: Strategy and Analysis Design Build and Document Transition Production 12
J2EE @ zxw 2.数据模型
Model of system in client's mind Entity model of client's model Table model of entity model Tables on disk 3.实体关系模型(ERM)概念
ERM(entity relationship modeling)实体 存有特定信息的目标和事件 例如: 客户,订单等 属性 描述实体的属性 例如: 姓名,电话号码等 关系 两个实体间的关系 例如:订单和产品等 实体关系模型图表里的约定
Dashed line(虚线)可选参数 “may be”
Solid line(实线)必选参数 “must be”
Crow's foot(多线)程度参数 “one or more”
Single line(单线)程度参数 “one and only one” 4.实体关系模型例子
每个订单都必须有一个或几个客户
每个客户可能是一个或几个订单的申请者 5.实体关系的类型
1:1 一对一 例如: 的士和司机 M:1 多对一 例如: 乘客和飞机 1:M 一对多 例如: 员工和技能 6.校正实体关系的原则
属性是单一值的, 不会有重复
属性必须依存于实体, 要有唯一标记
没有非唯一属性依赖于另一个非唯一的属性 7.定义结构时的注意事项 减少数据冗余
减少完整性约束产生的问题 确认省略的实体,关系和属性 8.完整性约束的要求
Primary key 主关键字 唯一非NULL Foreign key 外键 依赖于另一个Primary key,可能为NULL Column 字段名 符合定义的类型和长度
Constraint 约束条件 用户自定义的约束条件,要符合工作流要求 例如: 一个销售人员的提成不能超过它的基本工资
Candidate key 候选主关键字 多个字段名可组成候选主关键字, 其组合是唯一和非NULL的
9.把实体关系图映射到关系数据库对象的方法 把简单实体映射到数据库里的表
把属性映射到数据库里的表的字段, 标明类型和注释 把唯一标记映射到数据库里的唯一关键字 把实体间的关系映射到数据库里的外键 13
J2EE @ zxw 其它的考虑: 设计索引,使查询更快
建立视图,使信息有不同的呈现面, 减少复杂的SQL语句 计划存储空间的分配 重新定义完整性约束条件
10.实体关系图里符号的含义 PK 唯一关键字的字段 FK 外键的字段
FK1,FK2 同一个表的两个不同的外键
FK1,FK1 两个字段共同组成一个外键 NN 非null字段 U 唯一字段
U1,U1 两个字段共同组成一个唯一字段
九、创建表
1.ORACLE常用的字段类型 ORACLE常用的字段类型有
VARCHAR2(size)可变长度的字符串, 必须规定长度 CHAR(size)固定长度的字符串, 不规定长度默认值为1
NUMBER(p,s)数字型p是位数总长度, s是小数的长度, 可存负数 最长38位.不够位时会四舍五入.DATE 日期和时间类型
LOB 超长字符, 最大可达4G CLOB 超长文本字符串 BLOB 超长二进制字符串
BFILE 超长二进制字符串, 保存在数据库外的文件里是只读的.数字字段类型位数及其四舍五入的结果 原始数值1234567.89 数字字段类型位数 存储的值 Number 1234567.89 Number 12345678 Number 错
Number(9,1)1234567.9 Number(9,3)错 Number(7,2)错
Number(5,-2)1234600 Number(5,-4)1230000 Number(*,1)1234567.9 2.创建表时给字段加默认值 和约束条件 创建表时可以给字段加上默认值
例如 : 日期字段 DEFAULT SYSDATE 这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间 14
J2EE @ zxw 创建表时可以给字段加上约束条件 例如: 非空 NOT NULL 不允许重复 UNIQUE 关键字 PRIMARY KEY 按条件检查 CHECK(条件)外键 REFERENCES 表名(字段名)3.创建表的例子
CREATE TABLE DEPT(EPTNO NUMBER(2)CONSTRAINT PK_DEPT PRIMARY KEY, DNAME VARCHAR2(14), LOC VARCHAR2(13));CREATE TABLE region(ID number(2)NOT NULL PRIMARY KEY, postcode number default '0' NOT NULL, areaname varchar2(30)default ' ' NOT NULL);4.创建表时的命名规则和注意事项
表名和字段名的命名规则:必须以字母开头,可以含符号A-Z,a-z,0-9,_,$,# 大小写不区分
不用SQL里的保留字, 一定要用时可用双引号把字符串括起来. 用和实体或属性相关的英文符号长度有一定的限制 注意事项: 建表时可以用中文的字段名, 但最好还是用英文的字段名
创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面 建表时如果有唯一关键字或者唯一的约束条件,建表时自动建了索引 一个表的最多字段个数也是有限制的,254个.5.约束名的命名规则和语法
约束名的命名规则约束名如果在建表的时候没有指明,系统命名规则是SYS_Cn(n是数字)约束名字符串的命名规则同于表和字段名的命名规则 6.使用约束时的注意事项
约束里不能用系统函数,如SYSDATE和别的表的字段比较 可以用本表内字段的比较
想在事务处理后, 做约束的检查
SQL> alter session set constraints deferred.7.由实体关系图到创建表的例子 s_dept 前提条件:已有region表且含唯一关键字的字段id SQL> CREATE TABLE s_dept(id NUMBER(7)CONSTRAINT s_dept_id_pk PRIMARY KEY, name VARCHAR2(25)CONSTRAINT s_dept_name_nn NOT NULL, region_id NUMBER(7)CONSTRAINT s_dept_region_id_fk REFERENCES region(id), CONSTRAINT s_dept_name_region_id_uk UNIQUE(name, region_id));8.较复杂的创建表例子 15
J2EE @ zxw SQL> CREATE TABLE s_emp(id NUMBER(7)CONSTRAINT s_emp_id_pk PRIMARY KEY, last_name VARCHAR2(25)CONSTRAINT s_emp_last_name_nn NOT NULL,first_name VARCHAR2(25), userid VARCHAR2 CONSTRAINT s_emp_userid_nn NOT NULL CONSTRAINT s_emp_userid_uk UNIQUE, start_date DATE DEFAULT SYSDATE, comments VARCHAR2(25), manager_id NUMBER(7), title VARCHAR2(25), dept_id NUMBER(7)CONSTRAINT s_emp_dept_id_fk REFERENCES s_dept(id), salary NUMBER(11,2), commission_pct NUMBER(4,2)CONSTRAINT s_emp_commission_pct_ck CHECK(commission_pct IN(10,12.5,15,17.5,20)));
第四篇:黑马程序员c语言教程:Oracle指令
---------------------------order by的用法
--员工信息按照姓名正序排列
select * from emp order by ename asc;--员工信息按照倒叙排列
select * from emp order by ename desc;--也可以是多个字段组合排列。例如:员工信息按照部门正序排列,并且按照姓名倒叙排列
select * from emp order by deptno asc,ename desc
---------------------------function的用法--把所有姓名变成小写
select lower(ename)from emp;--把所有姓名变成大写
select upper(ename)from emp;--求所有人名中包含'a'的员工信息不区分大小写
select * from emp where lower(ename)like '%a%'--截取子字符串,比如求Hello的一部分 select substr('hello',2,2)from dual;select substr(ename,2,2)from emp;--求Hello的一部分,并指明长度
--求ascii码对应的字符 select chr(65)from dual--求字符对应的ascii码
select ascii('中')from dual--四舍五入
select round(12.456,2)from dual select round(12.456,-1)from dual--四舍五入小数点后面多少位
--四舍五入小数点前面多少位
---------------------------important!日期转换函数
---------------------------将当前日期转换成1981-03-12 12:00:00这种形式的字符串
select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')from dual;
--将1981-03-12 12:00:00字符串转换成日期
select to_date('1981-03-12 12:00:00','YYYY-MM-DD HH24:MI:SS')from
dual;
--将每个人的薪水转换成固定格式的字符串
select to_char(sal,'$999,999,999.99')from emp;--将固定格式的字符串转换成数值
select to_number('$8,000.00','$999,999,999.99')from dual;
--当null参与计算时候,可以用nvl这个函数。比如求每个人一年总共的收入 select ename,sal*12+comm from emp
---------------------------group function组函数
--求所有人的薪水的总和,平均值,最大值,最小值
select sum(sal),avg(sal),max(sal),min(sal)from emp;--求总的行数
select count(*)from emp;--求总的行树,(可以指定具体的字段)但如果字段有null值的时候需要小心使用 select count(comm)from emp;
--也可以过滤掉重复的行之后统计行数
select count(distinct deptno)from emp--可以指明按照哪个字段进行分组.比如;分部门统计最高薪水
select deptno,max(sal)from emp where deptno is not null group by deptno--也可以按照多个字段来分组统计,比如:分部门和岗位,统计最高薪水和行数 select deptno,job,max(sal),count(*)from emp group by deptno,job
---------------------------重要:出现在select列表中的字段,如果没有在组函数中,那么必须出现在group by 子句中。
-------------------------select ename,deptno,job,max(sal),count(*)from emp group by deptno,job
--求薪水最高的员工姓名
select * from emp where sal=(select max(sal)from emp);delete from emp where ename='TEST2' update emp set deptno=10 where deptno=99 select * from dept insert into dept(deptno,dname,loc)values('10','ACCOUNTING','NEW YORK');--having从句的用法
--求平均薪水是2000以上的部门
select deptno,avg(sal)as avg_sal from emp group by deptno
having avg(sal)>2000-------------------------
第五篇:黑马程序员c语言教程:Oracle指令
--sql structured query language
--DML--Data Manipulation Language--数据操作语言
query information(SELECT), add new rows(INSERT), modify existing rows(UPDATE), delete existing rows(DELETE), perform a conditional update or insert operation(MERGE), see an execution plan of SQL(EXPLAIN PLAN), and lock a table to restrict access(LOCK TABLE).--DDL--Data Definition Language--数据定义语言
create, modify,drop, or rename objects(CREATE,ALTER,DROP,RENAME), remove all rows from a database object without dropping the structure(TRUNCATE), manage access privileges(GRANT,REVOKE), audit database use(AUDIT,NOAUDIT)and add a description about an object to the dictionary(COMMENT).--Transaction Control事务控制语句 save the changes(COMMIT)or discard the changes(ROLLBACK)made by DML statements.Also included in the transaction-control statements are statements to set a point or marker in the transaction for possible rollback(SAVEPOINT)and to define the properties for the transaction(SET TRANSACTION).Used to manage the properties of the database.There isonly one statement in this category(ALTER SYSTEM).--DCL--Data Control Language--与开发关系不是很密切,用于权限的分配与回收 grant,revoke,data control
--Session Control control the session properties(ALTER SESSION)and to enable/disable roles(SET ROLE).--System Control
-------------------------select的用法
--每个员工的所有信息
select * from emp--每个人的部门编号,姓名,薪水
select deptno,ename,sal from emp;--每个人的年薪
select ename,sal*12 from emp;--计算2*3的值
select 2*3 from emp;--计算2*3的值(dual)select 2*3 from dual;select * from dual;--得到当前时间
select sysdate from dual--可以给列起别名,比如求每个人的年薪
select ename,sal*12 salperyear from emp;--如果别名中有空格,需要用双引号
select ename,sal*12 “sal per year” from emp;--如果没有内容,则为空 select comm from emp;--当空字段参与计算,则结果是null--例如:计算每个人的全年的收入包括月薪和年终奖 select ename,sal*12+comm from emp;--可以将多个字符串拼在一起。比如:求每个人的薪水,格式为smith-sal-123 select ename||'-sal-'||sal from emp;--如果字符串中有单引号,需要用另外一个单引号转义,比如:这样一个字符串: he's friend select ename||'''s sal is'||sal from emp;
---------------------------distinct 关键词的用法--求有哪些个部门
select distinct deptno from emp--可以用来修饰多个字段。比如:求有哪些个部门和job的组合 select distinct deptno,job from emp
-------------------------where关键词的用法
--可以是数值类型的等值判断。比如:求10这个部门的所有员工 select * from emp where deptno=20--可以是字符串类型的等值判断。比如:求叫KING的这个人的信息 select * from emp where ename = 'KING'--也可以是不等值判断。比如:求薪水小于2000的员工信息 select * from emp where sal<2000;
--字符串也可以做不等值判断,比如:求所有ename大于'CBA'的员工信息。select * from emp where ename>'CBA';--求部门不是10的员工
select * from emp where deptno <> 10;--求薪水在800和1500之间的员工信息
select * from emp where sal >=800 and sal <=1500;--也可以写成
select * from emp where sal between 800 and 1500--这样写则不可以
-----------------------------select * from emp where 800<=sal<=1500--where...in..的用法。比如:求薪水是800或者1500或正2000的员工信息 select * from emp where sal=800 or sal=1500 or sal=2000--相当于写成这样
select * from emp where sal in(1500,800,2000,1500,1500,1500,1500);--再比如求姓名是KING,SMITH,AA的员工信息
select * from emp where ename in('KING','SMITH','AA')--求入职时间在20-2月-81之后的员工信息
select * from emp where hiredate < '23-5月-87';
---------------------------and or not的用法
--求薪水大于1000或者部门在20这个部门的员工信息 select * from emp where sal>1000 and deptno=20--求薪水不是800或者不是1500或者不是3000的员工信息 select * from emp where sal not in(800,1500,3000)--也可以这样来写
select * from emp where sal <>800 and sal <> 1500 and sal<>3000
---------------------------like的用法
--求名字中包含ALL这三个字符的员工信息
select * from emp where ename like '%E%';--求名字中的第二个字母是A的员工
select * from emp where ename like '_A%';--特殊字符需要转义。比如:求员工中包含特殊字符%的员工信息 select * from emp where ename like '%%%' escape ''
---------------------------null的用法
--求没有年终奖的员工
select * from emp where comm is null--求有年终奖的员工
select * from emp where comm is not null