数据库系列之查询(5)

内连接

1 语法

SELECT <列名>
FROM 表1 
INNER  JOIN  表2 ON 表1.列名  条件运算符  表2.列名
[WHERE 条件]
[ORDER BY  排序列]
其中“ON 表1.列名  条件运算符  表2.列名” 中,条件运算符常用的是:=、<>。
表1.列名和表2.列名,分别是两个表的公共列。
内连接查询出的是两个表公共列共有的记录。

2 示例

(1)Books与Authors内连接SQL语句

SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名
FROM Books as b
INNER JOIN Authors as a ON b.AuthorID = a.AuthorID

(2)内连接另外一种写法

SQL Server2005还兼容以前版本的内连接语法,即使用WHERE子句进行内连接。
SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名
FROM Books b,  Authors a
WHERE b.AuthorID = a.AuthorID

3 多表内连接语法

SELECT <列名>
FROM 表1 
INNER  JOIN  表2 ON 表1.列名  条件运算符  表2.列名

INNER JOIN  表3 ON 表1.列名  条件运算符  表3.列名

……

[WHERE 条件]

[ORDER BY  排序列]

4 示例

SELECT b.BookCode as 图书编号, c.PublisherName as 出版商名,
               b.BookName as 图书名称,a.AuthorName as 作者姓名
FROM  Books b INNER JOIN  Authors a ON b.AuthorID=a.AuthorID
INNER JOIN Publisher c ON b.PublisherID=c.PublisherID

外连接

左外连接语法

SELECT <列名>
FROM 左表 
LEFT  [OUTER] JOIN  右表 ON 左表.列名  条件运算符  右表.列名

[WHERE 条件]

[ORDER BY  排序列]

示例

使用左外连接查询Books与Authors表中的数据

SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名
FROM Books b
LEFT JOIN  Authors a ON b.AuthorID=a.AuthorID

左外连接是以左表为主表,去关联右表(从表),结果集中包含主表所有数据行,如果主表的某行在从表中没有匹配行时,则从表的选择列为NULL值。

右外连接语法

SELECT <列名>
FROM 左表  RIGHT  [OUTER] JOIN  右表

ON 左表.列名  条件运算符  右表.列名

[WHERE 条件]

[ORDER BY  排序列]

示例

使用右外连接查询Books与Authors表中的数据

SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名

FROM Books b

RIGHT JOIN  Authors a ON b.AuthorID=a.AuthorID

右外连接是以右表为主表,去关联左表(从表),结果集中包含主表所有数据行,如果主表的某行在从表中没有匹配行时,则从表的选择列为NULL值。

完全连接

语法

SELECT <列名>

FROM 左表 
FULL  [OUTER] JOIN  右表 ON 左表.列名  条件运算符  右表.列名

[WHERE 条件]

[ORDER BY  排序列]

完全连接左表和右表中所有行,当某行数据在另一个表中没有匹配时,则另一个表的选择列值为NULL

示例

使用完全连接查询Books与Authors表中的数据

SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名
FROM Books b
FULL JOIN  Authors a ON b.AuthorID=a.AuthorID

交叉联接

概念:没有用where子句的交叉连接将产生连接所涉及的笛卡尔积第一个表的行数乘以第二个表的行数等于笛卡尔积和结果集的大小

交叉连接: Cross join(不带条件where,如果带返回或显示的是匹配的行数)

SQL语法:select * from  Books cross join Books

如果有条件(where)
select * from Books cross join Authors where Books.AuthorID= Authors.AuthorID
等价于
select * from Books ,Authors --(不带where)
时间: 2024-07-28 14:23:16

数据库系列之查询(5)的相关文章

数据库系列之查询(4)

主查询与子查询 如果一个SELECT语句能够返回一个单值或一列值并嵌套在一个SELECT.INSERT.UPDATE或DELETE语句中,则称之为子查询或内层查询,而包含一个子查询的语句则称为主查询或外层查询 子查询可实现多层嵌套,且要用圆括号括起来 常把子查询用在外层查询的WHERE子句或HAVING子句中,与比较或逻辑运算符一起构成查询条件 子查询又分为嵌套子查询和相关子查询 嵌套子查询总是最先执行最内层查询 相关子查询的执行过程依赖于值的外部查询.相关子查询的 WHERE 子句引用外部查询

数据库系列之查询(1)

基础查询 1 语法 SELECT    <列名> FROM      <表名> [WHERE    <查询条件表达式>] [ORDER BY <排序的列名>[ASC或DESC]] 2 示例 SELECT AuthorName, Email, Age FROM Authors WHERE City='北京' ORDER BY AuthorID DESC 3.查询数据表中部分列 SELECT AuthorName, Age, Sex, City FROM Aut

数据库系列之查询(2)

字符串函数 1 LEN     返回指定字符串的字符个数(而不是字节),其中不包含尾随空格     SELECT LEN('李丽然作者') --返回:5    2 UPPER     将小写字符转换成大写字符     SELECT UPPER('book图书表') --返回:BOOK图书表 3 LTRIM     返回去掉左侧空格的字符串     SELECT LTRIM(' Authors') --返回: Authors 4 CHARINDEX     查找一个指定的字符串在另一个字符串中的起

SQL 数据库T-SQL语句查询

         SQL 数据库T-SQL语句查询 附加数据库的数据文件 查询表中种类是水果的出厂日期在201-04-01之后的 查询所有种类的总成本 以倒序的方式查询表中水果的成本 查询种类是蔬菜的并且价格在1-5之间 将product表中的名称,种类,出厂日期的数据保存在另一个名为product_new的表中,并查看 在products表和sales表中查询产品的名称.种类.成本.销售地点和销售价格. 在products表和sales表中查询销往海南的产品名称.种类.成本和销售价格. 查询年

前端学数据库之子查询

查询数据库,当查询条件比较复杂时,常常需要用到子查询.子查询(Subquery)是指出现在其他SQL语句内的SELECT子句.本文将详细介绍子查询 定义 子查询(Subquery)是指出现在其他SQL语句内的SELECT子句 SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中,SELECT * FROM t1,称为外层查询(Outer Query/Outer Statement),SELECT col2 FROM t2,称为子查询(Su

【知了堂学习笔记】JSP页面数据分页实现(一)——分页概念以及主流数据库的分页查询

一.分页简介 1.分页,就是一种将数据库里的数据一部分展示给用户的技术.为什么要这样做呢?因为一般来说用户在查询时数据是非常多的,当一个页面不能显示所有数据时,我们就要对查询的数据进行分页,就像我们的书本分成一页一页一样.最简单的例子就是百度,当你百度时,成千上万的数据,并不是呈现在一个页面的. 2.分页的实现方式 1)假分页(不推荐):什么是假分页呢?假分页就是一次性将数据库里的数据全部取出来,存储在页面中,然后再将数据分别展示出来.这种假分页在数据少的还可以玩玩,当数据多起来的时候,这种方式

ADO数据库访问类查询、属性扩展

1 数据库访问类查询 (1)查询一条 有参数:查询这条信息的主键: 有返回值:返回值是一个实体类: dr.read();执行一遍,读取这行信息并放进users类型中. ///返回users实体类类型 public users chayi(string name) { users u = null; com.CommandText = "select *from users where [email protected]"; com.Parameters.Clear(); com.Par

【SSH项目实战05】完成数据库的级联查询和分页

上一节我们完成了EasyUI菜单的实现.这一节我们主要来写一下CategoryServiceImpl实现类,完成数据库的级联查询.一般项目从后往前做,先做service(我们没有抽取Dao,最后再抽取),做完了再做上面层. 在写之前,先看一下数据库中的表的情况: drop database if exists shop; /*创建数据库,并设置编码*/ create database shop default character set utf8; use shop; /*删除管理员表*/ dr

Android程序员必掌握的sqlite数据库连表查询

SQL查询的基本原理:两种情况介绍. 第一.   单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的):然后根据SELECT的选择列选择相应的列进行返回最终结果. 第二.   两表连接查询:对两表求积(笛卡尔积)并用ON条件和连接连接类型进行过滤形成中间表:然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果. 第三.   多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连