sql复杂查询
Ⅰ sql 语句复杂排序查询问题
order by 可以跟case语句,你用case语句把规则写出来就行,比如:
order by (case when column3 is null then (column2+3) else column3 end)
请根实际体情况和排序规则改写…
Ⅱ 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查询
SELECT distinct(CASE
WHEN 列 = 'XY-P-01' THEN
列
WHEN substrb(列,1,6)='XY-P-0' THEN
'XY-P-0'
WHEN substrb(列,1,6)='XY-P-1' THEN
'XY-P-1'
ELSE
'YZ-S-0'
END)
FROM 表;
Ⅳ sql server 复杂查询
尽量不要使用嵌套子查询,优先使用连接子查询;
In 关键字尽量少使用,效率低,除非 in 包含的信息量非常少,并且叫固定;
如果查询条件和查询结果表无直接关联,优先根据查询条件查询出符合条件的临时结果值,然后和最终结果表关联;
除 top n 方式分页之外,使用 row_number() over 方式分页也可以;
能明确指定结果字段的,尽量不要用 * ;
不相关的字段可以省略;
如果最终结果表数据比较大,考虑分表,分区,分库;
查询结果表字段尽量不要包含大文本之类的字段;
where 条件中对于varchar 字段 的 like 查询要适度,不要用太多,会影响效率;
Ⅳ 如何写出复杂业务查询的sql语句
如何写出复杂业务查询的sql语句
如何写出复杂的sql语句:
首先要建立一个概念,复杂的sql语句也是最基本的sql语句连接而成,所以最重要的是先要理清思路和逻辑,弄清自己要查哪几张表,要用哪几个字段,表之间如何关联,将这些弄清,然后由简单到复杂,从最基本的sql写起,通过找共同点,实现表关联等。
select后是自己需要的字段
from后是自己需要查询的多张表或者自己子查询得出的结果集
where后是条件 是对from后的结果集进行筛选
多张表关联 最重要的是找共同点 比如通过userid 第一种方式就是通过join管理 第二种方式就是通过where条件子句 比如几个表的userid相等来筛
选结果集
在处理复杂的业务查询时,先从逻辑层面理清几张表之间的关系以及自己需要的字段和数据 然后逐步拆分 从最简单的局部sql出发 一步步迭代出复
杂的sql语句 这可以看做是写复杂脚本的原则:
由简单到复杂 逐步迭代 得出结果
最重要的还是在工作实践中多加总结 主动接触
Ⅵ 求教一条比较复杂的sql查询语句
SELECT COUNT(T.姓名) FROM TABLE表 T
GROUP BY T.姓名,T.商品名称 HAVING COUNT(T.商品名称) = n
--
产品数量为n
Ⅶ 复杂的SQL查询语句
一般出库的商品,进库里一定有,用进库左连接出库表就可以了。
select No,inCount,outCount from IN a left outer join OUT b on a.No=b.No
结果是 编号 入库数量 出库数量,因为用入库表做左连接,可以看入库的有多少没出库,有些入库的出库是空也有可能,
如果你要看出库的多少,仓库里还有多少,只要反过来,用出库表做左连接就好了.
select No,inCount,outCount from Out a left outer join IN b on a.No=b.No
Ⅷ SQL SELECT复杂查询如何实现
这个语句拼命地用join就行了。
SELECT 销售主表.录入时间,客户表.客户名,货品表.货品名称,销售明细表.数量,销售明细表.销售单价,销售明细表.数量*销售明细表.销售单价 AS 金额
FROM 销售主表 join 客户表 on 销售主表.客户ID=客户表.客户ID join 销售明细表 on 销售表表.销售单号=销售明细表.销售单号 join 货品表 on 销售明细表.货品ID=货品表.货品ID
这样就所有对应的记录都选出来了,如果要加上条件,就在语句后面加上where ……
Ⅸ SQL语句多表查询,复杂
scid是开课次数字段吗?你试试看这样对不对
select top(12) a.scid,b.tid,c.tname
from 校区开课表 a
left join 课程表 b on a.cid = b.cid
left join 教师表 c on b.tid = c.tid
order by a.scid desc
Ⅹ 复杂sql语句查询
selectid,name,isnull((selectSUM(金额)fromB表whereid=A表.idandbno=20),0)正常消费,isnull((selectSUM(金额)fromB表whereid=A表.idandbno=30),0)充值,(selecttop1余额fromB表whereid=A表.idorderby时间desc)余额,(selectMAX(时间)fromB表whereid=A表.id)时间
fromA表
这样看一下行不行