基本SQL操作语句

2012/8/6 12:14
 
--char类型是固定长度的字符类型,存储定长的字符,不足不空格,最多大概4000个字符--
--varchar类型是不固定长度的字符类型,最多大概4000个字符--
--text类型可以存储大约2G的字符串--
 
--int整数--
--numeric数值类型,可以小数,可以整数,表达方式numeric(20,2)--
 
--datetime表达事间 yyyy-mm-dd HH:mi:ss(24h)--
--date表达日期 yyyy-mm-dd--
--time表达时间 HH:mi:ss(24h)--
 
create table Person
(
ID int not null identity(1,1) primary key,
Name varchar(20),
Age int,
Sex char(2)
)
--删除数据用delete,删除数据库对象用drop--
 
alter table person add Birthday  datetime
 
alter table person drop column Birthday
drop table Person
--数值类型的值不需要加单引号,时间和字符串类型需要加单引号--
insert into Person(Name,Sex,Birthday)
values('huqitao','m','2000-1-1')
 
--复制一张表连同数据
select * into  Person_new1 from Person
 
declare @ss_tab table(StopKey int) --定义表变量
insert @ss_tab
select distinct Stop.StopKey
from dbo.SplitString(@StartStops,'/') sn,Stop
where sn.Value=Stop.StopName
--复制一张表的结构
select * into  Person_new1 from Person where 1<>1

2012/8/6 16:58
--主键:一个表中能唯一区分每一条记录的字段,可以一个也可以多个,可以作为其它表的外键--
--字段:数据库表网格中的列,记作column--
--记录:数据库表网格中的行,记作row--
--外键:一个表中的某个字段的取值是另一表中的主键--
--唯一键:一个表中能唯一区分每一条记录的字段,不能做外键--
 
--索引:根据表的某些字段将数据进行分组,目的是提高查询效率--
--      但是会导致新增等操作的效率降低,创建索引的字段取值不能很多--
--      索引使用与一些频繁进行查询的表,对于频繁进行新增等操作的表不适宜创建索引--
 
 
Create table Student
(
StuID int not null identity(1,1) primary Key,
StuName varchar(10),
StuSex char(1),
)
 
alter table Person add StuID int not null;
alter table Person drop Column Age
--修改列名
EXEC  sp_rename 'Person.Age' ,'Salary','Column'
 
--新增
insert into Person(Name,Sex,Birthday,salary)
VALUES('多等等','男','1989-1-1',6000.0)
 
--修改
update Person set
Sex='女'
 
--查询
select ID,Name,Birthday,salary from Person
select ID,Name,year(Birthday),salary+10000 from Person
 
--select后面的字段可以是表的字段,也可以是计算公式,还可以是方法等
select * from person
select * from person order by salary asc     --desc降序 , asc升序
select * from person order by StuID asc,salary desc
select distinct salary from Person           --distinct消除重复行
select distinct sex,salary from Person
 
--条件查询
select * from Person where ID=5
select * from Person where salary>3000--不包含3000值
select * from Person where sex!='女'
select * from Person where Sex<>'女'
select * from Person where not ID=5 --not表示取反
select * from Person where salary between 3000 and 5000 --包含两个边界值
select * from Person where ID in (2,4,6,8,10)
 
select * from Person where Name like 'li%' --通配符%表示任意个任意的字符,下划线_表示一个任意的字符
select * from Person where Name like '%l%'
 
select * from Person where Sex is null --查询null值的数据用is
select * from Person where Sex is not null
select * from Person where not Sex is null
 
select * from Person where StuID=2 and Sex='女'
 
--多条件查询
select * from Person where StuID=2 and Sex='女' and Birthday>'1990-1-1'
select * from Person where StuID=2 or Sex='女'
select * from Person where StuID=2 or Sex='女' and Birthday<'1990-1-1'
select * from Person where Sex='女' and Birthday<'1990-1-1' or StuID=2 
 
--and 和 or一起使用时先执行前面的关系,但是建议使用括号限定其执行顺序
select * from Person where Sex='女' and (Birthday<'1990-1-1' or StuID=2)
 
--聚合函数(是写在字段里面的)
select MAX(salary) from Person--最多值
select min(salary) from Person--最小值,null不算
select avg(salary) from Person--平均值
select sum(salary) from Person--总和
select count(*) from Person--记录的数量
 
select * from person where salary=(select MAX(salary) from Person)--salary值最大的人的信息
 
--分组查询:根据字段的值将数据进行分组,得到的结果是每个分组的计算结果
--select查询的字段只能是分组的条件或者聚合函数
select AVG(salary),stuid
from Person
group by stuid
 
select stuid
from Person
group by stuid
having count(*)>=5 
 
select stuid
from Person
where Sex='女' --where用于限定所有数据的条件
group by stuid
having count(*)>=1--having是用来限定分组内的条件,一般都只是聚合函数
 

 
2012/8/7 11:04
select * from Person,Student 
where Person.StuID=Student.StuID
 
select * from Person p,Student s
where p.StuID=s.StuID
 
select *,2012-YEAR(p.Birthday) age from Person p,Student s
where p.StuID=s.StuID
 
--内连接查询-----多表查询时建议使用inner join
select * from Person
inner join Student on Person.StuID=Student.StuID
where Sex='女'
 
---多个表
select * from Person
inner join Student on Person.StuID=Student.StuID
inner join xxxx on xxxx.StuID=Student.StuID
inner join cccc on cccc.StuID=xxxx.StuID
where Sex='女'
 
--左连接查询(没有关联的部分为null)
select * from Person
left join Student on Person.StuID=Student.StuID
 
--右连接查询(没有与右表关联的部分为null)
select * from Person
right join Student on Student.StuID=Person.StuID
 
--全连接查询(没有关联的部分为null)
select * from Person
full join Student on Student.StuID=Person.StuID
 
--将查询结果作为查询的条件使用
--查询结果用作查询条件进行比较运算的时候,结果必须是一行一列的,可以0行一列
select * from Person where Salary=(select MAX(salary) from person)
select * from Person where Salary=(select salary from person where ID=1)
 
--查询结果用作查询条件进行in查询的时候,结果只能是多行一列的,可以是0行一列
select * from Person where StuID in (select StuID from Student)
 
--查询结果作为表进行查询
select * from Person
inner join
(
select StuID,AVG(salary) avgsalary
from Person 
group by StuID
) PersonAvg on Person.StuID=PersonAvg.StuID
where Person.Salary<PersonAvg.avgsalary --工资小于平均值的人的信息
 
--any表示取其中的任意一条记录
select * from Person
where StuID=2 and Salary>any(select Salary from Person where StuID=1)--大于其中最小的
 
--all表示取其中的所有的记录
select * from Person
where StuID=2 and Salary>all(select Salary from Person where StuID=1)--大于其中最大的值
 
--exists表示数据存在
select * from Person
where exists(select * from Student)--exists判断表中是否有数据存在
 
select * from Person
where exists(select * from Student where 1<>1)
 
--一般用 exists关联查询时比其它关联查询效率要高
select * from Person p
where exists(select * from Student s where p.StuID=s.StuID)
 
--union是将两个查询结果进行合并,并且消除了重复行
--上下两个数据集的字段必须一致,而且数据类型也必须一致
select * from Person where StuID=1
union
select * from Person where StuID=2
posted @ 2012-08-27 13:14  HPLi  阅读(4227)  评论(0编辑  收藏  举报