--内连接inner join 查询两表共有的信息
--from查询列名1.Name=列名2.Name 是关联条件(关联条件中列的内容要一致)
select * from tableName inner join Product2 on列名1.Name=列名2.Name
--显示查询后的部分列,p1.*意思是显示p1的所有列
select p1.*,proArea,proBrand from Product1 as p1 inner join Product2 on p1.ProCode=Product2.ProCode
--Product1 as p1 意思是给Product1起了个别名p1 ,as 可以省略
select * from Product1 as p1 inner join Product2 as p2 on p1.ProCode=p2.ProCode
--where查询,省略了as <格式:select * from 表,表where 关联条件>
select * from Product1 p1,Product2 p2 where p1.ProCode=p2.ProCode
--外连接 --先显示两表关联到的数据,再显示关联不到的数据
go --<格式:select * from 表left\right\full outer join 表on 关联条件>
select * from Product1 p1 left outer join Product2 p2 on p1.ProCode=p2.ProCode --左外连接
select * from Product1 p1 right outer join Product2 p2 on p1.ProCode=p2.ProCode --右外连接
select * from Product1 p1 full outer join Product2 p2 on p1.ProCode=p2.ProCode --全外连接
--交叉连接(又叫笛卡尔连接:疯狂连接,n对n连接,没有关联条件)
--格式:select * from 表cross join 表
select * from Product1 cross join Product2
--自连接(自查询:是把一张表分解成两张表来用)
select c1.*,c2.Name from ST_class c1,ST_class c2 where c1.ID=c2.Department and c1.Name='计算机学院'
--嵌套查询
--子查询返回多个值
select * from product1 where ProCode in(select ProCode from Product2 where proArea='北京')
select * from product1 where ProCode not in(select ProCode from Product2 where proArea='北京')
--子查询返回一个值
select* from Product1 where proValue=(select MAX(provalue) from Product1)
--子查询返回多个值时可以用any(返回结果中的任何一个【最小的一个】)all(返回结果中的所有【最大值】)
--联合查询 union all (用union all连接两个单独的子查询)
select SNAME,SSEX,SBIRTHDAY from STUDENT union all select TNAME,TSEX,TBIRTHDAY from TEACHER
存储过程
复制代码 代码如下:
--创建(create)/修改(alter)一个存储过程
alter proc sp_SMGetCity ---sp_SMGetCity 是存储过程的名字
(
@code nvarchar(50), --数据类型要和比较的字符相同
@name nvarchar(50) output ,
@grade int=1
--'这里要注意:存储过程赋初值,只能在排在最后的参量中'
---一个@ 符号是局部变量
---两个@ 符号是全局变量
)
as
begin
select @name=Name from TBName where Code like @code+'%' and Grade=@grade --begin和end 中间是要执行的SQL语句
print @name --带输出参数
end
declare @outname nvarchar(50) -- 定义一个变量
exec sp_SMGetCity'11',@outname output --@aa把变量赋值给输出参数,用来接收返回值
select @outname
sp_help sp_SMGetCity --查看名为sp_studentmanager的存储过程的创建信息
sp_helptext sp_SMGetCity --查看名为sp_studentmanager的存储过程的创建代码
drop proc sp_SMGetCity --删除存储过程
--return只能返回整型数据
--删除存储过程drop proc sp_Name
-- exec(@aa)--执行@aa(SQL语句),所以要加括号,执行字符串中的SQL语句
存储过程调用存储过程
as
begin
declare @return int
exec @return=sp_checkUser@id,@name --存储过程调用存储过程
if @return=0
print '没有重复,return只能返回整型'
else
print '用户已注册'
end
一些例子
数据库联查授权
复制代码 代码如下: