oracle中的基础sql

Posted gj-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:appDELLoradatastsys 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:appDELLoradatastsysDATA02.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谓词时,<字符串表达式2>可以含有通配符,通配符有以下两种:

%:代表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;

以上是关于oracle中的基础sql的主要内容,如果未能解决你的问题,请参考以下文章

oracle中的基础sql

缺少 SQL SERVER 2014 代码片段

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

Oracle基础进阶

oracle sql 基础:数据操纵语言

pl/sql 基础笔记(上)