SQL
如果想让局域网的人连你的数据库 开启tcp/ip 并关闭防火墙。 默认端口号是1433
--单行注释 /**/多上注释
外键 添加外键的表是外键表 外键所在的表是主表
脚本创建数据库 表
select * from sysdatabases
drop database dbtest
create database dbtest
on primary
(
name='dbtest',
filename='C:\Users\qing\Desktop\dbtest.mdf',
size=10mb,
filegrowth=10mb
)
log on
(
name='dbtest_log',
filename='C:\Users\qing\Desktop\dbtest_log.ldf',
size=5mb,
filegrowth=10%
)
use dbtest
create table ClassInfo
(
cId int not null primary key identity(1,1),
cTitle nvarchar(10)
)
create table StudentInfo
(
sId int not null primary key identity(1,1),
sName nvarchar(10) not null,
sGender bit default(0),
sBirthday date,
sPhone char(11),
sEMail varchar(20),
cid int not null,
foreign key(cid) references ClassInfo(cid)
)
select sgender,cid,COUNT(*) as PersonCount
from StudentInfo
group by sGender,cid having COUNT(*)<4 //在分组之后再进行筛选 用having 此时还没有统计列 所以还是用聚合函数
order by PersonCount,cid
inner join 左右表完全匹配的数据
left inner join 左右表完全匹配的数据 + 左表特有的
right inner join 左右表完全匹配的数据 + 右表特有的
full inner join 左右表完全匹配的数据 + 左表特有的 + 右表特有的
over:
select *,sum(销售数量) over from myOrders则不会报错,并且在最后一列显示求和结果
从其他的多张表中读取数据添加到新表中
INSERT INTO tableName(col1,col2,col3)
SELECT a,b,c FROM tableA WHERE a=1
UNION ALL
SELECT a,b,c FROM tableB WHERE a=2
union all如果换成union,则相同记录只插入一次,不会重复插入。
完成数据的行列转换:
行转列
合并姓名相同的
声明:declare @UserName nvarchar(50)
赋值1:set @UserName=N'杨':修改
赋值2:select @UserName=N'牛':修改
输出:print @UserName select @UserName
select @UserName+N'中',这时@UserName仍然是‘杨’,这句代码执行后显示‘杨中’
区别:赋值时,set比select更严谨些
变量是有作用域的
在查询语句的select后面,可以进行选择判断的逻辑
语法1:判等
•Case 列名
•When … then …
•When … then …
•Else …
•End as 列别名
语法2:判不等
•Case
•When 包含列名的逻辑表达式 then …
•When … then …
•else …
•End as 列别名
if 条件
begin
...
end
else
begin
...
end
视图:就是一个select语句,写起来比较复杂,多次被使用,则可以将这个select语句存放到一个视图中
创建语法:
•create view 名称
•as
•查询语句
好处:使用方便,安全(看不到表的名称、结构等信息)
使用:主要用于查询,与查询表的语法一样
查看视图的代码:exec sp_helptext 视图名称
可以基于视图再创建视图
建议:不要在视图中使用order by子句
•集合的结果集被当作一个集合使用,所以是不应该有顺序的
•如果加入了top n则可以使用,这样返回的又是一个n项的无序集合,虽然看上去是有顺序的
begin try
..
end try
begin catch
...
end catch
尽量少使用,会影响结果,可以通过@@error来查看上一条语句是否发生了错误
全局变量:@@***
这些变量由系统维护,不需要我们管理,用于查看信息
@@version:查看版本信息
@@identity:查看当前的标识
@@servername:查看服务器名称
@@error:返回最后执行的一句代码的错误编号,如果没有出错返回0;如果被go中断,就不能用
@@rownumber:查看最后执行的一句代码的影响行数
事物:
锁
存储过程:
就是一个函数,用于存储一段处理代码
好处:
•完成代码的封装,实现代码重用;
•安全
•方便应用程序与数据库间通信,不用传大量sql语句过程,而只用传一个存储过程名称过来,简单方便
系统存储过程(在界面中打开看一看)
自定义存储过程
•create proc usp_test1
•参数列表
•as
•自定义代码段
调用执行:exec 存储过程名称
查看存储过程代码:exec sp_helptext 存储过程名称