1、配置管理器
服务--运行
服务名称(括号中的名称-实例名称)
sqlexpress
连接服务器的名称有两部分:
服务器IP或名称\实例名称
127.0.0.1\SQL2008
192.168.1.151\SQL2008
.\SQL2008
服务名称对应协议
TCP/IP--已启用
修改协议后必须重启服务
2、打开SQLServerManagementStudio
服务器名称
.\服务名称
Windows身份验证
当实例名称==MSSQLServer时,称为默认实例
服务器IP或名称
直接写.即可
管理工具高版本能适应于低版本
自带最高权限的管理员sa,sasa
MySQL
Access
表:也叫关系,实体集。存储数据的一些载体。
行:也叫记录,一行也称为一个实体。
列:也叫域、字段。
实体:实际存在的物体,事物。
实体型:实体的类型。
表名(域名类型)
学生信息表(int,char(8),性别char(1),年龄int>18)
学生信息表
性别年龄
1张三男20
2李四女21
3王五男20
成绩表
编号CHTML
115585
2270100
336570
416085
要避免数据冗余,使一个表只描述一件事情。
数据库:DatabaseDB,数据的集合
数据库管理系统:DatabaseManagementSystemDBMS管理数据库的软件包集合
数据库管理员:AdministratorDBA
数据库系统:DatabaseSystemDBS一个完整的服务器系统。由DB、DBMS、DBA、硬件
验证方式:
服务器节点-右键属性-安全性-混合方式
修改sa密码
安全性节点-登录名-sa-属性-常规、状态
Windows身份验证:把验证的工作交给操作系统去进行。能进入数据库系统唯一在其中登记的Windows用户。
1、Windows用户
2、已授权到sqlSERVER
sqlexpress:简易版,Net
mssqlserver:默认名称
SQL身份验证:验证工作由SQL服务器自己进行。要求用户必须是SQL的合法登录名。
系统数据库:
master:记录系统级的信息(数据库、表、约束、用户)
model:模板数据库,新建数据库时以它为模板。
tempdb:临时数据,临时表,每次启动服务都会重建
msdb:记录数据库的设置
创建数据库:
至少创建两个文件
主数据文件:*.mdf(1)
日志文件:*.ldf(0-n)
文件名、初始大小、增长方式、存储路径
次要数据文件:*.ndf(0-n)
数据类型:
char:采用ASCII编码的定长字符串
varchar:采用ASCII编码的不定长字符串
一个中文汉字=2个英文字符
nchar:采用Unicode编码的定长字符串
nvarchar:采用Unicode编码的不定长字符串
一个中文=1个英文字符
text:采用ASCII编码的不定长的“长”文本>=8000(4000个中文)
ntext:采用Unicode编码的不定长的“长”文本>=8000(8000个中文)
凡有var的,表示长度不固定
凡以n开头的,表示Unicode编码
整型数字
tinyint
smallint
int
bigint
浮点型数字
real:单精度
float:双精度
日期时间:Datetime,精确到毫秒
yyyy-MM-ddhh:mm:ss
yyyy/MM/ddhh:mm:ss
yyyy.MM.ddhh:mm:ss
货币:Money
bit:值只有true\false
在数据表界面输入时使用true\false
使用SQL语句查询或增删改时,只能用1、0
实体完整性:针对行的要求,要求每一行都是唯一并且相互区别
措施:主键约束、唯一约束、标识列
主键:能够唯一地标识一个实体(行)的列,主键列一定是唯一的,而且不能为NULL
主键列能够决定其他所有列,其他所有列依赖于主键。
主键=唯一+非空
一个表只能有一个主键
多列共同充当主键
选择主键的原则:
1、最少
2、稳定
3、数字比字符串要好
标识列:类型是int,不能人为去改变,由数据库管理系统本身维护。
标识种子:起始值
标识增量:每次增加的量
标识列一个表中只能有一个
约束:规定用户输入的数据的有效性
非空约束:NotNull
唯一约束:施加的列值不能重复,经常用于非主键列
Check约束:在进行增、改时会检查设定的表达式,如果表达式为真,则允许,否则拒绝。
算术运算符:+-*/%(一样)
逻辑运算符:&;&;||!(andornot)
关系运算符:><>=<===!=
(前四个相同,后两个=<>)
写Check表达式时,应该把列名当成变量名
赋值运算符:=(相同)
age>=18andage<=25
sex='男'orsex='女'
前缀_表名_列名
CK_StudentInfo_StuNo
主键约束:primarykeyPK
唯一约束:UniqueUQ唯一索引IndexIX
默认约束:DefaultDF
检查约束:CheckCK
外键约束:foreignkeyFK
通配符:
%:0-n个任意字符
_:1个任意字符
^:不在指定范围之内,必须和[]配合
[]:表示指定范围之内的一个字符
StuNamelike'刘%'
StuNamelike'刘__'
1、使用了通配符,就一定要使用like
2、只有字符串类型的列才能使用通配符
StuSexlike'[男,女]'
StuNolike'[0-9][0-9][0-9][0-9][0-9]'
Emaillike'%@%.%'
域完整性:针对列
数据类型、Check约束、默认约束、非空约束
引用完整性:针对多个表之间的关系
主表:提供数据给别人去引用,被别人引用
外表(子表):本身数据是来源于主表的,参照主表
多个表的引用关系:通过外键约束
外表中的相关列引用主表中被引用列
外键一定存在于外表中
增:应该先增主表,再增加外表
改:先改外表,再改主表
删:先删外表中的数据,再删主表中的数据
更新、删除规则:层叠
在更新、删除主表数据的时候,外表的引用的数据也会同步更新、删除。
课堂练习:
学生信息表(,,年龄,性别)
科目信息表(科目编号,科目名称,任课教员)
成绩表(,科目编号,成绩)
sex='男'orsex='女'
==
sexin('男','女')
age>=18andage<=25
==
agebetween18and25(只限于age为数字)
bloodTypein('A','B','AB','O')
len(LoginPwd)>=6//仅能使用在字符串类型
SQL:StructuredQueryLanguage结构化查询语言
T-SQL:Transact事务
DML:数据操纵语言(selectupdatedeleteinsert)
DCL:数据控制语言grantrevoke
DDL:数据定义语言createdropalter
变量声明、赋值、流程控制
函数
SQL大小写无关。
update表名set列1名=值1,列2名=值2,...
where表达式
deletefrom表名
where表达式
截断:删除整个表的数据
truncatetable表名
truncate和deletefrom的区别:
1、truncate只能删除整个表的数据,而deletefrom可以选择性地删除
2、truncate没有记录到日志,所以不可恢复,并且性能较高
3、truncate不能删除主表中的数据,即使主表的数据没有被引用,deletefrom能删除没有被引用的数据
4、truncate会使标识列的值恢复到种子值,deletefrom不会
insertinto表名(列1,列2,...)
values(值1,值2,...)
注意:
1、列名列表有几个列,值列表就必须有几个值,而且类型、顺序都要一致
2、当列名列表数目等于表中所有列时,可以省略列名列表
3、插入的数据要符合表中列的数据类型和各种约束
ScodeSnameSaddressSgradeSemailSex
如果语句中涉及的表名、列名是关键字,必须加[]
列类型如果是字符串类型或日期时间类型,而且日期时间是一个常量,必须加单引号;如果日期时间是由函数计算而出,不必加单引号。
以上语句一次只能插入一条记录
一次插入多条记录:
insertinto表名[(列1,列2,...)]
select值1,值2,...union
select值1,值2,...union
select值1,值2,...union
select值1,值2,...
和插入单条记录的区别:
1、default不能使用在插入多行的情况
2、没有values,改成select语句
select列1,列2,...
from表名
where条件表达式
orderby列1asc|desc,列2asc|desc...
asc:升序
desc:降序
排序默认为升序,写不写asc都一样
执行机制:
1、from
2、where
3、orderby
4、select
引用某个列,
表名.列名
当表没有重新命名时,可以使用原表名,也可以省略;如果重新命名了,只能用新名称去引用列名
列的重命名:
1、原列名as'新列名'
2、原列名'新列名'
3、'新列名'=原列名
当要给某个单元格设置空值时,应手动输入NULL,而不是删掉
常量列用于显示额外的某个附加列,而且该列数据都是相同的
取前多少行记录
selecttopN列1,列2from...
取前百分之多少行记录
selecttopNpercent列1,列2from...
联合查询Union:多个查询结果并集
1、列的数目要一致
2、列的类型要兼容
msdn:microsoftdevelopernetwork
帮助文档
输出语句:
select输出临时表结构的窗格
print输出文本结构
例:
selectgetdate()
printlen('ABC')
字符串函数
intcharindex(要查找的串,原始字符串[,起始位置]):查找某一个串在原始字符串中的位置(从指定位置开始查找,省略时为1),找不到时返回0
intlen(字符串):计算字符串长度
字符串lower(字符串):转换为小写
字符串upper(字符串):转换为大写
字符串ltrim(字符串):去左边空格
字符串rtrim(字符串):去右边空格
字符串left(字符串,截取长度):从左边截取指定数量的字符串
字符串right(字符串,截取长度):从右边截取指定数量的字符串
字符串substring(原始字符串,起始位置,截取长度):从指定位置开始,截取指定数量的字符串
字符串replace(原始串,查找的内容,要替换成的新内容):查找替换
字符串stuff(原始串,起始位置,长度,要塞入的新内容):从指定位置开始“挖”出指定长度的字符串,并塞进去新的字符串
yyyy-MM-ddhh:mm:ssms
日期部分缩写
yearyy,yyyy
quarterqq,q
monthmm,m
dayofyeardy,y
daydd,d
weekwk,ww
weekdaydw,w
hourhh
minutemi,n
secondss,s
millisecondms
日期时间函数
datetimegetdate():获取系统时间
datetimedateadd(日期时间部分代号,数值,原日期):在原日期上的某一部分加上特定值,返回新的日期时间
intdatediff(日期时间部分代号,日期一,日期二):计算日期二-日期一在某一部分的差
字符串datename(日期时间部分代号,日期):返回指定日期在某一部分的名称
intdatepart(日期时间部分代号,日期):返回指定日期在某一部分的数值
数学函数
intabs(数值):计算绝对值
intfloor()
intceiling()
floatround(数值,精度):四舍五入
floatpower(底数,指数):幂运算
floatrand():计算[0,1)的随机浮点数
floatsqrt(数值):计算平方根
intsign(数值):返回符号,正数为1,负数为-1,0为0
系统函数
不确定类型convert(要转换的目标类型,原数值):把原数值转换到目标类型
current_user:当前用户身份(用户组)
system_user:当前用户名称
intdatalength(数值或字符串):计算字节数
user_name(序号):获取指定序号的组别名称
select*into新表名from原表名
新表名必须不能事先存在,会自动创建
insertinto新表名select...from原表名
新表名必须事先建立好,而且列的类型和原表中的列要兼容
聚合函数:(5个)
sum:返回表达式中所有数值的总和
(只能用于数字型)
avg:返回平均值(只能用于数字型)
max:返回最大值
min:返回最小值
count:count(*)统计总行数,count(列名)统计相应列的非空值个数
select列1,列2,...
from表名
where条件
groupby列1,列2,...[having条件]
orderby列1asc|desc,列2asc|desc...
注意:
1、select语句包含聚合函数(只得到一个值),不能再包含其他列,如果一定要包含其他列,其他列就必须作为被分组列
2、具备groupby子句的查询,select后的列名只能是作为被分组的列,或者是聚合函数
where和having的异同点:
相同:都是筛选符合条件的记录
不同:
1、执行时机不同,where是在一开始就马上筛选掉不符合条件的记录,而having是等到分组后把不符合条件的组去掉
2、面向对象不同,where筛选的目标是整个表,而having的目标是分组后的各个组
3、where中不允许使用聚合函数,而having可以使用分组列或聚合函数
表连接:当数据来源于多个表
表连接的方式:
1、内连接
2、外连接:左外连接和右外连接
3、交叉连接(忽略,无意义)
表连接的条件:依靠主外键关系
内连接:获取两表的共同数据
1、
select列1,列2,...
from表1,表2,...
where表1.列名=表2.列名and其他筛选条件
2、
select列1,列2,...
from表1[inner]join表2on表1.列名=表2.列名
[inner]join表3on表2.列名=表3.列名
where其他筛选条件
外连接:查询的结果包含其中一张表的所有数据,而另外一张表没有匹配的共同数据时,以NULL值代替。
左外连接:包含左表中的所有数据,右表的不匹配数据以NULL代替。
右外连接:包含右表中的所有数据,左表的不匹配数据以NULL代替。
左外连接:
select列1,列2,...
from表1left[outer]join表2on表1.列名=表2.列名
where其他筛选条件
给新表增加标识列的办法:
identity(类型,种子,增量)as新列名