sql语句中的连接方式

两张表 部门表(dept)和员工表(usert)中所有的数据

1.--左连接 usert(员工表) dept(部门表)
--显示员工信息时,有的员工可能还没有分配到某个具体的部门(新进员工),其所属部门一项就没有数据,但是员工仍然需要显示,即员工表数据需要全部显示
select u.name,d.deptname  from usert u left join dept d on u.deptid=d.deptid order by u.id

2.--右连接
--新部门还没有员工,显示时也需要把部门显示出来
select u.name,d.deptname  from usert u right join dept d on u.deptid=d.deptid order by u.id;

2.1.--其实右连接和把表换位置后的左连接是一样的
select u.name,d.deptname  from dept d left join usert u on u.deptid=d.deptid order by u.id;

3.--内连接 显示查询出来条件对应的
select u.name,d.deptname  from usert u join dept d on u.deptid=d.deptid;

3.1 但是一般写成这样的

select u.name,d.deptname  from usert u,dept d where u.deptid=d.deptid;

4.--全外连接
--可能有时候需要把整个公司的员工和部门信息做一个总览,可以对员工表和部门表
select u.name,d.deptname  from usert u full join dept d on u.deptid=d.deptid;

5.--自连接
--简单地说就是自己和自己进行连接,连接的条件就是本表的主键。通常认为在数据库中存在父子关系
--时,应该设计成两张表。但如果父子都是同一实体,就可以简化设计成一张表。比如,查看员工及直接
--上级的名字: (上级也是员工,上级的数据也是员工数据,也应该存储在员工表中。)
--当成两张表查即可(mgr 字段为上级id)
select yg.name,sj.name from usert sj,usert yg where yg.mgr=sj.id

6.--交叉连接
--适合每个员工对所有部门评价
select u.name,d.deptname,null  from usert u cross join dept d

一般也写成

select u.name,d.deptname,null from usert u,dept d

--内连接和where相同

  inner join

  --左向外连接,返回左边表所有符合条件的

  left join

  --右向外连接,返回右边表所有符合条件的

  right join

  --完整外部连接,左向外连接和右向外连接的合集

  full join

  --交叉连接,也称笛卡儿积。返回左表中的每一行与右表中所有行的组合

  cross join

时间: 2024-10-10 10:28:12

sql语句中的连接方式的相关文章

回顾sql语句中的各种连接

1. 内连接(Inner Join) 内连接是最常见的一种连接,它页被称为普通连接,而E.FCodd最早称之为自然连接. 下面是ANSI SQL-92标准 select * from    t_institution i inner join t_teller t on i.inst_no = t.inst_no where i.inst_no = "5801" 其中inner可以省略. 等价于早期的连接语法 select * from t_institution i, t_telle

优化子查询sql语句为内连接

背景: 希望提高查询的效率,从sql语句中频繁出现的子查询入手. 数据表如下:Student表中的CityCode对应于City表中的Code. Student表:                      City表: 子查询方式: sql语句如下: 1 select * from Student 2 where CityCode 3 in 4 (select Code from City) 内连接方式:sql语句如下: 1 select a.* from 2 Student a inner

SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别

原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别 SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值. 如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL. 如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值. 如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操

SQL语句中,Conversion failed when converting datetime from character string.错误的解决办法

在项目开发过程中,我们经常要做一些以时间为条件的查询,比如查询指定时间范围内的历史记录,然而这些时间都是从UI传递过来的参数,所以我们写的sql语句就必须用到字符串拼接.当然,在C#中写SQL语句还好处理,可以使用C#的字符串函数做对应的数据类型转换.但是,如果用的是存储过程的话,就有点纠结了.下面来说一下我在写存储过程中遇到的问题: 为了更加直接的说明问题,写如下一个简单的例子: declare @dateFrom datetime; declare @dateTo datetime; dec

转王波洋,SQL语句中的 for XML Path('')

FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主. 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果语句如下: SELECT * FROM @hobby FO

sql语句中#{}和${}的区别

#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". $将传入的数据直接显示生成在sql中.如:order by userid,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.

oracle sql语句中使用if逻辑

l在 SQL 语句中使用IF-THEN-ELSE 逻辑 l l使用两种方法: •CASE 表达式:SQL99的语法,类似Basic,比较繁琐 •DECODE 函数:Oracle自己的语法,类似Java,比较简介 1 SQL> select ename,job, sal, case job when 'PRESIDENT' then 1.1*sal 2 2 when 'MANAGER' then 1.2*sal 3 3 when 'CLERK' then 1.3*sal 4 4 else 1.4*

SQL语句中DateAdd 函数说明

实践例子: 将借阅表中所有记录的归还日期加15天: 执行前情况: 执行后情况如下: update 借阅 set 归还日期=DateAdd ("D",15,归还日期) [详细讲解:] 返回 返回包含一个日期的 Variant (Date),这一日期还加上了一段时间间隔. 语法 DateAdd(interval, number, date) DateAdd 函数语法中有下列命名参数: interval 必要.字符串表达式,是所要加上去的时间间隔. number 必要.数值表达式,是要加上的

select 1 from ... sql语句中的1解读

摘自:http://blog.csdn.net/zengcong2013/article/details/48224509 select  1 from ..., sql语句中的1代表什么意思?查出来是个什么结果?         select 1 from table;与select anycol(目的表集合中的任意一行) from table;与select * from table 从作用上来说是没有差别的,都是查看是否有记录,一般是作条件查询用的.select 1 from 中的1是一常