版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库原理及开发应用(总结得知识储备)数据库就就是储存数据得仓库,专业得解释就就是对数据存储与管理得软件与数据本身统称为数据库。大型数据库有Oracle,Sqlsever属于中型数据库,小得太多忽略不计,要知道就上网查。数据库管理系统得主要功能:数据库定义功能;数据存取功能;数据库运行管理;数据库得建立与维护功能。数据库得三级模式构:外模式、模式与内模式。(外模式即就是用户模式可以多个,模式只能一个,内模式就就是储存模式)。DDL:数据库模式定义语言DDL(DataDefinitionLanguage)。DML:数据操作语言(data
manipulation
language)。DBMS:数据库管理系统(DatabaseManagementSystem)。DBS:数据库系统(DatabaseSystem)。DBA:数据库管理员(DatabaseAdministrator)。从三方面学习数据库数据库就是如何储存数据得?(主键,外键,唯一键)数据库就是如何操作数据得?(insertupdatedelete)数据库就是如何显示数据得?(select重点)操作及代码Cratetable语句:createtablestudent(stu_namenvarchar(30)notnull,stu_numbintnotnull,stu_sexnchar(1)notnull);主键外键:stu_numbintprimarykey;(可以在int与primary中间加上constraint约束名称)。sch_addnvarchar(30)foreignkeyreferencesstudent(stu_numb);顺带回忆一下主键与外键得定义:主键:能够唯一标示一个事物得得字段或者多个字段得组合,叫主键。(含有主键得表叫做主键表,主键一般就是整数不建议用字符串,而且一般用代理主键不要用业务主键,也就就是说不要用有业务得字段作为主键,一般就用没有含义得编号当做主键。)外键:如果一个表中得若干个字段来自若干个表得主键或者唯一键,就称这若干个字段为外键。(含有外键得表叫做外键表,通常都来自主键,因为唯一键可能为null,而且外键不一定来自别得表可能就来自本表)。自认为总结得超好。哦哦,还有删除表得时候先删外键表,不然先删主键会报错,原因很简单,外键引用错误。没完,主键约束:不允许重复元素,避免了数据得冗余。外键约束:从语法上保证所关联得事物一定存在,而且事物与事物之间得关系就是通过外键来体现得。check语句:stu_markintcheck(stu_mark>=60andstu_mark<=100);check约束:保证事物属性得取值在合法得范围内。insert语句:insertintostudentvalues(‘施宁一’,14,’男’);(必须把所有字段全都输入除非有null得要写null);也可以就是:insertinto(stu_name,stu_sex)values(‘施宁一’,’男’);default语句:stu_sexnchar(1)default(‘男’);default约束:保证事物得属性一定会有一个值。unique语句:stu_namenvarchar(30)unique;表示其取值唯一不能重复。update语句:(书上没写这,网上找得好例子)我们刚刚发现IndianaJones得等级为16,工资为$40,000、00,我们可以通过下面得SQL语句对数据库进行更新(并清除那些烦人得NULL)。
UPDATEEMPLOYEES
SETGRADE=16,SALARY=40000
WHEREFIRST_NAME='Indiana'
ANDLAST_NAME='Jones';delete语句:(一样就是网上得例子,代码大写得效果一样但瞧着不爽)DELETE语句用来删除已知表中得行。如同UPDATE语句中一样,所有满足WHERE子句中条件得行都将被删除。由于SQL中没有UNDO语句或就是“您确认删除吗?”之类得警告,在执行这条语句时千万要小心。如果决定取消LosAngeles办事处并解雇办事处得所有职员,这一卑鄙得工作可以由以下这条语句来实现:
DELETEFROMEMPLOYEESWHEREBRANCH_OFFICE='LosAngeles';
如同UPDATE语句中一样,省略WHERE子句将使得操作施加到表中所有得行。简单得操作及代码总结完了,后面就是重点内容与难点部分,主要介绍查询【select】计算列:(下面得例子中student就是表名,其余得为字段名)select*fromstudent;(数据库里得注释为--)--*表示所有得意思。此语句将表中得所有数据显示。selectstu_namefromstudent;selectstu_name,stu_idfromstudent;selectstu_name,stu_id*10as“学号得十倍”fromstudent;selectstu_name,stu_id*10as“学号得十倍”,stu_id“学号”fromstudent;--as可以省略不写,此语句可以经过计算建立新得一列,并且命名。必须知道得就是select123fromstudent;之类得语句结果不会报错,会显示student表得行数,每行都就是123这个数据。注:在写字段别名时可以用单引号也可以用双引号,但就是为了增强可移植性,一般用双引号,因为在Oracle大型数据库中不允许用单引号。distinct【不允许重复得】语句。selectdistinctstu_namefromstudent;--将一样得数据都过滤掉,包括null,如果有都只剩下一个。selectdistinctstu_name,stu_idfromstudent;--将这两个字段得组合重复得过滤掉了。但就是不能写成selectstu_id,distinctstu_namefromstudent;用来过滤第二个字段,保留第一个字段。逻辑上有错误,不可行。between【在某个范围内得查询】语句。(后面emp就是表名,salary就是薪水得字段)select*fromempwheresalary>=1500andsalary<=5000等价于select*fromempwheresalarybetween1500and5000需要注意得就是:select*fromemp(;)wheresalary>=1500andsalary<=5000就是不可取得,这两个命令就是一起得,中间不能打分号。查找另外一个范围得数据时可以用以下语句:select*fromempwheresalarynotbetween1500and5000(另外一种就是:select*fromempwheresalary<=1500orsalary>=5000)in【若干个孤立得值】select*fromempwheresalaryin(1500,3000)等价于select*fromempwheresalary=1500orsalary=3000select*fromempwheresalarynotin(1500,3000)等价于select*fromempwheresalary<>1500andsalary<>3000也作select*fromempwheresalary!=1500andsalary!=3000--数据库中不等于有两种写法:!=与<>推荐使用第二种。--or取反时记得改为and,呵呵。5、top【最前面得若干个记录,专属于sqlserver不可移植到其她数据库】selecttop5*fromemp;selecttop15percent*fromemp;--此语句输出得就是百分之15得行数得所有字段,如果经计算百分之15就是2、1,则输出得就是三行。而且*不能省略,否则报错。6、null【没有值空值】零与null不一样,null表示没有值,而零表示一个确定得值。null不能参与这些运算:<>!==可以参与如下运算:isisnot(下面得例子中emp表示表名,而m表示字段名)select*fromempwheremisnull;--输出得就是奖金为空得员工得信息。select*fromempwheremisnotnull;--输出得就是奖金不为空得员工信息。select*fromempwherem<>null;--输出为空errorselect*fromempwherem!=null;--输出为空errorselect*fromempwherem=null;--输出为空error任何类型得数据都允许为nullcreatetablet1(stu_namenvarchar(30),stu_idint,stu_sexnchar(1);insertintot1values(null,null,null);--正确任何数字与null参与数学运算得结果都就是null(后面例子中empna表示员工名字,empsal表示月薪,empid表示员工号码,m与上面一样表示年终奖金)selectempid,empna,empsal*12+mas”年薪”fromemp;运行结果就是最后一个字段都为null,证明了上面得说法。另外一种正确得写法:selectempid,empna,empsal*12+isnull(m、,0)as“年薪”fromemp;关于函数isnull(m、,0)得解释:如果m得值为null则返回0,如果不就是null则返回原本得m值。7、orderby【以某个字段排序】orderbya,b按a,b都按升序排列。orderbya,bdesca升序,b,降序orderbyadesc,ba降序,b升序orderbyadesc,bdesca,b都按降序排列。--解释:默认就是按照升序排列得,升序就是asc可以不写。(ascending,descending)模糊查询【搜索时经常使用】格式:select字段得集合from表名where某个字段得名字like匹配条件(匹配条件通常含有通配符%)通配符表示任意零个或者多个字符select*fromempwhereenamelike‘%A%’--只要含A得ename就输出。select*fromempwhereenamelike‘A%’--ename只要首字母为A就输出。select*fromempwhereenamelike‘%A’--ename只要以A结尾就输出。_【下划线】表示任意单个字符select*fromempwhereenamelike‘_A%’--ename只要第二个字母为A就输出。[a-f]a到f中得任意单个字符select*fromempwhereenamelike‘_[a-f]%’--ename中只要第二个字母就是在a到f中得就输出。[a,f]a或f[^a-c]不就是a到c中得任意一个字母,瞧清楚就是^不就是~自己瞎了别怪我没提醒。select*fromempwhere部门iplike'_[^发,联]%'(这个语句就是从sqlsever里面复制得,感觉颜色还蛮好瞧得)注意:匹配得条件必须用单引号括起来,不能傻不拉几得用双引号,后面来解释一下要搜索带%_得字段时得方法。直接把在sqlsever里得复制瞧:createtablepeople(namenvarchar(30)notnull,ageint)insertintopeoplevalues('张三',32);insertintopeoplevalues('Tom',66);insertintopeoplevalues('a_b',22);insertintopeoplevalues('c%d',44);insertintopeoplevalues('abc_fe',56);insertintopeoplevalues('Snail',18);insertintopeoplevalues('施宁一',19);insertintopeoplevalues('c%',65);insertintopeoplevalues('long''s',100);select*frompeopleselect*frompeoplewherenamelike'%/%%'escape'/';--把含有%得字段输出了select*frompeoplewherenamelike'%/_%'escape'/';--把含有_得字段输出了噢耶聚合函数【多行记录返回至一个值,通常用于统计】函数得分类单行函数--每行返回一个值多行函数--每行返回一个值聚合函数就是多行函数例子:select*frompeopleselectupper(name)frompeople;--单行函数upper()将每行都返回为大写得字母。selectMIN(age)frompeople;--多行函数将多行中最小得值找出来返回了。聚合函数得分类:max()min()avg()平均值count()求个数count(*)返回表中所有记录得个数selectCOUNT(*)frompeople;--返回了表people中得记录个数。count(字段名)返回字段中包括重复得记录得个数,但就是null不会被当做有效得记录算在个数之内。count(distinct字段名)--返回了出去重复得记录后得记录个数。注意:判断下列sql语句就是否正确selectmax(sal),min(sal),count(*)fromemp;--Okselectmax(sal)“最高薪”,min(sal)“最低薪”,count(*)“员工人数”fromemp;--Okselectmax(sal),lower(ename)fromemp;--error单行函数与多行函数不能混用groupby【分组难点】格式:groupby字段得集合功能:把表中得记录按照字段分成不同得组。例子:查询不同部门得平均工资并且按照升序排列selectdeptno,AVG(sal)fromempgroupbydeptnoorderbydeptno;注意理解:groupbya,b,c得用法先按a分组,如果a相同,再按b分组,如果b相同,再按c分组最终统计得就是最小分组得信息一定要明白下列语句为什么就是错误得:selectdeptno,avg(sal)as“部门平均工资”,enamefromempgroupbydeptnoselectdeptno,enamefromempgroupbydeptnoselectdeptno,job,salfromempgroupbydeptno,job记住:使用groupby之后select中只能出现分组后得整体信息,不能出现组内得详细信息having【对分组后得信息进行过滤难点】having通常就是对分组之后得记录进一步过滤,所以having时一般先使用groupup如果没有使用groupup而使用了having则意味着把所有得内容当做一组来处理Having子句出现得字段必须就是分组之后组得整体信息,having子句不允许出现组内得详细信息。Having子句中不能使用别名,尽管select中能使用别名。having与where得异同相同点:都就是过滤得作用,都不允许使用别名,只允许使用最原始得字段名。不同点:where就是对原始数据进行过滤,而having就是对分组之后得数据进行过滤,where必须在having前面,否则运行出错。(没试过)例子:selectdeptno,avg(sal)“平均工资”,count(*)”部门人数”,max(sal)“部门得最高工资”fromempwheresal>2000-–where就是对原始记录得过滤groupbydeptnohavingavg(sal)>3000-–对分组之后得记录得过滤(where不能出现聚合函数)连接查询定义:将两个或者两个以上得表以一定得连接条件连接起来,从中检索出满足条件得数据。分类内连接【重点得重点也就是难点得难点】select…fromA,B得用法产生得结果:行数就是AB得乘积列数就是AB之与或者说把A表得每一条记录都与B表得每一条记录组合起来了形成得就是一个笛卡尔积
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国餐饮业复合调味料添加剂配比优化研究报告
- 2026老龄化服务行业市场现状与产业发展策略研究
- 2026高端医疗装备采购政策调整与市场准入报告
- 2026冷链物流网络优化与生鲜电商协同发展策略报告
- 2026中国医药分销渠道变革与供应链优化报告
- 2026氢能源汽车产业链布局与商业化进程评估报告
- 2026智慧城市传感器网络节点封装防护技术专题报告
- 2026工业大数据隐私计算技术应用场景与合规研究
- 2026量子计算商业化进程加速下的专利布局与产业链机会研判
- 2026中国聚合物分离膜原材料价格波动对产业影响评估报告
- 水库放空技术导则(NBT10966-2022 )
- 2026年教科版新教材科学六年级上册教学计划(含进度表)
- 2026年普通高等学校招生全国统一考试(新课标全国Ⅰ卷)英语真题(含答案+听力原文+解析)
- 沪教版英语五年级上册Unit 1基础测试卷(含答案)
- 2025-2030柬埔寨农产品加工产业升级与出口竞争力提升研究报告
- 2026年新闻记者职业资格考试主观题背诵版资料
- 张力性气胸的诊断及治疗
- 1106 非无菌产品微生物限度检查:控制菌检查法 对比表
- 2025年服务机器人应用技术员职业技能竞赛题库(含答案)
- 招商银行沈阳市大东区2025秋招面试典型题目及参考答案
- 工程监理培训方案内容(3篇)
评论
0/150
提交评论