oracle中的基础sql

1.SQL

SQL(Structured Query Language) 语言是目前主流的关系型数据库上执行数据操作、数据检索以及数据库维护所需要的标准语言,是用户与数据库之间进行交流的接口,许多关系型数据库管理系统都支持SQL语言,但不同的数据库管理系统之间的SQL语言不能完全通用,Oracle数据库使用的SQL语言是Procedural Language/SQL(简称PL/SQL)。

1.1SQL语言分类

通常将SQL语言分为以下4类。
(1)数据定义语言(Data Definition Language, DDL)
用于定义数据库对象,对数据库、数据库中的表、视图等数据库对象进行建立和删除,DDL包括CREATE、ALTER、DROP等语句。
(2)数据操纵语言(Data Manipulation Language, DML)
用于对数据库中的数据进行插入、修改、删除等操作,DML包括INSERT、UPDATE、DELETE等语句。
(3)数据查询语言(Data Query Language, DQL)
用于对数据库中的数据进行查询操作,例如用 SELECT语句进行查询操作。
(4)数据控制语言(Data Control Language, DCL)
用于控制用户对数据库的操作权限,DCL包括GRANT、REVOKE等语句。

1.2SQL语言的特点

SQL语言具有高度非过程化、应用于数据库的语言、面向集合的操作方式、既是自含式语言又是嵌入式语言、综合统一、语言简洁和易学易用等特点。
(1)高度非过程化
SQL语言是非过程化语言,进行数据操作,只要提出“做什么”,而无须指明“怎么做”,因此无需说明具体处理过程和存取路径,处理过程和存取路径由系统自动完成。
(2)应用于数据库的语言
SQL语言本身不能独立于数据库而存在,它是应用于数据库和表的语言,使用SQL语言,应熟悉数据库中的表结构和样本数据。
(3)面向集合的操作方式
SQL语言采用集合操作方式,不仅操作对象、查找结果可以是记录的集合,而且一次插入、删除、更新操作的对象也可以是记录的集合。
(4)既是自含式语言、又是嵌入式语言
SQL语言作为自含式语言,它能够用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作;作为嵌入式语言,SQL语句能够嵌入到高级语言(例如C,C++,Java)程序中,供程序员设计程序时使用。在两种不同的使用方式下,SQL语言的语法结构基本上是一致的,提供了极大的灵活性与方便性。
(5)综合统一
SQL语言集数据查询(Data Query)、数据操纵(Data Manipulation)、数据定义(Data Definition)和数据控制(Data Control)功能于一体。

2.在PL/SQL中的数据定义语言

2.1数据库相关操作

2.2表空间相关操作

2.2.1创建

语法:

CREATE TABLESPACE <表空间名>
   DATAFILE '<文件路径>/<文件名>' [SIZE <文件大小> [ K∣M ]] [ REUSE ]
      [ AUTOEXTEND [ OFF∣ON [ NEXT <磁盘空间大小> [ K∣M ]]
      [ MAXSIZE [ UMLIMITED∣<最大磁盘空间大小> [ K∣M ] ] ] ]
      [ MINMUM EXTENT <数字值>[ K | M ] ]
      [ DEFAULT <存储参数>]
      [ ONLINE∣OFFLINE ]
      [ LOGGING∣NOLOGGING ]
      [ PERMANENT∣TEMPORARY ]
     [ EXTENT MANAGEMENT [ DICTIONARY∣LOCAL [ AUTOALLOCATE∣UNIFORM [ SIZE <数字值>[ K∣M ] ] ] ] ]

创建临时表空间

CREATE TEMPORARY TABLESPACE
...

用作数据库运算过程中的数据存储,或临时表数据存储等。用完之后系统会自动清理。若不创建则使用系统默认的临时表空间TEMP。

示例:

创建表空间newspace,允许自动扩展数据文件。

CREATE TABLESPACE newspace
    LOGGING
    DATAFILE 'D:\app\DELL\oradata\stsys\ newspace01.DBF’ SIZE 40M
    REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 300M
    EXTENT MANAGEMENT LOCAL;

2.2.2修改

使用ALTER TABLESPACE命令可以修改表空间或它的一个或多个数据文件、或为数据库中每一个数据文件指定各自的存储扩展参数值,其语法格式如下。

ALTER TABLESPACE <表空间名>
   [ ADD DATAFILE∣TEMPFILE  '<路径>/<文件名>' [ SIZE <文件大小> [ K∣M ] ]
   [ REUSE ]
       [ AUTOEXTEND [ OFF∣ON [ NEXT <磁盘空间大小>  [ K∣M ] ] ] ]
       [MAXSIZE [ UNLIMITED∣<最大磁盘空间大小> [ K∣M ] ] ]
       [ RENAME DATAFILE '<路径>/<文件名>',…n TO '<路径>/<新文件名>'',…n ]
       [ DEFAULT STORAGE <存储参数>]
       [ ONLINE∣OFFLINE [ NORMAL∣TEMPORARY∣IMMEDIATE ] ]
       [ LOGGING∣NOLOGGING ]
       [ READ ONLY∣WRITE ]
       [ PERMANENT ]
       [ TEMPORARY ]

示例:

通过ALTER TABLESPACE命令把一个新的数据文件添加到newspace表空间,并指定了AUTOEXTEND ON和 MAXSIZE 300M。

ALTER TABLESPACE newspace
   ADD DATAFILE 'D:\app\DELL\oradata\stsys\DATA02.DBF' SIZE 40M
      REUSE AUTOEXTEND ON NEXT 50M MAXSIZE 300M;

2.2.3删除

语法:

DROP TABLESPACE <表空间名>
   [ INCLUDING CONTENTS [ {AND | KEEP} DATAFILES ]
     [ CASCADE CONSTRAINTS ]
   ] ;

示例:

删除表空间newspace和及其对应的数据文件。

DROP TABLESPACE newspace
   INCLUDING CONTENTS AND DATAFILES;

2.3表

2.3.1创建

语法:

CREATE TABLE [<用户方案名>.] <表名>
(
    <列名1>  <数据类型>  [DEFAULT <默认值>]  [<列约束>]
    <列名2>  <数据类型>  [DEFAULT <默认值>]  [<列约束>]
    [,…n]
    <表约束>[,…n]
)
    [PCTFREE <数字值>]
    [PCTUSED <数字值> ]
    [INITRANS <数字值>]
    [MAXTRANS <最大并发事务数>]
    [TABLESPACE <表空间名>]
    [STORGE <参数>]
    [AS <子查询>]

示例:

CREATE TABLE student
(
   sno char(6) NOT NULL PRIMARY KEY,
   sname char(8) NOT NULL,
   ssex char(2) NOT NULL,
   sbirthday date NOT NULL,
   speciality char(12) NULL,
   sclass char(6) NULL,
   tc number NULL
); 

表中添加注释:

comment on table student is '学生信息';
comment on column student.sno is '学号';
comment on column student.sname is '姓名';
comment on column student.ssex is '性别';
comment on column student.sbirthday is '出生日期';
comment on column student.speciality is '专业';
comment on column student.sclass is '班号';
comment on column student.tc is '总学分';

2.3.2修改

语法:

ALTER TABLE [<用户方案名>.] <表名>
[ ADD(<新列名> <数据类型> [DEFAULT <默认值>][列约束],…n) ]/*增加新列*/
[ MODIFY([ <列名> [<数据类型>] [DEFAULT <默认值>][列约束],…n) ] /*修改已有列的属性*/
[ STORAGE <存储参数> ]  /*修改存储特征*/
[<DROP子句> ]     /*删除列或约束条件*/

其中,用于从表中删除列或约束
语法:

DROP
{
COLUMN <列名>
∣PRIMARY [KEY]
∣UNIQUE (<列名>,…n)
∣CONSTRAINT <约束名>
∣[ CASCADE ]
}

示例:

使用ALTER TABLE语句修改student表
(1)在student表中增加一列remarks(备注)

ALTER TABLE student
   ADD remarks varchar(100);

(2)在student表中删除列remarks。

ALTER TABLE student
   DROP COLUMN remarks;

2.3.3删除

语法:

DROP TABLE table_name

示例:

删除student表

DROP TABLE student;

3.在PL/SQL中的数据操纵语言

3.1增

语法:

INSERT INTO <表名>[(<列名1>,<列名2>,…n)]
  VALUES(<列值1>,<列值2>,…n)

示例:

向employee表插入一行:1001, 刘松涛, 男, 1972-10-07, 公司集体宿舍。

INSERT INTO student
VALUES('121001','刘鹏翔','男',TO_DATE('19920825','YYYYMMDD'),'计算机','201205',52);

3.2删

(1)DELETE
语法:

DELETE FROM <表名>
   [WHERE <条件表达式>]

示例:

在employee表中,删除员工号为1021的行。

DELETE FROM employee
   WHERE eid='1021';

(2)TRANCATE TABLE语句
当需要删除一个表里的全部记录,使用TRUNCATE TABLE语句,它可以释放表的存储空间,但此操作不可回退,其语法格式如下:

TRUNCATE TABLE <表名> 

3.3改

语法:

UPDATE <表名>
   SET <列名>={<新值>|<表达式>} [,…n]
   [WHERE <条件表达式>]

示例:

(1)在employee表中将刘松涛的员工号改为1021,员工地址改为东大街34号。

UPDATE employee
  SET eid='1021', address='东大街34号'
  WHERE ename='刘松涛';

(2)在student表中,将所有学生的学分增加2分。

UPDATE student
  SET tc=tc+2;

4.在PL/SQL中的数据查询语言

语法:

SELECT <列>                                           /*SELECT子句,指定列*/
   FROM  <表或视图>                              /*FROM子句,指定表或视图*/
   [ WHERE  <条件表达式> ]                  /*WHERE子句,指定行*/
   [ GROUP BY <分组表达式> ]              /*GROUP BY子句,指定分组表达式*/
   [ HAVING <分组条件表达式> ]          /*HAVING子句,指定分组统计条件*/
   [ ORDER BY <排序表达式> [ ASC | DESC ]]  /*ORDER子句,指定排序表达式和顺序*/

4.1投影查询

投影查询用于选择列
语法:

SELECT [ ALL | DISTINCT ] <列名列表>
其中,<列名列表>指出了查询结果的形式,其格式为:
{  *                                                  /*选择当前表或视图的所有列*/
   |<表名>|<视图>|.*                       /*选择指定的表或视图的所有列*/
   |{|<列名>|<表达式>}
       [[ AS ] <列别名>]                    /*选择指定的列,为列指定别名*/
   | <列标题> =  <列名表达式>      /*选择指定的列并更改列标题,为列指定别名*/
}[,… n ]

(1)投影指定的列
使用SELECT语句可选择表中的一个列或多个列,如果是多个列,各列名中间要用逗号分开。
语法:

SELECT <列名1> [ , <列名2> [,…n] ]
   FROM <表名>
   [WHERE <条件表达式>]

示例:

查询student表中所有学生的学号、姓名和班号。

SELECT sno, sname, sclass
  FROM student;

(2)投影全部列
示例:

查询student表中所有列

SELECT *
  FROM student;

(3)修改查询列标题
为了改变查询结果中显示的列标题,可以在列名后使用AS 。
示例:

查询student表中所有学生的学生的sno、sname、speciality,并将结果中各列的标题分别修改为学号, 姓名, 专业。

SELECT sno AS 学号, sname AS 姓名, speciality AS 专业
  FROM student;

(4)计算列值
介绍:
使用SELECT子句对列进行查询时,可以对数字类型的列进行计算,可以使用加(+)、减(-)、乘(*)、除(/)等算术运送符

语法:

SELECT <表达式> [ , <表达式> ]

示例:

列出goods表的商品号、商品名称和商品总值

SELECT gid AS 商品号, gname AS 商品名称, price*stockqt AS 商品总值

(5)去掉重复行

语法:

SELECT DISTINCT <列名> [ , <列名>…]

示例:

查询student表中sclass列,消除结果中的重复行

select distinct sclass from student;

4.2选择查询

语法:

WHERE <条件表达式>

其中,为查询条件,格式为:

<条件表达式>::=
     { [ NOT ] <判定运算> | (<条件表达式> ) }
     [ { AND | OR } [ NOT ] { <判定运算> | (<条件表达式>) } ]
     [ ,…n ]

说明:

  1. 判定运算包括比较运算、模式匹配、指定范围、空值判断、子查询等,判定运算的结果为TRUE、FALSE或UNKNOWN。
  2. 逻辑运算符包括.AND(与)、OR(或)、 NOT(非),NOT、AND和OR的使用是有优先级的,三者之中,NOT优先级最高,AND次之,OR优先级最低。
  3. 条件表达式可以使用多个判定运算通过逻辑运算符成复杂的查询条件。

(1)表达式比较
语法:

<表达式1> { = | < | <= | > | >= | <> | != } <表达式2>

示例:

查询student表中班号为201205或性别为女的学生

SELECT *
  FROM student
  WHERE sclass='201205' or ssex='女';

查询goods表中价格为3000元以上的商品

SELECT *
  FROM goods
  WHERE price>3000;

(2)指定范围
介绍:
BETWEEN、NOT BETWEEN、IN是用于指定范围的三个关键字,用于查找字段值在(或不在)指定范围的行。
当要查询的条件是某个值的范围时,可以使用BETWEEN关键字。BETWEEN关键字指出查询范围。
语法:

<表达式> [ NOT ] BETWEEN <表达式1> AND <表达式2>

示例:

查询score表成绩为86、92、95的记录

SELECT *
  FROM score
  WHERE grade in (86,92,95);

示例:

查询goods表中价格在1500元到4000元之间的商品。

SELECT *
  FROM goods
  WHERE price BETWEEN 1500 AND 4000;

示例:

查询student表中不在1992年出生的学生情况。

SELECT *
  FROM student
  WHERE sbirthday NOT BETWEEN TO_DATE('19920101','YYYYMMDD') AND
    TO_DATE('19921231','YYYYMMDD');

(3)模糊匹配
介绍:
模式匹配使用LIKE谓词,LIKE谓词用于指出一个字符串是否与指定的字符串相匹配,其运算对象可以是char、varchar2和date类型的数据,返回逻辑值TRUE或FALSE。
语法:

<字符串表达式1> [ NOT ] LIKE <字符串表达式2> [ ESCAPE '<转义字符>' ]

在使用LIKE谓词时,可以含有通配符,通配符有以下两种:

%:代表0或多个字符。
_: 代表一个字符。

示例:

查询student表中姓林的学生情况

SELECT *
  FROM student
  WHERE sname LIKE '林%';

示例:

查询goods表中商品名称含有Inspiron的商品

SELECT *
  FROM goods
  WHERE gname LIKE '%Inspiron%';

示例:

查询student表中姓名第二字为“国”的学生情况

SELECT *
  FROM student
  WHERE sname LIKE '_林%';

(4)NULL值判断
语法:

<表达式> IS [ NOT ] NULL

示例:

查询已选课但未参加考试的学生情况

SELECT *
  FROM score
  WHERE grade IS null;

原文地址:https://www.cnblogs.com/gj-blog/p/10667096.html

时间: 2024-08-29 01:50:16

oracle中的基础sql的相关文章

oracle中视图v$sql的用途

1.获取正在执行的sql语句.sql语句的执行时间.sql语句的等待事件: select a.sql_text,b.status,b.last_call_et,b.machine,b.event,b.program from v$sql a,v$session b where a.sql_id=b.sql_id 2.获取sql语句执行时间: select sql_text,cpu_time/1000/1000 t_cpu,trunc(elapsed_time/1000/1000) t_elaps

Oracle中如何判断SQL是否真正做了排序

在Oracle中,有时候在执行计划中看到sort关键字,就有人认为是做了排序,其实不一定.可以用下面的方法实验: drop table test purge; create table test as select * from dba_objects; exec dbms_stats.gather_table_stats(user,'test'); select /*+gg_test*/* from test order by object_id; select /*+gg_test*/* f

Oracle 中的基础的一些语法结构

方括号里的内容为可选项 大括号是必填 1PL/SQL结构块 DECLARE /* * 声明部分——定义常量.变量.复杂数据类型.游标.用户自定义异常 */ BEGIN /* * 执行部分——PL/SQL语句和SQL语句 */ EXCEPTION /* * 异常处理部分——处理运行异常 */ END; /*块结束标记 */ 2 创建序列 1 CREATE SEQUENCE [ schema. ] sequence_name 2 [ { INCREMENT BY | START WITH } int

Oracle 中的PL/SQL、存储过程、触发器、函数、包(学习笔记)

   一.PL/SQL是什么? PL/SQL(procedural language/SQL)是oracle在sql上的扩展,pl/sql不仅允许嵌入sql语言,而且可以定义常量和变量,允许使用条件语句和循环语句,允许使用例外处理各种错误,这使得它的功能十分强大.但是移植性不好. 1. 实例1 只包括执行部分的PL/SQL块 set serveroutput on; begin dbms_output.put_line('asdasdasdas'); end; / set serverout 选

Oracle中如何用SQL检测字段是否包括中文字符

用Oracle的编码转换的函数Convert实现,测试后可行. SQL> select *  2    from (select 'abcd' c1 from dual  3          union all  4          select 'ab测试cd' c1 from dual)  5   where c1 <> CONVERT(c1, 'US7ASCII', 'ZHS16GBK'); C1--------ab测试cd CONVERT函数说明: CONVERT(input

Oracle中DML基础知识

DML(insert,update,delete) 1.插入数据insert into 表名(列,列...)values(值,值...)//当插入的数据与表格一一对应时,列可以省略insert into 表名 values(值,值...) 例如:--给tbl_user表中添加一条记录insert into tbl_user values (22,'刘强东','123456'); 2.更新数据update 表名 set 列=新值 where 条件: 例如:--修改tbl_user表中第二行记录的用

Oracle中查询一个表中字段(列)个数

如果一个表中有很多的字段,而我们想要知道这个表中的字段个数,如果使用如下方式一个一个数,则显得很麻烦 Oracle中可以使用如下sql来查询字段(列)个数 select count(*) from user_tab_columns where table_name=upper('表名') 或者 select max(column_id) from user_tab_columns where table_name=upper('表名') 作者:itmyhome 链接:http://blog.cs

oracle中动态SQL使用详细介绍

Oracle编译PL/SQL程序块分为两个种:通常静态SQL采用前一种编译方式,而动态SQL采用后一种编译方式,需要了解的朋友可以参考下 1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一种是后期联编(late binding),即SQL语句只有在运行阶段才能建立,例如当查询条件为用户输入时,那么Oracle的SQL引擎就无法在编译期对该程序语句进

ORACLE 中 SQL语句优化

(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):  ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.    (2) WHERE子句中的连接顺序.:  ORACLE采用自下而上的顺序解