当前位置:首页 » 编程语言 » 复杂的sql

复杂的sql

发布时间: 2022-09-04 05:49:13

Ⅰ 复杂的sql语句

不是很复杂,只有一个子查询,最后那个from里边有很多内连接和外连接,主要是跟业务相关的,表多点不复杂,不知道你的业务逻辑,说不清楚
主要函数,
case when,就是根据不同的case选择一个结果
decode,跟case when差不多,DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )
nvl,判断是否为空的,NVL( string1, replace_with) ,如果为空就用replace_with代替
group by rollup,不太容易说清楚,给你个连接自己看吧做个小例子也容易理解
http://blog.csdn.net/ghostgant/article/details/5699731

Ⅱ 过于复杂的sql语句有哪些缺陷

过于复杂的sql语句有哪些缺陷
不同的数据库甚至相同数据库的不同版本都可能不一样,具体可以查询联机帮助,或参阅产品规格说明。总的来说SQL语句的最大长度限制都是很大的,编写SQL语句一般不需要考虑语句的长度问题。例如ACCESS的SQL最大长度约为6,4000个、MSSQL为65,536 * 网络数据包。像这样的长度,足够你写下长篇大论了。但是话要说回来,一个太长的语句其执行效率变得会低下,尽量避免编写太长和过于复杂的SQL语句还是非常必要的。

Ⅲ 一个复杂的sql 语句

DECLARE @key NVARCHAR(MAX)
SET @key = '中'

/*
关键字表=KeyTable
关键字段=KeyWord

内容表=MainTable
内容字段=MainString

1.先把内容表和关键表相交的资料取出来,填在TempStr,相交则填资料,不相交则留空
2.在取出资料后生成一个临时的表TempTable,进行@Key的查询
3.在TempTable之上再进行最后的判断查询,如果TempStr为空时,则只在@Key两边加括号,否则将在TempStr两边加括号
*/
SELECT CASE WHEN
TempStr IS NULL
THEN
REPLACE(Mainstring,@key,'('+@key +')')
ELSE
REPLACE(Mainstring,TempStr,'('+TempStr+')')
END AS FinalWord
FROM
(SELECT Mainstring,
(SELECT TOP 1 Keyword
FROM KeyTable
WHERE MainTable.Mainstring LIKE KeyTable.keyword + '%'
) AS TempStr
FROM MainTable
WHERE Mainstring LIKE @key + '%'
) AS TempTable

Ⅳ 复杂的SQL 语句

select 职工号,姓名,性别,出生日期 into infor_da from 表 where 婚姻状况='已婚' order by 出生日期 desc

exec master..xp_cmdshell 'bcp 数据库名..infor_da out c:\ma_da.txt -c -t'

也可以这样,直接导出结果,不用放入临时表

exec master..xp_cmdshell 'bcp "select 职工号,姓名,性别,出生日期 into infor_da from 数据库名..表 where 婚姻状况=''已婚'' order by 出生日期 desc" queryout c:\ma_da.txt -c -t'

楼上的方式太不前卫了,还需要开始,运行,输入cmd,用我的方式一劳永逸

Ⅳ SQL怎样处理复杂的数据查询关系

sql查询问题比较灵活,常用是多表查询,有如下几种供参考:
1、笛卡尔积:select * from 表1,表2;( 列数相加,行数记录相乘)
2:等值连接:select * from 表1 s1,表2 s2 where s1.id = s2.id;
3、外连接:在等值连接的基础上加上主表中的未匹配数据(左外和右外)
左外:select * from 表1 s1 left join 表2 s2 on s1.id = s2.id
右外:select * from 表1 s1 right join 表2 s2 on s1.id = s2.id
全外:select * from 表1 s1 full join 表2 s2 on s1.id = s2.id
4、内连接(等值连接的一种)
select * from 表1 s1 inner join 表2 s2 on s1.id = s2.id
5、子查询:子查询在外部查询的FROM子句之后使用时,一般被当作一个数据源使用
(注:id为两张表的相同字段,全文)

Ⅵ 求一个复杂的SQL语句

-- =============================================
-- Author: <Rocky,f_split>
-- Create date: <2010.11.4>
-- Description: <将传入的参数以字符分割,并返回表格形式的参数所分割出来的值>

--select * from f_split('1,2,3,4,5,6',',')
-- =============================================
create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp table(a varchar(100))
as
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql)) --去掉字符中的空格
set @i=charindex(@StrSeprate,@SourceSql) --找分割符在字符中的位置
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql<>''
insert @temp values(@SourceSql)
return
end
GO
IF EXISTS(SELECT * FROM SYSOBJECTS WHERE NAME='test_4')
DROP TABLE test_4
GO

create table test_4
(
id varchar(20) not null,
value varchar(100) not null
)
insert into test_4 values('1008','A1|A2|A3')
insert into test_4 values('1009','B1|B2|B3|B4')

DECLARE @COUNT INT,@INDEX INT,@ID VARCHAR(20),@VALUE VARCHAR(100)

if object_id(N'[tempdb].dbo.[#TEMP_TEST_4_1]')>0
DROP TABLE #TEMP_TEST_4_1

if object_id(N'[tempdb].dbo.[#TEMP_TEST_4_2]')>0
DROP TABLE #TEMP_TEST_4_2

SELECT * INTO #TEMP_TEST_4_2 FROM test_4 WHERE 1=2

SELECT IDENTITY(INT,1,1) AS IDX ,* INTO #TEMP_TEST_4_1 FROM test_4
SELECT @COUNT=COUNT(*) FROM #TEMP_TEST_4_1

SET @INDEX=1
WHILE (@INDEX<=@COUNT)
BEGIN
SELECT @ID=ID,@VALUE=VALUE FROM #TEMP_TEST_4_1 WHERE IDX=@INDEX
INSERT INTO #TEMP_TEST_4_2 SELECT @ID,* FROM F_SPLIT(@VALUE,'|')
SET @INDEX=@INDEX+1
END

SELECT * FROM #TEMP_TEST_4_2

以上代码经过测试,完全能满足你的需求,请采纳,谢谢!

Ⅶ 比较复杂的sql语句

如果你的是ACCESS数据库或者MS SQL数据库,可以使用视图来实现,做起来很容易的。你可以试一下。
以下介绍主要方法:
INNER JOIN 运算
组合两个表中的记录,只要在公共字段之中有相符的值。

语法
FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2

INNER JOIN 运算可分为以下几个部分:

部分 说明
table1, table2 记录被组合的表的名称。
field1, field2 被联接的字段的名称。若它们不是由数字构成的,则这些字段必须为相同的数据类型并包含同类数据,但它们无须具有相同的名称。
compopr 任何的关系比较运算子:"=," "<," ">," "<=," ">=," 或 "<>."

说明
可以在 FROM 子句中使用INNER JOIN运算。.这是最普通的联接类型。只要在这两个表的公共字段之中有相符值,内部联接将组合两个表中的记录。

可以使用 INNER JOIN 与部门表及员工表选择每一个部门中的全部员工。反之,可以使用 LEFT JOIN或 RIGHT JOIN运算创建 outer join,从而选择所有部门(即使有些并没有员工)或所有员工(即使有些尚未分配到部门)。

若试图联接包含 Memo或 OLE Object数据的字段,会导致错误。

可以联接任何两个相同类型的数值字段。例如,可以联接 AutoNumber和 Long字段,因为它们类型相似。但不能联接 Single 和 Double 类型的字段。

下列示例显示如何在类标识符字段联接类表及产品表:

SELECT CategoryName, ProctName

FROM Categories INNER JOIN Procts

ON Categories.CategoryID = Procts.CategoryID;

在上面的示例中,类标识符是已被联接的字段,但是它并不包含在查询输出中,因它并非被包含在 SELECT 语句之中。在这个示例中,若要包含联接字段,将字段名包含在 SELECT 语句中, Categories.CategoryID.

也可以使用下列语法,在一个 JOIN 语句中链接多个 ON 子句:

SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2) OR
ON table1.field3 compopr table2.field3)];

也可以使用下列语法,嵌套 JOIN 语句:

SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)]
ON table3.field3 compopr tablex.fieldx)]
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;

在一个 INNER JOIN 之中,可以嵌套 LEFT JOIN 或 RIGHT JOIN,但是在 LEFT JOIN 或 RIGHT JOIN 中不能嵌套 INNER JOIN。

Ⅷ 求一个稍微复杂一些的sql语句

(select count(*) from a where 出发地='香港')-(select count(*) from a where 出发地!='香港')

Ⅸ 复杂数据报表的sql 编写求助

本人也是做这行的,有11年了,就你的问题只想跟你说:
1、SQL语句其它没什么难度,首先了解左连接,右连接,全连接这三个方面的内容。
2、复杂SQL也是基于简单SQL的基础上,是一种简单SQL的灵活应用已。
3、有前辈带领的环境下,最好向前辈门多多提问,不用看书,看一天书,不如前辈一分钟的指导
4、业务部门有报表需求时,你要求接个简单的,或从前辈那接过来,亲自完成,但代码一定要亲自写,不懂问前辈,这比什么进步都快。
5、我带过很多的徒弟,一般这么要求他们,进步也很快,保证3次之后可独立完成。

Ⅹ 复杂的sql语句怎么写

1、select * from 表 where year(列名) = year(getdate())-1 and month(列名)= 3 --这个比较容易理解,就不解释了
2、select datepart(wk,dateadd(year,-1,getdate())) -- 去年的今天是去年的第几周
select datepart(wk,dateadd(day,1-day(dateadd(year,-1,getdate())),dateadd(year,-1,getdate()))) -- 去年的本月的1号是去年的第几周

select datepart(wk,dateadd(year,-1,getdate())) - datepart(wk,dateadd(day,1-day(dateadd(year,-1,getdate())),dateadd(year,-1,getdate()))) --上边两者相减就是去年的今天是去年本月的第几周

热点内容
ea编程入门 发布:2025-01-15 13:30:11 浏览:411
应缴费档次配置异常怎么回事 发布:2025-01-15 13:20:34 浏览:617
成都php招聘 发布:2025-01-15 13:12:16 浏览:380
怎么调用服务器数据库 发布:2025-01-15 13:06:25 浏览:656
人人网设置访问权限 发布:2025-01-15 13:02:06 浏览:563
崩坏学园2脚本 发布:2025-01-15 12:58:43 浏览:459
我的世界服务器等级如何升 发布:2025-01-15 12:45:55 浏览:689
c语言程序填空题 发布:2025-01-15 12:45:53 浏览:545
怎么配置氯化钠浓度 发布:2025-01-15 12:34:06 浏览:206
4000除以125简便算法 发布:2025-01-15 12:27:41 浏览:464