mysql declare 语法_sql_declare等语法 | 学步园[通俗易懂]

mysql declare 语法_sql_declare等语法 | 学步园[通俗易懂]===sqlserver:—sqldeclare–简单赋值declare@aintset@a=5select@a–使用select语句赋值declare@user1nvarchar(50)select@user1=’张三’select@user1declare@user2nvarchar(50)select@user2=NamefromST_Userwhe…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

===sqlserver:—sql declare

–简单赋值

declare @a int

set @a=5

select @a

–使用select语句赋值

declare @user1 nvarchar(50)

select @user1=’张三’

select @user1

declare @user2 nvarchar(50)

select @user2 = Name from ST_User where ID=1

select @user2

—表变量

declare @t table

(

id int not null,

msg nvarchar(50) null

)

insert into @t values(1,’1′)

insert into @t values(2,’2′)

select * from @t

—select,set赋值的区别

http://www.xuebuyuan.com/37583.html

{

示例:

DECLARE @Variable1 AS int, @Variable2 AS int

/* 使用 SELECT */

SELECT @Variable1 = 1

/* 使用 SET */

SET @Variable2 = 2

select f1 into v1 from tab1

select f1,f2,f3 into v1,v2,v3 from tab1

说明:

1.SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值

SELECT @VAR1=’Y’,@VAR2=’N’

SET @VAR1=’Y’;SET @VAR2=’N’;

2.表达式返回多个值时,用SET将会出错,而SELECT将取最后一个值,如下:

SELECT @VAR1 = IsRight FROM Permission –将取最后一个值

SET @VAR1 = IsRight FROM Permission –将报错

3.表达式无返回值时,用SET将置变量值为NULL,用SELECT交保持变量值

SET @VAR1 = ‘初始值’

SELECT @VAR1 = IsRight FROM Permission –此时@VAR1为’初始值’

SET @VAR1 = (SELECT IsRight FROM Permission) –此时@VAR1为NULL

4.使用标量子查询时,如果无返回值,SET和SELECT一样,都将置为NULL,

SET @VAR1 = ‘初始值’

SELECT @VAR1 =(SELECT IsRight FROM Permission ) –此时@VAR1为NULL

SET @VAR1 = ( SELECT IsRight FROM Permission) –此时@VAR1为NULL

}

—sql exec执行语句

—区块sql

区块定义,常用

begin

……

end;

也可以给区块起别名,如:

lable:begin

………..

end lable;

可以用leave lable;跳出区块,执行区块以后的代码

局部变量的作用范围在它被声明的BEGIN … END块内

select newid() 随机选择记录

Print 向客户端返回用户信息

—sqlserver identity(int,1,1)

括号里面表示的意思是int类型,起始值为1,每次增量为1。

CREATE TABLE tb3(id int ,col int)

INSERT INTO tb3(col) VALUES(10)

INSERT INTO tb3(col) VALUES(20)

SELECT IDENTITY(int,100,2) as aid,* into #T3 FROM tb3

select * from #T3

CREATE TABLE tb1(id int IDENTITY(10,1),col int)

INSERT INTO tb1(col) VALUES(10)

INSERT INTO tb1(col) VALUES(20)

SELECT * FROM tb1

—sqlser

select GETDATE() 获取当前日期时间

–将test_no_cx中的记录批量插入到test_has_cx中

insert test_has_cx select * from test_no_cx

—sqlserver

create table Topics

(

topicID int identity primary key,

topicName varchar(50)

)

insert into Topics (topicName)

select ‘耐克’ union

select ‘彪马’ union

select ‘李宁’ union

select ‘安踏’ union

select ‘特步’ union

select ‘361°’

用一个表中的数据来更新另一个表中的数据:

(注意区分这里面涉及到了有3个表)

UPDATE titles –表1

SET titles.ytd_sales = t.ytd_sales + s.qty

FROM titles t, sales s –表2、表3

WHERE t.title_id = s.title_id

AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)

(ERROR:该语句无效,因为区分错了表)

UPDATE titles

SET t.ytd_sales = t.ytd_sales + s.qty

FROM titles t, sales s

WHERE t.title_id = s.title_id

AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)

@@ERROR : 返回最后执行的Transact-SQL语句的错误代码。没有错误则为零。

@@ROWCOUNT : 返回受上一语句影响的行数,任何不返回行的语句将这一变量设置为0。

SQL中@@ROWCOUNT函数:返回受上一语句影响的行数。

@ERROR,当前一个语句遇到错误,则返回错误号,否则返回0。

在每一条语句执行后都将被重置,如果将来使用需要将变量保存到局部变量中。

update SNS_TopicData set TopicCount=TopicCount+1 where Topic =’1′

if @@rowcount>0

begin

print ‘成功’

end

else

begin

print ‘失败’

end

===mysql:—mysql delimiter

delimiter $$ — 切换成以$$为批处理结束符

delimiter ; — 切换成以;为批处理结束符

注意:

1.delimiter — 告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了

2.delimiter $$后面不需要加分号.

3.定义delimiter $$后,就表示批处理解释执行的标识符是$$,但是里面的语句还是不能漏掉分号,如一般的sql语句后面要加分号,end if等语句后面要加分号,declare语句后面要加分号…

—mysql DECLARE:

1.在外部不需定义,可直接引用@n.如: SET @a=1; SELECT @a;

2.在存储过程内部定义时不带@符号,如declare n int;

3.如果mysql直接在查询器中执行DECLARE @n INT;是会报错的,一个是因为不需要带@符号,另一个是declare语句不能直接在外部使用,可以放在存储过程中使用

—mysql数据库锁定机制:

MySQL各存储引擎使用了三种类型(级别)的锁定机制:行级锁定,页级锁定和表级锁定。

—limit 1

http://www.jb51.net/article/35774.htm

LIMIT 1适用于查询结果为1条(也可能为0)会导致全表扫描的的SQL语句。

前提是所查询的列不是索引列,如果查询的是索引列(包括主键查询)就不需要limit 1。

示例:

create table t_user(

id int primary key auto_increment,

email varchar(255),

password varchar(255)

);

SELECT * FROM t_user WHERE email=? LIMIT 1;

—mysql编码

http://www.cnblogs.com/zzwlovegfj/archive/2012/06/25/2560649.html

— mysql存储引擎

http://www.cnblogs.com/zzwlovegfj/archive/2012/07/11/2586929.html

===sql:

—TRUNCATE TABLE

(deletes only the data inside the table)

删除表中的所有行数据,但不会删除表定义

truncate table #Tmp  –清空临时表的所有数据和约束

http://www.cnblogs.com/stublue/archive/2011/02/18/1958033.html

—主键关联与外键关联

主键关联是指的一个表的主键和另外一个表的主键关联

外键关联是指的一个表的主键和另外一个表的非主键关联

{

主键关联:

person_t:

person_id

address_id

address_t

address_id

address_name

他们通过 address_id 关联是外键关联

person_t:

person_id

persion_name

address_t

person_id

address_name

他们通过person_id 关联就是主键关联。

}

—分组查询

{

http://www.cnblogs.com/gaiyang/archive/2011/04/01/2002452.html

例如,有如下数据库表:

A    B

1    abc

1    bcd

1    asdfg

如果有如下查询语句(该语句是错误的)

select A,B from table group by A

该查询语句的意图是想得到如下结果(当然只是一相情愿)

A     B

1     abc

bcd

asdfg

右边3条如何变成一条,所以需要用到聚合函数,如下(下面是正确的写法):

select A,count(B) as 数量 from table group by A

这样的结果就是

A    数量

1    3

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组

SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2

group by xxx having count(*)>1

}

—全文索引

http://www.cnblogs.com/ericwen/archive/2008/09/04/1283998.html

在数据库中快速搜索数据,使用索引可以提高搜索速度,然而索引一般是建立在数字型或长度比较短的文本型字段上的,比如说编号、姓名等字段,如果建立在长度比较长的文本型字段上,更新索引将会花销很多的时间。如在文章内容字段里用like语句搜索一个关键字,当数据表里的内容很多时,这个时间可能会让人难以忍受。

在SQL Server中提供了一种名为全文索引的技术,可以大大提高从长字符串里搜索数据的速度,在本章里,将会对全文索引进行详细的介绍。

—全表扫描

—删除重复,只保留一条数据,没有主键{

SqlServer:

create table t_repeat(

age int,

remark varchar(20)

)

insert into t_repeat values(1,’aaa’),(1,’aaa’),(1,’aaa’),(1,’aaa’),(1,’aaa’),(1,’aaa’),(1,’aaa’)

1.先把数据表的去除重复的数据放到临时表中

SELECT DISTINCT * into #Temp from t_repeat

select * from #Temp

2.把数据表里的数据清空

truncate table t_repeat

3.把临时表里的数据插入到数据表里

insert into t_repeat select * from #Temp

4.删除临时表

drop table #Temp

———–

select distinct * into #t from tablename

truncate table tablename

select * into tablename from #t

}

{

删除重复数据

http://www.cnblogs.com/moss_tan_jun/archive/2011/07/29/2121167.html

2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下

假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

select identity(int,1,1) as autoID, * into #Tmp from tableName

select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID

select * from #Tmp where autoID in(select autoID from #tmp2)

最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

}

{

select * from tablename where id in (

select id from tablename

group by id

having count(id) > 1

)

}

—查询优化:

http://www.cnblogs.com/moss_tan_jun/archive/2011/04/26/2029886.html

http://www.cnblogs.com/moss_tan_jun/archive/2011/04/23/2025988.html(good)

http://www.cnblogs.com/moss_tan_jun/archive/2011/02/10/1950852.html

http://www.cnblogs.com/moss_tan_jun/archive/2011/02/10/1950848.html

http://www.cnblogs.com/mybluesky99/archive/2011/04/19/2020829.html

http://www.cnblogs.com/mybluesky99/archive/2011/04/19/2020848.html

—sql例子:

http://www.cnblogs.com/moss_tan_jun/archive/2011/04/23/2025986.html(自定义函数、游标)

http://www.cnblogs.com/moss_tan_jun/archive/2011/04/23/2025945.html(from子查询)

http://www.cnblogs.com/moss_tan_jun/archive/2011/01/15/1936182.html (游标、临时表)

===PL/SQL

PL/SQL(Procedure Language/Structuer Query Language)是Oracle对标准SQL规范的扩展,全面支持SQL的数据操作、事务控制等。PL/SQL完全支持SQL数据类型,减少了在应用程序和数据库之间转换数据的操作。

构成PL/SQL程序的基本单位是程序块。程序块由过程、函数和无名块3种形式组成,它们之间可以互相嵌套。

PL/SQL的运行工具有:SQL*Plus、PL/SQL developer

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/171259.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 视频地址获取

    软件具体名字就不说了哈,首先贴出视频的网页地址:http://www.365yg.com/a6542366077089743367/首先需要获取视频的videoId,直接请求该url,然后match匹配:Patternpattern=Pattern.compile("videoId:\'(.+)\’");Matchermatcher=pattern.ma…

  • 一二三型观测线的图片_拓扑图

    一二三型观测线的图片_拓扑图“您的个人假期”旅行社组织了一次比荷卢经济联盟的巴士之旅。比荷卢经济联盟有很多公交线路。每天公共汽车都会从一座城市开往另一座城市。沿途汽车可能会在一些城市(零或更多)停靠。旅行社计划旅途从 S 城市出发,到 F 城市结束。由于不同旅客的景点偏好不同,所以为了迎合更多旅客,旅行社将为客户提供多种不同线路。游客可以选择的行进路线有所限制,要么满足所选路线总路程为 S 到 F 的最小路程,要么满足所选路线总路程仅比最小路程多一个单位长度。如上图所示,如果 S=1,F=5,则这里有两条最短路线 1→

  • 微信小程序个人服务器搭建[通俗易懂]

    微信小程序个人服务器搭建[通俗易懂]个人做微信小程序必须考虑到工作量和资金的问题,这篇文章总结出一套针对个人切实可行的方案。本文章重点在抛砖引玉,而不是对各种细节的详细描述。读者可以根据文中提到的各种关键词,查阅相关资料方案包括在Ubuntu上面使用flask建立web服务器 使用花生壳内网穿透 使用花生壳提供的带备案信息的域名 使用腾讯云提供的免费https证书 微信小程序网络连接的注意事项在Ubuntu上面使用…

  • tracert/traceroute原理

    tracert/traceroute原理一、路由追踪程序traceroute/tracertTraceroute是Linux和MacOS等系统默认提供的路由追踪小程序,Tracert是Windows系统默认提供的路由追踪小程序。二者的功能相同,都能探测数据包从源地址到目的地址经过的路由器的IP地址。Traceroute/Tracert的实现都借助了TTL:通过向目的地址发送一系列的探测包,设置探测包的TTL初始值分别为1,2,3…,根据

  • maven打包加时间戳[通俗易懂]

    maven打包加时间戳[通俗易懂]maven打包加时间戳方法总结基于Maven的项目,发布时需要打包,如tar.gz。web项目打成war格式包。每次打包时希望自己加上时间戳,假如我的项目名是myproject,默认打包后名为myproject.war。而我希望的名字为myproject-1.0.0-20160217。方便以后对包进行查找与管理,如何实现这种效果呢?

  • docker(1)下载安装for mac[通俗易懂]

    docker(1)下载安装for mac[通俗易懂]前言Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个D

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号