以sql server数据库为例的知识点(二)

以sql server数据库为例的知识点(二)

1:在创建表的过程中创建约束
主键约束 外键约束 unique约束 default约束
primary key foregin key reference 主表名(主键列名)

2:在创建表完成之后在创建约束
alter table 表名 add constraint 约束名
primary key (列名)/
foregin key(列名) references 主表(列名)/
unique(列名)/
check(逻辑表达式)/
default(缺省值) for 列名

对表的操作:插入,更新,删除
1:单条数据插入
–1)insert (into)表名(列名,列名…)values(值,值)
–2)insert (into)表名(列名,列名…)select(值,值)
2:多条数据插入
–1)
insert into 表名(TypeName)
values(‘工具类1’),(‘工具类2’),(‘工具类3’)

–2)union去重 union all 允许重复 union all效率高;
insert Test(Id,MName,Age)
select 1,‘admin’,23 union
select 2,‘zhangsan’,23 union
select 3,‘lisi’,12 union
select 4,‘wangwu’,23 union
select 5,‘minmin’,32

3:克隆数据表
–3克隆数据 将一张表的数所复制到另一张表
–1)目标表在数据库已经存在
insert into Test(MName)–目标表
select TypeName from ProductType–源表

–2)目标表之前数据库中不存在,执行操作时自动创建
select TypeNae into Test2–目标表
from ProductType–源表

use TestBase
go

–更新数据 update 几乎不会不用where条件
update testss set MName=‘xxx’,Age=20
where ID=5

–数据删除:只是删除数据,表还在; 连同表以前删除
–1)删除数据 delete from table 不加条件 ,会删除整个表数据几乎都要加where条件
–标识列 值还是接着删除之前的值而自增,而不是从初始值开始
–delete 语句会造成标识列的值不连续
delete from Test where ID=20

–如果我们想删除数据,让标识列的值恢复到初始值,标识列也恢复
truncate table test–表数据清空,恢复到初始化,标识列也恢复
–表面上看,delete from test效果一样
–trubcate效率比delete fromtest高 delete每一条数据,都会在日志里记录
–truncate不会记录日志,不激活触发器,drop truncate是即使操作,不能rollback,delete update insert事务中可以恢复

—慎用truncate 一旦删除不能恢复

–1:查询一个表所有数据 *所有列
select * from UserInfo

–选择
–2:查询部分列的数据,推荐使用
select Name from UserInfo

–3:数据库里表字段 英文名称,程序中的列名–中文
–给列名命别名
–列名 as 别名 列名 别名 别名=列名
select Id as 用户编号 , Name 用户名, 年龄=Age
from UserInfo

–排序
–主键,默认就有序功能 从小到大 升序 asc 降序desc
select * from UserInfo order by age desc

模糊查询:select UserName,Age from 表名 where UserName like…
查询:完整查询和模糊查询
like SQL提供4种匹配模式
–like SQL提供4种匹配模式
–《1》%0个或者多个
–(1)like ‘%ad%’ 包含于
select * from UserInfo where Name like ‘%张%’
–(2) like ‘%in’ 以匹配字符或字符串结尾
select * from UserInfo where Name like ‘%n’
–(3)’w%'以匹配字符或字符串开头
select * from UserInfo where Name like ‘m%’

–《2》_匹配单个字符 限制表达式的字符长度
select * from UserInfo where Name like ‘_____’

–《3》[]范围匹配 括号中所有的字符中的一个
select * from UserInfo where Name like ‘ad[m|n|d]in’
select * from UserInfo where Name like ‘ad[m-p]in’
–《4》[^]不在括号中所有字符之内的单个字符
select * from UserInfo where Name like ‘ad[^abc]in’

–1.select From where 子句 条件 --一定的范围
–1)比较运算符 > < <= >= <>
select * from userinfo where Age <30 and Id>1
–2)in(2,3,4) not in(2,3,4)
select * from UserInfo where Age in(10,20,32)
select * from UserInfo where Id in(select Id from UserInfos)
–3)between and 等价于 >= and <=
select * from userinfo where Age between 20 and 30

–2:前面有多少条,百分比
select top 10* from UserInfo
select top 100 percent * from UserInfo

1:聚合函数:对一组值执行计算并返回单一的值
经常与select语句中的group by使用

五种聚合函数:
count记录个数 sum求和 avg求平均数 max最大值 min最小值

–select count(1)伪造列
select 1 from UserInfo
select COUNT(1) from UserInfo–一般统计一个表的记录数

–sum求和 相加
select SUM (age) from UserInfo
–求平均值 avg
select AVG (age) from UserInfo
–求最大值 max
select max (age) from UserInfo
–求最小值 min
select min (age) from UserInfo

select…
where…
group by 列名,列名 结合聚合函数 根据一列或者多列对结果进行分组查询

–group by 分组
–语法:select…where group by…order by…
–统计各个部门有多少用户
–select 出现的列名,必须出现在group by 之后或者包含在聚合函数中;
select userid count(1) 用户数 from userInfo
group by id
having id>1–分组后的筛选条件
order by id desc

连接查询:根据两个表或者多个表之间的关系,从这些表中查询数据。
目的:实现多表查询。

分类:内连接 外连接 全连接 交叉连接

内连接:inner join 使用比较运算符 = > < >= <= <>进行表间的比较,查询与条件相匹配数据
等值连接
结果:想匹配的数据查询出来,如果没有匹配上,就没有结果
显示连接 :表 inner join 表 on 条件 where

隐式连接:select…from 表,表where 关联条件

外连接
外连接分类:左连接,右连接,全外连接 简称:左连接,右连接,全连接
左连接 left(outer) join on 返回左表的所有行,右表中没有匹配上,对应的列就显示null;
结果:左表:所有行 右表:行数与左表相同,没有匹配上,显示null
右连接 right(outer) join on 与左连接相反,返回的右表的所有行,左表进行匹配,左表中没有匹配上的,对应的列显示null;
–结果:右表:所有行 左表:行数与右表相同,没有匹配上的,显示null

连接:内连接,外连接(左连接,右连接,全连接),交叉连接
全连接:full (outer) join 全外连接返回左表和右表中所有的行,当某一行在另一个表中没有匹配,另一个表中返回null

交叉连接:cross join 笛卡儿积
如果不带where子句时,返回被连接的两个表的笛卡儿积,返回的行数是两个表行数的乘积。
带where子句,等价于inner join返回

convert函数:convert(类型(长度),表达式)
cast:cast(表达式 as 数据类型)

–支持 数字+数字–求和 字符串+字符串–拼接
–字符串+数字

select 1+2—求和
select ‘a’+‘b’–拼接
select ‘cbd’+CONVERT(varchar,2)–把数字转换成字符串,拼接
select convert(varchar(10),getdate(),100)–日期格式
select ‘cdb’+CAST (2 as varchar)–要转换成 的目标数据类型

字符串操作:从一个字符串里找一个子串,位置
取子串
大小写
去空格
重复n次
顺序颠倒
字符串替换

–返回字符串中指定的子串出现开始的位置
select charindex(‘bc’,‘abcdesd’)–2 索引从1开始

select PATINDEX(‘%bc%’,‘abcdfer’)

–大小写转换
select upper(‘abhnjnkm’)

select LOWER(‘ABHJNDJ’)

–取长度
select LEN(‘ABD’)
–去空格
select LTRIM(’ abdcf ‘)–去掉左边的空格
select RTRIM(’ ab accc ')–去掉右边的空格

–取子串
select LEFT(‘bdhnjsmdn’,4)–返回字符串从左边起4个字符
select RIGHT(‘shjkmmmssad’,7)–返回字符串从右边开始起6个字符
select SUBSTRING(‘dbhnjjnj’,3,4)–hnjj返回字符串从左边起第3个开始取,取4个
–字符
–将指定字符串重复4次后生成的字符串;
select replicate (‘abc’,4)–abcabcabcabc
–字符串翻转
select REVERSE(‘hjkmhdbhnsa’)–asnhbdhmkjh
–字符串替换
select REPLACE(‘abbbbbnb’,‘b’,‘m’)–ammmmmnm
–用指定子串替换指定位置长度的子串后生成的字符串
select STUFF(‘adddddkkk’,2,4,‘mm’)–ammdkkk

猜你喜欢

转载自blog.csdn.net/m0_46454966/article/details/127462687