SQL连接查询1 内联接查询

在数据库开发方面,通过单表所表现的实现,有时候需要组合查询来找到我们需要的记录集,这时候我们就会用到连接查询。

  连接查询主要包括以下几个方面:

  内连接

  内连接一般是我们最常使用的,也叫自然连接,是用比较运算符比较要联接列的值的联接。它是通过(INNER JOIN或者JOIN)关键字把多表进行连接。我们通过建立两个表来说明问题:

StudentID StudentName StudentAge
----------- -------------------------------------------------- -----------
1 张三 25
2 李四 26
3 王五 27
4 赵六 28
5 无名氏 27

  以上是表Student,存放学生基本信息。

BorrowBookID BorrowBookName StudentID BorrowBookPublish
----------------------------------------------------------------------------------------------------------------------
1 马克思主义政治经济学 1 电子工业出版社
2 毛泽东思想概论 2 高等教育出版社
3 邓小平理论 3 人民邮电出版社
4 大学生思想道德修养 4 中国铁道出版社
5 C语言程序设计 NULL 高等教育出版社

  以上是表BorrowBook,存放学生所借的书。

  以上两张表是通过StudentID进行关联,在这里先执行内联连语句:

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
From Student
Inner Join BorrowBook
On Student.StudentID = BorrowBook.StudentID

  上面这个语句也可以写成

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
FROM Student,BorrowBook
WHERE Student.StudentID = BorrowBook.StudentID

 其中,Inner Join是SQL Server的缺省连接,可简写为Join。在Join后面指定具体的表作连接。On后面指定了连接的条件。

  运行的结果如下:

tudentName StudentAge BorrowBookName BorrowBookPublish
--------------------------------------------------------------------------------
张三 25 马克思主义政治经济学 电子工业出版社
李四 26 毛泽东思想概论 高等教育出版社
王五 27 邓小平理论 人民邮电出版社
赵六 28 大学生思想道德修养 中国铁道出版社

  (所影响的行数为 4 行)

  根据查询的结果来进行分析:

  如果多个表要做连接,那么这些表之间必然存在着主键和外键的关系。所以需要将这些键的关系列出,就可以得出表连接的结果。在上例中,StudentID是Student表的主键,StudentID又是BorrowBook表的外键,这两个表的连接条件就是Student.StudentID = BorrowBook.StudentID,对比查询结果可以得知,内连接查询只查询出主键StudentID在另张表中存在的记录,像Student表中的第五条记录,因为在BorrowBook表中StudentID不存在,像BorrowBook表中的第五条记录StudentID为Null,对应的Student表中没有记录,所以就不会显示。所以内连接就是将参与的数据表中的每列与其它数据表的列相匹配,形成临时数据表,并将满足数据项相等的记录从临时数据表中选择出来。

  内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:

  1) 等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

  2) 不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括> 、> =、 <=、 <、!> 、! <和 <> 。

    3) 自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

  例如对于用不等值连接语句:

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
From Student
Inner Join BorrowBook
On Student.StudentID <> BorrowBook.StudentID
StudentName StudentAge BorrowBookName BorrowBookPublish
----------------------------------------------------------------------------------
李四 26 马克思主义政治经济学 电子工业出版社
王五 27 马克思主义政治经济学 电子工业出版社
赵六 28 马克思主义政治经济学 电子工业出版社
无名氏 27 马克思主义政治经济学 电子工业出版社
张三 25 毛泽东思想概论 高等教育出版社
王五 27 毛泽东思想概论 高等教育出版社
赵六 28 毛泽东思想概论 高等教育出版社
无名氏 27 毛泽东思想概论 高等教育出版社
张三 25 邓小平理论 人民邮电出版社
李四 26 邓小平理论 人民邮电出版社
赵六 28 邓小平理论 人民邮电出版社
无名氏 27 邓小平理论 人民邮电出版社
张三 25 大学生思想道德修养 中国铁道出版社
李四 26 大学生思想道德修养 中国铁道出版社
王五 27 大学生思想道德修养 中国铁道出版社
无名氏 27 大学生思想道德修养 中国铁道出版社

  它就会把两表所对应不相等的记录给查询出来了。

时间: 2024-10-25 22:22:14

SQL连接查询1 内联接查询的相关文章

SQL Story摘录(二)————联接查询初探

例1-2.键值重复的信息现在看一下压缩掉重复信息的PRODUCT表ID PNAME PRICE NUMBER PDESCRIPTION 1Apple 123000NULL2Banana 16.997600NULL3Olive 25.224500NULL4Coco Nut 40.992000NULL4Orange 15.995500NULL5Pineapple 302500NULL6Olive 25.223000NULL 这里还有几个有问题的地方.表中Coco Nut和Orange的ID都是4,I

asp.net-微软最新版本ASP.NET的框架是否不完全支持SQL多表联接查询?

问题描述 微软最新版本ASP.NET的框架是否不完全支持SQL多表联接查询? 问题是这样的,我需要查询SQL数据库中多个表的字段,SQL查询语句如下式样: select t1.coid,t1.coname,t1.tel,t2.regid... from t1,t2,t3 where t1.coid=t2.regid and t1.userid='"+ userid+"' 试了很多次都报错说数据控件中没有't1'这样的属性. 我在网上搜索了一下,也有很多人说不支持这样的多表联接查询,只支

4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)

 mysql数据库创建,表创建模等模板脚本 -- 用root用户登录系统,执行脚本   -- 创建数据库 create database mydb61 character set utf8 ;   -- 选择数据库 use mydb61;   -- 增加 dbuser1 用户 --     创建用户'dbuser61'密码为 'dbuser61'拥有操作数据库mydb61的所有权限          GRANT ALL ON mydb61.* TO dbuser61 IDENTIFIED B

SQL 连接查询语法及使用

  一.交叉连接(cross join) 交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的. 语句1:隐式的交叉连接,没有cross join. select o.id, o.order_number, c.id, c.name from orders o , customers c where o.id=1; 语句2:显式的交叉连接,使用cross join. select o.id,o.ord

StreamRead和sqlparamter,sql连接查询

  StreamRead和sqlparamter,sql连接查询以及分页整理 -> Xml操作 InnerText 会对标签<>转义 InnerXml 不会对标签转义 委托 多播委托. --写入txt StreamWrite 写入文本 reader.FieldCount得到字段的个数 StreamWrite对象的WriteLine()方法就可以把读取的内容写入到txt中 StreamRead 读取文本 string temp; while((temp = reader.ReadLine(

带条件的内联查询比左外连接查询快?

问题描述 带条件的内联查询比左外连接查询快? 带条件的内联查询比左外连接查询快? 这句话说的对不对? 解决方案 一般是对的,因为内联接再加上条件可以很快过滤

SQL联合查询(内联、左联、右联、全联)的语法

  概述: 联合查询效率较高,举例子来说明联合查询:内联inner join .左联left outer join .右联right outer join .全联full outer join 的好处及用法. 联合查询效率较高,以下例子来说明联合查询(内联.左联.右联.全联)的好处: T1表结构 (用户名,密码) userid (int) username varchar(20) password varchar(20)   1 jack jackpwd   2 owen owenpwd   T

sql连接查询,修改列值

问题描述 sql连接查询,修改列值 两表连接查询,需要将其中一列的值加到另一列上(两列在分别两张表中): update (select * from g3_buybudgetg3_budget_plan where g3_buybudget.budgetno in (select budgetno from g3_budget_plan where buyplanno = 1031))set remainingmoney = remainingmoney + thismoney 提示我不能修改该

浅谈sql连接查询的区别 inner,left,right,full_Mysql

--table1 表 ID NAME QQ PHONE 1 秦云 10102800 13500000 2 在路上 10378 13600000 3 LEO 10000 13900000 4 秦云 0241458 54564512 --table2 表 ID NAME sjsj gly 1 秦云 2004-01-01 00:00:00.000 李大伟 2 秦云 2005-01-01 00:00:00.000 马化腾 3 在路上 2005-01-01 00:00:00.000 马化腾 4 秦云 20