SQL2005数据库笔记

技术小胖子 2017-11-16

SQL 数据库 test Create database update varchar

                                     SQL2005数据库
数据库SQL Server2005设计与应用
1.数据库:数据存放的仓库 DataBase DB
 层次模型
 网状模型
 关系模型:二维表格 sql
2.应用:
 数据库设计原理***
 得到一个数据库原形(理论)(E-R图)
3.数据库软件:数据库管理系统
 DataBase Management System (DBMS)
 
 FoxBase(dos)
 FoxPro
 MS Visual FoxPro5.0
 Access
 SQL Server***
 Oracle
 DB2
 mysql
 ...
 
4.学习SQL Server2005(程序类)
 1.安装 环境介绍
 2.数据库管理
 3.表的创建与管理
 4.其他对象(视图 索引 过程 函数)
 5.标准sql语法
 Structured Query Language 结构化查询语言
 DDL:数据定义语言
  创建 Create 
  修改 Alter
  删除 Drop  
 DML:数据操作语言
  读 Select*********
  写 Insert
  改 Update
  删 Delete
 DCL:数据控制语言
  流程控制语句:
  条件if
  选择case
  循环while
  用户权限角色管理:
   grant 授权
   deny 禁用
   revoke 收回
 6.数据库维护
  备份恢复
  导入 导出
 
 
面向过程开发程序 c语言
面向对象开发程序
数据表table
4行:记录 record   3个记录
6列:字段 field    6个字段
表结构:0条记录的表就是表结构
设计创建表的过程就是设计创建表结构的过程
数据类型:限制字段的取值范围
主键:主要字段(取值不能重复)
 
00000000000000000000000000
 
教学数据库模型
 学生表:学生编号pk/姓名/.....
 教师表:教师编号pk/姓名/.....
 课程表:课程编号pk/课程名称/课程描述/教师编号fk
 学生课程关系表:学生编号fk/课程编号fk/考试成绩

Developer Edition 开发版
Standard Edition 标准版
Enterprise Edition 企业版
Evaluation Edition 测试版
SQL Server 2005 Express Edition  简化版
Visual Studio.net2005
 VB.NET
 C++
 ASP.NET
 C#
 ADO.NET
 ...
 SQL Server 2005 Express Edition  简化版
 .netFramework公共组建类库
 
000000000000000000000000000000
 
 
print 1+2
print '张三'
f5
print getdate()

--代码该变当前数据库:
--use 数据库名称
--
--sdfgsdfgsdf
--gs
--df
--sdfhsdfh
--单行注释
/*
块注释
gd
gsdf
sdfh
dsfhsdf
*/
use master

print getdate()
--文本结果
select getdate()
--网格结果

select getdate(),1+2,'张三'
print getdate(),1+2,'张三'
use ABC
--查询info表中的所有信息
select * from info
select * from test
--sql server的命令窗口: sqlcmd
sqlcmd -U用户名 -P口令 -S服务器
0000000000000000000
--代码创建数据库语法
--1.简单格式
create database 数据库名称
create database db001

--2.完整格式
create database 数据库名称
on primary 
(
 --定义主数据文件信息
)
,
(
 --定义其他数据文件
)
log on
(
 --定义日志文件信息
)
,
(
 --定义日志文件信息
)
----
create database 数据库名称
on primary 
(
 --定义主数据文件信息
 name='定义主数据文件的逻辑名称(数据库名称_data)',
 filename='定义主数据文件的物理路径和文件名称和扩展名.mdf',
 size=定义文件大小 5mb,
 filegrowth=2 | 15%,
 maxsize=100mb | unlimited
)
,
(
 --定义其他数据文件
 name='定义其他数据文件的逻辑名称(数据库名称_data2)',
 filename='定义其他数据文件的物理路径和文件名称和扩展名.ndf',
 size=定义文件大小 5mb,
 filegrowth=2 | 15%,
 maxsize=100mb | unlimited
)
log on
(
 --定义日志文件信息
 name='定义日志文件的逻辑名称(数据库名称_log)',
 filename='定义日志文件的物理路径和文件名称和扩展名.ldf',
 size=定义文件大小 5mb,
 filegrowth=2 | 15%,
 maxsize=100mb | unlimited
)
--
create database mydb
on primary 
(
 name=mydb_data,
 filename='K:\DatabaseFile\mydb\mydb_data.mdf',
 size=4,
 filegrowth=1,
 maxsize=unlimited
)
,
(
 name=mydb_data2,
 filename='K:\DatabaseFile\mydb\mydb_data2.ndf',
 size=5,
 filegrowth=10%,
 maxsize=100mb
)
log on
(
 name='mydb_log',
 filename='K:\DatabaseFile\mydb\mydb_log.ldf', 
 size=2,
 filegrowth=2,
 maxsize=unlimited
)
 
create database [test_DB]

--修改数据库

--1)修改数据库名称
alter database 数据库名称 modify name=新名称
alter database mydb modify name=mydatabase

--2)删除其它数据文件、日志文件
alter database 数据库名称 remove file 逻辑名称
alter database mydatabase remove file mydb_data2

alter database mydatabase remove file mydb_data
alter database mydatabase remove file mydb_log
--不能从数据库中删除主数据文件或主日志文件。
--3)添加其它数据文件、日志文件
alter database 数据库名称 add [log] file
(详细定义)

alter database mydatabase add file
(
 name='mydb_data2', 
 filename='K:\DatabaseFile\mydb\mydb_data2.ndf',
 size=1,
 filegrowth=1,
 maxsize=unlimited
)

alter database mydatabase add log file
(
 name='mydb_log2',
 filename='K:\DatabaseFile\mydb\mydb_log2.ldf',
 size=2,
 filegrowth=4%,
 maxsize=100mb
)
--4)修改数据文件、日志文件的基本信息
--(不能修改各个文件的物理路径)
alter database 数据库名称  modify file 
(name=要修改的文件的逻辑名称,修改的信息)

alter database mydatabase modify file
(name=mydb_log2,size=5)
--5)修改数据文件、日志文件的逻辑名称
alter database 数据库名称  modify file 
(name=要修改的文件的逻辑名称,newname=修改后的名称)

alter database mydatabase modify file
(name=mydb_log2,newname=mydb_log22)
--删除数据库语法
drop database 数据库1,数据库2,...
drop database abc,abcd,db,db001,dddd,ganbu,hhhh

本节总结;《细心加重视》
create database  代码创建数据库语法
alter database     修改数据库语法
drop database         -删除数据库语法

create table   代码创建表语法
alter table    修改表
drop table     删除表
create view
alter view
drop view
...
00000000000000000000000000
 
--变量类型
全局变量:系统定义的变量 @@name   关键字
局部变量:用户定义的变量 @name
declare @str char
declare @str char(1)'1'表示set 后字符窜的最多值,
而不包括print的值
set @str='abc'
print @str
declare @str char(10)'10表示set 后字符窜的最多值,
而不包括print的值
set @str='abc'
print @str+'efg'
 
declare @str varchar(10)
set @str='abc'
print @str+'efg'

declare @str varchar(1)
set @str='abc'
print @str+'efg'
 
00000000000000000000000
/****** 对象:  Database [mydb]    脚本日期: 10/28/2009 15:19:56 ******/
create database [mydb] 
on  primary 

name = 'mydb_data', 
filename = 'k:\databasefile\mydb\mydb_data.mdf' , 
size = 4096kb , 
maxsize = unlimited, 
filegrowth = 1024kb 
),
 

name = 'mydb_data2', 
filename = 'k:\databasefile\mydb\mydb_data2.ndf' , 
size = 5120kb , 
maxsize = 102400kb , 
filegrowth = 10%
)
 log on 

name = 'mydb_log', 
filename = 'k:\databasefile\mydb\mydb_log.ldf' , 
size = 2048kb , 
maxsize = 2048gb , 
filegrowth = 2048kb 
)

--
----字符编码标准
--ansi :标准编码格式
--unicode :扩展编码格式
0000000000000000000000000000
char  1~8000
varchar     1~8000

--sql变量:局部变量(用户定义的变量) @name
--char 固定长度
declare @str char(10) --定义声明一个局部变量
set @str='abcd'   --设置变量的值
print @str+'efg'
--char 固定长度
declare @str char(8000) --定义声明一个局部变量
set @str='abcd'   --设置变量的值
print @str+'efg'
--char 固定长度
declare @str char(8001) --定义声明一个局部变量
set @str='abcd'   --设置变量的值                                                   
print @str+'efg'

print 1+2     --加法运算 
print '1'+'2' --字符串连接
--varchar 可变长度
declare @str varchar(10) --定义声明一个局部变量
set @str='abcd'   --设置变量的值
print @str+'efg'
--varchar 可变长度
declare @str varchar(8000) --定义声明一个局部变量
set @str='abcd'   --设置变量的值
print @str+'efg'

--varchar 可变长度
declare @str varchar(8001) --定义声明一个局部变量
set @str='abcd'   --设置变量的值
print @str+'efg'
 

--日期时间类型 datetime
declare @dt datetime
set @dt='2005-8-18'
--print @dt
select @dt

declare @dt datetime
set @dt='2005-8-18 15:34:59'
--print @dt
select @dt

declare @dt datetime
set @dt='2005 8 18'
select @dt
declare @dt datetime
set @dt='2005/8/18'
select @dt
declare @dt datetime
set @dt='2005.8.18'
select @dt

declare @dt datetime
set @dt='8.18.2005'
select @dt
declare @dt datetime
set @dt='8/18/2005'
select @dt
select getdate()   设置当前时间语法

--整数类型: 
tinyint smallint int bigint 范围依次增大
 

declare @n tinyint 
set @n=23
print @n
declare @n tinyint    --0~255
set @n=23234
print @n
declare @n int   
set @n=23234
print @n

int
declare @a int,@b int
set @a=5 
set @b=2
print @a/@b

declare @a int,@b int
set @a=5.2 
set @b=2.2
print @a/@b

--Bit 二进制位类型
declare @x bit
set @x=0
print @x
declare @x bit
set @x=1
print @x

declare @x bit
set @x=18976
print @x
--bit 0就是0,非0就是1
declare @x bit
set @x=-324
print @x
--两种状态  逻辑类型 true 1/   false 0
--boolean  表示逻辑类型

declare @ss real
set @ss=234.678676786876
print @ss
 
declare @ss real
set @ss=4678676786876
print @ss

说明:数字特别大时,执行采用科学计数法 4.67868e+012:012表示10的12次方。
declare @n numeric(5,2)
set @n=234
print @n
说明:括号5为字符窜总长,值最大38,表示字符窜长度,2表示小数部分保留位,
整数部分字符窜最长为两者作差。

declare @n numeric(5,2)
set @n=234.987
print @n

declare @n numeric(5,2)
set @n=34.987
print @n

declare @n numeric(5,2)
set @n=34.9
print @n

declare @n numeric(5,2)
set @n=934.9
print @n

declare @n numeric(5,2)
set @n=4934.9
print @n
declare @n numeric(5,2)
set @n=999.99
print @n
declare @n numeric(5,2)
set @n=999.999
print @n
declare @n numeric(38,2)
set @n=-999.99
print @n

decimal与numeric的用法一样
总结数据类型:
----
char
varchar
datetime
int
bit
real/float
decimal/numeric
money
text
varchar(max)
--字符编码标准
--ansi
char  1-8000
varchar  1-8000
text  2gb
--unicode
nchar  1-4000
nvarchar 1-4000
ntext  2gb
declare @ss nchar(5)
set @ss='abc'
print @ss+'sdfa'
 

--教学数据库模型LearnDB
 学生表student:
学生编号pk/ stu_no  200501001 char(9)
姓名/  name     varchar(20)
性别/  sex      char(2)
生日/  birthday    datetime
城市/  city     varchar(20)
电话/  tele     varchar(20)
班别/  class_type    varchar(20)
报名费用/ fee      money
 课程表course:
课程编号pk/ c_no c_001   char(5)   
课程名称/ c_name     varchar(20)
课程描述/ c_desc     varchar(200)
授课教师/ teacher     varchar(20)
 学生课程关系表relation:
学生编号fk/ stu_no     char(9)
课程编号fk/ c_no     char(5)
考试成绩/ mark     numeric(5,2)
 
create database LearnDB
on primary 
(
 name=LearnDB_data,
 filename='K:\DatabaseFile\LearnDB\LearnDB_data.mdf',
 size=5,
 filegrowth=15%,
 maxsize=unlimited
)
log on
(
 name=LearnDB_log,
 filename='K:\DatabaseFile\LearnDB\LearnDB_log.ldf',
 size=5,
 filegrowth=15%,
 maxsize=unlimited
)
--查询、添加、修改、删除语法的简单介绍
--Select 字段列表 from 表名 where 条件
--Insert into 表名(字段列表) values(对应字段结果)
--Update 表名 set 字段=结果 where 条件
--Delete from 表名 where 条件
use LearnDB
--查询
Select 字段列表 from 表名 where 条件

select name,sex,city from student
select stu_no,name,sex,birthday,city,tele,class_type,fee from student
select * from student------》打开学生表
select * from course------》打开课程表
select * from relation------》打开关系表
select * from table_1------》打开table_1表

select * from student where city='北京'
select * from student where sex='男'
select * from student where class_type='信息网络工程师'
select * from relation
select * from relation where mark<60
00000000000000000000000000000000000000000000000
--查询select
select * from student
select * from student where sex='男'
select name,sex,city,birthday from student where sex='男'
select name,sex,city,birthday from student where sex<>'男'
select name,sex,city,birthday from student where sex!='男'
--运算符号的分类
--算术运算符号
+
-
*
/
print 5/2 --整除
print 2/5 --整除
% 取余数      
print 5 % 2 
print 2 % 5   ——————————》短除式计算法
--关系运算符号
=
<> 等价写法   !=
>
<
>=等价写法  !<
<= 等价写法  !>

select * from student where fee!>3000
select * from student where fee<=3000
--逻辑运算符号
not 非 
and 与
or 或

print 1+2*3
print (1+2)*3
not and or 优先级依次降低

选中局部边表格的语法格式:
select * from student 
where sex='男' 
and city='北京' 
and class_type='信息网络工程师'
and fee<2000
列举使用逻辑符号:
select * from student  where not sex='男'
select * from student  where sex!='男'
select * from student  where sex<>'男'
 
select * from student where city='北京'
select * from student where city='上海'
--北京和上海
select * from student where city='北京' or city='上海'
 
--查询北京、上海两个地区的全部女生信息
select * from student 
where (city='北京' or city='上海') and sex='女'
--查询北京、上海两个地区的全部女生信息
select * from student 
where city='北京' and sex='女' or city='上海' and sex='女'
select * from student 
where (city='北京' and sex='女') or (city='上海' and sex='女')
 
--统计除北京地区全部女生以外的其他地区的女生信息
select * from student 
where not (city='北京' and sex='女') and sex='女'
select * from student 
where (city!='北京' or sex!='女') and sex='女'
select * from student 
where (city!='北京' and sex='女')
 
--统计除北京地区以外的其他地区的女生信息
select * from student 
where city!='北京' and sex='女'
select * from student 
where city<>'北京' and sex='女'
 
select * from student 
where not city='北京' and sex='女'
select * from student 
where sex='女' and not city='北京'

--添加语法insert
insert into 表名(字段1,字段2,...) values(值1,值2,...)

select * from student
insert into student(stu_no,name,sex,birthday,city,tele,class_type,fee) 
values('900','张力刚','男','1985-6-14','广州','675648787','java开发工程师',13500)
 
insert into student(stu_no,name,sex,birthday,city,tele,class_type,fee) 
values('9014235','高茜','女','1985-1-14','广州','675648764887','java开发工程师',13500)
select * from course
INSERT into course(c_no,c_name,c_desc,teacher) 
values('c_14','语文','asdf','张老师')

select * from relation
insert into relation(stu_no,c_no,mark) values('901','c_014',100)

--更新update
update 表名 set 字段1=结果1,字段2=结果2,...where 条件
select * from course
update course set c_desc='描述信息'
update course set c_desc=c_name+'描述信息'
update course set c_desc='《'+c_name+'》课程描述信息'
INSERT into course(c_no,c_name,c_desc,teacher) 
values('c_15','aaa','asdf','张老师')
--公式字段(计算列)
'《'+c_name+'》课程描述信息'

INSERT into course(c_no,c_name,c_desc,teacher) 
values('c_16','bbb','asddadf','张老师')
--不能修改列 "c_desc",因为它是计算列,或者是 UNION 运算符的结果。
INSERT into course(c_no,c_name,teacher) 
values('c_16','bbb','张老师')

select * from course

print getdate()---------->执行当前时间

print year(getdate())
print month(getdate())
print day(getdate())

                                
print year('1998-6-20')----------》指定时间
print month('1998-6-20')
print day('1998-6-20')
--int----------》必须是整数格式

print year(getdate()) - year('1980-6-20')
--age
year(getdate()) -year(birthday)——-——————》年龄公式代码------》
select * from student
select name,sex,birthday,city from student
select name,sex,year(getdate()) -year(birthday),city from student
select name,sex,age,city from student
year(getdate()) -year(birthday)

对比修改表代码变化:
1,
datepart(参数,日期)   --year/ month/ day
2,
(datepart(year,getdate())-datepart(year,[birthday]))
2是1的系统变化前身。举例如下;
f(x)=2x
g(x)=f(x)+56
g(x)=2x+56
更新数据库。注意更新后不能恢复原态。代码如下:
update
select * from student
update student set fee=fee-500  where sex='男'
在学生表中举例:思路:
高级网络工程师     信息网络工程师
网站设计师    6+4
影视动画设计师  6+2
Java软件工程师    6+3   java开发工程师
.Net软件工程师    c++  .net开发工程师
update student set class_type='高级网络工程师' where class_type='信息网络工程师'
update student set class_type='网站设计师' where class_type='6+4'
update student set class_type='影视动画设计师' where class_type='6+2'
update student set class_type='Java软件工程师' where class_type='6+3' or class_type='java开发工程师'
update student set class_type='.Net软件工程师' where class_type='c++' or class_type='.net开发工程师'
 
select * from student
update student
set birthday='1960-9-4',tele='3838839898',class_type='.Net软件工程师',fee=130000
where name='刘德华'
--删除delete
delete from 表名 where 条件  --删除指定表的满足条件的纪录
delete from 表名    --清空所有纪录
select * from table_1
delete from table_1
select * from course

delete from course where c_name='abcdef' or c_name='bbb'
总结四种公式
--select insert update delete
000000000000000000000000000000000000000
select * from student
select * from test
select * from course

select id,name,sex from student where id<8
identitycol 别名   
select identitycol,name,j
select * from relation where identitycol<45

--公式字段和标识列字段都不可以显式指定值
insert into course(c_no,c_name,teacher) values('c_099','aa','bb')
select * from course
 
select * from test
delete from test where id=5 or id=25 or id=35
删除表中部分标识列内容

查询标识列内容的初始值
初始值 
ident_seed('表名')
增量
ident_incr('表名')

select ident_seed('test'),ident_incr('test')
select * from test
print @@identity(显示标识列所有的值)

--
@@identity : 代表最后一次标识列插入的值
print @@identity(只显示最后一次标识列插入的值)
insert into test values('dd','dd','dd')
 

select * from student
--标识列值的重用    (例如删去了标识列为25,恢复语法如下:)
insert into test(name,sex,city,id)  values('a','aa','aa',25)
--当 IDENTITY_INSERT 设置为 OFF 时,由student表到test表进行标识列恢复时,
不能为表 'test' 中的标识列插入显式值。
 insert 
set inserty_insert  test on
set identity_insert test off
select * from student
set identity_insert student on
--表 'LearnDB.dbo.test' 的 IDENTITY_INSERT 已经为 ON。无法为表 'student' 执行 SET 操作。
set identity_insert student off

select * from student

ascii
0~9 :  48 49 ... 57
A~Z :  65 66 ... 90
a~z :  97 98 ... 122
200802040
900     

update student set name='0'+name
where id=1

PK_表名_字段名称1_字段名称2

select * from student
update student set tele=null where id=2
update student set tele=null where id=3
select * from student
where tele is null   (查询无电话的学生)
select * from student
where tele is not null(查询有电话的学生)
 

--删除relation表中的stu_no在student中不存在的纪录
————》理解条件是:一,stu_no(学生号码)在relation表中
              二,stu_no(学生号码)不在student表中

delete from relation where stu_no not in(
select stu_no from student)

--删除relation表中的c_no在course中不存在的纪录
delete from relation where c_no not in(
select c_no from course)
 

select * from course
insert into course select c_no,c_name,teacher from course where c_no='c_099'
 

select * from test
delete from test where name='dd'
删除
insert into test(name,sex,city) values('aa','aa','aa')
主键约束与唯一性约束区别如下 :
一个表上只能定义一个主键约束,但是可以定义多个唯一性约束;
定义了唯一性约束列上的数据可以为null值而且只能有一个null值,
但定义了主键约束上的列不能为null值。
00000000000000000000000000000000000
老师,@@identity的作用是,
查找最后一次插入的值。是一个全局变量,
语法格式不需要表名。即使该列已经删除,
但值依然存在。后一句如何解?
select * from test
insert into test(name,sex,city) values('xx','xx','xx')

print @@identity
delete from test where id=7
select * from student
select * from relation
update student set stu_no='199802001' where id=3
update student set stu_no='110000000' where id=2
delete from student where id=3
delete from student where id=2
update student set stu_no='199801001' where id=7

--更新层叠 <====> 级联更新
--删除层叠<====>   级联删除
select * from student
update student set sex='ab' where id=7
select * from student where sex!='男' and sex!='女'
update student set sex='男' where sex!='男' and sex!='女'

--约束性别取男或者女
sex='男' or sex='女'
--约束生日取值不能大于当前日期
birthday!>getdate()
--约束费用必须大于0
fee>0
select * from relation
--约束成绩必须在0~100
mark>=0 and mark<=100
select * from student
insert into student(stu_no,sex,city,tele,class_type,fee) 
values('902','男','深圳','6775666','Java软件工程师',12000)
--null就是一种特殊的默认值
insert into student(stu_no,sex,city,tele,class_type,fee) 
values('903','男','深圳','9885666','Java软件工程师',12000)

update student set name='abcd' where name='无名'
select * from news
insert into news(title,content) values('aaaaa','sss')
00000000000000000000000000000000000000000000000000000000
--SQL语法代码创建表
create table 表名
(
 字段名称1 定义1,
 字段名称2 定义2,
 ...
)
create table users
(
 id   int identity(1,2),
 username varchar(50),
 pwd   varchar(50),
 name  varchar(50),
 birthday datetime,
 age   as year(getdate())-year(birthday)
)

insert into users(username,pwd,name,birthday) 
values('admin','1234','管理员','1986-9-10')

insert into users(username,pwd,name,birthday) 
values('abcde','1234','操作员','1988-1-1')

select * from users
00000000000000000000000000000000
create database userDB
go
use userDB
go
create table users
(
 id   int identity(1,2),
 username varchar(50),
 pwd   varchar(50),
 name  varchar(50),
 birthday datetime,
 age   as year(getdate())-year(birthday)
)
go
insert into users(username,pwd,name,birthday) 
values('admin','1234','管理员','1986-9-10')
go
insert into users(username,pwd,name,birthday) 
values('abcde','1234','操作员','1988-1-1')
go
select * from users
go
 


     本文转自shenleigang 51CTO博客,原文链接:http://blog.51cto.com/shenleigang/138978,如需转载请自行联系原作者

登录 后评论
下一篇
云栖号资讯小编
244人浏览
2020-06-01
相关推荐
SQL 笔记 By 华仔
2823人浏览
2016-05-09 14:42:03
数据库相关知识整理
1569人浏览
2017-11-26 22:10:00
ASP.NET 实用资料[转]
2615人浏览
2017-11-26 11:32:00
SQL Server 2005笔记总结
755人浏览
2017-11-17 19:42:00
SqlDependency学习笔记
616人浏览
2009-06-14 10:23:00
SQL 2005 学习笔记
544人浏览
2017-11-11 14:51:00
SQL 2005 学习笔记
570人浏览
2017-11-16 18:03:00
T-SQL笔记4:表
502人浏览
2010-10-14 11:13:00
0
0
0
793