我曾为朋友写过一点关于SQL语句的文章
先贴上查询部分
奇怪:查询后记录本来就在表中呀,是要显示在DBGrid中吧,简单!用DbSource连接Query和DBGrid就行了)
SELECT 语句从数据库一个或多个数据表中获取数据,并将查询结果提供给用户。从多个数据表中获取数据称为连接查询(JOIN)。
SELECT [DISTINCT]column-list
FROM Table-reference
[WHERE search-condition]
[ORDER BY order-list]
[HAVING having-condition]
[UNION select-expr]
1.SELECT 子句:SELECT 子句指定此查询要检索的数据项(Column-list),各选项间用“,”隔开。按照从左到右的顺序,每个数据选项产生一个列的查询结果。
例如:1-1). 要从雇员表中查出所有雇员的电话:
SELECT 雇员姓名,雇员电话
FROM 雇员表
这里,“雇员姓名,雇员电话”是表“雇员表”的字段名。
例1-2). 要从部门表中查出所有信息。
SELECT * FROM 部门表
“SELECT *”表示选择一个表中所有列的内容,且从左到右的顺序和表本身相同。这在刚录入一个新库想马上看看表结构和内容时很有用。
ANSI/ISO标准规定,SELECT 语句可以有一个所有列选择或一个选择表,但不能两者兼有。但是,许多SQL实现都简单地将“*”当作选择表中的一个元素来处理。所以,以下查询
SELECT *,(部门编号)
FROM 部门表
在大多数商用SQL版本(如DB2,ORACLE 和SQL SERVER)中是合法的,但却不符合ANSI/ISO标准。
SELECT子句中的数据项除了可以为查询表的字段外,还可以为常数或SQL表达式。SQL表达式可以是对所存储的数据进行计算后的计算列。ANSI/ISO SQL标准规定表达式中可用四种算术运算:加(X+Y)、减(X-Y)、乘(X*Y)、除(X/Y),还可以用括号组成更复杂的表达式,如:
(X*1.05)+(Y/3)
SQL表达式还可以是字符串运算、内建函数。函数有:SUM,COUNT,AVG,MAX,MIN。
SUM():计算一列的总和。
COUNT():计算一列中值的个数。
COUNT(*):计算查询结果的行数。
AVG():计算一列的平均值。
MAX():求一列中最大的值。
MIN():求一列中最小的值。
2.FROM 子句:FROM 子句指明从哪些数据表取得数据。Table-reference 可以是一个数据表,或者是用逗号隔开的多个数据表,还可以使用按照SQL-92标准定义的内连接(INNER)或者外连接(OUTER)。这些表称为此SQL语句的源表,因为查询结果都源于它们。
3.WHERE语句:WHERE子句限制查询取得的数据必须符合search-condition中的条件。
在WHERE 子句中可以使用比较操作符(>,=,<,<>,>=,<=),例如:
例3-1)列出所有薪金大于8000元的雇员
SELECT * FROM 雇员表
WHERE 雇员薪金>8000
SQL语句还可以检索某列数据值是否与一个指定的模式相匹配(LIKE)。这种模式可能包括一个或多个通配符。这些字符用特殊方式解释。通配符百分号(%)可以和零个或多个字符组成的任何字符串相匹配。
4. ORDER BY 子句:ORDER BY 子句指明取得数据的排序方式。
例4-1)将取得的记录按照雇员的薪金多少排序(默认为升序)。
SELECT * FROM 雇员表
ORDER BY 雇员薪金
若要按降序排列,则:
例4-2)
SELECT * FROM 雇员表
ORDER BY 雇员薪金 DESC
5.GROUP BY 子句:GROUP BY 子句将记录按照 group-list 中指定的字段来分组。
例如5-1:要把雇员表中的雇员按部门分组,其SQL语句为:
SELECT * FROM 雇员表
GROUP BY 部门代号,雇员编号,雇员姓名,雇员电话,雇佣日期,雇员薪金,雇员职务
HAVING子句:HAVING子句是和GROUP BY 子句一起使用的一个条件子句,分组中不符合HAVING子句中having-condition条件的记录不会出现在查询结果中。
UNION子句:UNION子句将两个或者多个SELECT语句结合起来产生一个单一的数据表。