知识点四:多表查询empdept分为4种1、等连接2、外连接3、自连接4、子查询3-1、等连接问题:显示员工姓名及所在部门的名称分析:姓名-emp.ename部门名称-dept.dname关系:emp(deptno)dept(deptno)--显示员工姓名及所在部门的名称selectemp.ename,dept.dnamefromemp,deptwhereemp.deptno=dept.deptno3-2、外连接问题:查询所有部门名称和对应的员工姓名,若该部门没有员工,只显示部门名称分析:部门名称dept.dname员工姓名emp.enameOracle中使用(+)表示外连接,可以理解(+)所在字段的对侧(以=分开左右两部分)为主要显示信息--查询所有部门名称和对应的员工姓名,若该部门没有员工,只显示部门名称selectdept.dname,emp.enamefromemp,deptwhereemp.deptno(+)=dept.deptno3-3、自连接问题:显示员工姓名及其上级员工的姓名分析:员工姓名emp.ename上级员工姓名emp.nameselectemp1.ename下级员工姓名,emp2.ename上级员工姓名fromempemp1,empemp2whereemp2.empno=emp1.mgr--显示员工姓名及其上级员工的姓名,进行外连接3-4、子查询问题:查询工资高于公司平均工资的所有员工分析:公司的平均工资selectavg(sal)fromemp;select*fromempwheresal(selectavg(sal)fromemp)补充:Oracle数据类型-合理划分空间1.字符类型Char-固定长度-1~2000个字节varchar和varchar2-可变长度-1~4000个字符long长字符类型2GB2.数值类型Integer-整型类型Number(长度,精度)Number(4,1)-999.9~999.9Number(2)-99~993.日期类型date一般日期类型-显示到秒timestamp日期时间-精确到秒后8位4.二进制类型-音乐,图片和文件LOB1~2000字节VLOB1~4000字节5.大对象类型CLOB字符大对象类型4GBBLOB二进制大对象类型2GBFLOB文件大对象类型4GBOracle的数据库对象七大对象:用户、表、约束、序列、视图、同义词和索引知识点一:用户-User-账户、管理员-一切对象的宿主1、创建用户????2、授权????授权+创建用户grantcreatesessiontonacyidentifiedby密码3、锁定账户Alteruser用户名accountlock4、解锁账户???5、修改用户????6、撤销授权????7、删除账户????知识点二:表–table--维护使用sql语句完成数据存储1、创建表classstudent--创建class表【classid,classname】createtableclass(classidnumber(2),classnamevarchar2(10))--student[stuid,stuname,stusex,stuReg,classid]createtablestudent(stuidnumber(2),stunamevarchar2(10),stusexchar(2)default'男'check(stusexin(‘男’,’女’)),stuRegdatedefaultsysdate,--datetimestampclassidnumber(2))2、修改表student添加telephone和address两个字段--修改表student添加telephone和address两个字段altertablestudentadd(telephonevarchar2(11),addressvarchar2(50))3、修改student表中telephone这个字段number(8)类型--修改student表中telephone这个字段number(8)类型altertablestudentmodify(telephonenumber(8))4、修改student表,删除stuname字段--修改student表,删除address字段altertablestudentdropcolumnaddress5、修改字段名称--修改student表,把字段名telephone改成phonealtertablestudentrenamecolumntelephonetophone6、给表改名字--修改student表名为sturenamestudenttostu7、删除表????知识点三:约束–constraint–数据完整性和一致性大体分类:实体完整性--减少数据冗余--主键约束域完整性--数据的准确性--check约束引用完整性--数据的一致性--外键约束Oracle约束对象5大分类:主键(primarykey)、非空(notnull)、唯一性(unique)、检查(check)、外键(foreignkey)创建约束的两种方式:createtable添加约束、altertable添加约束1、如何添加主键约束主键约束不允许为空--创建表的过程中添加主键约束(列级约束)createtableclass1(classidnumber(2)primarykey,classnamevarchar2(10))--向已创建的表中添加主键约束altertableclassaddprimarykey(classid)--删除表中主键约束1.查找主键名称select*fromuser_constraints2.通过主键名称删除主键altertableclass1dropconstraintSYS_C0011510--添加主键约束的过程中自定义主键约束的名称altertableclass1addconstraintpk_classidprimarykey(classid)--删除表中自定义名称的主键约束?????--创建表的时候添加自定义名称的主键约束(表级别约束)createtableclass2(classidnumber(2),classnamevarchar2(10),constraintpk_classid2primarykey(classid))2、唯一约束unique允许数据为空,而且可以多行数据为空--向已经创建的表中添加唯一性约束altertableclassaddunique(classname);--创建表的过程中添加唯一性约束(列级约束)createtableclass1(classidnumber(2)primarykey,classnamevarchar2(30)unique)--删除表中唯一性约束altertableclass1dropconstraintSYS_C0011516--创建表的过程中添加唯一性约束(表级约束)createtableclass2(classidnumber(2),classnamevarchar2(30),constraintpk_classidprimarykey(classid),constraintun_classnameunique(classname))--向已经创建的表中添加唯一性约束(自定义名称)altertableclassaddconstraintun_classnameunique(classname);--删除表中唯一性约束altertableclass1dropconstraintun_classname3、非空null(default)列级约束--向已经创建的表中添加非空约束altertablestumodify(stunamenotnull)--向已经创建的表中删除非空约束altertablestumodify(stunamenull)--创建表的过程中添加非空约束(只有列级约束)createtablestu1(stuidnumber(2)primarykey,stunamevarchar2(10)notnull,stusexvarchar2(4),sturegdate,classidnumber(2))Default约束它的用法和notnull是一样的--向已经创建的表中添加default约束altertablestumodify(stusexdefault‘男’)--向已经创建的表中删除default约束altertablestumodify(stunamedefaultnull)--创建表的过程中添加default约束(只有列级约束)createtablestu1(stuidnumber(2)primarykey,stunamevarchar2(10)notnull,stusexvarchar2(4)default'男',sturegdate,classidnumber(2))4、check约束--向已经创建的表中添加check约束altertablestu1addcheck(stusexin('男','女'))--创建表的过程中添加check约束(列级约束)createtablestu1(stuidnumber(2)primarykey,stunamevarchar2(10)notnull,stusexvarchar2(4)check(stusexin(‘男’,’女’)),sturegdate,classidnumber(2))--创建表的过程中去创建check约束(表级约束)createtablestu2(stuidnumber(2)primarykey,stunamevarchar2(10)notnull,stusexvarchar2(4)default'男',sturegdatedefaultsysdate,classidnumber(2),constraintck_stusexcheck(stusexin('男','女'))constraintnotNull_stunamecheck(stunameisnotnull);constraintdefault_stusexcheck(stusexdefalt‘男’);)—不提倡这么做--删除创建的check约束??????5、外键约束--向已经创建的表中添加外键约束altertablestu1addconstraintfk_classidforeignkey(classid)referencesclass(classid)--创建表的过程中添加外键约束(列级约束)createtablestu3(stuidnumber(2)primarykey,stunamevarchar2(10)notnull,stusexvarchar2(4)default'男'check(stusexin('男','女')),sturegdatedefaultsysdate,classidnumber(2)referencesclass(classid))--创建表的过程中添加外键约束(表级约束)createtablestu3(stuidnumber(2)primarykey,stunamevarchar2(10)notnull,stusexvarchar2(4)default'男'check(stusexin('男','女')),sturegdatedefaultsysdate,classidnumber(2),constraintfk1_classidforeignkey(classid)referencesclass(classid))注意:如果报错ORA-01950:对表空间'USERS'无权限步骤一:connsystem/123456步骤二:alteruserzhangsan0323quotaunlimitedonusers;总结:添加约束【主键、唯一、check、foreignkey】A