复合sql
A. sql复合查询
应以部门为主
,进行左连接查询,这样,如果一个部门一个人员都没有也可以查出该部门是0人
SELECT
b.bm_name
部门名称
,
COUNT(a.u_bm)
部门人数
FROM
部门表
b
LEFT
JOIN
员工表
a
ON
a.u_bm
=
b.bm_id
GROUP
BY
b.bm_name
B. 请问SQL怎样可以复合查询
这个简单,一个group by 就可以实现了
select id,count(id) from A where 名称='五味子' or 名称='枣仁' group by id
C. SQL的复合查询语句
sql联合查询语句(两张表)是:
select A.ID,A.VALUE,A.TYPE,A.NAME,B.KEY,B.ID,B.VALUE,B.NAME
min(VALUE),max(VALUE) from A left join B on A.ID = B.ID
where B.NAME="你输入的名字"
and B.VALUE > (select min(VALUE) from B where NAME="你输入的名字"))
and B.VALUE < (select min(VALUE) from B where NAME="你输入的名字"));
延展阅读:
A表字段stuid,stuname。
B表字段bid,stuid,score,coursename,status。
要用一条sql查出A表中所有记录的对应的stuid,max(score),coursename,status,并且status=1,sql语句要求跨数据库,不能使用rownum,top,limit等方言。
比如数据:
A
D. sql查询 复合主键的查询语句怎么写
查询什么,哪个列组合是主键?sql语句复合主键有2种比较常用的写法
,假如表a
,是以a1,a2组合作为主键,一种是同时写出a1,a2条件,一种是a1||a2作为主键
E. 在SQL中,什么是复合主键
当一个字段无法确定唯一性的时候,需要其他字段来一起形成唯一性。就是说用来组成唯一性的字段如果有多个就是联合
主键
如
学生成绩(
学号
,课程号,成绩)
那学号和课程号就可以做为联合主键.
因为学号和课程号决定了成绩.也就是说.你要知道成绩..你就要知道学号,知道学号,但还不能知道某一科的成绩.还要知道课程号.
所以
函数依赖
关系是{学号,课程号}->{成绩}
alter
table
tb
add
constraint
PK_ID
primary
key(学号,课程号)
go
F. sql复合查询语句
selectt0.itemcode,t0.quantity--,t1.*,t1.docstatus,t1.canceled,t1.docdate
frompch1t0
leftjoinopcht1ont0.[DocEntry]=t1.[DocEntry]
where
t1.docdate<'2017-12-01'--条件1
andt0.itemcode='GD01002'-----条件2
union----关键部分,字段一样时,可以通过union链接成一个语句,当部分查询字段没有时,可以根据类型补空或者0
select--t0.itemcode,t0.quantity--,t1.*,t1.docstatus,t1.canceled,t1.docdate
sum(t0.quantity)
fromign1t0
leftjoinoignt1ont0.[DocEntry]=t1.[DocEntry]
WHERE
t1.docdate<'2017-12-01'--条件1
andt0.itemcode='GD01002'-----条件2
groupbyt0.itemcode
……--后面继续就行
--第二种,建临时表
if(object_id('temp..#a')>0)
droptable#a
createtable#a
(
itemcodevarchar(100),
quantityint,
docstatusint,
canceledint,
docdatedate
)
insertinto#a(quantity,docstatus,docstatus,canceled,docdate)
selectt0.itemcode,t0.quantity--,t1.*,t1.docstatus,t1.canceled,t1.docdate
frompch1t0
leftjoinopcht1ont0.[DocEntry]=t1.[DocEntry]
where
t1.docdate<'2017-12-01'--条件1
andt0.itemcode='GD01002'-----条件2
insertinto#a(quantity,docstatus,docstatus,canceled,docdate)
select--t0.itemcode,t0.quantity--,t1.*,t1.docstatus,t1.canceled,t1.docdate
sum(t0.quantity)
fromign1t0
leftjoinoignt1ont0.[DocEntry]=t1.[DocEntry]
WHERE
t1.docdate<'2017-12-01'--条件1
andt0.itemcode='GD01002'-----条件2
groupbyt0.itemcode
……--继续插入数据
--最后查询
select*from#a
--关于存储过程
Createprocsp_Test
(
@ddate,
@codevarchar(100)
)
as
begin
--这里只放一个语句,用于参数的示例,只需要将上面的语句放到存储过程中,并将参数替换就可以了
select--t0.itemcode,t0.quantity--,t1.*,t1.docstatus,t1.canceled,t1.docdate
sum(t0.quantity)
fromign1t0
leftjoinoignt1ont0.[DocEntry]=t1.[DocEntry]
WHERE
t1.docdate<@d--条件1
andt0.itemcode=@code-----条件2
groupbyt0.itemcode
end
G. SQL怎样可以复合查询
1.insert into [部门表](bm_id,bm_name)values(1,'bm1')
2.insert into [部门表](bm_id,bm_name)values(2,'bm2')
3.insert into [部门表](bm_id,bm_name)values(3,'bm3')
4.insert into [部门表](bm_id,bm_name)values(4,'bm4')
5.insert into [员工表](u_name,u_bm)values('q',3)
6.insert into [员工表](u_name,u_bm)values('q',4)
7.insert into [员工表](u_name,u_bm)values('q',1)
8.insert into [员工表](u_name,u_bm)values('q',2)
9.select max(bm_name),sum(1) from [部门表]left join [员工表] on bm_id=u_bm
H. 几种常见复合sql查询语句的linq写法
1.IN 语句
尝试了很多次,好象linq死活不生成in语句,无奈只能做了下变换
例,要找出手机大类以及手机下属所有子类的产品 (手机大类的ID为D0C37275-2279-4590-A679-C65A4F28918F)
效果上等效于或linq to sql的等效写法:或varquery=frompindb.T_Proctsjoincindb.T_Classesonp.F_CLSIDequalsc.F_IDwhere
c.F_ID==newGuid(
D0C37275-2279-4590-A679-C65A4F28918F)||
c.F_ParentIDStr.Contains(
D0C37275-2279-4590-A679-C65A4F28918F)selectnew
{p.F_ID,p.F_Name};varquery=frompindb.T_Proctsfromcindb.T_Classeswhere
p.F_CLSID==
c.F_ID&&(c.F_ID==newGuid(
D0C37275-2279-4590-A679-C65A4F28918F)||
c.F_ParentIDStr.Contains(
D0C37275-2279-4590-A679-C65A4F28918F))selectnew
{p.F_ID,p.F_Name};Select
P.F_ID,P.F_Name,P.F_ClsIDFromT_ProctAs
P,T_ClassAsCwhere
P.F_ClSID=
C.F_IDAnd(
C.F_ID='D0C37275-2279-4590-A679-C65A4F28918F'OR
C.F_ParentIdStrlike'%D0C37275-2279-4590-A679-C65A4F28918F%')Select
P.F_ID,P.F_Name,P.F_ClsIDFromT_ProctAsPInnerJoinT_ClassAsCOn
C.F_ID=
P.F_CLSIDwhere
I. sql 复合函数
在查询项中加上b.num
J. C# 拼接复合SQL语句
string str = "";
//如果都不填写,那么字符串为空
if(textBox书名.text == "" && textBox类目.text == "" && ... ...)
{
str = "";
}
else
{
//否则开始拼字符串条件
str = " where ";
if(textBox书名.text != "")
{
str+= "书名=" + textBox书名.text + " and ";
}
if(textBox类目.text !="")
{
str+= "类目=" + textBox类目.text + " and";
}
......
}
//最后将字符串最后的 空格与and 去掉,这个方法好象是这样写,如果不对你再改改,反正你就想办法去掉最后4个字符就行了
str = subString(str, 0, str.lenth-4);
然后 "select * from BOOK"+str;