文档库 最新最全的文档下载
当前位置:文档库 › SQL学习基础(个人学习笔记)

SQL学习基础(个人学习笔记)

1.列column 主键 primarykey 外键 foreignkey

2.数据类型 bit 相当于bool类型 只有0 ,1 char(10) 10个字符,当字符不满10个时,不够的位数用空格填充,nvarchar(Max)含有中文等,

几乎无限大字符串,varchar纯英文字符串,有几个数字就几个,不会想char不满时填充空格。

int 32位 , bigint 64位

1.建表 建表时必须建字段及设置字段类型,否则会提示错误 即 name varchar(20),

create table person
(
id varchar(8) not null,
name varchar(20),
)

2.删除表

drop table person

3,插入字段

insert into person(id,name)values(1,'张三')

insert into person1 (id,names)values(newid(),'王丽');

4.删除字段

delete person where id=1

delete Scores where name='拜仁' or name='奇才'

当将列字段属性的标示规范设置成 是 后,例如ID,当插入其他字段时,系统将ID值自增。

主键GUID select newid()

5.更新

update person set name=('小李') where id=1 OR age=20; 后还可以与 OR AND NOT 连用



例子:

create table gongzi
(
number int not null,
name varchar(20),
age int,
salary numeric(10,2),
primary key (number),
)
select * from gongzi order by age desc,salary asc 先按age降序排列,在按salary升序 --desc 降序 asc 升序--
select * from gongzi where salary>2000 order by salary asc --order by 要在 where 之后
select name as 姓名,salary as 月薪 from gongzi where salary<3000 and name='小李'
--as 给列取别名--
select count(*) from gongzi
select max(salary) from gongzi
select min(salary) from gongzi
select sum(salary) from gongzi
select avg(salary) from gongzi 求平均值
select * from gongzi where age like '_2' --列字段要用'' 括起来 '_'查询单个字符--
select * from gongzi where salary like '%3%' --%查询0或多个字符,like模糊查询--
select * from gongzi where age is not null
select * from gongzi where age in(22) --in包含22的--
select * from gongzi where age>22 and age<30

insert into gongzi(number,name,age,salary)values(001,'张磊',29,3000)
insert into gongzi(number,name,age,salary)values(003,'小李',22,2300)

1.分组查询 group by

select age from gongzi group by age --以年龄分组查询,一般以数字分组,无法对姓名等字段分组

2. 聚合函数不能出现在where子句中

select age,count(*) from gongzi where count(*)>1 group by age //错误语句

//聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。


可以用having代替where 但必须是在select 后合法的字段,where是对原始数据的过滤,而having只是对分组以后的数据进行过滤

select age,count(*) from gongzi group by age having count(*)>1 having函数必须在group by后

3.限制范围函



top n 取前n个数据

select top 3 age from gongzi 取前3条数据
not in 排除,不包含

select top 3 * from gongzi where age not in (select top 3 age from gongzi order by age desc)

4.抑制数据重复

alter table gongzi add department varchar(20);
alter table gongzi add sub varchar(20);
update gongzi set department='财务部',sub='公司' where number=1
update gongzi set department='生产部',sub='子公司' where number>=2 and number<=10
select distinct sub from gongzi --distinct消除重复数据

5.Union 联合查询

select name,0 from gongzi
union
select name,id from person --使用union 将2个表的字段结果同时显示,
但查询的两个表的字段数量及类型要相同,使用union时会消除重复数据,要全部显示 union后 加all

6.函数

ABS() 求绝对值 ceiling() 舍入到最大数 floor 舍入到最小数 round 四舍五入

len()长度 lower()转小写 upper()转大写 ltrim()去除字符左侧空格 rtrim()去除右侧空格

substring(string,start_position,length) string主字符串,start_字符串中的起始位置,length字符串中的最大长度

getdate去日期 dateadd(datepart,number,date)计算增加以后的日期,date为待计算日期,number为增量,

datepart为计算单位 select dateadd(day,3,getdate())为计算日期date的3天后的日期 dateadd(month,-8,date)为计算date的8个月前的日期

datediff(datepart,startdate,enddate)计算2个日期的差额 datediff(hh,day,getdate())

datepart(datepart,date)返回一个日期的待定部分 datepart(hh,getdate()) 返回当前日期的小时

select getdate()
select dateadd(hh,3,getdate())
select datepart(year,getdate())

7.类型转换函数

cast(expression as data_type) select cast('2333' as int)
convert(data_type,expression) select convert(datetime,'2011-1-2')



isnull(name,sdf) 如果name存在,不改变,如果不存在 显示sdf

CASE函数用法

case expression

when value 1 then returnvalue 1

when value 2 then returnvalue 2

else defaultreturnvalue

end

例子:

select name,
(case
when salary>2000 then '高输入'
when salary<2000 then '低收入'
else '未知'
end) as '收入水平'
from gongzi

1.列子

create table Scores
(
Date datetime null,
name varchar(50),
scores varchar(50),
)
select * from Scores
delete Scores where name='拜仁' or name='奇才'
insert into Scores(Date,name,scores)values(cast('2008-8-8' as DateTime),'拜仁','胜')
insert into Scores(Date,name,scores)values(convert(DateTime,'2008-8-9'),'奇才','胜')
insert into Scores(Date,name,scores)values(convert(DateTime,'2008-8-9'),'湖人','胜')
insert into Scores(Date,name,scores)values(cast('2008-5-8' as DateTime),'拜仁','负')
insert into Scores

(Date,name,scores)values(convert(DateTime,'2008-4-9'),'拜仁','负')
insert into Scores(Date,name,scores)values(convert(DateTime,'2008-11-9'),'奇才','胜')

select name,
sum(
case scores
when '胜' then 1
else 0
end
)as 胜利,
sum(
case scores
when '负' then 1
else 0
end
)as 败
from Scores group by name

2.select top 5 * from seach order by datediff(second,stel,etel),number desc
--输出所有数据中通话时间最长的5条记录,order by datediff
select * from seach where tel like '1%'
--查询电话号码中以1开头的电话号码
select sum(datediff(second,stel,etel)) from seach where tel like '1%'
--查询以1开头得所有电话的总时长

select * from seach where datediff(month,stel,getdate())=0
--查询当月拨打电话记录

select top 3 number from seach
where datediff(month,stel,getdate())=0
group by number
order by sum(datediff(second,stel,etel)) desc
--输出前3个当月电话时间最长的人员编号
select number,count(*) from seach
group by number
order by count(*) desc
--按降序输出

相关文档