地球上最全的SQL命令 珍藏版.docx

上传人:b****7 文档编号:9452699 上传时间:2023-02-04 格式:DOCX 页数:53 大小:67.94KB
下载 相关 举报
地球上最全的SQL命令 珍藏版.docx_第1页
第1页 / 共53页
地球上最全的SQL命令 珍藏版.docx_第2页
第2页 / 共53页
地球上最全的SQL命令 珍藏版.docx_第3页
第3页 / 共53页
地球上最全的SQL命令 珍藏版.docx_第4页
第4页 / 共53页
地球上最全的SQL命令 珍藏版.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

地球上最全的SQL命令 珍藏版.docx

《地球上最全的SQL命令 珍藏版.docx》由会员分享,可在线阅读,更多相关《地球上最全的SQL命令 珍藏版.docx(53页珍藏版)》请在冰豆网上搜索。

地球上最全的SQL命令 珍藏版.docx

地球上最全的SQL命令珍藏版

OracleSQLday1

OracleSQL(Oracle9i9.2.0.1.0)

一、DataBase

保存数据,以表的形式表现数据

二、SQL

SQL(structurequerylanguage结构化查询语言),是操作关系型数据库中的对象

DDL(datadefinitionlanguage数据定义语言),用于建表或删表操作,以及对表约束进行修改。

createtable,altertable,droptable对表结构的增、删、改操作。

DML(Datamanipulationlanguage数据操作语言),向表中插入纪录,修改纪录

insert,update,delete

transaction,事务控制语言,由DML语句组成的,commit;,rollback,savepoint

select查询语句

dcl数据控制语言,授权语句grant,revoke

altersessionaltersystem

三、Oracle

DB(database)

DBMS数据库管理系统(databasemanagementsystem)

DBA数据库管理员

数据库管理系统有:

ms微软的sqlserver,

IBM的db2,imformix,

mysql,

oracle的oracle920,

sybase的ase

四、相关操作

echo$PATH配置环境变量,加/oracledata/oracle/product/9.2.0/bin,把oracle命令加上

echo$ORACLE_SID查看Oracle数据库的实例,实例是访问数据库的方法。

缺省端口号是:

1521

1、sqlplus访问数据库命令(本地访问/远程访问),和数据库建立连接的命令,是数据库操作的环境

sqlplus用户名/密码

2、showuser显示当前用户的用户名

改变身份可以直接connect用户名/密码---这个是sqlplus命令

在sqlplus中可以使用!

可以在shell和sqlplus间切换,!

shell命令可以在sqlplus中使用shell命令

实际上是sqlplus开了子进程来执行shell命令。

3、Oracle数据库中的表分两类:

用户表(用户使用操作的表),系统表(数据库系统维护的表,也叫数据

字典)

对用户表的DDL操作触发了对系统表的DML操作!

五、基本语法

!

!

!

1、select查询语句

对一个表进行查询操作首先要熟悉表结构。

selecttable_namefromuser_tables;(查询系统表)

以上的查询语句就是查询本用户下所拥有的所有表的表名。

投影操作,只查看选择的字段的信息。

select

选择操作,查看字段中的特定某些信息。

where

联接操作,多表查询,通过表间连接,查寻出多表中的信息

(1)selecttable_namefromuser_tables;(查询系统表)

以上的查询语句就是查询本用户下所拥有的所有表的表名。

(2)sqlplus的buffer中会缓存最后一条sql语句,可以使用"/"来执行这最后一条sql语句,也可以使用

edit命令来编辑最后一条sql语句。

l命令(list)(sqlplus命令)可以显示buffer中最后一条命令。

(3)desc[表名]

这是一条sqlplus命令,注意他不是sql语句,这条命令用于查看表的结构。

describe的缩写

[字段名][字段的类型],这是使用完desc命令后显示的表结构。

例:

descs_emp员工表

显示结果:

NameNullType

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

IDNOTNULLNUMBER(7)

LAST_NAMENOTNULLVARCHAR2(25)

FIRST_NAMEVARCHAR2(25)

USERIDVARCHAR2(8)

START_DATEDATE

COMMENTSVARCHAR2(255)

MANAGER_IDNUMBER(7)

TITLEVARCHAR2(25)

DEPT_IDNUMBER(7)

SALARYNUMBER(11,2)

COMMISSION_PCTNUMBER(4,2)

Name是字段名,Null是此字段是否允许为空,notnull是不允许为空。

Type是类型,number是数字类型、varchar2是字符类型,date是日期类型。

表中字段的含义:

IDID

LAST_NAME姓

FIRST_NAME名

START_DATE入职日期

COMMENTS说明

MANAGER_ID经理ID

TITLE职务

DEPT_ID部门

SALARY月薪

COMMISSION_PCT提成

descs_dept部门表

NameNull?

Type

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

IDNOTNULLNUMBER(7)

NAMENOTNULLVARCHAR2(25)

REGION_ID(地区号)NUMBER(7)

descs_region地区表

(4)select[表的字段名1],[表的字段名2],...from表名;

select*from表名;查询表中所有字段的信息

(5)关键字不能拆分,sql语句,以及表名,字段名是大小写不敏感的。

sql语句要以";"结尾,来表示sql语句结束,如果不加";"系统不会执行此条sql语句,并提示。

在Oracle中字符显示是左对齐,数值右对齐。

(6)在select语句中可以使用数学表达式。

select[表达式(必须包含本表字段名)],[...],....from表名;

运算的优先级的先乘除后加减,同级自左向右运算,括号改变优先级。

selectfirst_name,salary*12froms_emp;找出每个人的年薪

(7)别名

select[字段名或表达式]["别名"],[...]["..."],....from表名;

可以通过在字段名或表达式后加空格"别名",可以给列,或者表达式结果其别名。

表达式别名若有空格必须加双引号。

selectfirst_name,salary*12annual_salaryfroms_emp;

(8)字符串拼接使用||符号

select目标字段名||''||目标字段名from表名;

注意:

在Oracle中的字符或字符串要用单引号,双引号用来起别名

别名中需要使用空格,或是大小写敏感时需要用".."包含。

练习:

自己写一条SQL语句,执行的结果是select*from...;

其中...是每张表的表名

即在每张表的表名前加“select*from”,后加“;”

select'select*from'||table_name||';'fromuser_tables;

2、处理错误

执行查询时

无效标识一般表示字段名错误

表或视图不存在表示表名错误

(1)!

oerrora[错误号],系统可以显示错误的原因和如何修改。

如果命令错误输入可以使用edit或ed来修改输

入错误。

实际上是在编辑缓存文件中的最后一条sql语句。

也可以使用(change)c/错误字段/正确字段,来进行替换操作进行修改。

只有在Linux平台使用

!

相当于host,没有断连接,只是切换了一下,执行shell命令

(2)edit命令来编辑最后一条sql语句。

3、sqlplus设置

setpauseon回车响应,分屏显示,只在本会话中有效

setpauseoff关闭分屏显示。

setpause"..."设置分屏显示的提示信息。

setpauseon先输出提示信息,回车响应,分屏显示

setheadoff提头输出关闭

setfeedoff结尾输出关闭

setechooff回写关闭

spool文件名.sql写入指定文件

spooloff关闭写入。

4、sql脚本

也就是在文件中写有sql语句的文件,可以在sqlplus中运行。

引入sql脚本

sqlplus用户名/密码@sql脚本(注意:

在用户名密码输入结束后一定要加空格然后再写@sql脚本)

在脚本中最后一行写上“exit”,则运行完脚本以后,回到shell上

5、Oracle中的空值

空值会当无穷大处理,其实空值根本就不会存储,只是看作是无穷大。

Oracle中空值处理函数NVL(字段名,值),如果这个字段为空,替换为第二个参数的指定值,如果不

为空,则会返回其原值。

例:

selectfirst_name,salary*12*(1+NVL(commission_pct,0)/100)"totalsalary"froms_emp;查询每

个员工一年的总收入

6、distinct关键字,去掉重复行(这个关键字会触发排序操作)

例:

selectdistinctdept_idfroms_emp;

查询员工都分配在哪些不同的部门

selectdistinctdept_id,titlefroms_emp;查询部门都有哪些不同的职位

distinct可以使dept_id与title的联合唯一

注意:

distinct,关键字之后会对from之前的字段进行排重操作。

六、选择操作

1、orderby排序是按照存储顺序输出的,orderby后面可以跟字段名,别名,位置,也可以有多个字段,当第

一个字段的值一样时,按第二个字段排序

排序子句ASC(默认,升序)DESC(降序)

orderby目标列名(也可以是别名)排序顺序(不写排序顺序,会默认为升序排序)

例:

selectfirst_namefroms_emporderbyfirst_name;等价于selectfirst_namefroms_emporderby

1;此处的1表示first_name。

selectfirst_namefroms_emporderbyfirst_namedesc;

selectfirst_name,salaryfroms_emporderbysalary;按照工资的升序排序

selectfirst_name,salaryfroms_emporderbysalarydesc;按照工资的降序排序

selectfirst_name,salary,commission_pctfroms_emporderbysalary,commission_pct;先按工资

排,工资一样的再按提成排序,升序显示注意:

升序空值在结果的末尾,降序空值在结果的前面。

2、where子句(选择操作)

where子句使用在select...from...后面,用来选择所需(符合条件的)的记录

例:

selectfirst_name,salaryfroms_empwheresalary>1500;找出工资比1500高的员工

此处不能用where2>1500

查询Carmen的工资:

selectfirst_name,salaryfroms_empwherefirst_name='Carmen';

注意:

字符需要加引号,数字不需要。

引号之内的内容是大小写敏感的

where后面跟的是表达式也就是XXX=XXX,XXXbetweenXandX,XXXin(X,X,X)

between...and...,表示结果在这之间,betweenand是一个闭区间,也就相当于...<=...and...>=

...。

找出工资在1500到2000之间的:

selectfirst_name,salaryfroms_empwheresalarybetween1500

and2000;

等价于:

selectfirst_name,salaryfroms_empwheresalary>=1500andsalary<=2000;

!

=,<>,^=,这三个都标识不等于,<=,>=,=,这些运算符都可以使用。

...in(va1,val2,...)判断结果是否在这个集合中存在,等于其中随变一个就行了,可以说in=any

in中集合的数据是有顺序的,概率高的数据放在前面可提高效率

查找这三个部门里任意一个部门的员工

selectfirst_namefroms_empwheredept_idin(41,42,32);等价于

selectfirst_namefroms_empwheredept_id=any(41,42,32);

应该把出现频率较高的数据放在集合的前面会提高效率

notin<>all没有顺序,notin不等于all

空值会对notin造成影响,也就是不等于任何值,但是空值例外。

like'...'字符串通配查询,'%'表示0或任意多个字符,'_',表示任意一个字符。

注意:

转义的用法:

like‘S\_%’escape‘\’

表名都是以大写存储的

例:

找出表名是以S_开头的表

selecttable_namefromuser_tableswheretable_namelike'S\_%'escape'\';把\定义为转

义字符

...isnull使用来判断值是否为空。

isnotnull判断值不为空

例:

查看哪些人没有提成

selectfirst_namefroms_empwherecommission_pctisnull;

找出42部门每个员工的年薪并且按年薪从大到小的顺序显示:

selectfirst_name,salary*12*(1+nvl(commission_pct,0)/100)total_salaryfrom

s_empwheredept_id=42orderby2desc;

...and...表示只有两个条件同时满足

...or...表示条件只要满足其中只一就可以

all...是要求都满足条件。

注意:

Oracle中的字符串是严格区分大小写的。

(1)注意数据类型,数字类型直接写,字符用'......',缺省格式的Date可以用'......',只有别名才用""包

含。

(2)选择合适的运算符

2、单行函数(一个输入,一个输出)

多行函数又叫组函数(多个输入,一个输出)例平均值

1.字符函数

字符是大小写敏感的

转小写lower(字段名)---其中的参数可以是一个字符串常量或是一个字段名

例:

selectlower(first_name)froms_emp;把每一个字符都变成小写。

selectlower('SqlCourse')fromdual;这个dual表可以用来测试。

selectfirst_name,salaryfroms_empwherelower(first_name)='carmen';通用性好

selectfirst_name,salaryfroms_empwherefirst_name='Carmen';效率高,平时用的时

候尽量写这种,当实在不知道数据是什么样时才用上面的。

转大写upper(字段名)

首字母大写initcap(字段名)

字符串拼接concat(字段1,字段2)

截取子串substr(字段名,起始位置,取字符个数)

返回字符串长度length(字符串)

dual表,是专门用于函数测试和运算的,他只有一条记录

可以使用"-"表示从右向左数,取的时候可以从左往右取。

例:

selectfirst_name,substr(first_name,length(first_name)-1,2)froms_emp;

selectsubstr(first_name,-2,2)subfroms_emp;(取后两个)

selectsubstr(first_name,2,2)subfroms_emp;(取前两个)

nvl是一般单行函数,支持任何数据类型

2.数值函数

四舍五入round(数据,保留小数点后几位)

可以用负数表示小数点前,0,表示小数点后第一位,也就是保留个位,-1表示个位(保留到十位)。

例:

selectround(15.36,1)fromdual;

截取数字函数trunc(数据,保留的位数(小数点后位数))截取个位之后补0

例:

selecttrunc(123.456,1)fromdual;

这个网上有函数的参考文档

3.日期函数

日期格式,

全日期格式世纪信息,年月日,时分秒。

缺省日期格式,日-月-年dd-mon-rr

修改当前会话的日期格式,会按照指定的格式输出日期

altersessionsetnls_date_format='yyyymmddhh24:

mi:

ss';

返回当前日期sysdate

例:

selectsysdatefromdual;显示今天的日期

selectsysdate+1fromdual;获得明天的日期,加1,单位是天

例:

10分钟以后的时间selectsysdate,sysdate+1/144fromdual;

日期是格式敏感的

求两个日期间相隔了多少个月months_between(date1,date2)

加减指定数量的月份add_months(date,月数),月数可以为负,负值就是减去相应的月数。

从date日期开始的第一个星期五next_day(date,FriDay)

返回月末的日期last_day(date)

round不能使用缺省的日期格式

例:

selectround(to_date('02-JAN-07','DD-MM-RR'),'MONTH')fromdual;

截取日期trunc(date,'年或月或日或时分秒')

例:

selectnext_day(sysdate,2)fromdual;

例:

selecttrunc(add_months(sysdate,1),'month')fromdual;练习:

返回下个月的第一天的日期

selectround(last_day(sysdate),'MONTH')fromdual;

selecttrunc(last_day(sysdate)+1)fromdual;

selectadd_months(trunc(sysdate,'MONTH'),1)fromdual;

selecttrunc(add_months(sysdate,1),'MONTH')fromdual;

4.不同数据类型间转换函数

将日期转成字符to_char(date,'日期格式')

日期格式要用有效格式,格式大小写敏感'yyyymmddhh24:

mi:

ss'(完整的日期可格式)

year'(全拼的年),'mm'(2位数字表示的月)'month'(全拼的月),'dy'(3位字母表示的星期),'day'(星期

的全拼),'ddspth'(日期的序数词)

例:

显示完整的系统日期

selectto_char(sysdate,'yyyymmddhh24:

mi:

ss')fromdual;

显示42号部门员工的入职日期:

selectfirst_name,to_char(start_date,'yyyymmddhh24:

mi:

ss')

froms_empwheredept_id=42;

找出3月份入职的员工:

selectfirst_name,start_datefroms_empwhereto_char

(start_date,'mm')='03';

查询3号入职的员工

selectfirst_name,start_datefroms_empwhereto_char(start_date,'dd')='03';

selectfirst_name,start_datefroms_empwhereto_char(start_date,'fmdd')='3';'fm'是去掉前

导0

创建表:

createtablehiloo(c1date);

向表中插入日期(hiloo是表名)

insertintohiloovalues('01-JAN-07');

insertintohiloovalues(to_date('2007010110:

10:

10','yyyymmddhh24:

mi:

ss'));

将字符转换成数字to_number('...'),缺省是按十进制来算,字符串只能是0---9的数字

selectto_number('ab','xx')fromdual;把ab转成十六进制

将数字转字符to_char(number,'fmt')fmt是数字格式

selectto_char(salary,'$99,999.99')froms_emp;

selectto_char(salary,'$00,000.00')froms_emp;##########表示越界,大于显示宽度

selectto_char(salary,'L00,000.00')froms_emp;

将字符串转成日期to_date('...','日期格式')

例:

selectto_char(to_date('20061103','yyyymmdd'),'dd-month-yy')fromdual;

5、对字段的显示格式化

column命令---sqlplus命令

column命令列格式的定义

columnlast_nameclear;清除已定义的格式

column目标列名查看这个类是否定义了格式

column目标列名formatA..设置列宽。

columnlast_nameheading'Employee|Name'FORMATA15

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1