SQL 笔记

SQL Server 的三大功能
 一.企业管理器
 二.查询分析器
 三.联机丛书
SQL Server 是关系型数据库
字段类型:
 char(字符型,字节长度不可变)  varchar(字符型,字节长度可自动增加) 
1.创建数据库
格式:
create database 数据库名

on (name='逻辑名',filename='物理名',size=初始存储大小,maxsize=最大存储大小,filegrowth=每次可增加的大小)

log on (name='逻辑名',filename='物理名',size=初始存储大小,maxsize=最大存储大小,filegrowth=每次可增加的大小)

定义两种文件一是数据类型的文件二是日志类型的文件,
它们都有两个名字一个是逻辑上的名字(name) 数据类型的以"_dat“或”.dat”为后缀名日志类型的以“_log”或“.log”为后缀名,
一个是物理上的名字(filename)数据类型的以.mdf为后缀名日志类型的以.ldf为后缀名
eg:
create database mytest
on (name = 'mytest_dat' ,filename = 'd:\mytest.mdf', size = 10 ,
maxsize = 100 ,filegrowth = 5)


log on (name = 'mytest_log' , filename = 'd:\mytest.ldf', size = 10 ,
maxsize = 100 ,filegrowth = 5)  (注:filegrowth = 5意思是文件大小超过这里设置的10兆时它就每次增长5兆)

2.删除数据库
drop database 数据库名
 eg : drop database mytest

3.创建表
use 数据库名
create table 表名(字段名 字段类型 约束,字段名 字段类型 约束,字段名 字段类型 约束,……)
eg:
 use mytest
 create table testtable(
 tid int identity(1,1) primary key,
 lname varchar(50),
 lage tinyint,
 lsex char(2),  (注:2是字节长度)
 lphone varchar(50),
 ladder varchar(1000)
 )
(注:identity(1,1)意思是自增,从1开始每次加1)
4.删除表
drop table 表名
eg:drop table testtable

truncate table 表名 (注:不会写日志,不能恢复,速度快,一般用于删除大量的数据)

5.修改数据类型
 alter table 表名 alter column  字段名 字段类型
 eg:
 alter table testtable alter COLUMN lsex char(2)

6.添加数据
 insert into 表名(字段名……) values('字段值','字段值',.......) 
 insert 规定不可以同时插入来自于多个基表的字段
 对所有字段插入数据时可以省略字段名:
 insert into testtable values('黄三',12,'男','123456','中国')

7.查看表结构
 sp_columns 表名 
 sp_columns testtable
 

8.文件类型
 mdf(数据类型) ,ldf(日志文件),ndf (次数据文件)
9.书写
 所有标点符号必须用英文写法书写,字符串类型用单引号括起来
10.写注释:用 --
作业:
 创建一个数据库(linkbook)
 创建一张表

11.用VB连接SQL server
第1步:在工程中----点击引用  ----》选上 microsoft ActiveX Data Objects 2.5 Library (ADO 对象)
第2步:工程----》部件-----》选中microsoft  ADO Data control 6.0 (sp6) (OLEDB)----》确定
------》拖拉ADODC控件---》配置ADODC中的connectionstring属性或选中拖拉出的控件再按鼠标右键在点击ADODC属性-----》点击"生成"按钮---》选中Microsoft OLE DB Simple for SQL Server ---->点击下一步---》刷新前输入一个点“.”---》输入用户名和密码---》选择数据库---》测试连接---》确定----》在”生成“按钮前复制生成路径

第3步:定义connection对象和recordset 对象

第4步:分别给connection对象和recordset 对象赋值

12.实体的完整性
  主键 primary key (唯一且不能为空) 
 唯一约束 unique(唯一且只能有一行为空)
 自动编号 identity(start,added)
13.域完整性
 非空约束 not null
 检查约束 check 
 默认约束 default

14.查看表的约束
 sp_helpconstraint 表

15.引用完整性
 外键约束  foreign key (前提:主表中外键关联的字段必须是主键或唯一约束的) 
 
 在默认的情况下,如果两表之间发生了外键引用,两个表与外键关联的字段都不能更新,先删除引用表的数据才可以删除主表的数据
 
 级联更新 on update cascade
 级联删除 on delete cascade

作业:
 1.新建学生表
 字段:stuid   stuname stusex   stuage  grade  class  studpart  fromcity
 
 2.自定义完整性

一个汉字占系统的两个字节长度,一个英文占系统的一个字节长度,一个字节占八个二进制位


16.交叉查询
 cross join  
 eg:select toys.vtoyname,category.ccategory from toys cross join category
 另一种写法:select toys.vtoyname,category.ccategory from toys,category
 得到数据的行数是两表的数据的乘积    查出来的数据也叫“笛卡尔集”

17.外连接查询
 1.左外连接
  left outer join
  select toys.vtoyname,category.cCategory from toys left outer join category
  on toys.cCategoryid = category.cCategoryid
 (备注:左外连接是以left左边的表为主,在left左边的表会显示所有字段的值在left右边的表所显示的会与左表对应,如没有对应的则显示为null,得到数据的行数是两表相匹配的数据加上left左边的表没有匹配到的数据)
 2.右外连接
  right outer join    
  select toys.vtoyname,category.cCategory from toys right outer join category
  on toys.cCategoryid = category.cCategoryid
 (备注:右外连接是以right右边的表为主,右表会显示所有字段的值,左表所显示的会与右表对应,如没有对应的则显示为null得到数据的行数两表相匹配的数据加上right右边的表没有匹配到的数据)
 3.全外连接
  full  outer join     得到的数据行数为两表相匹配的数据和两表剩下没有的没有匹配到的数据的和
  eg: select toys.vtoyname,category.cCategory from toys full outer join category
  on toys.cCategoryid = category.cCategoryid
作业:
 用一条语句查询 玩具id,玩具名,品牌号 ,类别
select toybrand.cbrandid 玩具号
,toys.vtoyname 玩具名称
,toybrand.cbrandname 玩具品牌
from toybrand inner join toys
on toys.cBrandid = toybrand.cBrandid

18.内连接查询
 把相对应的数据全部查出来,没有对应的数据则不显示     得到数据的行数为它们的“交集”
 inner join  
 eg:select shoppingcart.cCartid 购物车号,toys.vtoyname 玩具名称
 from  shoppingcart inner join toys
 on shoppingcart.ctoyid = toys.ctoyid
 简写例子eg:select s.cCartid 购物车号,t.vtoyname 玩具名称
  from  shoppingcart s inner join toys t
  on s.ctoyid = t.ctoyid
  where s.cCartid < 7

19.自连接查询
  eg:select t1.* from toys t1 inner join toys t2  
 on t1.vtoyname = t2.vtoyname
 where t1.ctoyid <> t2.ctoyid 
作业:查询玩具名称、玩具品牌、玩具类型三个字段
 --方法一(三个表的内连接写法)
 select toys.vtoyname 玩具名称,toybrand.cbrandname 玩具品牌,category.ccategory 玩具类型
 from toys inner join toybrand
 on toys.cbrandid = toybrand.cbrandid
 inner join category
 on toys.cCategoryid = category.cCategoryid
 --方法二
 select toys.vtoyname 玩具名称,toybrand.cbrandname 玩具品牌,category.ccategory 玩具类型
 from toys,toybrand,category
 where toys.cbrandid = toybrand.cbrandid and toys.cCategoryid =category.cCategoryid
20.子查询
 当一个查询是另一个查询的条件时,称之为子查询。   
 子查询可以使用几个简单命令构造功能强大的复合命令。   
 子查询最常用于SELECT-SQL命令的WHERE子句中。   
 子查询是一个 SELECT 语句,它嵌套在一个 SELECT、SELECT...INTO 语句、INSERT...INTO 语句、DELETE 语句、或 UPDATE 语句或嵌套在另一子查询中。

 子查询就是次要查询,它返回的结果数据被用于主查询的条件中。它返回的结果可以是一行或多行。
 1.比较测试

 符号:= 、< 、 > 、<>
 限定字句的返回值只能有一个
 ---查询购物车号为000003号所购买的玩具
 select vtoyname from toys where ctoyid = (
 select ctoyid from shoppingcart where cCartid = '000003')

  2.集成员测试 in (在什么范围内),或 not in ( 不再什么范围内)

 ---查询购物车号为000001号所购买的玩具
 select vtoyname from toys where ctoyid in (
 select ctoyid from shoppingcart where cCartid = '000001')
 用子查询查找 玩具名称,玩具品牌两个字段的值
  3.存在性测试
 exists  和 not exists   
 select cbrandname from toybrand  ----存在性查询
 where exists
 (select * from toys where vtoyname = '米老鼠')

 select cbrandname from toybrand  ----存在性查询
 where not exists
 (select * from toys where vtoyname = '2343')
 4.批量测试
 any  和  all    
 查询大于toys表中前三个价格中的任意一个的数据
 select * from toys where mtoyrate > any (select top 3 mtoyrate from toys)
 查询大于toys表中前三个价格中的最大值的数据
 select * from toys where mtoyrate > all (select top 3 mtoyrate from toys)
21.视图

视图的作用
 * 简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。
 那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。  
  * 安全性。通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到。
 数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上
--创建视图
 eg:create view toyview as
 select toys.ctoyid
 ,toys.vtoyname
 ,toybrand.cbrandid as toybrand_cbrandid
 ,toys.cbrandid as toy_cbrandid
 ,toybrand.cbrandname
 ,toys.mtoyrate
 ,toys.silowerage
 ,toys.siupperage from toys inner join toybrand
 on toys.cbrandid = toybrand.cbrandid
 insert 不可以同时插入来自于多个基表的字段
--查看视图数据
 select * from toyview
 
--更新视图
 alter view toyview as
 select toys.ctoyid
 ,toys.vtoyname
 ,toys.cbrandid as toy_cbrandid
 ,toybrand.cbrandname
 ,toys.mtoyrate
 ,toys.silowerage
 ,toys.siupperage from toys inner join toybrand
 on toys.cbrandid = toybrand.cbrandid


 总结:1.视图存储的是SQL语句 2.视图除了可以在其基表中创建,还可以在视图中创建视图
 3.视图不是实实在在的表是一种查看数据的方式是虚拟表
 4.表和视图都可以更新,但是视图的更新受到约束
22.索引
 一.聚集索引
  1.聚集索引是为了提高查询速度
  2.聚集索引和数据页一起存放
  3.一个表只能有一个聚集索引
  4.聚集索引会重新排列表的存放顺序
  5.聚集索引通常在主键
  6.会带来一定的性能消耗,在增,删,查,改时都会
 二.非聚集索引
  1.表可以建立多个非聚集索引
  2.非聚集索引存放在索引页
  3.非聚集索引效率不及聚集索引
  4.非聚集索引不会进行排表
--建立聚集索引
 创建 聚集索引 索引名 on 表(应用索引的列)
 create clustered index toy_count on toys(ctoyid)
--建立非聚集索引
 create nonclustered index toy_count on toys(ctoyid)

实体:entity(就是数据表的一行)一张表就是一个实体集
关系:relationship
属性:(就是表中的列)

23.范式
 第一范式.列无重复值
 第二范式.尽量避免联合主键的使用
 第三范式.每一个属性必须与主键有直接关联
24.批量处理
 --1.定义变量
  declare @str varchar(32)
 --2.变量赋值的两种方式
 --3.如何打印
 --4.go关键字是sql server 中的特定关键字,表示立即执行,也表示代码段的分隔
25.查询关键字
 top 关键字  (用于查询前几行数据 )
 top  n  percent  关键字 (用于查询前百分之n行数据)
 between  a   and   b  (注:在a和b之间) 
 not between a and b  (注:不在a和b之间)
 distinct   关键字  用于限制重复数据
 --查询姓名不重复的数据
 eg:    select  distinct   vtoyname from toys 

 order by (用于排序,默认时是升序)
 asc(升序)
 desc(降序)
 eg: select  vtoyname from toys  order by toyid  (默认升序)
  select  vtoyname from toys  order by toyid asc  (升序)
  select  vtoyname from toys  order by toyid desc  (降序) 
26.通配符
%    (代表零个或更多字符的任意字符串。)
_       (代表任何单个字符。)
[] (指定范围(例如 [a-f])或集合(例如 [abcdef])内的任何单个字符。)
[^] (不在指定范围(例如 [^a - f])或集合(例如 [^abcdef])内的任何单个字符。)
eg:
LIKE 'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。

LIKE '%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。

LIKE '%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。

LIKE '_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。

LIKE '[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。

LIKE '[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。

LIKE 'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如 MacFeather)。

--显示玩具中有“娃娃”字样的所有玩具的资料。
select * from toys where vtoyname like '%娃娃%'


26.存储过程一
 作用: 
 1.减少网络传输
 2.预先编译
 3.多参数返回
 4.组件式编程  复用性高
 
 创建存储过程
  create procedure 存储过程名
  参数列表(有入参和出参)
  as
  begin
   SQL语句
  end
 
 procedure 关键字 可以缩写为proc
输出参数与返回代码的异同

 1.都是返回值,但接收方式不一样
 2.输出参数可以有多个,返回代码只有一个
 3.输出参数可以是多种数据类型 ,但返回代码只能是数字类型且默认为0

27.存储过程二
 2.嵌套存储过程
 
28.触发器
 可以触发触发器的条件有三个 (插入数据 或 更新数据 或 删除数据) 当在某个表发生这三个事件的中一个时都可触发
 
 触发器只能在表中进行创建

 --创建 触发器 名叫 trg_isttoys    
 create trigger trg_isttoys    
 --建在 toys 表中
 on toys
 --触发条件是 插入数据时
 after insert as
 --打印提示语句
 print '你新增了一个玩具'

 sp_helptrigger toys  --查看toys表中的触发器

29.游标
 1.定义游标 
  declare cur_toy cursor for  
  select ctoyid,vtoyname from toys
 2.打开游标
  open cur_toy
 3.使用游标
  fetch next from cur_toy
 4.关闭游标
  close cur_toy
 5.释放游标
  deallocate cur_toy

 游标就像一个记录集

 理论讲解4种游标类型
 1.静态游标,游标打开后,如果有对源基表进行修改,则不反应到该游标中。
 2.动态游标 对原基表的数据操作会反应到游标中
 3.只进游标 就是游标只能前进 默认为动态游标的方式检测数据变化
 4.键值游标 就是对基表主键修改不可见,其他字段修改可以检测到变化,但插入新纪录无法看到,删除记录会引起游标使用
 错误  这时  @@FETCH_STATUS=-2

30.事务
 事务是一个不可分割的逻辑工作单元,单元中包含一批操作,要么都执行,要么都不执行
 作用:事务可以设计多个程序操作必须全部执行成功,否则恢复到未执行任何操作之前的状态

 1.显示事务
  用户通过SQL事务语句而定义的事务
 2.自动提交事务
  是一种自动提交自动回滚的事务
  单句的(添加,更新,删除)语句叫自动事务提交 
 3.隐式事务
  是指当前事务提交或回滚后,SQL Server 自动开始的事务
 4.分布式事务

 

 
 

 


  
 

本文出自 “IT一族” 博客,转载请与作者联系!

你可能感兴趣的:(数据库,database,create,休闲,企业管理)