大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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账号...