Data retrieval
-Select
Data manipulation language (DML)
-INSERT,UPDATE,DELETE
Data definition language(DDL
-CREATE,ALTER,DROP,RENAME,TRUNCATE
Transacation control
-COMMIT, ROLLBACK,SAVEPOINT
Data control language(DCL)
-GRANT,REVOKE
使用SQL *Plus进行数据库操作。
openlab.tarena.ca% sqlplus tarena/tarena@TARENADB
用户名/密码
注意这样登录是强烈不推荐的,因为这样别人能看到你的用户名和密码。
SQL> !ps -ef|grep sqlplus
lujl 966 955 0 08:43:17 pts/1 0:00 sqlplus tarena/tarena@TARENADB
lujl 969 966 1 08:45:45 pts/1 0:00 /bin/csh -c ps -ef|grep sqlplus
lujl 971 969 0 08:45:45 pts/1 0:00 grep sqlplus
由于本人已有很多编写SQL语句的经验,所以只记录重点信息。
SQL中可以使用数学表达式
+
-
*
/
先乘除后加减。
SQL> select last_name,salary, 12*salary + 100
2 from s_emp
注意每一个子句最好单独占一行。这样以便以后的修改,要想写完就执行,最后添加 ‘;’
1。可以给列取别名 Aliase,
2。可以级联两列,作为整体,输出结果。
SQL> select first_name||last_name "Employees"
2 from s_emp;
Employees
------------------------------
benqu
hui
lgf
liganfeng
lgf
BenDumas
AntoinetteDumas
使用单引号,将字符括起来。
select first_name||' '||last_name
from s_emp;
NULL是一个不确定的值!
对空的任何操作,返回都是空。
使用nvl函数,处理空值,为空就使用默认值。
NVL(salary,1000)
select distinct name
from s_dept;
sqlplus有很多命令。
SQL> help index
Enter Help [topic] for help.
@ COPY PAUSE SHUTDOWN
@@ DEFINE PRINT SPOOL
/ DEL PROMPT SQLPLUS
ACCEPT DESCRIBE QUIT START
APPEND DISCONNECT RECOVER STARTUP
ARCHIVE LOG EDIT REMARK STORE
ATTRIBUTE EXECUTE REPFOOTER TIMING
BREAK EXIT REPHEADER TTITLE
BTITLE GET RESERVED WORDS (SQL) UNDEFINE
CHANGE HELP RESERVED WORDS (PL/SQL) VARIABLE
CLEAR HOST RUN WHENEVER OSERROR
COLUMN INPUT SAVE WHENEVER SQLERROR
COMPUTE LIST SET
CONNECT PASSWORD SHOW
DESCRIBE s_dept
SQL> describe s_dept
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(7)
NAME NOT NULL VARCHAR2(25)
REGION_ID
NUMBER(p,s)p为整数位,s为小数位数
VARCHAR2(s)
DATE (Oracle中只有一种日期格式!)
CHAR(s)
SQL Plus 提供了很强的编辑SQL语句的能力。
SQL> l
1 select first_name||last_name "Employees"
2* from s_emp
SQL> 1
1* select first_name||last_name "Employees"
SQL>
list(简写l)
列出缓存中的SQL语句。
1(数字)就是将当前编辑行
看前面有*的,为当前编辑行,再才使用行编辑命令,就需要确定是否是想编辑的行。
A[PPEND] text
C[HANGE] /old/new
CL[EAR]BUFF[ER]
DEL
I[NPUT] text
L[IST] n
n text
由于有时会查出很多记录,这时,需要分页停顿。
SET PAUSE {[OFF|ON] text}
SAVE file写缓存到文件
GET file读入缓存
START filename读文件到缓存,并执行。
@filename = START filename
EDIT filename
SPOOL filename 开始记录,并将执行的命令和结果都写入相应文件。
SPOOL OFF,这时会写入文件。EXIT,正常退出,也会写入文件。
关键命令
COL[UNM] [{column|alias} [option]]
FOR[MAT] format
9
0
$
L
.
,
col last_name format a15 调整last_name为15字符长度,默认为last_name数据类型的长度。(VARCHAR2(35),那就是35),调整列宽。
HEA[DING] text
设置表头
JUS[TIFY] {align}
left center right
column last_name HEADING 'Employee|Name' FORMAT A15
column salary JUSTIFY LEFT FORMAT $099,999,99 保证位数,$012,345,00
column start_date FORMAT A8 NULL 'Not hired' 等同于nvl函数
column last_name
显示某列的格式
column last_name CLEAR
select last_name
from s_emp
order by last_name;
升序默认
desc降序
select last_name,salary*12
from s_emp
order by 2;
按照select子句中的第二项 排序
select last_name,dept_id,salary
from s_emp
order by dept_id,salary DESC;
先按部门排序,如果相同,再按salary降序排。
-------------------------------------------------
where 子句,last_name='Megee',单引号!
日期格式默认为日日-月月月-年年 DD-MON-RR(RR不同于YY,它只取1950到2049年的年,是为解决千年虫问题设定的)
逻辑比较符
= > >= < <=
SQL比较符
BETWEEN...AND...
IN(LIST) IN(1,3) 1和3
LIKE
IS NULL
逻辑操作符
AND
OR
NOT
不等于!= <> ^=
NOT BETWEEN
NOT IN
NOTLIKE
ISNOTNULL
===============================
LIKE
select last_name from s_emp where last_name like '_M%'
'_' 代表有且只有一格字符
---------------------------
这时,老师发现缓存不够,察看老师的几条命令,应用性很强哦。记下来,以后自己用!
du -sk *|sort
当前目录按照大小的数字排序,
df -k .
察看当前目录的文件系统使用情况。
rm -rf *
不提示删除文件
---------------------------
select table_name
from user_tables
where table_name like 'S\_%' ESCAPE '\';
以S_开头的表名,escape定义了转义字符\
IS NULL
IS NOT NULL
不要 = null 不出错,但是逻辑不对!
执行顺序
比较操作符〉AND〉OR
==============================
函数
单行函数,输入一个值,输出一个值
多行函数,多输入,单输出。
LOWER('SQL Course')=sqlcourse
UPPER
INITCAP('SqL COurse')=SqL COurse
CONCAT级联
SUBSTR('String',1,3)=Str
LENGTH
NVL
ROUND(45.923,2)=45.92
ROUND(45.923,-1)=50
TRUNC(45.923,2)=45.92
TRUNC(45.923,-1)=50
MOD(1600,300)=100 余数
===========================================
Oracle Date Format是重点
日期包括世纪、年、月、日、小时、分钟、秒几类数
Oracle时间可以保存10负9次方妙
默认显示日期格式为DD-MON-RR
SYSDATE一个能返回当前系统时间的函数
select sysdate from dual;
dual是了保证select语句完整性,设置的,没有实际意义。我认为是个测试函数的好帮手。
YY 05
YYYY 2005
RR 05
RRRR 2005
YEAR two thousand and five
MM 12
MON NOV
MONTH NOVEMBER
DD 18
DDTH 18TH
DDSP EIGHTEEN
DDSPTH EIGHTEENTH
HH 03 (12小时)
HH24 15
MI 31 分钟
SS 48 秒
AM PM
D 5
DY FRI
DAY FRIDAY
SQL> select to_char(sysdate,'yyyy mm ddhh miss')
2 from dual;
TO_CHAR(SYSDATE,'
-----------------
2005 11 1904 1946
时期+/-数字,可以得到一个新的日期。(加在日子上)
两个日期相减,得到一个数字。
如果想加小时到日期上,必须先除以24,在与对应日期相加。
1 select to_char(sysdate+0.25,'yyyy mm dd hh miss')
2* from dual
当前时间+6小时的时间。
日期相关函数
MONTHS_BETWEEN('01-SEP-95','11-JAN-94')
19.774194
1 select ROUND(MONTHS_BETWEEN('01-SEP-95','11-JAN-94'))
2* from dual
3 ;
20
返回两个日期之间的月差值。
ADD_MONTHS('11-JAN-94',6)
NEXT_DAY('01-SEP-95','FRIDAY')
注意:下一个星期几,但不一定下一周的星期几,找到第一个为准。
LAST_DAY('01-SEP-98')
'30-SEP-98'
ROUND('25-MAY-95','MONTH')
01-JUN-95
TRUNC('25-MAY-95','MONTH')
01-MAY-95
TO_CHAR(date,'fmt')
fm是一个去除前置0或者空格的开关,fm....fm....
fm作用域,是从当前到下一个fm之间的范围。第二个fm后面表示不去除前置0,奇偶变。
TO_CHAR(number,'fmt')
9
0
$
L
.
,
TO_NUMBER(char)
char必须是一个‘数字’
TO_DATE(char[,'fmt'])
不给定日期转换格式,就按照默认的dd-mon-rr,进行转换。
函数可以嵌套
1 select last_name,
2 NVL(TO_CHAR(MANAGER_ID),'No Manager')
3 from s_emp
4* where manager_id IS NULL
Join方法
等值
非等值
外连接
自连接
必须有连接键,否则就是迪卡尔连接。
1 select s.last_name,s.dept_id,d.id,d.name
2 from s_emp s,s_dept d
3* where s.dept_id=d.id
LAST_NAME DEPT_ID ID NAME
--------------- ---------- ---------- -------------------------
Dumas 31 31 Sales
Dumas 32 32 Sales
Dumas 33 33 Sales
payn 34 34 Sales
外连接是一种特殊的等值连接,用于有空值出现时,寻找到所有记录。
1 select s.last_name,s.id,c.sal,c.name
2 from s_emp s,s_customer c
3* where s.id(+) = c.sal
LAST_NAME ID SAL NAME
--------------- ---------- ---------- -------------------------
Dumas 12 12 athletes attic
Dumas 12 12 great athletes
Dumas 12 12 bj athletics
Dumas 12 12 athletic for all
Dumas 12 12 sports,inc
14 athletics two
14 athletics one
14 shhes for sports
14 athletic attire
那个+ 表示有一侧可能没有对应数据。
表示有部分客户没有销售代表。
如果+ 在另外一侧,表示查找所有销售的客户情况。
posted on 2005-11-19 16:29
北国狼人的BloG 阅读(676)
评论(0) 编辑 收藏 所属分类:
达内学习总结