1.语法结构:根据结果集创建表
CREATE TABLE 表名 AS SELECT语句
SQL> CREATE TABLE INFOS1 AS SELECT * FROM INFOS;
TABLE CREATED
2. 使用上面命令创建的新表中,不存在任何约束,并且把查询的数据一起插入到新表中。如果只复制表结构,只需使查询的条件不成立(比如where 1=2),就不会查询从出任何数据,从而复制一个表结构。
代码演示:复制表结构
SQL> CREATE TABLE INFOS2 AS SELECT * FROM INFOS WHERE 1=2;
TABLE CREATED
3.TO_DATE('2009-8-9 06:30:10','YYYY-MM-DD HH24:MI:SS ')
在Oracle中,日期是国际化的,不同的区域安装的数据库,默认的日期格式不同,因此为了程序便于移植,日期的输入要使用TO_DATE函数对日期格式化后输入,采用格式化字符串对日期进行格式化时,格式化字符串中字符不区分大小写,常见的格式化字符如下:
1. yyyy表示四位年份
2. mm表示两位月份,比如3月表示为03
3. dd表示两位日期
4. hh24表示小时从0-23,hh12也表示小时从0-11。
5. mi 表示分钟
6. ss表示秒
4.
//回收权限
REVOKE 角色|权限 FROM 用户(角色)
//修改用户的密码
ALTER USER 用户名 IDENTIFIED BY 新密码
//修改用户处于锁定(非锁定)状态
ALTER USER 用户名 ACCOUNT LOCK|UNLOCK
5.
Ø Oracle是基于对象的关系型数据库,Oracle产品免费,服务收费。
Ø Oracle安装后默认会有两个管理员用户(system,sys)和一个普通用户Scott。
Ø Sql*plus是Oracle管理和数据操作的客户端工具。
Ø 客户端链接服务器前,服务器要启动监听服务,并且客户端工具要安装Oracle客户端,并且在客户端要建立本地网络服务名。
Ø Oracle服务和监听启动后才能对数据库进行操作。
Ø 用startup命令启动数据库,用shutdown命令关闭数据库。
Ø Oracle的角色包括了一系列系统权限和普通对象权限,可以把权限授权给角色,把权限或者角色授权给用户。
6.在Oracle中,字符串的连接用双竖线(||)表示。比如,在EMP表中,查询工资在2000元以上的姓名以及工作。
SQL> SELECT (ENAME || 'is a ' || JOB) AS "Employee Details" ①
FROM EMP WHERE SAL>2000;
7.在Oracle查询中结果中,可能出现若干行相同的情况,那么可以使用DISTINCT消除重复行。具体的用法如示例:
SQL> SELECT DISTINCT DEPTNO FROM EMP;
8.如果某条记录中有缺少的数据值,就是空值(NULL值)。空值不等于0或者空格,空值是指未赋值、未知或不可用的值。任何数据类型的列都可以包括NULL值,除非该列被定义为非空或者主键。
9.
在Where子句中可以使用IN操作符来查询其列值在指定的列表中的行。比如:查询出工作职责是SALESMAN、PRESIDENT或者ANALYST的员工。条件有两种表示方法:
1. WHERE job = 'SALESMAN ' OR job = 'PRESIDENT ' OR job = 'ANALYST '
2. WHERE job IN ('SALESMAN', 'PRESIDENT', 'ANALYST')
10.
子查询在SELECT、UPDATE、DELETE语句内部可以出现SELECT语句。内部的SELECT语句结果可以作为外部语句中条件子句的一部分,也可以作为外部查询的临时表。子查询的类型有:
1. 单行子查询:不向外部返回结果,或者只返回一行结果。
2. 多行子查询:向外部返回零行、一行或者多行结果。
1. SELECT ENAME,JOB,SAL FROM EMP
WHERE DEPTNO=(SELECT DEPTNO FROM DEPT WHERE DNAME='SALES')
Ø 如果内部查询不返回任何记录,则外部条件中字段DEPTNO与NULL比较永远为假,也就是说外部查询不返还任何结果。
Ø 在单行子查询中外部查询可以使用=、>、<、>=、<=、<>等比较运算符。
Ø 内部查询返回的结果必须与外部查询条件中的字段(DEPTNO)匹配。
Ø 如果内部查询返回多行结果则出现错误。
2.销售员在Emp表中有很多条记录,每个人工资不相等,如果返回“比任意员工的工资还低”的条件,返回比“最高工资还低”即可。如果用子查询做,子查询中就会返回多条记录。用普通的关系符(>、<等)运行就会出错。这时候需要用关键字ANY。ANY放在比较运算符后面,表示“任意”的意思
SELECT ENAME,JOB,SAL FROM EMP
WHERE SAL<ANY (SELECT SAL FROM EMP WHERE JOB='SALESMAN')
ANY可以表示任意的,但本案例中要求比所有销售员工资都高,那么就要使用另外一个关键字ALL。ALL与关系操作符一起使用,表示与子查询中所有元素比较。
11.“工资最高的前5名”需要先降序排序,再取前5名,但是生成ROWNUM操作比排序要早,排序时已经连同ROWNUM一起排序了,因此不能直接在案例1的语句中直接加上Order by就行,而是需要对排序的结果重新做二次查询,产生新的ROWNUM才能作为查询的条件依据。
SELECT ROWNUM,T.* FROM ①
(SELECT ENAME,JOB,SAL
FROM EMP ORDER BY SAL DESC) T ②
WHERE ROWNUM<=5
12.转换函数
SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH24:MI:SS') "date" ①
2 FROM DUAL;
13.
desc emp 查看表emp的表结构
order by id desc按id降序排列