SQL查询语句详解

关系数据库标准语言SQL(查询功能)

SQL的核心是数据查询。SQL的查询命令也称做SELECT 命令,它的基本组成形式由
SELECT------FROM------WHERE 查询模块组成。
例: SELECT *  FROM TABLE1  WHERE ID=43
TAABLE1----->数据表名称

①    比较       where > <   =
②    相等和不等   where   =   !=   <>  
③    大于小于   where >   < x
④    范围(BETWEEN   AND) where COLUMN_NAME between 1220 and 1240   
⑤    NOT 排除       where COLUMN_NAME NOT
⑥    IN 在范围内       where COLUMN_NAME IN
⑦    AND OR       where   AND

查询满足某些条件的数据并排序
SELECT   FROM     WHERE 表达式   ORDER BY
简单的计算
COUNT() 记数       SUM() 求和      AVG() 平均值  
MAX() 最大值        MIN() 最小值


超联接查询

超连接:首先保证一个表中满足条件的元组都在结果表中,然后将满足联接条件的元组与另一个表的元组进行联接,不满足的联接条件的则将应来自另一表的属性值为空。
   SQL中超联接的运算符号是“*=”和“=*”,其中“*=”是左联接,“=*”为右联接。
VF不支持超联结运算符(“*=”和“=*”),但VF提供专门的语法格式  
SELECT…..
FROM TABLE INNER|LEFT|RIGHT|FULL JOIN TABLE  
ON JION
WHERE

INNER JOIN 等价于 JOIN ,为普通联接,在VF中称为内部联接
LEFT JOIN 为左联接
RIGHT JION    为右联接
FULL JION 全联接  
ON 连接条件   
 
内部联接,只有满足条件的记录才出现在结果中   
SELECT 仓库.仓库号,城市,面积,职工号,工资; FROM 仓库 JOIN 职工;  
ON 仓库.仓库号=职工.仓库号
等价于 SELECT 仓库.仓库号,城市,面积,职工号,工资;   
FROM 仓库 INNER JOIN 职工;
ON仓库.仓库号=职工.仓库号

SELECT 仓库.仓库号,城市,面积,职工号,工资;   
FROM 仓库 ,职工;  
WHERE仓库.仓库号=职工.仓库号   
  
左联接,即除满足联接条件的记录出现在查询结果外,第一个表中不满足条件的记录也出现在查询结果中
SELECT 仓库.仓库号,城市,面积,职工号,工资;
FROM 仓库 LEFT JOIN 职工;
ON 仓库.仓库号=职工.仓库号   

右联接,即除满足联接条件的记录出现在查询结果中外,第二个表中的不满足条件也出现在查询结果中  
给职工表中插入一个记录
SELECT 仓库.仓库号,城市,面积,职工号,工资;
FROM 仓库 RIGHT JOIN 职工;
ON 仓库.仓库号=职工.仓库号  

全联接,将满足条件的记录显示,两个表中不满足的都显示出来
SELECT 仓库.仓库号,城市,面积,职工号,工资;
FROM 仓库 FULL JOIN 职工;   
ON 仓库.仓库号=职工.仓库号 
多表联结  
嵌套查询   
问题:   
   查找那些城市至少有一个仓库的职工工资为1250元  
分析:   
   表面上看好象是在从仓库表里查询城市字段,但其实使用了两个表仓库和职工表,并且条件来自另一个表。检索仓库表中的数据,但是依赖职工表中的字段值。这时使用SQL的嵌套查询比较方便。
解题思路: 
   用人工的方式查询所要的记录
   相当于现在要查询的数据是   
   SELECT 城市 FROM 仓库 WHERE 仓库 IN ("WH1","WH2")   
   用嵌套查询此题    SELECT 城市 FROM 仓库 WHERE 仓库 IN ;  
   (SELECT 仓库号 FROM 职工 WHERE 工资=1250)
1.    查询出满足要求的字段值
2.    两个表所关联的字段  
3.    使用 IN 运算 (IN运算相当于数学集合中的∈)  
问题:  
查询所有职工的工资都多于1210元的仓库信息   
分析:  
   要查询的是每个仓库的职工的工资都要多于1210元,有一个人的工资不满足这个条件,这个仓库的相关信息都不会显示出来。  
   是不是可以这样查询,只要找到仓库职工的小于等于1210元,然后把他们排除到,剩下的就是我们所要的数据。   
   SELECT * FROM 仓库 WHERE 仓库号 NTO IN
(SELECT 仓库号 FROM 职工 WHERE 工资<=1210)  

作对了吗?   
有没有排除那些没有职工的仓库信息。 
SELECT * FROM 仓库 WHERE 仓库号 NOT IN
(SELECT 仓库号 FROM 职工 WHERE 工资<=1210)  
AND 仓库号 IN (SELECT 仓库号 FROM 职工 )  
 

posted on 2008-02-22 06:46  Rhina 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Boyona/articles/1077024.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值