微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLSERVER 学习笔记一 SQL基础 分组 限制结果集范围 抑制重复数据

Catalaog 分类:又叫DataBase TableSpace,不同类的数据应该放在不同的数据库中。

Table :书放在书架 碗放碗橱 不同类型的资料放在不同的格子里

列 Column ,字段 Field :一个意思 某一列

主键Primary Key :数据行的唯一标识,不会重复的列才能当主键。一个表可以不设主键,但会难以处理。

主键选用策略:业务主键:使用有业务意义的字段做主键,如身份证、银行卡号。 逻辑主键:使用没有任何业务意义的字段做主键,完全给程序看的,业务人员不会看的数据。

业务字段可能升位,身份证号码有人重复,因此推荐用逻辑主键。

标间关联,外键ForeignKey: 同过一个唯一的字段来关联两个表。

上面的写法不好,当厂家地址发生变化时,要更改大量的数据。因此用下面的两个表通过厂家编号进行关联的写法比较好。缺点是查询某个商品厂址时需要两条语句。




常用数据类型:

bit 可选值 0 1

datetime 时间

int 32位 bigint 64

varchar(50) 不含中文信息 50字节   varchar(MAX)时可以保存很长的文本

nvarchar() 可以包含中文 日文等信息 

varchar(50) 和 char(50)的区别: nvarchar 不足的部分不写,char会用空格补齐 

var = variable 可变

numeric(a,b)函数有两个参数,前面一个为总的位数,后面一个参数是小数点后的位数,例如numeric(5,2)是总位数为5,小数点后为2位的数, 也就是说这个字段的整数位最大是3位

sql语句入门

字符串用单引号

sql语句大小写不敏感 但数据时大小写敏感的

执行sql语句 表上 右键 新建查询 输入语句 执行

sql主要分成两种 

DDL(数据定义语句: Create Table ,Drop Table,Alter Table

DML(数据操作语句): Select  , Insert  ,Update , Delete

创建表

可以右键 新建表

也可以在新建查询中 使用 sql语句

 create table Person(Id int NOT NULL,Name nvarchar(50),Age int NOT NULL);

删除表 drop table Person;

大部分数据类型都可以设为主键,但是实际上一般只使用 int(bigint)+标识列(又称自动增长序列),uniqueidentifier 

GUID算法是一种可以产生唯一标识的高效算法,每次产生的GUID都不会重复。(数据类型 uniqueidentifier )

sqlSERVER中 newid()

select newid()

.NET

Guid id = Guid.NewGuid();

int 自增字段的优点:占用空间小,无需开发人员干预,易读;缺点 效率低 数据导入导出痛苦

GUID优点:效率高,数据导入导出方便。缺点:占用空间大,不易读。

业界主流倾向于Guid

插入数据

主键 自增长int型 (ID字段不用写)

insert into Person3(Name,Age) Values(‘lily’,30);

insert into Person3 Values (‘lily’,30); //可以省略字段名 但不要使用

主键 GUIDuniquedentifier)型 (ID字段要写)

insert into Person4(Id,Name,Age) Values(newid(),’Lily’,30);

GUID做主键时 显示顺序和插入顺序不一致。可以给主键认值newid() 但很少这么做

更新 update

update Person1 set Age=30; //所有的年龄都设置为30

update Person1 set Age=50,Name=’lucy’; //所有的年龄都设置为50 所有的名字都设置为lucy

update Person1 set Age=Age+1;

带条件的

update Person1 set NickName=N’青年人’ where Age>=30; //如果有中文字符串,前面加N

update Person1 set NickNAME=N’二十岁’ where Age=20; //等于判断是不等!= 或者 <>

带复合条件的 or and 

update Person1 set NickName=N’二三十岁’ where Age=20 or Age=30;

删除数据

delete from person_3 清空整个表

elete from person_3 where name='lily'

检索数据

create table T_Employ(FNumber VARCHAR(20),FName varcharFAge INT,

FSalary NUMERIC(10primary keyFNumber))

insert into FNameFAgeFSalary) values('DEV001''tom'8300)

'DEV002''jerry'2300.80'SALE001''jonh'5000'SALE002''kerry''SALE003''stone'1200'HR001''jane''HR002''tina''IT001''smith');

'IT002'2800)

  

select * T_Employ //显示所有字段

select  //查询FName FAge两个字段

T_Employ <5000 // 有过滤条件的显示所有字段

<5000; // 有过滤条件地显示两个字段

as 姓名年龄月薪  设置别名

select @@VERSION 版本+NEWID() 编号GETDATE日期 select 语句可以和表无关。 还可以设置别名

+10000  显示时能够计算,如月薪加10000


聚合函数

COUNT(*) ;显示有多少条记录

MAX最高工资 ;

min最低工资 avg平均工资 SUM工资和 FSalary >=5000;


排序 认是升序 但是最好写上

order by ASC; //按年龄升序排序

DESC按工资降序排序

先按照年龄进行升序排序如果年龄相同按工资进行降序排序  越靠前越优先

应该放在where后面

*<25 

通配符过滤

单字符通配 _ 匹配单个出现的字符

SELECT FName like '_erry';所有类似_erry

多字符通配 % 任意次数 0 或多个

FROM '%n%'所有带n

FNumber 'DEV%';

空值处理

NULL 代表不知道 不是表示没有 几乎所有NULL参与的运算结构都是NULL

null+1返回NULL

SELECT 'ABC'+'123';//ABC123

''//123

NULL+;/NULL

下面两条都不会输出语句 错误的!

WHERE =NULL;  

<>NULL;

显示FName为null  不为null 的 语句

IS NULL;

NOT NULL;


多值匹配

显示年龄为或者的

=25 or =28

FAge IN (25显示年龄介于到的

>20 and <30between 20 and 30

分组 GROUP BY

 要放在WHERE后面

GROUP BY ; 数据条数按年龄分组

没有出现在GROUP BY中的字段是不能放在SELECT后的聚合函数除外. :

SELECT (*)人数 FAge分组 可以显示FAge 但不能SELECT FName

FSALARY;  

在where中根据聚合函数进行过滤

聚合函数是不能出现在where子句中的,必须使用having  

having是对分组后信息的过滤 能用的列和select中能用的是一样的.

group having (*)>1是对原始数据进行过滤的

>2000 ; 

排序的前三个 TOP 3

TOP 3 TOP 3 检索工资从高到低排序 第人开始的三个人的信息

IN(TOP 5 ORDER BY 



添加两个字段

update set FSubComPany'Beijing'FDepartment'Development' 

'ShenZhen''HumanResource' 

'InfoTech' 

'Sales' 


消除重复的行 distinct

distinct FDepartment ; 

是用来消除完全重复的行用的 不是用来消除字段的

FSubCompany 

新建一个临时员工的表

CREATE TABLE T_TempEmployeeFIdCardNumber intFIdCardNumber));

INSERT INTO T_TempEmployee'1234567890121''Sarni'

'1234567890122''Tom''1234567890123''Yalaha''1234567890124''Tina')

'1234567890125''Konkaya''1234567890126''Fotifa');


union 将上下两个字段的结果联合在一起

上下两个字段的列数和数据类型要相同. 

T_TempEmployee

union all

T_Employ ;

如果没有特殊理由 不要丢掉all 单独用union会去掉重复的行 

union 

写报表经常用的方法增加一个说明列同时用UNION ALL合并.(不用UNION ALL就会出现多个表查询员工年龄

'正式员工最高年龄'T_Employ

UNION ALL

'正式员工最低年龄'MIN'临时员工最高年龄''临时员工最低年龄'查询每位正式员工的信息包括工号工资并且在最后一行加上所有员工工资额合计

T_Employ 

'工资合计';

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐