USE [lianxi]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo][School](
[Sno] [int] NOT NULL,
[Sname] [bit] NOT NULL,
[Sage] [int] NULL,
[Sdept] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_Schoo] PRIMARY KEY CLUSTERED
(
[Sname] ASC,
[Sno] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
用MySQL测试通过,尽量写标准SQL,如果是其他数据库,应该可以通过或稍加修改即可通过。
13
select
t2sname
from
sp
t1
left
join
s
as
t2
on
t1sno=t2sno
left
join
p
t3
on
t1pno=t3pno
where
t3color='red'
group
by
t2sname
14
select
sno,sname,status
from
s
where
city='BJ'
15
select
sum(t1qty)
from
sp
t1
left
join
p
t2
on
t1pno=t2pno
where
t2pname='p2'
16
update
p
set
weight=100
where
pname='p2'
17
update
p
set
color='yellow'
where
pname='p2'
18
select
t2sn
from
spj
t1
left
join
s
t2
on
t1sno=t2sno
left
join
p
t3
on
t1pno=t3pno
left
join
j
t4
on
t1jno=t4jno
where
t3color='red'
and
t4jn='j1'
group
by
t2sno
19
select
t2jn
from
spj
t1
left
join
j
t2
on
t1jno=t2jno
left
join
s
t3
on
t1sno=t3sno
left
join
p
t4
on
t1pno=t4pno
where
t3sn='s1'
group
by
t2jno
20
select
t2pn
from
spj
t1
left
join
p
t2
on
t1pno=t2pno
left
join
s
t3
on
t1sno=t3sno
left
join
j
t4
on
t1jno=t4jno
where
t3city=t4city
group
by
t2pno
exists 是存在判断,返回true或false,如下:
select from a where exists (select 1 from b where aid=bpid)
这句话的意思是,查询a表里的数据,找到的所有数据符合这个条件:在b表中能到一条数据,且bpid=aid。
而select from a where not exists (select 1 from b where aid=bpid)
则是查询a表里的数据,找到的所有数据都不符合这个条件:在b表中能到一条数据,且bpid=aid。
这么说明白吧,这样再看你写的语句就是这个意思:
查找s表中的son字段,这些数据能够在c表中找到符合这个条件的记录:cteacher='liu',并且不符合条件“sc表中的scsno=ssno and sccn=ccno”
主要是我上面讲的,如果你理解了,你写的语法只是多了一层,仔细想下就明白了。
首先,EXISTS和NOT EXISTS强调的是是否返回结果集,不要求知道返回什么。
而NOT EXISTS引导的语句如果没有结果集返回,那么WHERE条件就成立。
好,一定先记住这一点。
然后往下分析。
最内层的条件WHERE PNO=PPNO AND SNO=SSNO,是对商品表和售货员表的一 一 列举。什么意思呢。比如:P表中有商品A,B;S表中有售货员X,Y。
那么,一 一列举就是:
WHERE PNO=A AND SNO=X
WHERE PNO=A AND SNO=Y
WHERE PNO=B AND SNO=X
WHERE PNO=B AND SNO=Y
列举每个售货员,卖出每种商品。然后对应R表进行筛选。
那么中间层对S的查询的否定,就是有某个售货员没有卖出过所有商品。不是所有售货员都没卖出任何商品。看看有没有这样的人。
然后最外层对P查询的否定,是找这样的商品:不存在这样一个人(中间层对S查询出来的人),这个人没有卖出过该商品。
这样找出来的商品,就是每个人都卖出过的商品。
1、左外连接:
用左外连接,指查询出来的是在右表中没有对应左表中的记录以及符合条件(cid=ocustomer_id)的数据,比如:
customers为左表,orders为右表
select cid,ocustomer_id,cname,oid order_id,order_number from customers c left outer join orders o on cid=ocustomer_id;
2、右外连接:
正好和左外连接相反,查询出来的结果是在左表中没有对应的项和以及符合条件(cid=ocustomer_id)的数据
join的意思就是连接
当对两个表进行连接 *** 作时,用join来表示,只是一种专业的记法而已,就像数学中的一些符号,为了是书写简单
示例:
将学生表和选课表连接,就可以写
join(StudentSno=SCSno)
这样既简单,又专业
希望可以帮助你
以上就是关于关于数据库SQL语言全部的内容,包括:关于数据库SQL语言、数据库初学求解答、请问下面这段SQL语句如何理解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)