sql入门.doc_第1页
sql入门.doc_第2页
sql入门.doc_第3页
sql入门.doc_第4页
sql入门.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库基础DBMS_database management systemDDL_data definition language 数据定义语言Schema 模式DML_data manipulation language 数据操作语言SQL_structured query language 结构化查询语句Metadata元数据Transaction事务: atomicty原子性,同成功同失败 comsistency一致性,一个座位不能分配给两个顾客 isolation隔离性,两个事务并发运行的效果等同于一前一后运行的效果 durability持久性、事务已经完成,即使系统出现故障,事务结果也不能丢失事务提交:为保证持久性和原子性,一般以”试验的方式”完成,并不真正地更新数据库本身范式非平凡依赖的定义:A=a1,a2,B=b1,b2,AB,如果B中至少有一个不属于A的元素,称该依赖为非平凡依赖、(B依赖于A,A函数决定B)键码的定义:如果A满足以下条件,则A是关系(表)(表)R的键码:1) A函数决定R的所有其他属性2) A的任何真子集都不能函数决定R的所有其他属性,也就是说键码必须是最小的NF_normal form 范式1NF:行(元组)的分量不可再分2NF:不允许所有存在的非平凡依赖的左边是键码的真子集,允许传递依赖_也就是说AB,不允许A的某个真子集AxB,但是允许AB,BC的情况3NF:在2NF的基础上,不允许传递依赖,但是允许B是A的真子集的情况、BCNF:在3NF的基础上,不允许非平凡依赖AB的右边是左边的组成部分、sql(select)入门经典_原创一、准备及说明本文实例均使用oracle10g作为测试数据库,并均能得到预期效果测试用例在安装并配置好oracle10g的基础上进行1、建表并插入测试数据在sql window中输入以下内容创建学生表- Create tablecreate table student( stuid varchar2(32), stuname varchar2(20), stugender varchar2(2), stuage number);- Add comments to the columns comment on column student、stuid is 学生标识;comment on column student、stuname is 学生名字;comment on column student、stugender is 学生性别;comment on column student、stuage is 学生年龄;- Create/Recreate primary, unique and foreign key constraints alter table student add constraint stu_pk primary key (STUID);在sql window中输入以下内容创建班主任表- Create tablecreate table teacher( teaid varchar2(32), teaname varchar2(20), teagender varchar2(2), teaage number);- Add comments to the columns comment on column teacher、teaid is 教师标识;comment on column teacher、teaname is 教师名字;comment on column teacher、teagender is 教师性别;comment on column teacher、teaage is 教师年龄;- Create/Recreate primary, unique and foreign key constraints alter table teacher add constraint tea_pk primary key (TEAID);在sql window中输入以下内容建立两个表的联系(一个班主任对应多个学生)- Add/modify columns alter table STUDENT add TEAID varchar2(32);- Create/Recreate primary, unique and foreign key constraints alter table STUDENT add constraint STU_FK_TEA foreign key (TEAID) references teacher (TEAID);插入测试数据insert into teacher values(1,张老师,男,30);insert into teacher values(2,李老师,女,28);insert into student values(1,张同学,男,18,1);insert into student values(2,李同学,女,20,1);insert into student values(3,王同学,女,18,2);insert into student values(4,郑同学,男,20,2);二、查询语句全面展现经过以上的准备,我们可以看看sql(查询)的各种用法了常用分页语句Mysql:select * from tableName limit startrow,perpagesizestartrow:起始行号;perpagesize:每页显示行数。Oracle:select * from (select a、* ,rownum rc from (select * from tableName order by ) a where rs=startrowstartrow:起始行号;endrow:结束行号。select查询语句请注意这样的事实where后面是一个布尔表达式,为true或为false,要得到预想结果需要在where后面构造一个为true的布尔表达式!1、别名:select stu.stuname as 学生名字,stu.stugender as 学生性别 from student stu学生名字学生性别张同学男王同学女郑同学女李同学男2、运算:select stu.stuname as 学生名字,2007-stu.stuage as 出生年 from student stu学生名字出生年张同学1989王同学1987郑同学1989李同学19873、Where子句:1)可以运用运算符,,(!=),=select stu.stuname as 学生名字,2007-stu.stuage as 出生年 from student stu where stu.stuage=20得到年龄为20的学生的相关信息学生名字出生年王同学1987李同学19872)逻辑运算符:and,or,notselect stu.stuname as 学生名字,2007-stu.stuage as 出生年 from student stu where stu.stuage=20 and stu.stugender=男得到年龄为20的男学生的相关信息学生名字出生年李同学19873)比较前可以运用基本运算符/等进行数值运算select stu.stuname as 学生名字,stu.stugender as 学生性别 from student stu where stu.stuage-20=0得到年龄大于等于20的学生的相关信息学生名字学生性别王同学女李同学男4)字符串比较:等比较,按字典顺序;like字符匹配比较name like 张-姓张的学生name like 张_ 姓张且名字为三个字的学生(匹配符为下划线)select * from student where stuname like 张%STUIDSTUNAMESTUGENDERSTUAGETEAID1张同学男181select * from student where stuname like 张_结果与上同5)日期比较意味着之后的年月日或者时间4、输出顺序: select * from student order by stuage按照年龄降序排列(默认为升序)STUIDSTUNAMESTUGENDERSTUAGETEAID3王同学女2022李同学男2011张同学男1814郑同学女1825、消除二义性:属性前面加上表名,表名该字段所属表select student.stuname from student6、查询结果的并交差:union intersect except学生名字和老师名字的并集: select stu.stuname as name from student stu union select tea.teaname as name from teacher teaNAME李老师李同学王同学张老师张同学郑同学学生性别和老师性别的交集_其实就是男和女select stu.stugender as gender from student stu union select tea.teagender as gender from teacher teaGENDER男女原则上要求两个集的属性相同,但往往是不一致的,例如在teacher表中,名字属性名为teaname,student表中名字属性名为stuname,我们可以通过别名达到预期效果、7、子查询 1) select stu.stuname from student stu2)where stu.teaid=3)(select tea.teaid from teacher tea 4)where tea.teaname=张老师)得到张老师的学生的名字STUNAME张同学李同学注意上例中第2)行使用=号的时候,第3)4)行只能产生具有单一属性的单一行(元组),即单值8、更为高级的运算符:in all any exists1)当且仅当R非空时,条件exists R为真select stuname from student where exists (select * from teacher where teaage=30)当有老师的年龄为三十的时候查出所有学生的名字(这个例子有点怪,哈哈)结果为所有学生的名字select stuname from student where exists (select * from teacher where teaage=40)结果为查不到任何东西2)当且仅当s和R中的某一行(元组)相等时,S in R为真select * from student where (张同学,18)in(select stuname,stuage from student)当存在名字为张同学且年龄为18的学生时查出所有学生信息,结果为所有学生信息select * from student where (张同学,18)in(select teaname,teaage from teacher)结果为空3)当且仅当s比一元关系(表)R中的每个值都大时,Sall R 为真select * from student where 21all(select stuage from student),当所有学生的年龄都小于21的时候查询所有学生的信息4)当且仅当s比一元关系(表)R中的至少一值大时,Sany R 为真select * from student where 19any(select stuage from student),当所有学生的年龄有小于19的时候查询所有学生的信息这些运算符都可以在表达式前面加上not来取反注意2)in查询的意义:s in R在行(元组)s和表R具有相同分量(属性,字段)的时候才有意义,这也是判断in子句正误的重要标准、9、消除副本在查询生成的结果集中,有可能有重复的数据,而我们只想得到一个,例如:select teaname from student,teacher where teaagestuage查询比学生年龄大的老师的名字TEANAME张老师张老师张老师张老师李老师李老师李老师李老师我们可以在字段前面加上关键字distinct来消除副本select distinct teaname from student,teacher where teaagestuageTEANAME李老师张老师10、聚合(常用于统计)以下五种运算使用于列的计算:SUM,AVG,MIN,MAX,COUNT1) select AVG(stuage) from student 平均年龄2) select COUNT(*) from student 总人数分组:group by后面紧跟一个要分组的属性查询男生的平均年龄和女生的平均年龄select stugender as 性别,avg(stuage) as 平均年龄 from student group by stugender性别平均年龄男19女19注意:聚合和分组同时使用的时候注意以下规则: 聚合是在分组的基础上进行的;只有在group by子句中出现的属性才可以以非聚合的形式在select子句中以非聚合的形式出现、例如以下的语句是错误的:select atuname,stugender as 性别,avg(stuage) as 平均年龄 from student group by stugender11、查询中的所有子句select, from, where, group by,having,order by只有前两者是必须的,其他任何附加子句都必须按照以上的顺序出现在sql语句中连接1、R join S on 满足on条件的行(元组)组合成一个新行(元组);select * from student stu join teacher tea on stu.teaid=tea.teaidSTUIDSTUNAMESTUGENDERSTUAGETEAIDTEAIDTEANAMETEAGENDERTEAAGE1张同学男1811张老师男303王同学女2022李老师女284郑同学女1822李老师女282李同学男2011张老师男30居然有两个teaid,呵呵,都说了只要满足on的条件,两个表就左右结合成了一个表2、自然链接R natural join S:1)连接条件是两个关系(表)中具有公共名字的所有属性对都相等,不需要其他条件;2)对每个相等属性之一进行投影。select * from student stu natural join teacher teaTEAIDSTUIDSTUNAMESTUGENDERSTUAGETEANAMETEAGENDERTEAAGE11张同学男18张老师男3023王同学女20李老师女2824郑同学女18李老师女2812李同学男20张老师男30只有一个teaid,因为是对相等的属性之一进行投影3、外链接:R natural full outer join S悬浮数组:那些未能与另一关系(表)中的任何行(元组)匹配的行(元组)成为悬浮数组。外连接的特点:每个悬浮数组都要用null去填充只属于另一个关系(表)中的属性,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论