SQL语法学习记录——JOIN

学习内容参考来源:www.runoob.com

JOIN准备

--为了方便练习,在数据库中创建演示数据:
create database TEST;
use TEST ;
----------
go
--建立[网站信息表],可以视作基础资料表;
create table website
 (id int primary key,
  name varchar(255),
  url varchar(255),
  alexa varchar(255),
  country varchar(255)
  )
insert into website values
('1','google','www.google.com','1','USA')
,('2','淘宝','www.taobao.com','13','CN')
,('3','菜鸟教程','www.runoob.com','4689','CN')
,('4','微博','weibo.com','20','CN')
,('5','Facebook','www.facebook.com','3','USA')
,('6','stackoverflow','stackoverflow.com','0','IND')
,('7','小米','www.mi.com','50','CN')
select * from website;
----------
--建立[网站日志表],可以视作出入库明细表;
create table access_log
 (id int primary key,
  site_id int not null,
  [count] int not null,
  date date not null
  )
insert into access_log values
(1,1,45,'2016-05-10')
,(2,3,100,'2016-05-13')
,(3,1,230,'2016-05-14')
,(4,2,10,'2016-05-14')
,(5,5,205,'2016-05-14')
,(6,4,13,'2016-05-15')
,(7,3,220,'2016-05-15')
,(8,5,545,'2016-05-16')
,(9,3,201,'2016-05-17')
,(10,8,299,'2016-05-18')
select * from access_log;

JOIN类型

  • INNER JOIN: 只有左表、右表完全匹配的记录才能被返回;
  • LEFT JOIN:即使右表没有匹配,也会返回左表的所有行;
  • RIGHT JOIN:即时左表没有匹配,也会返回右表的所有行;
  • FULL JOIN:左表、右表不管是否匹配,返回俩表的所有行;

JOIN结果

先看一下演示的2张数据表:

website

access_log

再看一下join后的结果:

INNER JOIN

select * from  website t1 inner join access_log t2 on t1.id= t2.site_id;
-- 只有左表、右表完全匹配的记录才能被返回;

LEFT JOIN

select * from  website t1 left join access_log t2 on t1.id= t2.site_id;
--即使右表没有匹配,也会返回左表的所有行;

RIGHT JOIN

select * from  website t1 right join access_log t2 on t1.id= t2.site_id;
--即时左表没有匹配,也会返回右表的所有行;

FULL JOIN

select * from  website t1 FULL join access_log t2 on t1.id= t2.site_id;
--左表、右表不管是否匹配,返回俩表的所有行;

原文地址:https://www.cnblogs.com/manacode/p/12207146.html

时间: 2024-08-03 22:55:51

SQL语法学习记录——JOIN的相关文章

Markdown语法学习记录

记录一下Markdown的语法,方便以后使用. 先把转义符写在最前面,没有它写不来这篇日志 加入链接 [链接显示的内容](链接的Link) 比如我要连接这篇讲解Markdown语法的文章链接显示的内容还可以给链接加Title,就是鼠标放在连接上时显示的内容.链接显示的内容 加粗 斜体 加两个星号**或下划线__表示加粗 比如加粗 加粗加入一个星号*或一个下划线_表示斜体 斜体 _ 斜体_ 段落级别 # 一级标题 二级标题 ## 二级标题 三级标题 ### 三级标题 四级标题 #### 四级标题

sql语法:inner join on, left join on, right join on详细使用方法

inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 INNER JOIN 语法: INNER JOIN 连接两个数据表的用法: SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号 INNER JOIN 连接三个数据表的用法: SELECT * FROM (表1 INNER J

sql语法:inner join on, left join on, right join on具体用法

inner join(等值连接) 仅仅返回两个表中联结字段相等的行 left join(左联接) 返回包含左表中的全部记录和右表中联结字段相等的记录 right join(右联接) 返回包含右表中的全部记录和左表中联结字段相等的记录 INNER JOIN 语法: INNER JOIN 连接两个数据表的使用方法: SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号 INNER JOIN 连接三个数据表的使用方法: SELECT * FROM (表1 IN

SQL Server学习记录Day1

最近在学习SQL Server 数据库,用的版本是2008 R2的版本,如下图所示,本人学习时间不长,写这篇文章一是为了锻炼自己加深印象,二也可以与和诸多朋友进行交流以及得到大家的指教. 安装教程网上有很多,可以自行去搜索,但是安装时有一些小细节,在安装到实例配置的时候,如果没有安装过其它版本的SQL SERVER,请选择默认实例,如果有安装过,则手工指定实例.如果一台电脑安装了多个实例的SQL SERVER,每个实例的端口是不一样的,当在软件中设置服务器连接地址时需要注意,例如:192.168

[QT][SQL]sq]学习记录1_模糊搜索

sql学习网站: http://www.w3school.com.cn/sql/index.asp 用于模糊搜索数据库的数据 语句:http://www.w3school.com.cn/sql/sql_like.aspSQL LIKE 操作符: 接下来,我们希望从 "Persons" 表中选取居住在包含 "lon" 的城市里的人:我们可以使用下面的 SELECT 语句:SELECT * FROM PersonsWHERE City LIKE '%lon%'

python基本语法学习记录

1     默认情况下,Python 3源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 2     Python中单行注释以#开头,多行注释用三个单引号(''')或者三个双引号(""")将注释括起来. 3     python最具特色的就是使用缩进来表示代码块.缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数. 4     自然字符串, 通过在字符串前加r或R. 如 r"this is a line with \n&quo

SQL Server学习记录之获取每月每季度每年第一天和最后一天

DECLARE@dtdatetime SET@dt=GETDATE() DECLARE@numberint SET@number=3 --1.指定日期该年的第一天或最后一天 --A. 年的第一天 SELECTCONVERT(char(5),@dt,120)+'1-1' --B. 年的最后一天 SELECTCONVERT(char(5),@dt,120)+'12-31' --2.指定日期所在季度的第一天或最后一天 --A. 季度的第一天 SELECTCONVERT(datetime, CONVER

SQL Server2008R2学习记录

判断存在 1,判断表存在字段(参考:https://www.cnblogs.com/ouyy/p/9202491.html) IF EXISTS(SELECT 1 FROM SYSOBJECTS so,SYSCOLUMNS sc WHERE so.ID = sc.ID AND so.NAME='表名' AND sc.NAME='字段') IF EXISTS(SELECT 1 FROM syscolumns WHERE id = object_id('表名') AND name = '字段') I

Linq To Sql中实现Left Join与Inner Join使用Linq语法与lambda表达式

当前有两个表,sgroup与sgroupuser,两者通过gKey关联,而sgroup表记录的是组,而sgroupuser记录是组中的用户,因此在sgroupuser中不一定有数据.需要使用Left Join获取数据: Linq语法如下: var sg = (from g in dc.sgroup join gu in dc.sgroupuser on g.gKey equals gu.gKey into l from lgu in l.DefaultIfEmpty() select new {