《ORACLE数据库教程-SQL基础知识篇》由会员分享,可在线阅读,更多相关《ORACLE数据库教程-SQL基础知识篇(39页珍藏版)》请在金锄头文库上搜索。
1、ORACLE数据库教程,你可以不知道,但是绝对不能不懂,-毁人不倦语录,2007年5月,SQL基础知识篇,SQL-001,简介,SQL(Structured Query Language)结构化查询语言是IBM公司San Jose实验室为System R而设计的查询语言,后被国际标准化组织(ISO)批准作为关系数据库语言的国际标准。SQL目前遵循的是1992年标准,即SQL-92。各数据库厂家对SQL-92标准均有扩充,扩充部分不能完全保证数据库之间的兼容性。,我的热情会灼伤一些人,但我是无心的,-毁人不倦语录,简介,SQL可以分为: (基础篇只介绍前两种)DML:数据操作语言(Data Ma
2、nipulation Language): select, insert, update, delete, (其他:truncate) DDL:数据定义语言 (Data Definition Languages): create, drop , alter,(其他:rename)DCL数据控制语言:grant、revoke、set role 事务控制:commit、rollback、savepoint(其他:lock table、set constraint(s)、set transaction)审计控制:audit、noaudit系统控制:alter system 会话控制:alter se
3、ssion 其他语句:comment(添加注释)、explain plan、analyze、validate、call,如果我的话没有错,一定是你听错了,-毁人不倦语录,DDL数据定义语言,CREATE(建立)ALTER(修改)DROP(删除),无知者无畏,无畏者不一定无知,-毁人不倦语录,语言描述约定, :表示可选项 | :表示选择项CREATE:粗体表示关键字或必输项Table_name:斜体表示用户输入项创建 :蓝色表示说明,如果1+12,我相信那说的是团队的力量,-毁人不倦语录,DDL数据定义语言,CREATE-创建用户CREATE USER user_name IDENTIFIED
4、BY password DEFAULT TABLESPACE tablespace_name TEMPORARY TABLESPACE tablespace_name;创建user_name用户,密码为password,使用tablespace_name表空间,如果没有指定表空间,默认表空间为system表空间。Oracle10g有用户默认表空间设置。建议在创建用户时一定要指名表空间。,先有鸡,还是先有蛋,这么重要的问题还是留给鸡去考证吧,-毁人不倦语录,DDL数据定义语言,CREATE-创建数据表CREATE TABLE table_name(Column1 datatype default
5、not null primary key,constraint key_name primary key(column_list) using index tablespace tablespace_name)tablespace tablespace_name;Datatype 是数据类型:varchar2(x), number(x,x), date, integer等。Not null非空限制,如果不写表示可为空。Primary key主键,可以紧跟在字段后,或在最后使用constraint。未指名表空间,数据表建立在用户默认的表空间中。,笔只留下了痕迹,人用笔留下了文化,-毁人不倦语录,
6、DDL数据定义语言,CREATE-创建索引CREATE UNIQUE INDEX index_name ON table_name(column_list)tablespace tablespace_name;在table_name表上按照column_list建立索引,索引名为index_name,索引保存在tablespace_name表空间中。UNIQUE:唯一性索引。,-毁人不倦语录,你可以不听,但是我一定要说,DDL数据定义语言,ALTER-修改表ALTER TABLE table_name REMAME TO new_table_name;将table_name表名修改为new_t
7、able_name。ALTER TABLE table_name ADD(column1 datatype default not null,column2 datatype default not null, . );在table_name表中增加column1,column2.字段,追加到字段最后。ALTER TABLE table_name MODIFY(column1 datatype default not null|nullable,column2 datatype default not null|nullable, . 修改table_name表字段属性,长度或精度不能小于原长
8、度或精度。ALTER TABLE table_name DROP COLUMN column_name;删除table_name表中的column_name字段。ALTER TABLE table_name RENAME COLUMN old_name TO new_name;修改table_name表的old_name字段名为new_name。ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY(column_list);建立table_name表的主键,主键名pk_name,主键字段column_list。ALTER TABLE
9、 table_name DROP CONSTRAINT pk_name;删除table_name表的pk_name主键。一个表只能有一个主键,-毁人不倦语录,不说了,再说就该吐了。补充一点:站着进,扶着出也许是侃爷的最高境界吧,DDL数据定义语言,DROP -删除DROP TABLE table_name;删除table_name表。DROP INDEX index_name;删除index_name索引。删除主键(强制限制的一种),使用ALTER TABLE table_name DROP CONSTRAINT pk_name;,-毁人不倦猜想,数据库和水库之间不可能没有区别,DML小结,从
10、ALTER和CREATE及DROP语法数量再一次证明需求是易变的。如果增加表字段,并要求字段的排列位置,可以使用:CREATE TABLE temp_table_name AS SELECT * FROM table_name;DROP TABLE table_name;CREATE TABLE table_name(column);INSERT INTO table_name VALUES(column_list) (SELECT column_list1 FROM temp_table_name);DROP TABLE table_name;需要注意的是,删除表后,表中的索引也被删除,所以
11、,在执行上述操作前要保留好表的索引脚本。这里没有写DROP DATABASE的语法,如果大家想要尝试删除数据库的话,最好在专家的指导下进行!,人间本无对错,因为计算机才有了对与错,-毁人不倦语录,DDL数据操作语言,SELECT(查询)INSERT(插入)UPDATE(更新)DELETE(删除),如果老天能再给我一次机会,我一定做甲方,-毁人不倦语录,DDL数据操作语言,SELECT-查询SELECT ALL | DISTINCT ON ( expression , . ) * | expression AS output_name , . INTO TEMPORARY | TEMP TABL
12、E new_table FROM from_item , . WHERE condition GROUP BY expression , . HAVING condition , . UNION | INTERSECT | EXCEPT ALL select ORDER BY expression ASC | DESC | USING operator , . FOR UPDATE OF class_name , . LIMIT count | ALL OFFSET | , start 后续查询范例均以oracle中的SCOTT/TIGER用户表为例,如果失眠了,就看看上面的语法吧,-毁人不倦
13、语录,DDL数据操作语言,SCOTT/TIGER表介绍DEPT部门定义表,DEPTNO是主键EMP职工表,EMPNO主键,DEPTNO外键关联DEPT其他表没有数据或没有关系,不在这里介绍,将复杂问题简单化是修养,将简单问题复杂化是艺术,综合起来叫艺术修养,-毁人不倦语录,DDL数据操作语言,SELECT-单表查询查询表中所有字段和所有记录,select后跟* 表示所有字段SELECT * FROM DEPT;查询指定字段,在select后跟查询的字段名列表,字段间用,隔开SELECT DEPTNO, DNAME FROM DEPT;条件查询,FROM后面使用WHERE,在WHERE中可以使用
14、=, , ,=,=,BETWEEN,LIKE,IN,返回WHERE条件为true的数据SELECT * FROM DEPT WHERE DEPTNO = 20; -返回部门编码为20的部门数据SELECT * FROM DEPT WHERE DEPTNO BETWEEN 20 AND 30;-返回部门编码在20到30之间的部门数据(包括20和30),同意的从门出去,反对的请走窗户,-毁人不倦语录,DDL数据操作语言,SELECT-单表查询SELECT * FROM DEPT WHERE DNAME LIKE ACCOUNT%;-返回部门名称以ACCOUNT开始的部门数据SELECT * FRO
15、M DEPT WHERE DNAME LIKE %UNT%;-返回部门名称含UNT的部门数据,%全匹配符,?单匹配符SELECT * FROM DEPT WHERE DEPTNO IN (20, 30) AND (DNAME LIKE %UNT% OR DNAME = SALES);-返回部门编码等于20和30并且部门名称含UNT或等于SALES的部门数据,AND与,OR或,IN和(等同OR),知识可以拷贝,思想无法复制,-毁人不倦语录,DDL数据操作语言,SELECT-多表查询在FROM中列举表名,WHERE中写表关联SELECT EMP.EMPNO, EMP.ENAME, EMP.JOB,
16、 DEPT.DEPTNO, DEPT.DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO AND DEPT.DEPTNO = 20;-字段名前使用表名.指定表字段,在WHERE中先写表关联关系,从FROM的内侧(即左侧)向外侧写(即右侧),表关联写完后再写查询条件,不要把表管理和查询条件混在一起写,这虽然不是必须的,但却是规范推荐的。SELECT E.EMPNO AS 职工编码, E.ENAME 姓名, E.JOB, D.DEPTNO, D.DNAME FROM EMP E, DEPT DWHERE E.DEPTNO = D.DEPTNO AND D.DEPTNO = 20;-字段和表名可以使用别名,方法为 AS 别名,或直接写别名,表如果指定别名,原表名在该查询中不能再被使用。,