现在的位置: 首页 > 综合 > 正文

SQL常用代码

2013年05月22日 ⁄ 综合 ⁄ 共 5083字 ⁄ 字号 评论关闭

1.按姓氏笔画排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as
2.数据库加密:
select encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同 encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同
3.取回表中字段:
declare @list varchar(1000),@sql nvarchar(1000)
select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'
set @sql='select '+right(@list,len(@list)-1)+' from 表A'
exec (@sql)
4.查看硬盘分区:
EXEC master..xp_fixeddrives
5.比较A,B表是否相等:
if (select checksum_agg(binary_checksum(*)) from A)
=
(select checksum_agg(binary_checksum(*)) from B)
print '相等'
else
print '不相等'
6.杀掉所有的事件探察器进程:
DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
EXEC sp_msforeach_worker '?'
7.记录搜索:
开头到N条记录
Select Top N * From 表
-------------------------------
N到M条记录(要有主索引ID)
Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc
----------------------------------
N到结尾记录
Select Top N * From 表 Order by ID Desc
8.如何修改数据库的名称:
sp_renamedb 'old_name', 'new_name'
9:获取当前数据库中的所有用户表
select Name from sysobjects where xtype='u' and status>=0
10:获取某一个表的所有字段
select name from syscolumns where id=object_id('表名')
11:查看与某一个表相关的视图、存储过程、函数
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
12:查看当前数据库中所有存储过程
select name as 存储过程名称 from sysobjects where xtype='P'
13:查询用户创建的所有数据库
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01
14:查询某一个表的字段和数据类型
select column_name,data_type from information_schema.columns
where table_name = '表名'
[n].[标题]:
Select * From TableName Order By CustomerName
[n].[标题]:
Select * From TableName Order By CustomerName

 

------------------------------------------------------------------------------------------------------课上学习---------------------------------------------------------------------------------------------------------------------

1 获取MyStudents表中年龄最大的前5个人,和前20%

select TOP 5 * from MyStudents order by FAge DESC
select TOP 20 percent * from MyStudents order by FAge DESC

2 获取当前时间

select GETDATE()

3 去掉重复distinct

select distinct * from MyStudents

4 查询英语成绩最大,最小,总分和平均值

select
最高分=(select MAX(FEnglish) from MyStudents),
最低分=(select min(FEnglish) from MyStudents),
总分=(select SUM(FEnglish)from MyStudents),
平均分=(select AVG(FEnglish)from MyStudents)

5 查询班集总人数

select COUNT(*) as 总人数 from MyStudents

6 查询数学成绩为null的人数(在数据库中进行设置n各人的数学成绩为null看效果)

select * from MyStudents where FMath is null

7 男学生出生日期的最大值和最小值(设计出生日期字段)

select
最大生日=(select MAX(FBirthday) from MyStudents where FGender='男'),
最小生日=(select min(FBirthday) from MyStudents where FGender='男')

 

1手动添加[主键约束]PK_Employees_EmpId

alter table Employees add constraint PK_Employees_EmpId primary key(EmpId)

2手动为EmpName增加非空约束

alter table Employees alter column EmpName varchar(50) not null

3手动为EmpName增加唯一键约束

alter table Employees add constraint UQ_Employees_EmpName unique(EmpName)

4删除唯一键约束

alter table Employees drop constraint UQ_Employees_EmpName

5为性别增加默认约束,使默认值为"男"
alter table Employees add constraint DF_Employees_EmpGender
default('男') for EmpGender

6alter table Employees add constraint CK_Employees_EmpAge
check(EmpAge>=0 and EmpAge<=120)为年龄增加检测约束 0-120含0和120

7为性别增加检查约束 非 男 即 女

alter table Employees add constraint CK_Employees_EmpGender
check(EmpGender='男' or EmpGender='女')

8--为员工表增加外键约束
--首先,设置部门表中的DepId为主键,并且外键不能为空

alter table Department add constraint Pk_Deparment_DepId primary key(DepId)

alter table Employees add constraint FK_Employees_EmpDepId
foreign key(EmpDepId) references Department(DepId) on delete cascade

9一条语句删除多个约束

alter table Employees drop constraint FK_Employees_EmpDepId,
CK_Employees_EmpAge,
UQ_Employees_EmpName

10一条语句为表增加多个约束

alter table Employees add constraint
UQ_Employees_EmpName
unique(EmpName),
constraint
CKSSS
check(EmpAge>=0and EmpAge<=150)

 

 

1. -- 查询 MyStudents 数学成绩没有及格的学生

select
FName as 姓名,FMath as 数学成绩
from MyStudents
where 60<=FMath AND FMath<80

2. -- 查询年龄大于 20 的男学生

select Fname as 姓名,FAGE AS 年龄 from MyStudents where FAge>27 and FGender='男'

3. -- 查询年龄大于 27and 小于 33 的男学生

select Fname as 姓名,FAGE AS 年龄 from MyStudents where FAge>27 and Fage<33 and FGender='男'

---between ..and (between 27 and 30)

select Fname as 姓名,FAGE AS 年龄 from MyStudents where FAge between 27 and 30 and FGender='男'

4. -- 查询部门 1,4,5 中的员工

select EmpName as 姓名, EmpDepId AS 部门号 from Employees where DepId in(1,4,5)

5. -- 查询 mystudents 中所有姓张的同学 ,% 代表 0 个或多个任意字符

select * from MyStudents where FName like '张%'

6. -- 查询所有数学成绩为 null 的同学 , 并且将 null 替换为 ' 缺考 '

select FName as 姓名,FAge as 年龄,数学成绩=ISNULL( cast(FMath as varchar(50)),'缺考') from MyStudents where FMath is null

7. -- 按英语成绩排序

select *from MyStudents order by FEnglish desc

8. -- 查询学生表中的信息,显示 姓名,性别,英语成绩,数学成绩和 平均分 并按照平均分 降序排列

select 姓名=FName ,性别=FGEnder,英语成绩=FEnglish,数学成绩=FMath,平均成绩=(FEnglish+FMath)/2 from MyStudents order by 平均成绩 desc

9. -- 统计学生表 mystudent 中男同学和女同学的人数

select 性别=FGender,COUNT (*) as 人数 from MyStudents group by FGender

10. -- 统计员工表中每个部门中男性员工的个数超过 3 人的人数

select 部门号=EmpDepId,部门男性人数=COUNT(*)from Employees where EmpGender='男'group by EmpDepId having COUNT(*)>3

11. 查询以下数据表 MyOrder :

(1) 统计一个热销商品排名表,即按照每种商品的销售数量统计。

select 商品名称,总销售数量=SUM(销售数量)from MyOrders group by 商品名称order by 总销售数量 desc

(2) 统计销售总价格超过 3000 元的商品名称和销售总价,并按照销售总价降序排列。

select SUM(销售数量)*avg(销售价格)as '销售总价',商品名称 from MyOrders   group by 商品名称 having SUM(销售数量)*avg(销售价格)> 3000  order by 1 desc

(3) 统计各个客户对“可口可乐”的喜爱程度(即统计每个购买人对“可口可乐”的购买数量)

select 购买人,购买量=count(*),商品名称='可口可乐' from MyOrders group by 购买人 order by 购买量 desc select * from MyOrders

 

 

抱歉!评论已关闭.