索引的技巧
如果个表中有索引,但需要大量更新的时候,索引会影响更新的效果。如果不确实数据量非常大的话,那么可以先删除索引,再做数据更新。最后重建索引。
SQL Server中的备份表语句:
Oracle中的备份表语句:
Sqlsever : SELECT *
INTO 新表名
FROM TABLE_SOURCE
Oracle : Crcate Table 新表名
AS
SELECT *
FROM TABLE_SOURCE
---------------------------------------------------------------------------------------------------------------------
对日期数据:
1. SQL Sever
SECECT Rundate
FROM Student
Where 出生日期>’01/01/1977’
2. Access
SELECT *
FROM Student
Where 出生日期> #01/01/1977#
3. Oracle
SELECT *
FROM Student
Where 出生日期>’01-SAN-1977’
注:Oracle日期格式为 DD-MON-YY
SQLServer中TOP和Oracle中Romnum的使用
取出30%的顶部开始
SELECT TOP n Preceat 30%
FROM Student
Order by 出生日期
Oracle中
Select *
FROM Student
Where Romnum<6;
这个是返回5个记录个数
截取身份证中的出生年月
SELECT SUBSTR(‘sid_’,7,6)
SQLSERVER中的IF···ELSE函数
SELECT tame 外教姓名,
性别=
CASE
WHEN sex=’m’ THEN ’男’
WHEN sex=’f’ THEN ’女’
ELSE ‘错误数据’
END
FROM foreign_teacher
WHERE country=’USA’
ORPER BY sex;
或者:SELECT tame 外教姓名,
性别=
CASE sex
WHEN ’m’ THEN ’男’
WHEN ‘f’ THEN ‘女’
ELSE ‘错误数据’
END
FROM foreign_teacher
WHERE country=’USA’
ORPER BY sex
Oracle中
DECODE函数
DECEDE(表达式,值1,返回值,值2,···默认返回值)
SELECT fname外教姓名
DECODE(sex,’m’,’男’,’f’,’女’,’错误数据’)性别
FROM foreign_teacher
WHERE country=’USA’
DROER BY sex;
---------------------------------------------------------------------------------------------------------------------
存储过程和函数
一、
1.存储过程简介
2.在SQL Server中创建和使用存储过程
3.在SQL Server中创建和使用函数
4.NT系统存储过程的使用
5.Oracle中的存储过程和函数
二、
1.在SQL Server中创建和使用存储过程
CREATE PROC[EDURE] pracesture_name[;number]
[{@parameter data_type}
[VARYING][=default][OUTPUT]
][,···n]
[WITH
{RECOMPILE|ENCRYPTION]| RECOMPILE,ENCRYPTION}]
[FORREPLICATION]
AS
Sql_statement[···n]
2.调用语句中EXEWTE的语法
[EXEC]
{[@return_status=]
}WITH RECOMPILE
3.创建一个简单的存储过程
CREATE PROC proc GetStudent
AS
SELECT *
FROM student
EXEC proc GetStudent
执行生成结果
4.创建带输入参数的存储过程
CREATE PROC proc GetAogMaxMin
@course_name char (20)
AS
SELECT ACVT (考试成绩) AS 平均分,
MAX (考试成绩) AS 最高分,
MIX (考试成绩) AS 最低分,
FROM Score AS s
INNER JOIN course AS c
ON S.课号=C.课号
WHERE C.课名=@course=name
EXEC proc GetAvgMaxMin ‘心理学’
比较有用的一种参数提示方法
Create proc proc|
@course_name char(20)=null
AS
If @course_name is null
print ‘请您提供课程名称’
ELSE
Select avg (考试成绩)AS 平均分,
max (考试成绩) AS 最高分,
min (考试成绩) AS 最低分
FROM store AS s
Inner Join course AS c
ON S.课号=C.课号
WHERE C.课名=@course_name
在EXEC prol时,系统会出现提示“请您提供课程名称”
带输出参数的存储过程
(REATE PROC proc)
@x int,
@y int Output
AS
DECLARE @i int,@t int
SELECT @i=1,@t=1
WHERE @i<=@x
BEGIN
SELECT @t=@t*@i
SELECT @i=@i+1
END
SELECT @y=@t
##以上为调用程序,算出变量X的阶层,将@t赋值给@y调用
DECLARE @fait int
EXEC proc2 5, @fact OUTPUT
SELECT @fact
结果是120,即输出为5及阶层的结果
判断是否存在存储过程并删除它
IF EXISTS (SELECT *
FROM sysobjects
WHERE name=’procl’)
DROP procl
存储过程的xtype为“p”,在sysobjects中都存记录
三、在SQL Server中创建和使用函数
1.标量函数
创建一个获得当前年龄的函数
根据生日来获取
CREATE FUNCTION funcGETAGE
(@birth_date datetime,@now_date datetime)
RETURNS int
AS
BEGIN
RETURN (DATEDIFF(year,@birth_date,@now_date))
END
使用这个函数
SELECT 姓名,dbo.funcGETAGE (出生年月,GETDATE)
AS年龄
FROM student
2.表值函数返回值为TABLE(表)
2.1内嵌函数
Create Funtion funcGETSTUDEPA
(@depa_name char(20))
RETURNS TABLE
AS
RETURN (SELECT *
FROM student
WHERE 所属院系=@depa_name)
使用
SECELT *
FROM funcGETSTUDEPA(‘计算机学院’)
取出表student中所属院系为“计算机学院”的
2.2多语句函数
如果RETURNS子句指定的TABLE类型带有字段及其数据类型的,则该函数是多语句表值函数。
创建函数
CREATE FUNCTION funcGetstuStore
(@stu_name char(20))
RETURNS @TEMP TABLE
(
姓名 char(20),
课名 char(20),
)
AS
BEGIN
INSERT INTO @TEMP
SECELT st.姓名,c.课名,s.平时成绩,s.考试成绩
FROM student AS st
Inner JOIN score AS s
ON st.学号=s.学号
INNER JOIN course AS c
ON c..课号=S.课号
WHERE st.姓名=@stu_name
RETURN
END
使用
SELECT *
FROM funcGetstuStore(姓名)
四、系统用到的存储过程
1.SP_RENAME 重命名
2.SP_DEPENDS 显示引用对象
3.SP_HELE 显示对象信息
4.SP_HELPTEXT 显示对象的源码
MSSQL和ORACLE 简单对比学习笔记
最新推荐文章于 2024-04-16 06:52:29 发布