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 职工 )