数据库约束
数据库的约束是为了保证数据的完整性而实现的一套机制
- 非空约束.设计,勾选null 完成.代码方式:
alter tabletable_name akter column_name(type) not null - 唯一约束:唯一,允许为空,但是只能出现1次.设计-右键-添加键/索引 表示名称UQ_table_name_column_name 索引类型设置为唯一键.代码方式: alter table_name add constraint UQ_table_name_column_name unique(column_name)
- 主键约束:唯一,不能为空.设计_右键设置主键.标识是.代码方式:alter table table_name add constraint FK_table_name_column_name primary key(column_name)
- 默认约束:列拥有默认值,但为空时,使用默认值取代空.设计-列属性-默认值.代码方式:alter table table_name add constraint DF_table_name column_name defaultv(value) for column_name
- 检查约束:限制范围以及格式.设计-右键-check约束,设置表达式.代码方式:alter table table_name add constraint CK_table_name_column_name check(表达式)
- 外键约束:设计-右键-关系.填写表和列规范,如果设置级联更新和级联删除.则会真正的关联起来
代码方式:alter table table_name add constraint FK-table_name_column_name foreign key()–外键表主键 references department(列名)–主键表主键
给表中列起别名
第一种方式
关键字:as ”
select column_name1 as 'new column_name1',column_name2 as 'new column_name2' from table_name
第二种方式
关键字:as
select column_name1 as new column_name1,column_name2 as new column_name2 from table_name
第三种方式
关键字:=
select column_name1 = new column_name1,column_name2 = new column_name2 from table_name
select 100+90 在结果框显示190
print 100+90 在消息框显示190
select getdate() 获取当前时间
关键字:top num
查询前几条数据
select top 10 * from table_name order by column_name
查询百分比的数据
关键字:percent
select top 10 percent from table_name order by…
不遵从四舍五入方式,比如2.4,返回3列
order by column_name
按照某一列排序 默认从小到大.desc 从大到小
DISTINCT
去除重复数据
select DISTINCT column_name from table_name
对结果集进行数据处理
sql聚合函数
count
select count(*) from table_name
查询表内数量的总数
Max
select Max(TsMath) from table_name
min
select min(TsMath) from table_name
查询数学成绩最差
Sum
select sum(TsMath) from table_name
查询数学成绩的总和
avg
select avg(TsMath) from table_name
平均值
组合
select avg(column_name),sum(column_name) from table_name
请注意,如果值为null,则不参与运算,统计行的时候也不参与 null不参与聚合函数运算
count(*)null也会算一行 count(column_name1)则不会计算count
**建议不使用
select * from table_name
而使用具体的列
select column_name,column_name1 from table_name
这样子相对速度回快很多
between and
select * from student where table_name between 20 and 30
这块是包含20和30的,优先使用between and 微软已经做过优化,效率会更高
in
select * from table_name where column_name in (value1,value2)
表内值为value1或者value2
模糊查询
(针对字符串使用)–正则表达式
模糊查询关键字:like
查询的是已value开头的,后面出现任意字符 %
select * from table_name like 'value%'
查询的是已value开头的,后面出现一个字符_
select * from table_name like 'value_'
查询的是已value开头的,后面出现两个字符__
select * from table_name like 'value__'
查询长度len(column_name)
查询已value开头的名字后面有字母的[a-z]
select * from table_name where column_name like 'value[a-z]%'
查询已value开头的名字后面是任意个%[%]
select * from table_name where column_name like 'value[%]%'
查询已value开头的名字后面有数字的 三个字符
select * from table_name where column_name like 'value[0-9]_'
查询已value开头的名字后面有非数字的 三个字符
select * from table_name where column_name like 'value[^0-9]_'
**数据库null意思为不知道,而不是没有
select null+1 结果为null**
is null
查询没有值的列
select * from table_name where column_name is null
not null
查询有值的列
select * from table_name where column_name is not null
order by column_name
排序
优先根据列1排序,列1数据相同的情况下根据列2排序
select * from table_name order by column_name,column_name1
根据列1+列2总和排序
SELECT * FRom table_name order by (column_name1+column_name2)
游标的概念:order by以后返回的数据集合称为游标
group by
题目-从学生表中查询出每个班班级id和班级人数
select clsssId,count(*) from table_name group by classId
Having 是在分组后再进行筛选
select clsssId,count(*) from table_name group by classId
having count(*)>3
普通的条件放在group by前,在进行筛选 having 放在最 后
练习:热销商品排名
select 商品名称,销售数量=sum(销售数量)
from table_name group by 商品名称 order by sum(销售数量) desc
sql中的类型转换
cast(expression as data_type)
convert (data_type,express[style])
cast
select '当前时间' +cast(getdate() as varchar(20))
将时间格式转换为字符串格式
convert
select '当前时间' +convert(varchar(50),getdate(),第三个参数)
这边第三个参数是时间特有的.可以不填,填上是为了限制时间格式
isnull
案例
select isnull (convert(varchar(10),tsEnglish),'缺考') from table_name
如果为null则显示为缺考,如果不为null则正常显示