Oracle数据库中sql基础

一、关系数据库的一些概念

  

  1、主键的值一般不可以改变

  

  2、外键:指向另一个表或本表的主键或唯一键的字段。外键的值一定要和某一主键相同,或者为空。

  

  3、数据库对像:表,视图,序列,索引,同义词,程序(进程,函数,sql和pl/sql数据)4、sql command 类别

  

  data retrieval数据检索:select

  data manipulationlanguage (DML)数据操作语言:insert,update,delete

  data definition language (DDL)数据定义语言:create,alter,drop,rename,truncate

  transaction control事务控制:commit,rollback,savepoint

  data control language(DCL)数据控制语言:grant,revoke

  DCL 和DDL命令的执行会导致一次隐式提交,之前未提交的操作(包括DML 命令)都会提交写入日志文件,并在适当地时候写入数据文件。

  

  二、SQL的语法

  

  1) 连接号:||

  

  2) 把两个字符连接起来

  eg:select game_card_type_id||name from game_card_type;

  

  3) select distinct dept_id,title from emp: 对多个字段的唯一

  

  4) order by desc(降序)

  order by asc(升序)

  

  5) where column is (not) null

  

  6) like ‘_a%’  _表示一个字符。%表示多少字符

  like ‘%x\_y%’ escape ‘\’:显示包括x_y的字符

  

  7) where table1.column(+)=table2.column

  place the operator on the side of the join where there is no value to join to.

  

  8) 联接类型:

  equijoin:等式查询

  non_equijoin:不等式查询

  self:自己和自己建立关联

  out join:where a.column=b.column(+)

  可以用的操作符是:’=’,’and’,不可以用’or’,’in’

  

  9) COUNT 函数所用的列包含空值时,空值行被忽略。

  

  10) where 后的in any all 的区别

  in :等于子查询的任何一个数

  any :与子查询的每一个值相比

  只要比其中一个大(小)就可以了

  all:与子查询的所有值相比要比所有的的都大(小)

  !=ALL作用跟NOT IN 一样

  

  三、SQL*PLUS的环境(可以在glogin.sql中定义初始参数)

  

  1) START 命令用以执行一个已储存的文件,等同于@

  

  2) SAVE命令用以创建一个文件

  

  3) EDIT命令用以调用编辑器编辑已存文件的内容

  

  4) CHANGE 是SQL*Plus的编辑命令,用于在当前一行把旧文段转换为新文段

  

  5) DEL 命令用以删除文本中一行或多行文字

  

  6) SPOOL命令用以把查询结果储存在一个已有文件中,注意与SAVE区别

  

  7) GET命令用以一个文件的内容写进一个SQL块中

  

  8) SPOOL OUT命令用以把文件的结果发送到系统打印机。

  

  9) set pause off/on:设置页面的滚动。按enter看下一页。

  

  10) PAGESIZE:指定每页显示的行的数值,

  

  11) LONG:设置LONG类型数据显示的最大宽度

  

  12) FEEDBACK:设置查询返回记录的最大值

  

  13) DESCRIBE :用于显示表和视图的结构,同义词,或指定函数和过程的详述。

  

  14) Timing:可以看到语句执行的时间

  

  15) Autotrace:可以看到sql的执行计划,sysdba执行/home/oracle/product/9.2.0/sqlplus/admin/plustrce.sql脚本,而且必须把plustrace角色赋给执行用户。执行用户必须运行/home/oracle/product/9.2.0/rdbms/admin/utlxplan.sql

  

  16) 在各种数据类型中,只有NUMBER数据类型的默认显示是靠右对齐的,而CHAR, DATE和VARCHAR2是靠左对齐的

  

  17) QUIT 是SQL*PLUS命令,用以结束一个SQL*PLUS的对话。

  

  18) ttitle:

  ttitle ‘selina’ 设select 的结果的抬头为selina

  tti :显示ttitle的状态

  tti off/on

  btitle ‘end’ 设结果的尾部

  

  19) Column:

  

  a) column name heading ‘名字’format a15

  

  b) column id justify left format 999999

  

  c) column start_date format a9 null ‘not hired’//当字段为空的时候则显示成not hired

  

  d) column :显示所有的column设置

  

  e) column columnname:显示某一个字段的设置

  

  f) clear column :清除所有column设置

  

  g) column columnname clear:清除某一字段的设置

  

  h) 以上的column可用col代替.clear可以用cle代替

  

  13)定义变量

  

  用&:由用户输入变量值,此变量可以存在于where后,做为整个查询语句的变量。也可以在order by 后。做为字段的变量。也可以放在select 后,做为字段或表达式的变量。

  

  用&&:如果多个地方引用此变量。。只用输入一次

  

  SQL> SELECT empno, ename, job, &&column_name

  FROM emp

  ORDER BY &column_name;

  

  accept:由用户输入变量值

  accept 变量名 datatype prompt ‘告诉用户需要输入的信息:’ hide

  引用的时候:&变名

  define(undefined):一开始就定义变量值

  

  四、函数:

  

  1、字符函数

  

  lower:把字符转成小写

  upper:把字符转成大写

  initcap:把单词的第一个字母变成大写

  concat:连接字符 concat(‘good’,’morning’)=goodmoring

  SUBSTR (column\expression, m[,n]) 用于对字符串进行截取操作,从第m个位置开始,把其后的连续n个字符的部分截取下来,如果m位负值,则从末尾开始计算。

  eg:substr(‘string’,1,3) =str

  substr(‘string’-3,3)=ing

  INSTR(\'String\', \'r\')=3

  LPAD(sal,10,\'*\') =*******sal

  length: 用于返回表达式中的字符数,注意返回的是NUMBER。

  NVL(expression1, expression2)

  NVL 函数用以把一个空值转换为一个实值,如:

  NVL(100/quantity, 0) ,要是quantity为空值,该函数返回一个0。

  如果两个字段类型不同必须进行转换。

  Min():返回最小值。。如果是字符。。A<a

  

  2、数学函数

  

  round:四舍五入

  round(2.566,2)=2.27

  round(45,-1)=50

  trunc: 截断

  trunc(2.566,2)=2.56

  trunc(45,-1)=40

  mod:

  mod(m,n):m-n*flood(m/n)   file://flood是取整数

  

  3、日期函数:

  

  a) months_between(date1,date2):算date1和date2之间的月的数量,可以是小数可以是负数

  months_between(’01-sep-95’,’11-jan-94’)=1.9774194

  

  b) add_months(date,n):为date加上N个月,N只可以是整数

  

  c) next_date(date,’char’):查找date的下一个星期N

  next_date(’01-sep-95’,’FRIDAY’)=08-SEP-95

  

  d) last_day(date):查找date月的最后一天。

  

  e) rount(date):把日期四舍五入

  

  f) rount(25-MAY-95’,’MONTH’)=01-JUN-95

  

  g) rount(25-MAY-95’,’YEAR’)=01-JAN-95

  

  h) trunc(date):把日期截断

  

  i) trunc (25-MAY-95’,’MONTH’)=01-MAY-95

  

  j) trunc (25-MAY-95’,’YEAR’)=01-JAN-95

  

  k) 日期中RR与YY的区别,RR格式对日期作类似于舍入的操作,YY格式对日期作类似于截取的操作

  RR  YY

  1995 27-oct-95 1995 1995

  1995 27-oct-17 2017 1917

  2001 27-oct-17 2017 2017

  2001 27-oct-95 1995 2095

  用法:select to_char(sysdate, \'YY\') from dual;

  select to_char(to_date(\'95-11-27\', \'RR-MM-DD\'), \'YYYY-MM-DD\') from dual;

  select to_char(to_date(\'95-11-27\', \'YY-MM-DD\'), \'YYYY-MM-DD\') from dual;

  

  4、转换函数

  TO_CHAR:

  TO_CHAR(date,’fmt’):fm前缀用来去除首尾的空字符或0

  TO_CHAR(total,’fm$999999’)

  

  如果想转成$0.25,那就要写成fm$9999990.99

  

  可以把日期转换成字符

  TO_CHAR(log_time,’MM/YY’)

  TO_CHAR(lot_time,’fmdd’’of;’’mm yyyy’)

  

  具体格式如下

  HH24:MI:SS AM-----------15:24:32 pm

  DD’’of’’MONTH-----------12 of MAY

  Ddspth------------------------fourteenth

  Ddsp--------------------------fourteen

  ddth---------------------------4th

  YYYY-----------------------1978

  MM-----------------------------12

  MONTH-------------------------MAY

  

  5、group 函数avg,count,max,min,stddev,sum,variance

  

  五、数据字典

  

  用户表:由用户创建,包含用户的内容

  

  数据字典:由系统建立,包含数据库的信息

  

  前缀:

  USER_ :由用户创建,显示用户拥有的所有对象。

  

  ALL_ :由受权的用户访问, 用户可以访问的对象名。

  

  DBA_ :由受了DBA权限的人访问,显示数据库的所有对象。

  

  V$ :由受了DBA权限的人访问,显示数据字典数据库服务器性能信息。通常是DBA用于显示系统的统计表和动态性能表。

  

  数据字典

  

  DICTIONARY数据字典提供用户可以访问的数据字典表和视图的描述。

  USER_OBJECTS显示用户拥有的对象。

  USER_VIEWS显示用户拥有的视图。

  USER_TABLES显示用户拥有的表。

  ALL_TABLES显示用户可以访问的表。

  ALL_VIEWS显示用户可以访问的视图。

  USER_CATALOG显示用户拥有的所有表,视图,同义词和序列。

  USER_CONS_COLUMNS显示带约束的列。

  DBA_CONS_COLUMNS显示数据库里的所有表,视图和同义词。

  USER_TAB_PRIVS_MADE:本用户赋给别的用户赋予权限的表

  USER_TAB_PRIVS_RECD:其他用户给本用户赋予权限的表

  USER_COL_PRIVS_MADE:本用户赋给别的用户赋予权限的字段

  USER_COL_PRIVS_RECD:其他用户给本用户赋予权限的字段

  ROLE_SYS_PRIVS:有什么系统权限赋给role

  ROLE_TAB_PRIVS:有什么关于表的权限赋给role

  USER_ROLE_PRIVS:role和用户的对应表

  

  常用的表

  

  user_objects:用户对象表(存储用户的所有对象)存储以下的类型的数据

  Selina Sql>select distinct object_type from user_objects;

  INDEX

  LOB

  PACKAGE

  PACKAGE BODY

  PROCEDURE

  SEQUENCE

  SYNONYM

  TABLE

  TRIGGER

  VIEW

  User_catalog:用户类表,存储以下的类型的数据

  Selina Sql>select distinct table_type from user_catalog;

  SEQUENCE

  SYNONYM

  TABLE

  VIEW