回 帖 发 新 帖 刷新版面

主题:[原创]得瑟下,sql语句

大家知道mysql吗?不知道的话就让小弟在此得瑟得瑟阿吧,MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。这样就增加了速度并提高了灵活性。
下面,就跟大家介绍下sql语句吧
一、SQL PLUS
1 引言  

SQL命令  
以下17个是作为语句开头的关键字:  
alter  drop  revoke  
audit  grant  rollback*  
commit*  insert  select  
comment  lock  update  
create  noaudit  validate  
delete  rename  
这些命令必须以“;”结尾  
带*命令句尾不必加分号,并且不存入SQL缓存区。  

SQL中没有的SQL*PLUS命令  
这些命令不存入SQL缓存区  
@  define  pause  
#  del  quit  
$  describe  remark  
/  disconnect  run  
accept  document  save  
append  edit  set  
break  exit  show  
btitle  get  spool  
change  help  sqlplus  
clear  host  start  
column  input  timing  
compute  list  ttitle  
connect  newpage  undefine  
copy  

---------  
2 数据库查询  

数据字典  
TAB 用户创建的所有基表、视图和同义词清单  

DTAB 构成数据字典的所有表  

COL 用户创建的基表的所有列定义的清单  

CATALOG 用户可存取的所有基表清单  

select * from tab;  

describe命令 描述基表的结构信息  
describe dept  

select *  
from emp;  

select empno,ename,job  
from emp;  

select * from dept  
order by deptno desc;  

逻辑运算符  
= !=或<> > >= < <=  
in  
between value1 and value2  
like  
%  
_  
in null  
not  
no in,is not null  

谓词in和not in  
有哪些职员和分析员  
select ename,job  
from emp  
where job in ('clerk','analyst');  

select ename,job  
from emp  
where job not in ('clerk','analyst');  

谓词between和not between  
哪些雇员的工资在2000和3000之间  
select ename,job,sal from emp  
where sal between 2000 and 3000;  

select ename,job,sal from emp  
where sal not between 2000 and 3000;  

谓词like,not like  
select ename,deptno from emp  
where ename like 'S%';  
(以字母S开头)  
select ename,deptno from emp  
where ename like '%K';  
(以K结尾)  
select ename,deptno from emp  
where ename like 'W___';  
(以W开头,后面仅有三个字母)  
select ename,job from emp  
where job not like 'sales%';  
(哪些雇员的工种名不以sales开头)  

谓词is null,is not null  
没有奖金的雇员(即commision为null)  
select ename,job from emp  
where comm is null;  

select ename,job from emp  
where comm is not null;  

多条件查询  
select ename,job  
from emp  
where deptno=20  
and job!='clerk';  

表达式  
+ - * /  

算术表达式  
选择奖金高于其工资的5%的雇员  
select ename,sal,comm,comm/sal from emp  
where comm>.05*sal  
  order by comm/sal desc;  

日期型数据的运算  
add two days to 6-Mar-87  
6-Mar-87 + 2 = 8-Mar-87  
add two hours to 6-Mar-87  
6-Mar-87 + 2/24 = 6-Mar-87 and 2hrs  
add 15 seconds to 6-Mar-87  
6-Mar-87 + 15/(24*60*60) = 6-Mar-87 and 15 secs  

列名的别名  
select ename employee from emp  
  where deptno=10;  
(别名:employee)  
select ename,sal,comm,comm/sal "C/S RATIO" from emp  
  where comm>.05*sal  
  order by comm/sal desc;  

SQL命令的编辑  
list or l 显示缓冲区的内容  
list 4 显示当前SQL命令的第4行,并把第4行作为当前行,在该行号后面有个*。  
change or c 用新的内容替换原来在一行中第一次出现内容  
SQL>c/(...)/('analyst')/  
input or i 增加一行或多行  
append or a 在一行后追加内容  
del  删除当前行 删除SQL缓冲区中的当前行  
run  显示并运行SQL缓冲区中的命令  
/  运行SQL缓冲区中的命令  
edit  把SQL缓冲区中的命令写到操作系统下的文本文件,  
并调用操作系统提供的编辑器执行修改。  

-------------  
3 数据操纵  
数据的插入  
insert into dept  
  values (10,'accounting','new york');  

insert into dept (dname,deptno)  
  values ('accounting',10);  

从其它表中选择插入数据  
insert into emp (empno,ename,deptno)  
select id,name,department  
from old_emp  
where department in(10,20,30,40);  

使用参数  
insert into dept  
  values(&deptno,&dname,&loc);  
执行时,SQL/PLUS对每个参数将有提示用户输入  

参数对应日期型或字符型数据时,可在参数上加引号,输入时就可不用引号  
insert into dept  
  values(&deptno,'&dname','&loc');  

插入空值(NULL)  
insert into dept  
  values(50,'education',null);  

插入日期型数据  
日期型数据缺省格式:DD-MON-YY  
insert into emp  
(empno,ename,hiredate)  
values(7963,'stone','07-APR-87');  

系统时间:SYSDATE  
insert into emp  
(empno,ename,hiredate)  
values(7600,'kohn',SYSDATE);  

数据更新  
update emp  
set job='manager'  
where ename='martin';  

update emp  
set job='market rep'  
where ename='salesman';  

update emp  
set deptno=40,job='market rep'  
where job='salesman';  

数据删除  
delete emp  
where empno=765;  

更新的提交  
commit  

自动提交方式  
set autocommit on  
如果状态设为开,则使用inesrt,update,delete会立即提交。  

更新取消  
rollback  

两次连续成功的commit之间的操作,称为一个事务  

---------------  
4  创建基表、视图  
创建基表  
create table dept  
(deptno number(2),  
dname char(14),  
loc char(13));  

数据字典会自动更新。  
一个基表最多254列。  

表名列名命名规则:  
限制  
第一个字符必须是字母,后面可任意(包括 $ # _ 但不能是逗号)。  
名字不得超过30个字符。  

唯一  
某一用户的基表名必须唯一,不能是ORACLE的保留字,同一基表的列名互不相同。  

使用双引号  
如果表名用双引号括起来,则可不满足上述规则;  
只有使用双引号,才能区别大、小写;  
命名时使用了双引号,在以后的操作也必须使用双引号。  

数据类型:  
char(n)    (不得超过240字符)  
number(n,d)  
date  
long    (最多65536字符)  
raw    (二进制原始数据)  

空值处理  
有时要求列值不能为空  
create table dept  
(deptno number(2) not null,  
dname char(14),  
loc char(13));  

在基表中增加一列  
alter table dept  
add (headcnt number(3));  

修改已有列属性  
alter table dept  
modify dname char(20);  
注:只有当某列所有值都为空时,才能减小其列值宽度。  
只有当某列所有值都为空时,才能改变其列值类型。  
只有当某列所有值都为不空时,才能定义该列为not null。  
例:  
alter table dept modify (loc char(12));  
alter table dept modify loc char(12);  
alter table dept modify (dname char(13),loc char(12));  

创建视图  
create view managers as  
select ename,job,sal  
from emp  
where job='manager';  
为视图列名取别名  
create view mydept  
(person,title,salary)  
as select ename,job,sal  
from emp  
where deptno=10;  

with check option选项  
使用with check option,保证当对视图插入或更新数据时,  
该数据必须满足视图定义中select命令所指定的条件。  
create view dept20 as  
select ename,job,sal,deptno  
from emp  
where deptno=20  
with check option;  
在做下述操作时,会发生错误  
update dept20  
set deptno=30  
where ename='ward';  

基表、视图的拷贝  
create table emp2  
as select * from emp;  

基表、视图的删除  
drop table 表名  
drop view 视图名  
------------  
5 SQL*PLUS报表功能  
SQL*PLUS的一些基本格式命令  
column deptno heading department  

column ename heading name  

column sal heading salary  

column sal format $99,999.00  

ttitle sample report for|hitech corp  

btitle strictly confidential  

break on deptno  

compute sum of sal on deptno  

run  

表头和表尾  
ttitle sample report for|hitech corp  
btitle right strictly confidential  

“|”表示换行,结尾不必加分号  
选项有三种:left right center  

使用TTITLE,系统将自动地在每页的顶部显示日期和页号。  
TTITLET和BTITLE命令有效,直至重新设置表头或表尾,或退出SQL*PLUS。  

下面命令使标题语句失效  
TTITLE OFF  
BTITLE OFF  

列名  
column命令定义用于显示列名  
若名字为一个单词,不必加引号  
column ename heading employee  

column ename heading 'employee|name'  
(|为换行)  

取消栏定义  
column ename clear  

列的格式  
column ename format A15  

column sal format $9,999.99  

column comm like sal  

like子句,使得某一列的格式参照另一列格式,它拷贝列名及其格式  

控制记录显示分组顺序  
break on deptno  
(不显示重复值)  

select deptno,ename  
from emp  
order by deptno;  
(ORDER BY子句用于控制BREAK)  

显示为  
10 clark  
   niller  
20 smith  
   scott  
30 allen  
   blake  

每次只有一个BREAK命令起作用,但一次可以在多个列上使用BREAK命令  
break on 列名1 on 列名2  

记录分组  
break on deptno skip 2  
select deptno,ename  
from emp  
order by deptno;  

每个deptno之间空两行  
clear break(取消BREAK命令)  
break on page(每次从一新页开始)  
break on report(每次从一新报表开始)  
break on page on report(联合使用)  

分组计算  
break on deptno skip 2  
compute sum of sal on deptno  
计算每个部门的工资总和  
skip子句使部门之间的信息分隔开  

其他计算命令  
compute avg of sal on deptno(平均值)  
count 非空值的总数  
MAX 最大值  
MIN 最小值  
STD 标准偏差  
VAR 协方差  
NUMBER 行数  

使compute命令失效  
一旦定义了COMPUTE,则一直有效,直到  
关闭COMPUTE(clear compute)  

SQL/PLUS环境命令  
show 选项  
(显示当前参数设置情况)  

show all(显示全部参数)  

设置参数  
set 选项 值或开关  

set autocommit on  

SET命令包括  
set autocommit {off|on|immediate}  
(自动提交,OFF缺省)  

set echo {off|on}  
(命令文件执行,是否在终端上显示命令本身,OFF缺省)  

set feedback {off|on}  
(ON:查询结束时,给出结果,记录数的信息,缺省;  
OFF:无查询结果,记录数的信息)  

set heading {off|on}  
(ON:列的头标在报表上显示,缺省;OFF:不在报表上显示)  

set linesize {n}  
一行显示的最大字符数,缺省为80  

set pagesize {n}  
每页的行数,缺省是14  

set pause {off|on|text}  
(ON:当报表超过一页时,每显示一屏就暂停显示,等待用户打回车键,再接着显示;  
OFF:页与页不停顿,缺省;text:页与页停顿,并向用户提示信息)  

SET BUFFER buffer  
设置当头的命令缓冲区,通常情况下,SQL命令缓冲区已为当前缓冲区。  
由于SQL命令缓冲区只能存放一条SQL命令,  
所以可用其它缓冲区来存放SQL命令和SQL*PLUS命令。  

经常用到的设置可放在login.sql文件中。  

SET NULL  
set null 'no data'  

select ename,comm  
from emp  
where deptno=30;  
把部门30中无佣金雇员的佣金显示为“NO DATA”。  

set null是SQL*PLUS命令,用它来标识空值(NULL),可以设置为任意字符串。  

存盘命令SAVE  
save 文件名  

input  
1 select empno,ename,job  
2 from emp  
3 where job='analyst'  

save research  

目录中会增加一个research.sql文件。  

编辑命令EDIT  
edit  

EDIT编辑当前缓冲区中的内容。  

编辑一个文件  
edit research  

调入命令GET  
get research  
把磁盘上的文件内容调入缓冲区,并显示在屏幕上,文件名尾不必加.sql。  

START命令  
运行指定的文件  
start research  

输出命令SPOOL  
spool tryfile  
不仅可以使查询结果在屏幕上显示,还可以使结果存入文件  

停止向文件输出  
spool off  

把查询结果在打印机上输出,先把它们存入一个文件中,  
然后不必使用SPOOL OFF,而用:  
spool out  
SPOOL OUT关闭该文件并在系统缺省的打印机上输出  

制作报表举例  
edit tryfile  

set echo off  
set autocommit on  
set pagesize 25  
insert into emp (empno,ename,hiredate)  
  values(9999,'geiger',sysdate);  
insert into emp (empno,ename,deptno)  
  values(3333,'samson',20);  
spool new_emp  
select * from emp  
  where deptno=20  
or deptno is null  
/  
spool off  
set autocommit off  

用start命令执行这个文件

以上就是我为大家提供的知识了,不知道可不可以帮助到大家,
好了,今天就先到这吧,跟大家说再见啦,有空再来的,啥有那拉!!!

[url=http://www.beidaqingniao.org]http://www.beidaqingniao.org[/url]

回复列表 (共1个回复)

沙发

怎么回事,这篇文章我都看了好几个人在贴。

我来回复

您尚未登录,请登录后再回复。点此登录或注册