ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 第四章 使用SQL语句(一)

第四章 使用SQL语句(一)

原创 Linux操作系统 作者:阿日 时间:2008-05-25 15:15:45 0 删除 编辑

第四章 使用SQL语句

SQL是关系数据库的基本操作语言,它是应用程序与数据库进行交互操作的接口,SQL语言包括:

数据查询语言SELECT,

数据操作语言 INSERT,UPDATE,DELETE,

事务控制语言COMMIT,ROLLBACK,SAVEPOINT,

数据定义语言 CREATE,ALTER,DROP,TRUNCATE,

数据控制语言:GRANT,REVOKE

4.1使用基本查询

4.1.1简单查询语句

SELECT  <*,column [alias],…> FROM table;

1.       确定表结构  DESC TABLE_NAME;

2.       检索所有列  SELECT * FROM EMP;

3.       检索特定列  SELECT dept_no,dept_name FROM dept;

4.       检索日期列  默认格式为 ‘DD-MON-YY’ 如果要使用其它格式显示(YYYY-MM-DD),必须用TO_CHAR函数进行转换

    SQL> SELECT TO_CHAR(sysdate,'YYYY-MM-DD') FROM dual;

TO_CHAR(SY

----------

2008-05-23

 

SQL> SELECT sysdate FROM dual;

SYSDATE

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

23-5月 -08

5.       取消重复行,利用DISTINCT关键字

6.       使用算术表达式

SELECT ename,sal*12 FROM emp;

7.       使用列别名

SELECT ename as “姓名” FROM emp;

SQL> select sysdate "当天日期" FROM dual;

当天日期

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

23-5月 -08

SQL> select sysdate nowday from dual;

NOWDAY

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

23-5月 -08

8.       处理NULL

(1)使用NVL函数处理NULL值    NVL(expr1,expr2)

(2)使用NVL2函数处理NULL值   NVL2(expr1,expr2,expr3) 如果expr1不是null,则返回expr2,如果expr1是null,则返回expr3.

SQL> select * from test4;

        ID        SAL    LEVESAL

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

         1        200

         2        500

         3                  2000

         4                  2023

SQL> select nvl2(sal,sal,0) sal,nvl2(levesal,levesal,0) levesal,id from test4;

 

       SAL    LEVESAL         ID

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

       200          0          1

       500          0          2

         0       2000          3

         0       2023          4

9.       连接字符串

使用“||”操作符来完成。当连接字符串时,如果在字符串中要加入数字值,那么在“||”后可以直接指定数字;如果在字符串中要加入字符和日期值,则必须用单引号引住。

例如:

SQL> c /'日期'/"日期"

  1* select sysdate||'当前日期'||to_char(sysdate,'HH24:MI:SS') as "日期" from dual

SQL> /

日期

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

23-5月 -08当前日期14:21:27

 

4.1.2使用WHERE子句

 

1.在WHERE条件中使用数字值

2.在WHERE条件中使用字符值

 为了避免字符值的大小写问题,可以使用函数UPPER或LOWER转换大小写。

3.在WHERE条件中使用日期值

4.使用BETWEEN…AND操作符

5.在WHERE条件中使用LIKE操作符  注意当使用’%ssss’时如果此列中有索引,则索引会不起作用,所以应尽量避免使用加前%。

SQL> select * from test5 where name like '___A%';

NAME

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

sddAddd

SQL> SELECT * FROM test5

  2  WHERE name LIKE '%s_%' ESCAPE 'd';

 

NAME

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

sddAddd

dskB sklds

6.在WHERE条件中使用IN操作符

7.在WHERE条件中使用IS NULL操作符

IS NULL操作符用于检测列或表达式的结果是否为NULL,如果结果为NULL,则返回TRUE;否则返回FALSE。

注意,当与NULL进行比较时,千万不要使用等于(=),不等于(<>)操作符,因为在ORACLE中对于NULL的定义是既不是’’也不是0

8.在WHERE子句中使用逻辑操作符 AND,OR,NOT等

 

4.1.3使用ORDER BY子句

     ORDER BY ASC,ORDER BY DESC

     使用多列排序

     使用非选择列表列进行排序

     使用列别名进行排序

     使用列位置编号排序

4.2使用DML语句

DML语句用于操纵表和视图的数据 INSERT,UPDATE,DELETE

4.2.1插入数据

◆如果为数字列插入数据,则可以直接提供数字值;如果为字符列或日期列插入数据,则必须使用单引号引住。

◆当插入数据时,数据必须要满足约束规则,并且必须要为主键列和NOT NULL列提供数据

◆当插入数据时,数据必须要与列的个数和顺序保持一致

1.插入单行数据

(1)不使用列的列表插入单行数据

 (2)使用列的列表插入单行数据

 (3)使用特定格式插入日期值

 (4)使用DEFAULT提供数据

   INSERT INTO dept VALUES(60,’MARKET’,DEFAULT);

2.使用子查询插入数据

示例一:使用子查询插入数据

INSERT INTO employee(empno,ename,sal,deptno)

SELECT empno,ename,sal,deptno FROM emp

WHERE deptno=20;

示例二:使用子查询执行直接装载

INSERT /*+APPEND */ INTO employee(empno,ename,sal,deptno)

SELECT empno,ename,sal,deptno FROM emp

WHERE deptno=20;

 

注意:尽管以上两条语句的执行结果一样,但第二条语句使用/*+APPEND */来表示采用直接装载方式。当要装载大批量数据时,采用第二种方法装载数据的速度要远远优于第一种方法。

3.使用多表插入数据

在Oracle9i之前,当执行INSERT语句插入数据时,只能为单个表插入数的据。从Oracle9i开始,使用INSERT语句可以将某张表的数据同时插入到多张表中。

INSERT ALL insert_into_clause [value_clause] subquery;

INSERT conditional_insert_clause subquery;

如下所示,insert_into_clause用于指定INSERT子句:value_clause用于指定值子句;subquery用于指定提供数据的子查询;conditional_insert_clause用于指定INSERT条件子句。

示例一:使用ALL操作符执行多表插入

INSERT ALL

WHEN deptno=10 THEN INTO dept10

WHEN deptno=20 THEN INTO dept20

ELSE INTO other

SELECT * FROM emp;

 

示例二:使用FIRST操作符执行多表插入

INSERT FIRST

WHEN deptno=10 THEN INTO dept10

WHEN deptno=20 THEN INTO dept20

ELSE INTO other

SELECT * FROM emp;

当使用FIRST操作符执行多表插入时,如果数据已经满足了先前条件,并且已经插入到某表,那么该行数据在后续插入中将不会被再次使用。

 

4.2.2更新数据

当要更新表中行的数据时,可以使用UPDATE语句。使用UPDATE语句时,既可以使用表达式更新列值,也可以使用子查询更新一列或多列的数据。使用UPDATE需注意以下:

●     如果要更新数字列,则可以直接提供数字值;如果要更新字符列或日期列,则数据必须用单引号引住。

●     当更新数据时,数据必须要满足约束规则

●     当更新数据时,数据必须要与列的数据类型匹配

1.       使用表达式更新数据

2.       使用子查询更新数据

 

更新关联数据

UPDATE emp SET (job,sal,comm.)=(SELECT job,sal,comm. FROM emp where ename=’SMITH’) where ename=’SCOTT’;

 

复制表数据

UPDATE employee SET deptno=(SELECT deptno FROM emp WHERE empno=7788)

WHERE job=(SELECT job FROM emp WHERE empno=7788);

4.2.3删除数据

1.删除满足条件的数据

2.删除表的所有数据

3.使用TRUNCATE TABLE 截断表

4.使用子查询删除数据

5.删除主表数据注意,必须要确保从表不存在相关记录否则会显示错误信息

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/67668/viewspace-310249/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: PL/SQL基础信息
请登录后发表评论 登录
全部评论

注册时间:2007-12-26

  • 博文量
    35
  • 访问量
    161502