SQL Server基础SQL脚本之内外连接、交叉连接;函数、子查询
2021-02-28 21:43
801 查看
代码大概200行左右
本系列,几乎都是代码,记得当时写的时候用的是微软的官方实例数据库AdventureWorks_Data.mdf、AdventureWorks_Log.ldf来运行的。
下载链接:链接: https://pan.baidu.com/s/1pMdLz6N 密码: xvhu
或者回复“AdventureWorks”来获取链接。
use AdventureWorks --切换到AdventureWorks数据库 --创建Student表和Marks表,用于操作各种联接 create table Student --创建学生表,里面包含两列,学号和姓名 ( RollNo char(), Name varchar() ) insert into Student values --向Student表中插入5行记录 (,), (,), (,), (,), (,) create table Marks --创建成绩表,里面包含三列,学号,RDMBS和Math ( RollNo char(), RDBMS int, int ) insert into Marks values --向成绩表中插入三行记录 (,,), (,,), (,,) select * from Student select * from Marks --内联接 INNTER JOIN- 显示满足公共列中联接条件的行 inner可加可不加 --问题:查询有考试成绩的学生的学号,姓名,RDBMS成绩和Math成绩 -----练习:已知 select * from HumanResources.Employee select * from HumanResources.EmployeeAddress go --显示:EmployeeID, Title, AddressID 的匹配信息 ----inner join --给表名一个别名 --外联接 - 显示包含一个表中的所有行以及另外一个表中匹配行的结果集,不匹配的用NULL值填充 --()左外联接 - 返回LEFT OUTER JOIN 左侧的表的所有行,以及右侧指定的表的匹配行,若右边找不到匹配项,显示NULL值 --()右外联接 - 返回RIGHT OUTER JOIN 右侧的表的所有行,以及左侧指定的表的匹配行,若左边找不到匹配项,显示NULL值 --()完整外联接 - 左外联接和右外联接的组合,返回两个表中所有匹配的行和不匹配的行,匹配记录只显示一次 --交叉联接(Cross Join) Product运算,将一个表中的每一行与另一个表中的 -------------------- create table Course --创建Course表,里面包含一列CourseName (CourseName varchar()) insert into Course values --向Course表中插入两行记录 (), () select * from Student select * from Course --要求显示结果为每个学生都修一遍Course表中的所有课程 --等值联接 --=号联接表的内联接 --练习:查询员工的员工编号,所属部门名称和工资 联接多个表 select * from HumanResources.Employee select * from HumanResources.EmployeeDepartmentHistory select * from HumanResources.Department --自联接 - 同一个表当成两张表使用,一个表中的一行联接另一个表中的一行 select * from HumanResources.Employee select .EmployeeID,.Title,.,.Title from --查询员工的编号,职位,其主管的员工编号和其主管的职位 HumanResources.Employee join HumanResources.Employee on .=.EmployeeID --根据其主管的员工编号找到对应的职位 select .EmployeeID,.Title,.,.Title from --查询员工的编号,职位,其主管的员工编号和其主管的职位 HumanResources.Employee , HumanResources.Employee where .=.EmployeeID --根据其主管的员工编号找到对应的职位 ---------------------- (二)、使用子查询查询数据---------------------------- --子查询:将一个select的查询结果作为另外一个select查询的输入/条件,查询里面的查询 --使用比较运算符,IN和EXISTS关键字 --比较运算符,=号为主 select * from HumanResources.Employee --问题:查询和员工编号为1的员工职位(Title)相同的员工的信息 --IN 多个值 --问题:查询和员工编号为1,,的员工的职位相同的员工的信息 --EXISTS关键字-检查一组记录是否存在,返回True或False --exists(select * from databases where =) drop database UDB ------------------ select * from HumanResources.Employee select * from HumanResources.EmployeeDepartmentHistory --使用修改过的比较运算符 ALL,ANY --问题:查询 --查询RDBMS成绩高于S002或者高于S003的学生的信息 select * from Marks go --查询RDBMS成绩高于S002并且高于S003的学生的信息 --使用聚合函数 --问题:查询RDBMS成绩最高的学生的学号和RDBMS成绩 --使用嵌套子查询 --子查询里面可以包含一个或多个子查询,这样叫做嵌套子查询 --问题:查询工资最高的员工的编号 HumanResources.EmployeePayHistory select * from HumanResources.EmployeePayHistory --问题:查询工资最高的员工所在的部门编号 select * from HumanResources.EmployeeDepartmentHistory --使用关联子查询 - 根据外部查询作为评估依据的查询 --问题:查询每个部门最早加入的员工的信息 select * from HumanResources.EmployeeDepartmentHistory where = ( select min() from HumanResources.EmployeeDepartmentHistory where =.DepartmentID ) --APPLY运算符 --合并两个查询的结果集, --------------------------------------------- create table Depositor --创建Depositor表,存储储蓄用户信息,表中有两列,客户姓名和储蓄账户 ( varchar(), char() ) insert into Depositor values --向Depositor表中插入两条记录 (,), (,) create table Borrower --创建Borrower表,存储贷款用户信息,表中有两列,客户姓名和贷款账户 ( varchar(), char() ) insert into Borrower values --向Borrower表中插入两行记录 (,), (,) -------------------------------------- select * from Depositor select * from Borrower --CROSS APPLY - 返回外部结果集中与内部结果集匹配的行 select .,.储蓄账户,br.贷款账户 from Depositor --外部结果集 cross apply (select * from Borrower where .=.) br --br为内部结果集的别名 --OUTER APPLY - 返回外部结果集中所有的行,即使内部结果集中没有找到此行 select .,.储蓄账户,br.贷款账户 from Depositor --外部结果集 outer apply (select * from Borrower where .=.) br --br为内部结果集的别
相关文章推荐
- 获取SQL Server服务器的连接信息用脚本(在原邹建写的基础上作一点改进)与一段查询SQL Server服务器阻塞和死锁信息用的脚本
- sql的基础语句-单行函数,dual,数字函数,日期函数,表连接,集合运算,分组报表,单行子查询,多行子查询
- SQL内外左右交叉连接
- 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。 [SQL]代码 --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO
- 【SQL精彩语句】SQL SERVER 2000中查询指定节点及其所有子节点的函数(表格形式显示)
- 【0037】SQL查询--连接查询--内外连接JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN
- SQL Server 2012 T-SQL基础教程--T-SQL查询和编程的背景
- ORACLE-SQL积累(查询外检约束、记录长度、字段长度、启用禁用触发器、case用法、分组连接函数、查询被锁表)
- T_Sql 交叉连接以及查询等等 暑假第二天
- sql基础---sql连接查询
- SQL连接查询 内连接,左外连接,右外连接,全连接,交叉连接
- sql 分组查询,组内排序, 组内添加序号 (SQL Server 排序函数 ROW_NUMBER和RANK 用法总结)
- T_Sql 交叉连接以及查询等等 暑假第二天
- sql内外连接查询的区别
- SQL Server 建库 建表 添加列 添加,删除主键 SQL脚本 (create,alter,exists ,sysobjects,syscolumns)基础篇
- SQL操作数据——SQL组成,查询基础语法,where,Oracle常用函数等
- EAS 一些基础数据的查询记录脚本(sql)
- 使用 SQL Server Management Studio (SSMS) 连接和查询 SQL Server 实例
- sql 左连接,右连接,内外连接 的一些 基础 区别
- T-SQL查询高级--理解SQL SERVER中非聚集索引的覆盖,连接,交叉和过滤