仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 530|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL网页设计SQL Server数据库毗连查询的品种及其应...

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-16 22:16:47 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
优化的SQL查询算法,有效地提高查询速度在数据库开辟方面,经由过程单表所体现的完成,偶然候必要组合查询来找到我们必要的纪录集,这时候候我们就会用到毗连查询。
毗连查询次要包含以下几个方面:
内毗连
内毗连通常为我们最常利用的,也叫天然毗连,是用对照运算符对照要连接列的值的连接。它是经由过程(INNERJOIN大概JOIN)关头字把多表举行毗连。我们经由过程创建两个表来讲明成绩:
StudentIDStudentNameStudentAge
------------------------------------------------------------------------
1张三25
2李四26
3王五27
4赵六28
5知名氏27
以上是表Student,寄存先生基础信息。
BorrowBookIDBorrowBookNameStudentIDBorrowBookPublish
----------------------------------------------------------------------------------------------------------------------
1马克思主义政治经济学1电子产业出书社
2毛泽东头脑概论2初等教导出书社
3邓小平实际3国民邮电出书社
4年夜先生头脑品德教养4中国铁道出书社
5C言语程序计划NULL初等教导出书社
以上是表BorrowBook,寄存先生所借的书。
以上两张表是经由过程StudentID举行联系关系,在这里先实行内联连语句:
SelectStudent.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
FromStudent
InnerJoinBorrowBook
OnStudent.StudentID=BorrowBook.StudentID
下面这个语句也能够写成
SelectStudent.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
FROMStudent,BorrowBook
WHEREStudent.StudentID=BorrowBook.StudentID
个中,InnerJoin是SQLServer的缺省毗连,可简写为Join。在Join前面指定详细的表作毗连。On前面指定了毗连的前提。
运转的了局以下:
tudentNameStudentAgeBorrowBookNameBorrowBookPublish
--------------------------------------------------------------------------------
张三25马克思主义政治经济学电子产业出书社
李四26毛泽东头脑概论初等教导出书社
王五27邓小平实际国民邮电出书社
赵六28年夜先生头脑品德教养中国铁道出书社
(所影响的行数为4行)
依据查询的了局来举行剖析:
假如多个表要做毗连,那末这些表之间一定存在着主键和外键的干系。以是必要将这些键的干系列出,就能够得出表毗连的了局。在上例中,StudentID是Student表的主键,StudentID又是BorrowBook表的外键,这两个表的毗连前提就是Student.StudentID=BorrowBook.StudentID,对照查询了局能够得知,内毗连查询只查询出主键StudentID在另张表中存在的纪录,像Student表中的第五笔记录,由于在BorrowBook表中StudentID不存在,像BorrowBook表中的第五笔记录StudentID为Null,对应的Student表中没有纪录,以是就不会显现。以是内毗连就是将介入的数据表中的每列与别的数据表的列相婚配,构成一时数据表,并将满意数据项相称的纪录从一时数据表当选择出来。
内毗连查询操纵列出与毗连前提婚配的数据行,它利用对照运算符对照被毗连列的列值。内毗连分三种:
1)等值毗连:在毗连前提中利用即是号(=)运算符对照被毗连列的列值,其查询了局中列出被毗连表中的一切列,包含个中的反复列。
2)不等毗连:在毗连前提利用除即是运算符之外的别的对照运算符对照被毗连的列的列值。这些运算符包含>、>=、<=、<、!>、!<和。
3)天然毗连:在毗连前提中利用即是(=)运算符对照被毗连列的列值,但它利用选择列表指出查询了局汇合中所包含的列,并删除毗连表中的反复列。
比方关于用不等值毗连语句:
SelectStudent.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
FromStudent
InnerJoinBorrowBook
OnStudent.StudentIDBorrowBook.StudentID
StudentNameStudentAgeBorrowBookNameBorrowBookPublish
----------------------------------------------------------------------------------
李四26马克思主义政治经济学电子产业出书社
王五27马克思主义政治经济学电子产业出书社
赵六28马克思主义政治经济学电子产业出书社
知名氏27马克思主义政治经济学电子产业出书社
张三25毛泽东头脑概论初等教导出书社
王五27毛泽东头脑概论初等教导出书社
赵六28毛泽东头脑概论初等教导出书社
知名氏27毛泽东头脑概论初等教导出书社
张三25邓小平实际国民邮电出书社
李四26邓小平实际国民邮电出书社
赵六28邓小平实际国民邮电出书社
知名氏27邓小平实际国民邮电出书社
张三25年夜先生头脑品德教养中国铁道出书社
李四26年夜先生头脑品德教养中国铁道出书社
王五27年夜先生头脑品德教养中国铁道出书社
知名氏27年夜先生头脑品德教养中国铁道出书社
它就会把两表所对应不相称的纪录给查询出来了。
外毗连
外毗连次要包含左毗连、右毗连和完全内部毗连。
1)左毗连:LeftJoin或LeftOuterJoin
左毗连的了局集包含LEFTOUTER子句中指定的左表的一切行,而不单单是连接列所婚配的行。假如左表的某行在右表中没有婚配行,则在相干联的了局集行中右表的一切选择列表列均为空值(Null)。
我们看对应的SQL语句:
SelectStudent.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
FromStudent
LeftJOINBorrowBook
OnStudent.StudentID=BorrowBook.StudentID
运转的了局以下:
StudentNameStudentAgeBorrowBookNameBorrowBookPublish
---------------------------------------------------------------------------------
张三25马克思主义政治经济学电子产业出书社
李四26毛泽东头脑概论初等教导出书社
王五27邓小平实际国民邮电出书社
赵六28年夜先生头脑品德教养中国铁道出书社
知名氏27NULLNULL
(所影响的行数为5行)
能够看到的是,它查询的了局是以左表Student为主,Student对应的StudentID在右表BorrowBook假如不存在的话,就会用NULL值来取代。
2)右毗连:RightJoin或RightOuterJoin
右毗连和左毗连相反,它将前往右表的一切行。假如右表的某行在左表中没有婚配行,则将为左表前往空值(Null)。
我们看对应的SQL语句
SelectStudent.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
FromStudent
RightJOINBorrowBook
OnStudent.StudentID=BorrowBook.StudentID
运转的了局以下:
StudentNameStudentAgeBorrowBookNameBorrowBookPublish
----------------------------------------------------------------------------------------------------------------------
张三25马克思主义政治经济学电子产业出书社
李四26毛泽东头脑概论初等教导出书社
王五27邓小平实际国民邮电出书社
赵六28年夜先生头脑品德教养中国铁道出书社
NULLNULLC言语程序计划初等教导出书社
(所影响的行数为5行)
能够看到的是,它查询的了局是以右表BorrowBook为主,BorrowBook对应的StudentID在左表Student假如不存在的话,就会用NULL值来取代。
3)完全内部连接:FullJoin或FullOuterJoin
完全内部连接前往左表和右表中的一切行。当某行在另外一个表中没有婚配行时,则另外一个表的选择列表列包括空值。假如表之间有婚配行,则全部了局集行包括基表的数据值。
我们看对应的SQL语句
SelectStudent.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
FromStudent
FULLOUTERJOINBorrowBook
OnStudent.StudentID=BorrowBook.StudentID
了局以下:
StudentNameStudentAgeBorrowBookNameBorrowBookPublish----------------------------------------------------------------------------------------------------------------------
NULLNULLC言语程序计划初等教导出书社
张三25马克思主义政治经济学电子产业出书社
李四26毛泽东头脑概论初等教导出书社
王五27邓小平实际国民邮电出书社
赵六28年夜先生头脑品德教养中国铁道出书社
知名氏27NULLNULL
(所影响的行数为6行)
能够看到的是,它查询的了局除把绝对应完整婚配的纪录查出来今后,还会把左毗连及右毗连两种情况都包含,对应的值用NULL值来取代。
交织毗连
交织毗连(CROSSJOIN),就是指不带WHERE子句的查询。在数学上,就是表的笛卡尔积。也就是它查询出来的纪录数举动两个表的乘积,对应纪录也就是为表A*表B。
我们看对应的SQL语句
SelectStudent.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
FromStudentCrossJoinBorrowBook
运转的了局以下:
StudentNameStudentAgeBorrowBookNameBorrowBookPublish
---------------------------------------------------------------------------------
张三25马克思主义政治经济学电子产业出书社
李四26马克思主义政治经济学电子产业出书社
王五27马克思主义政治经济学电子产业出书社
赵六28马克思主义政治经济学电子产业出书社
知名氏27马克思主义政治经济学电子产业出书社
张三25毛泽东头脑概论初等教导出书社
李四26毛泽东头脑概论初等教导出书社
王五27毛泽东头脑概论初等教导出书社
赵六28毛泽东头脑概论初等教导出书社
知名氏27毛泽东头脑概论初等教导出书社
张三25邓小平实际国民邮电出书社
李四26邓小平实际国民邮电出书社
王五27邓小平实际国民邮电出书社
赵六28邓小平实际国民邮电出书社
知名氏27邓小平实际国民邮电出书社
张三25年夜先生头脑品德教养中国铁道出书社
李四26年夜先生头脑品德教养中国铁道出书社
王五27年夜先生头脑品德教养中国铁道出书社
赵六28年夜先生头脑品德教养中国铁道出书社
知名氏27年夜先生头脑品德教养中国铁道出书社
张三25C言语程序计划初等教导出书社
李四26C言语程序计划初等教导出书社
王五27C言语程序计划初等教导出书社
赵六28C言语程序计划初等教导出书社
知名氏27C言语程序计划初等教导出书社
(所影响的行数为25行)
能够看到的是,它把表Student中的每行和BorrowBook中的每笔记录都举行联系关系,前往的纪录数为5*5=25行,即笛卡尔积,它实行的语句也就等效于
SelectStudent.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
FromStudent,BorrowBook
出于效率方面的考虑,InnoDB数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上。显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。
活着的死人 该用户已被删除
7#
发表于 2015-3-22 17:21:08 | 只看该作者
我个人认为就是孜孜不懈的学习
小妖女 该用户已被删除
6#
发表于 2015-3-15 22:29:47 | 只看该作者
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
飘飘悠悠 该用户已被删除
5#
发表于 2015-3-8 12:01:07 | 只看该作者
然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情
分手快乐 该用户已被删除
地板
发表于 2015-2-26 04:27:42 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
因胸联盟 该用户已被删除
板凳
发表于 2015-2-3 10:46:42 来自手机 | 只看该作者
两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
老尸 该用户已被删除
沙发
发表于 2015-1-25 16:31:03 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
简单生活 该用户已被删除
楼主
发表于 2015-1-19 06:31:23 | 只看该作者
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-22 14:24

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表