sql study

-- =============================================
-- Author:  lifu
-- Create date: 2017-06-14
-- Description:  sql study
-- =============================================
use db_study;

--判断是否存在表
IF EXISTS (
    SELECT  *
    FROM dbo.SysObjects
    WHERE ID = object_id(N‘[usertbl]‘)
    AND OBJECTPROPERTY(ID, ‘IsTable‘) = 1
)
print ‘usertbl exists‘
else
BEGIN
CREATE TABLE usertbl (
    id INT identity(1,1) primary key,
    name NVARCHAR(20) DEFAULT NULL,
    age INT DEFAULT NULL
)
END

IF EXISTS (
    SELECT  *
    FROM dbo.SysObjects
    WHERE ID = object_id(N‘[stutbl]‘)
    AND OBJECTPROPERTY(ID, ‘IsTable‘) = 1
)
print ‘stutbl exists‘
else
BEGIN
CREATE TABLE stutbl(
    id INT identity(1,1) primary key,
    name NVARCHAR(20) DEFAULT NULL,
    age INT DEFAULT NULL,
    stuID INT DEFAULT NULL
)
END

--插入数据
--INSERT INTO usertbl(name,age)VALUES(‘lee‘,28)
--INSERT INTO usertbl(name,age)VALUES(‘kite‘,32)
--INSERT INTO stutbl(name,age,stuID)VALUES(‘lee‘,28,07110511)
--INSERT INTO stutbl(name,age,stuID)VALUES(‘tom‘,19,07110512)

--判断存储过程是否存在
if exists (
    select *
    from dbo.sysobjects
    where id = object_id(N‘[listUser]‘)
    and OBJECTPROPERTY(id, N‘IsProcedure‘) = 1
)
DROP PROCEDURE listUser
ELSE
--有输入参数的存储过程
create PROCEDURE listUser
@name VARCHAR(20)
AS
DECLARE @age INT
SET @age = 28
SELECT *
FROM usertbl
WHERE name=@name
AND age=@age

--执行存储过程
EXECUTE listUser @name = ‘lee‘

--有输入输出参数的存储过程
CREATE PROCEDURE isListUser
@age INT,
@name VARCHAR(20),
@isRight INT OUTPUT
AS
if exists (
    select *
    from dbo.sysobjects
    where id = object_id(N‘[listUser]‘)
    and OBJECTPROPERTY(id, N‘IsProcedure‘) = 1
)
SET @isRight = @age
ELSE
SET @isRight = 0

DECLARE @isRight INT
EXECUTE isListUser 28,‘lee‘,@isRight OUTPUT
SELECT @isRight

DROP PROCEDURE isListUser

--select 赋值
CREATE PROCEDURE getUser
AS
DECLARE @resultSet VARCHAR(20)
SET @resultSet = (
    SELECT name
    FROM usertbl
    WHERE age = 28
)
SELECT @resultSet

EXECUTE getUser

DROP PROCEDURE getUser

--查看表索引
EXECUTE sp_helpindex @objname=‘usertbl‘

--update 赋值
CREATE PROCEDURE testUpdate
AS
DECLARE @nage INT
DECLARE @nname VARCHAR(20)
UPDATE usertbl SET @nage = age WHERE id=1
SELECT @nname = name FROM usertbl where id=1
PRINT @nage
PRINT @nname

EXECUTE testUpdate

--while
DECLARE @a INT
SET @a = 1
WHILE @a<10
BEGIN
    SET @a = @a + 1
END
PRINT @a
END 

--if
IF (1+1=2)
BEGIN
    PRINT ‘right‘
END
ELSE
BEGIN
    PRINT ‘wrong‘
END 

--when then
DECLARE @today INT
DECLARE @theWeek NVARCHAR
SET @today = 3
SET @theWeek = CASE
    WHEN @today = 1 THEN ‘星期一‘
    WHEN @today = 2 THEN ‘星期二‘
    WHEN @today = 3 THEN ‘星期三‘
    WHEN @today = 4 THEN ‘星期四‘
    WHEN @today = 5 THEN ‘星期五‘
    WHEN @today = 6 THEN ‘星期六‘
    WHEN @today = 7 THEN ‘星期日‘
END
PRINT @theWeek

--游标       类似将数据一条一条读取出来 形成类似栈的结构
DECLARE @name NVARCHAR(20)
DECLARE @age INT
DECLARE @resultSet NVARCHAR(20)
--定义一个游标
DECLARE myCursor CURSOR FOR
SELECT name,age
FROM usertbl
WHERE id=1
--打开游标   指针指向第一条数据
OPEN myCursor
WHILE @@fetch_status=0
BEGIN
--读取游标  指针向前推进
    FETCH NEXT from usertbl INTO @name,@age
    SELECT @resultSet = name FROM usertbl WHERE name=@name
    PRINT @resultSet
END
--关闭游标
CLOSE myCursor
--摧毁游标
DEALLOCATE myCursor

--return   procedure
CREATE PROCEDURE testReturn
@a INT,
@b INT
AS
BEGIN
    RETURN @a + @b
END 

DECLARE @c INT
EXECUTE  @c = testReturn 1,2
SELECT @c

--触发器
CREATE TRIGGER User_onUpdate
    ON usertbl
    FOR UPDATE
AS
    DECLARE @msg NVARCHAR(50)
    --@msg 记录修改情况
    SELECT @msg = N‘姓名从“‘ + Deleted.Name + N‘”修改为“‘ + Inserted.Name + ‘”‘ from Inserted,Deleted
    PRINT @msg

--删除触发器
DROP TRIGGER User_OnUpdate
--测试触发器
UPDATE usertbl SET name = ‘biglee‘ WHERE id = 1

--函数
--函数的分类:
--
--    1)标量值函数
--
--    2)表值函数
--
--        a:内联表值函数
--
--        b:多语句表值函数
--
--    3)系统函数

--标量值函数
CREATE FUNCTION FUNC_sum
(
    @a INT,
    @b INT
)
RETURNS INT
AS
BEGIN
    RETURN @a + @b
END
--调用标量值函数
DECLARE @r INT
SET @r = dbo.FUNC_sum(100,50)
PRINT @r

--内联表值函数
CREATE FUNCTION FUNC_usertbl
(
    @age INT
)
RETURNS TABLE
AS
RETURN (SELECT * FROM usertbl WHERE age<@age)
--删除函数
DROP FUNCTION FUNC_usertbl
--调用内敛表值函数
SELECT * FROM dbo.FUNC_usertbl(30)

--多语句表值函数(可以将查询的数据集放在局部临时表中)
CREATE FUNCTION FUNC_UserTbl2
(
    @myId INT
)
RETURNS @t TABLE
(
    id INT PRIMARY KEY,
    name NVARCHAR(20) DEFAULT NULL,
    age INT DEFAULT NULL
)
AS
BEGIN
    INSERT INTO @t SELECT * FROM usertbl WHERE id = @myId
    RETURN
END 

--调用多语句表值函数
SELECT * FROM dbo.FUNC_UserTbl2(1)

--一、自定义函数:
--
--  1. 可以返回表变量
--
--  2. 限制颇多,包括
--
--    不能使用output参数;
--
--    不能用临时表;
--
--    函数内部的操作不能影响到外部环境;
--
--    不能通过select返回结果集;
--
--    不能update,delete,数据库表;
--
--  3. 必须return 一个标量值或表变量
--
--  自定义函数一般用在复用度高,功能简单单一,争对性强的地方。
--
--二、存储过程
--
--  1. 不能返回表变量
--
--  2. 限制少,可以执行对数据库表的操作,可以返回数据集
--
--  3. 可以return一个标量值,也可以省略return
--
--   存储过程一般用在实现复杂的功能,数据操纵方面。
时间: 2024-11-10 11:37:36

sql study的相关文章

PHP读写XML文件的四种方法

PHP对XML文件进行读写操作的方法一共有四种,分别是:字符串方式直接读写.DOMDocument读写. XMLWrite写和XMLReader读.SimpleXML读写,本文将依次对这四种方法进行介绍. 介绍之前首先对本文例子使用的数据和文件进行说明.本文写XML文件的例子都是从MySQL中读取数据然后 写入到XML文件中,读XML文件的例子都是从XML文件中读取数据后组装成数组的格式,数组中每个元素对应数 据库中的一条记录. MySQL中的数据: XML文件: 1 2 3 4 5 6 7 8

PHP读写XML文件(一)

PHP读写XML文件的方法有四种,从本文开始将连续使用四篇博文来分别介绍这四种方法.本文介绍的是第一种方法: 使用字符串操作的方式来对XML文件进行读写操作. 一.PHP字符串方式写XML文件: 首先介绍PHP使用字符串方式写XML文件.本例将读取数据库中的数据,输出为XML文件. 数据库数据如下: 读取数据并写入XML文件代码: <?php /** * function:使用字符串方式写XML文件 * author:JetWu * date:2016.12.03 **/ $mysqli = m

mysql主从数据对比工具简介

1 Checksum 1.1 checksum原理 checksum table的原理是对表中的数据进行一行一行的较验和计算,在执行checksum命令时,表会被加一个读锁(read lock),因此对于大表,这是一个很耗时的过程. 读锁:又叫S锁/共享锁:当MySQL的一个进程为某一表开启读锁之后,其他的进程包含自身都没有权利去修改这表表的内容.但是所有的进程还是可以读出表里面的内容的.但是不能实现更新. 1.2 语法 在数据库中输入checksum  table   库.表: 说明:chec

Oracle Study之--PL/SQL Developer软件错误

Oracle Study之--PL/SQL Developer软件错误 博文在51cto和CSDN同时开通 系统环境: 操作系统: Windows  XP(64) 软件:          PL/SQL Devoloper 8.04         软件,正常安装后,在使用过程中出现以下错误:                                                                            通过scott用户登录  出现以上错误 通过sqlpl

SQL SERVER Study

1. SQL SERVER Install    可以免费试用180天.最新的是2014版本. 2. Attach, Detach 可以添加或去掉已有的数据库文件. 数据库文件的格式是: .mdf 后缀 3. 客户端上可以建立 E-R图.主要注意主外键关系,一个表的外键是另一个表的主键. 4. T-SQL Study eg1: order by no. 例如: select ProductID, Name, ProductNumber,Color, Size, ListPrice from Pr

Sql Server知识点系统化Study

第一篇:SQL Server 2008基础知识篇(第1.2章).      首先介绍数据库的原理知识,如关系数据库的结构和使用范式理论规范数据库以及E-R模型:接下来介绍SQL Server2008的新增功能和特性,安装SQL Server 2008数据库:然后详细介绍管理SQL Server 2008时所使用的各种工具,如SQL Server Management Studio和配置管理器等.第二篇:SQL Server 2008日常操作篇(第3-5章).      本篇从实用角度介绍SQL 

Oracle Study之--Oracle等待事件(1)

Oracle Study之--Oracle等待事件(1) 一. 等待事件的相关知识1.1 等待事件主要可以分为两类: 即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件.2). 非空闲等待事件专门针对ORACLE的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件 是在调整数据库的时候需要关注与研究的.在Oracle 10g中的等待事件有874个,11g中等待事件1118个.

SQL学习之一基础命令

一.SQL语法 1.数据库表 一个数据库通常包含一个或多个表.每个表由一个名字标识,表包含带有数据的行. 2.大小写 SQL对大小写不敏感. 3.SQL语句后的分号 某些数据库要求在每条SQL命令的末尾使用分号,比如mysql. 4.SQL的DML和DDL 可以把SQL分为两个部分:DML(data manipulation language数据操作语言)和DDL(data definition language数据定义语言) 查询和更新数据的指令构成了SQL的DML部分: select --

MySQL Study之--MySQL下图形工具的使用(phpMyAdmin)

MySQL Study之--MySQL下图形工具的使用(phpMyAdmin) 系统环境: RedHat EL6 数据库:  MySQL 5.6.4-m7 phpMyAdmin是一个用PHP编写的软件工具,是以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库.借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便.其中一个更大的优势在于由于phpMyAdmin跟其他PHP