select 的语法
SELECT [predicate] { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2] [, ...]]}
FROM tableexpression [, ...][IN外部数据库]
[WHERE...]
]
[GROUP BY...]
]
[HAVING...]
]
[ORDER BY...]
]
[WITH OWNERACCESS OPTION]
SELECT 语句具有以下几个部分:
部分 说明
predicate 下列谓词之一:ALL, DISTINCT, DISTINCTROW, 或 TOP.您可用谓词来限制返回的记录数量。如果没有指定谓词,则默认值为 ALL。
* 从特定的表中指定全部字段。
table 表的名称,此表中包含已被选择的记录的字段。
field1, field2 字段的名称,该字段包含了您要获取的数据。如果数据包含多个字段,则按列举顺序依次获取它们。
alias1, alias2 名称,用来作列标头,以代替 table.中原有的列名。
tableexpression 表的名称,这些表包含要获取的数据。
Externaldatabase 数据库的名称,该数据库包含 tableexpression 中的表,如果这些表不在当前数据库中的话。
说明
为完成此运算,Microsoft Jet 数据库引擎会搜索指定的表,抽出所选择的列,并选择满足条件的行,并按指定的顺序对选出的行排序,或将它们分组。
SELECT 语句不会更改数据库的中的数据。
SELECT通常是 SQL 语句.大部分 SQL 语句或者是 SELECT 语句,或者是 SELECT...INTO 语句。
SELECT 语句的最短的语法是:
SELECT fields FROM table
可以用一个星号 (*) 选取表中所有字段。下例选择了雇员表中的全部字段:
SELECT * FROM Employees;
如果 FROM 子句中有多个表包含字段名,则字段之前为表名称和 .(点)操作符。在以下示例中,「部门」字段将出现在雇员表及超级用户表中。SQL 语句将从雇员表和超级用户表来选择部门:
SELECT Employees.Department, Supervisors.SupvName
FROM Employees INNER JOIN Supervisors
WHERE Employees.Department = Supervisors.Department;
当 Recordset 对象被创建时, Microsoft Jet 数据库引擎把表的字段名作为 Recordset对象中的 Field 对象命名。 如果想要一个不同的字段名,或想要一个不是由生成字段的表达式导出的名,则使用 AS 保留字。在下例所得到的 Recordset 对象中用 Birth 标题将返回的 Field 对象命名:
SELECT BirthDate
AS Birth FROM Employees;
无论何时使用合计函数或查询,而且该查询返回含糊的或重复的 Field 对象名称,都必须用 AS 子句来提供 Field 对象的替代名称。在以下示例所得到的 Recordset 对象中用 HeadCount 标题将返回的 Field 对象命名:
SELECT COUNT(EmployeeID)
AS HeadCount FROM Employees;
可使用 SELECT 语句中的其它子句进一步限制和组织已返回的数据。若需更多信息,参见所用子句的主题帮助
-- 查询数据 ---
select
*
from
product ;
-- 指定字段的方式 效率比 * 的方式要快
select
pro_name,
pro_number,
pro_city
from
product ;
-- 过滤数据 where
select
*
from
product
where pro_number > 100 ;
-- and 并且 生成地是深圳 ,并且产品数量大于40
select
*
from
product
where pro_city = '深圳'
and pro_number > 40 ;
-- or 或者 产品价格大于 100 或者 产品的数量大于 40
select
*
from
product
where pro_price > 100
or pro_number > 40 ;
-- 规定要返回的记录的数目 分页处理 SQL Server top , MySQL LIMIT , Oracle ROWNUM
-- limit 5 取前几条数据 limit 2 ,15 从3 开始 往后去 15条记录 从 0 开始不包括2本身 0,1,2
select
*
from
product
where pro_number > 40
limit 2, 15 ;
-- 模糊查询 LIKE % 一个或者多个字符 皮% 以皮开头 %皮 皮结尾 %皮% 包含皮
select
*
from
product
where pro_name like "%帽子%" ;
-- in 查询产品的生成地 是 邵阳 深圳
select
*
from
product
where pro_city in ("邵阳", "深圳") ;
-- 价格在 100 -200 之间 帽子 between 100 and 2000 有区间
select
*
from
product
where pro_name like "%帽子%"
and pro_price between 100
and 2000 ;
-- 别名
select
pro_name as '产品名称',
pro_price as '产品价格'
from
product ;
-- 根据产品的价格排序 从 低到高 order by 默认升序 desc降序
select
*
from
product
order by pro_price desc,
pro_date ;
-- 去重复数据 SQL SELECT DISTINCT 和 group by
-- 每种类型的产品平均价格 分组 group by
-- 为什么? group by 目的 求平均值 最大值 最小值
-- 一般group by 和函数一起使用 ,但是函数可以单独使用
-- 查询语句中有 group by 那么 select 字段 可以包含哪些? 1 和聚合函数使用的字段 2 group by 的字段
-- where HAVING 过滤数据 where 在分组之前过滤数据 HAVING 分组之后 过滤数据
-- 每种类型的产品平均价格 大于 100
select
avg(pro_price) as pro_pric_avg,
pro_type
from
product
group by pro_type
having pro_pric_avg > 100 ;
-- 每种类型的产品平均价格 大于 100(having) 而且产品必须是上架(where)
select
avg(pro_price) as pro_pric_avg,
pro_type
from
product
where pro_state = 2
group by pro_type
having pro_pric_avg > 100 ;
-- 每种类型的产品平均价格 从高到底 group by order by
select
avg(pro_price) as pro_pric_avg,
pro_type
from
product
group by pro_type
order by pro_pric_avg desc ;
-- 每种类型的产品平均价格 大于 100 从高到底
select
avg(pro_price) as pro_pric_avg,
pro_type
from
product
group by pro_type
having pro_pric_avg > 100
order by pro_pric_avg desc ;
-- 产品必须是上架每种类型的产品平均价格 大于 100 从高到底
select
avg(pro_price) as pro_pric_avg,
pro_type
from
product
where pro_state = 2
group by pro_type
having pro_pric_avg > 100
order by pro_pric_avg desc ;
-- 产品必须是上架每种类型的产品平均价格 大于 100 从高到底 取前2条数据
select
avg(pro_price) as pro_pric_avg,
pro_type
from
product
where pro_state = 2
group by pro_type
having pro_pric_avg > 100
order by pro_pric_avg desc
limit 2 ;