首页 > Linux操作系统 > Linux操作系统 > 第四章 使用SQL语句(一)
第四章 使用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/ ,如需转载,请注明出处,否则将追究法律责任。