多表操作
1. 基本连接操作
1) 结构:From子句将不同表隔开,where创建一个同等连接(同等连接:第一个基表中一列值与第二个基表相应的一列的值相 等的连接);结果是在查询的时候结果为两个基表中列值相匹配的行。
2) 原则:from包含所有表名;where定义一个同等连接;多个表中有同一个列名时,列名表示方式为表名.列名
2. 内连接(自然连接)
结构:from中必须定义一个on子句;必须有join关键字
3. 外连接
1) 结构:主表行在从表中找到匹配行(主表直接返回查询结果)
主表行在从表中未找到匹配行(主表全部返回,从表不匹配的填上NULL返回)
2) 内连接与外连接最大的区别:
外连接中提到的表,至少返回一个表或视图的全部行
3) 主表位置:left outer join(左外);right outer join(右外);full outer join(完全)
4. 连接查询
将两个表的列进行组合
5. 联合查询
与连接查询最大的区别:联合查询中有两个或者两个以上的select子句,这些子句将多个查询结果集组合成一个结果集
6. 交叉连接与自连接
交叉连接:两个表中每两个可能成对的行占一行
自连接:一个表与其自身进行连接的查询
总结:交叉连接是两个表的各行所有可能组合;自连接是一个表与自身相连接的查询
关键字:
交叉连接:cross join
自连接:使用别名实现一个表自身连接 inner join
具体操作查询
操作包括(插入SQL数据,更新SQL数据,删除SQL数据)
1. Inster…values
(Inster [into]表名 列名
Values 插入的值)
1.1 如果使用defult插入与inster一起使用,可节省时间
例如: values(20,’消费’,defult,defult)
1.2 注意:插入的值内用括号和逗号将内容写出;插入的列中未被制定的要支持空值或默认值
2. Inster…select
2.1 select:指定插入表的值(与values作用一样),通过select生成结果集,再由inster…select将这些行添加到表中
2.2 注意:两个表中涉及到的列的数据类型一致,明确是否存在默认值。
2.3 Inster 表名 select 列名 from 表名 where 条件
3. Select into (创建表:将任何查询结果集放置到一个新表中)
3.1 select 列名 into 新表名 from 表名 where 条件(如果新表时本地临时表则在表名前面加#;如果是全局临时表则 在表名前面加##)
3.2 本地临时表:当前会话中可见(使用者结果会话本地临时空间会被收回)
3.3 全局临时表:所有会话中可见(创建表的会话结束且当前参照表的最后一个T-SQL完成后,全局临时表被释放)
3.4 例如:
Use 手镯营销系统
Select 珠宝代号as 手镯编号,珠宝售价as 售价into #手镯价格
From 手镯信息
查看结果 select* from 手镯价格
4. 更新----update
4.1 update [top] 表名/视图名
set 列名=表达式\dafult\null@variable=expression […,n]
where 条件
4.2 注意:不更新标识列,每次只能修改一个表信息,同时更新一列或多列,可将一个变量或多个变量放在同一个表达式中
4.3 例如:
Update 手镯信息
Set 珠宝售价=珠宝售价-200
返款价=返款价-200
Where 珠宝名称=’美白玛瑙手镯’
4.4 多表更新:嵌套查询
Update 手镯信息
Set 珠宝售价=珠宝售价+200
Where 珠宝商编号in(
Select 珠宝商编号
From 销售信息
Where 珠宝代号=’ASG-06’)
Where 珠宝编号=5
解释:
最终结果:首先修改’销售信息’表,选中的’珠宝商编号‘ 对应的’珠宝售价‘列+200
然后将修改更新给’手镯信息’表