Sql Server数据库之多表查询

一.连接查询

  概念:根据两个表或多个表的列之间的关系,从这些表中查询数据

  目的:实现多表查询操作

  语法:From join_table join_type join_table[ON(join_condition)]

      join_table:连接的表名

      join_type:连接类型

      join_condition:连接条件

  连接类型:内连接,外连接,交叉连接

二.内连接

  1.等值连接

    概念:在连接条件中使用"="运算符,其查询结果中列出被连接表中的所有列,包括其中的重复列

    示例:

 1 create table student
 2 (
 3     studentId int not null primary key,
 4     studentName nvarchar(20) not null,
 5     classId int not null
 6 )
 7 create table class
 8 (
 9     classId int not null primary key,
10     className nvarchar(20) not null
11 )
12 insert into student values(1,‘岳云鹏‘,1);
13 insert into student values(2,‘郭德纲‘,1);
14 insert into student values(3,‘郭麒麟‘,1);
15 insert into student values(4,‘孙越‘,2);
16 insert into student values(5,‘于谦‘,2);
17 insert into student values(6,‘阎鹤翔‘,2);
18 insert into class values(1,‘逗哏班‘);
19 insert into class values(2,‘捧哏班‘);
20 select * from student s inner join class c on s.classId = c.classId 

  2.不等值连接

    概念:在连接条件中使用除等号之外的运算符

    示例:

1 select * from student s inner join class c on s.classId != c.classId

三.外链接

  1.左连接

    左表结构:

      

    右表结构:

      

    左连接查询:

select * from student s left join class c on s.classId = c.classId

     查询结果:

          

  总结:左连接:返回左表中的所有行,如果左表行在右表中没有匹配行,则结果中右表中的列返回控制

  2.右连接

     右连接查询: 

      

select * from student s right join class c on s.classId = c.classId

     查询结果:

      

   总结:右连接:恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。

  3.全连接

    全连接查询

select * from student s right join class c on s.classId = c.classId

    查询结果

      

    总结:全连接:返回左表和右表中的所有行,当某行在另一表中没有匹配行,则灵异表中的列返回空值

四.交叉连接(笛卡尔积)

  1.不带where子句

    执行交叉连接:

select * from student cross join class

    查询结果:

      

  2.带where子句

    执行交叉连接:

select * from student s cross join class c where s.classId = c.classId

    查询结果:

  

    

  

原文地址:https://www.cnblogs.com/alan-1996/p/10262452.html

时间: 2024-09-30 14:30:28

Sql Server数据库之多表查询的相关文章

SQL Server数据库进阶之表分区实战演练

一.课程介绍 1.1.需求背景 假设,你有一个销售记录表,记录着每个销售情况,那么你就可以把这个销售记录表按时间分成几个小表,例如说5个小表吧.2009年以前的记录使用一个表,2010年的记录使用一个表,2011年的记录使用一个表,2012年的记录使用一个表,2012年以后的记录使用一个表.那么,你想查询哪个年份的记录,就可以去相对应的表里查询,由于每个表中的记录数少了,查询起来时间自然也会减少.但将一个大表分成几个小表的处理方式,会给程序员增加编程上的难度.以添加记录为例,以上5个表是独立的5

清空SQL Server数据库中所有表数据的方法

其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公开的sp_MSForEachTable存储过程. 也许很多读者朋友都经历过这样的事情:要在开发数据库基础上清理一个空库,但由于对数据库结构缺乏整体了解,在删除一个表的记录时,删除不了,因为可能有外键约束,一个常见的数据库结构是一个主表,一个子表,这种情况下一般都得先删除子表记录,再删除主表记录. 说道删除数据记录,

SQL Server数据库的T-SQL高级查询

一.查询使用的函数 请自行创建数据库和表,表中插入数据,我的样例如下: create database accp; <!--创建accp数据库--> use accp; <!--切换到accp数据库--> create table test ( <!--创建test表--> 编号 int identity(1,1) not null, 姓名 nvarchar(4) not null, 证件号码 varchar(18) primary key, 职务 nvarchar(6

获取SQL Server数据库中的表和字段描述

获取所有dbo表的扩展属性: SELECT * FROM fn_listextendedproperty (NULL, 'schema', 'dbo', 'table', default, NULL, NULL) 大概的结果: objtype objname name value TABLE 表名 扩展属性名 值 获取表的扩展属性: select * from ::fn_listextendedproperty (null,'user','dbo','table','表名','column',n

我的SQL SERVER数据库会装满吗?

原文:我的SQL SERVER数据库会装满吗? 概述 今天有个客户问我一个蛮有意思的问题.我使用的SQL SERVER 2008数据库,目前数据库130多G,其中某个表的记录条数就有3亿1千多万,占用了50多G.那SQL SERVER 数据库中的表有没有行数和列数限制呢?会不会突然有一天,超过这个限制,我的系统就不能使用了? 最大容量 SQL SERVER 是否会被装满,主要是在于数据库的最大容量.包括最大行数和最大列数 以及其他. 具体内容,我们可以查看下面列表: SQL Server 数据库

Sql Server数据库由于未知原因丢失的恢复方法

故障描述: 5块2T硬盘组建RAID5,划分LUN供windows服务器使用.在windows服务器内装有Sql Server2008数据库.存储空间内共有三个逻辑分区,大小分别为500G.800G.2.3T.数据库文件丢失,主要涉及五个数据库,表个数约为6000个左右.丢失原因未知,且不能确定数据存储位置.三个数据库的大小分别为8G.15G.20G.在文件丢失后服务器仍处于开机状态,但并未写入大量数据. 初检流程: 1.使用RAID信息及内部数据块信息重组RAID.重组RAID2.提取LUN内

50种方法优化SQL Server数据库查询(转载)

原文地址:http://www.cnblogs.com/zhycyq/articles/2636748.html 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用

不同数据库oracle mysql SQL Server DB2 infomix sybase分页查询语句

在不同数据库中的使用的分页查询语句: 当前页:currentpage 页大小:pagesize 1. Oracle数据库 select * from (select A.*,rownum rn from ( QUERY_SQL ) A )  where rn <= ((currentpage+1)*pagesize) and rn > (currentpage*pagesize) 注:QUERY_SQL为查询sql语句. 或 select * from (select rownum rn,id

SQL Server数据库表重置自增主键号(通常是指ID)

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86