SQL SERVER连接、合并查询
2016-09-29 10:45
387 查看
----创建测试表MyStudentInfo
CREATE table MyStudentInfo
(
Id int not null primary key,
Name varchar(16),
Age int,
Gender varchar(2),
Phone varchar(16),
Address varchar(50),
GradeId int
)
--联合插入多条数据
INSERT INTO MyStudentInfo
SELECT 1,'张三',20,'1','15801258912','上海',1 UNION
SELECT 2,'李四',22,'1','12345678901','北京',1 UNION
SELECT 3,'王五',16,'1','13976891234','天津',2 UNION
SELECT 4,'赵六',19,'1','18676891234','重庆',3 UNION
SELECT 5,'小红',21,'2','17776891234','广州',4 UNION
SELECT 6,'小王',25,'2','13176891234','深圳',5 UNION
SELECT 7,'小刘',18,'2','13374591234','南京',6 UNION
SELECT 8,'小张',16,'1','13974596734','长沙',6 UNION
SELECT 9,'小罗',27,'1','13175122786','武汉',7 UNION
SELECT 10,'小袁',21,'2','17715872346','石家庄',8
--创建测试表GradeInfo
CREATE table GradeInfo
(
Id int not null primary key,
GradeName varchar(16)
)
--联合插入多条数据
INSERT INTO GradeInfo
SELECT 1,'.NET' UNION
SELECT 2,'Android' UNION
SELECT 3,'PHP' UNION
SELECT 4,'UI' UNION
SELECT 5,'HTML5' UNION
SELECT 6,'JAVA' UNION
SELECT 9,'HADOOP' UNION
SELECT 10,'大数据'
--内链接
--内链接是从结果表中删除其他被链接表中没有匹配的所有行,所以我们说内链接可能丢失数据
SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s INNER JOIN GradeInfo g ON s.GradeId=g.Id
--外部链接
--左外联接,关键字LEFT JOIN
--左外联接,结果集中包括左表中的所有行,如果左表的某一行在右表中没有匹配行,则在关联的结果集行中,
--来自右表的所有选择列表均为NULL
SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s LEFT JOIN GradeInfo g ON s.GradeId=g.Id
--右外联接
--GIGHT JOIN进行联接
--是左外联接的反向联接,将返回右表的所有行,如果右表的某一行在左表中没有匹配行,则将为左表返回NULL
SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s RIGHT JOIN GradeInfo g ON s.GradeId=g.Id
--完整外联接
--关键字是FULL JOIN
--完整外联接使用了FULL JOIN进行联接,当某一行在另一表中没有匹配行,另一表的选择列表将返回NULL
SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s FULL JOIN GradeInfo g ON s.GradeId=g.Id
--交叉联接(笛卡尔积)
--CORSS JOIN 没有where 也没有on,返回行数是两表行数的乘积
SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s CROSS JOIN GradeInfo g
--UNION:UNION操作符用于合并两个或多个 SELECT 语句的结果集
--UNION必须遵循
--1.两个SELECT语句选择列表中的列数目必须一样,而且对应位置上的列的数据类型必须相同或者兼容,每条 SELECT 语句中的列的顺序必须相同
--2.UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名
--3.union默认自动去除重复行
--4.如果需要手动排序,order by语句必须加在最后一个select语句之后,但是他所使用的排序列名必须是第一个select选择列表中的列名
SELECT Age,Name FROM MyStudentInfo
UNION
SELECT Id,GradeName FROM GradeInfo
ORDER BY Age DESC
--UNION ALL
--1.加上ALL关键字之后,功能就是不删除重复行,也不对行进行自动排序
--2.如果希望把不同数据类型的字段合并查询,必须进行类型转换使其相对应的数据类型相同或者兼容
--3.当合并两个表,列数不同时.只要向其中一个表源中添加列,就可以使其两个表的列数相同
SELECT Age,Name,Address FROM MyStudentInfo
UNION ALL
SELECT Id,GradeName,NULL FROM GradeInfo
ORDER BY Age DESC
--UNION和联接查询有什么区别
--1.在合并中,两个表的数量和数据类型必须相同 ; 在联接中,一个表的行可能与另一个表的行有很大的区别
--2.在合并中,行的数量是两个表行的"和" ; 在联接中,行的最大数目是他们的"乘积"
CREATE table MyStudentInfo
(
Id int not null primary key,
Name varchar(16),
Age int,
Gender varchar(2),
Phone varchar(16),
Address varchar(50),
GradeId int
)
--联合插入多条数据
INSERT INTO MyStudentInfo
SELECT 1,'张三',20,'1','15801258912','上海',1 UNION
SELECT 2,'李四',22,'1','12345678901','北京',1 UNION
SELECT 3,'王五',16,'1','13976891234','天津',2 UNION
SELECT 4,'赵六',19,'1','18676891234','重庆',3 UNION
SELECT 5,'小红',21,'2','17776891234','广州',4 UNION
SELECT 6,'小王',25,'2','13176891234','深圳',5 UNION
SELECT 7,'小刘',18,'2','13374591234','南京',6 UNION
SELECT 8,'小张',16,'1','13974596734','长沙',6 UNION
SELECT 9,'小罗',27,'1','13175122786','武汉',7 UNION
SELECT 10,'小袁',21,'2','17715872346','石家庄',8
--创建测试表GradeInfo
CREATE table GradeInfo
(
Id int not null primary key,
GradeName varchar(16)
)
--联合插入多条数据
INSERT INTO GradeInfo
SELECT 1,'.NET' UNION
SELECT 2,'Android' UNION
SELECT 3,'PHP' UNION
SELECT 4,'UI' UNION
SELECT 5,'HTML5' UNION
SELECT 6,'JAVA' UNION
SELECT 9,'HADOOP' UNION
SELECT 10,'大数据'
--内链接
--内链接是从结果表中删除其他被链接表中没有匹配的所有行,所以我们说内链接可能丢失数据
SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s INNER JOIN GradeInfo g ON s.GradeId=g.Id
--外部链接
--左外联接,关键字LEFT JOIN
--左外联接,结果集中包括左表中的所有行,如果左表的某一行在右表中没有匹配行,则在关联的结果集行中,
--来自右表的所有选择列表均为NULL
SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s LEFT JOIN GradeInfo g ON s.GradeId=g.Id
--右外联接
--GIGHT JOIN进行联接
--是左外联接的反向联接,将返回右表的所有行,如果右表的某一行在左表中没有匹配行,则将为左表返回NULL
SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s RIGHT JOIN GradeInfo g ON s.GradeId=g.Id
--完整外联接
--关键字是FULL JOIN
--完整外联接使用了FULL JOIN进行联接,当某一行在另一表中没有匹配行,另一表的选择列表将返回NULL
SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s FULL JOIN GradeInfo g ON s.GradeId=g.Id
--交叉联接(笛卡尔积)
--CORSS JOIN 没有where 也没有on,返回行数是两表行数的乘积
SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s CROSS JOIN GradeInfo g
--UNION:UNION操作符用于合并两个或多个 SELECT 语句的结果集
--UNION必须遵循
--1.两个SELECT语句选择列表中的列数目必须一样,而且对应位置上的列的数据类型必须相同或者兼容,每条 SELECT 语句中的列的顺序必须相同
--2.UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名
--3.union默认自动去除重复行
--4.如果需要手动排序,order by语句必须加在最后一个select语句之后,但是他所使用的排序列名必须是第一个select选择列表中的列名
SELECT Age,Name FROM MyStudentInfo
UNION
SELECT Id,GradeName FROM GradeInfo
ORDER BY Age DESC
--UNION ALL
--1.加上ALL关键字之后,功能就是不删除重复行,也不对行进行自动排序
--2.如果希望把不同数据类型的字段合并查询,必须进行类型转换使其相对应的数据类型相同或者兼容
--3.当合并两个表,列数不同时.只要向其中一个表源中添加列,就可以使其两个表的列数相同
SELECT Age,Name,Address FROM MyStudentInfo
UNION ALL
SELECT Id,GradeName,NULL FROM GradeInfo
ORDER BY Age DESC
--UNION和联接查询有什么区别
--1.在合并中,两个表的数量和数据类型必须相同 ; 在联接中,一个表的行可能与另一个表的行有很大的区别
--2.在合并中,行的数量是两个表行的"和" ; 在联接中,行的最大数目是他们的"乘积"
相关文章推荐
- SQL的主键和外键约束
- 数据库开发知识总结(一)
- Cognos安装及通过ODBC连接Tibero数据库
- MySQL一些监控项整理
- Redis 五大常用数据类型
- oracle 11g rac启动报错ORA-01102: cannot mount database in EXCLUSIVE mode
- oracle 11g rac启动报错ORA-01102: cannot mount database in EXCLUSIVE mode
- window 上安装redis 以及php redis扩展
- mysql 开发技巧之JOIN 更新和数据查重/去重
- 多例设计模式
- 深入理解分布式事务
- redis的安装
- MySql存储引擎MyISAM和InnoDB的区别
- MySql存储引擎MyISAM和InnoDB的区别
- 各数据库的JDBC连接串
- sqlserver 存储 过程知识
- mysql慢查询设置(5.7)
- PHP操作Redis KEY,String 的相关命令 (二)
- mysql 调用函数碰到Illegal mix of collations的解决办法
- xml解析——增删改查操作后将其修改结果保存