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