DB 提供了关连式资料库的查询语言 SQL (Structured Query Language)是一种非常口语化既易学又易懂的语法 此一语言几乎是每个资料库系统都必须提供的用以表示关连式的操作包含了资料的定义(DDL)以及资料的处理(DML)SQL原来拼成SEQUEL这语言的原型以系统 R的名字在 IBM 圣荷西实验室完成经过IBM内部及其他的许多使用性及效率测试其结果相当令人满意并决定在系统R 的技术基础发展出来 IBM 的产品而且美国国家标准学会(ANSI)及国际标准化组织(ISO)在遵循一个几乎是以 IBM SQL 为基础的标准关连式资料语言定义
一资料定义 DDL(Data Definition Language)
资料定语言是指对资料的格式和形态下定义的语言他是每个资料库要建立时候时首先要面对的举凡资料分哪些表格关系表格内的有什麽栏位主键表格和表格之间互相参考的关系等等都是在开始的时候所必须规划好的
1建表格
CREATE TABLE table_name(
column DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY]
column DATATYPE [NOT NULL]
)
说明
DATATYPE 是资料的格式详见表
NUT NULL 可不可以允许资料有空的(尚未有资料填入)
PRIMARY KEY 是本表的主键
2更改表格
ALTER TABLE table_name
ADD COLUMN column_name DATATYPE
说明增加一个栏位(没有删除某个栏位的语法
ALTER TABLE table_name
ADD PRIMARY KEY (column_name)
说明更改表得的定义把某个栏位设为主键
ALTER TABLE table_name
DROP PRIMARY KEY (column_name)
说明把主键的定义删除
3建立索引
CREATE INDEX index_name ON table_name (column_name)
说明对某个表格的栏位建立索引以增加查询时的速度
4删除
DROP table_name
DROP index_name
二的资料形态 DATATYPEs
smallint
位元的整数
interger
位元的整数
decimal(ps)
p 精确值和 s 大小的十进位整数精确值p是指全部有几个数(digits)大小值s是指小数
点后有几位数如果没有特别指定则系统会设为 p=; s=
float
位元的实数
double
位元的实数
char(n)
n 长度的字串n不能超过
varchar(n)
长度不固定且其最大长度为 n 的字串n不能超过
graphic(n)
和 char(n) 一样不过其单位是两个字元 doublebytes n不能超过这个形态是为
了支援两个字元长度的字体例如中文字
vargraphic(n)
可变长度且其最大长度为 n 的双字元字串n不能超过
date
包含了 年份月份日期
time
包含了 小时分钟秒
timestamp
包含了 年月日时分秒千分之一秒
三资料操作 DML (Data Manipulation Language)
资料定义好之后接下来的就是资料的操作资料的操作不外乎增加资料(insert)查询资料(query)更改资料(update) 删除资料(delete)四种模式以下分 别介绍他们的语法
1增加资料
INSERT INTO table_name (columncolumn)
VALUES ( valuevalue )
说明
若没有指定column 系统则会按表格内的栏位顺序填入资料
栏位的资料形态和所填入的资料必须吻合
table_name 也可以是景观 view_name
INSERT INTO table_name (columncolumn)
SELECT columnxcolumny FROM another_table
说明也可以经过一个子查询(subquery)把别的表格的资料填入
2查询资料
基本查询
SELECT columncolumns
FROM table_name
说明把table_name 的特定栏位资料全部列出来
SELECT *
FROM table_name
WHERE column = xxx
[AND column > yyy] [OR column <> zzz]
说明
*表示全部的栏位都列出来
WHERE 之后是接条件式把符合条件的资料列出来
SELECT columncolumn
FROM table_name
ORDER BY column [DESC]
说明ORDER BY 是指定以某个栏位做排序[DESC]是指从大到小排列若没有指明则是从小到大
排列
组合查询
组合查询是指所查询得资料来源并不只有单一的表格而是联合一个以上的
表格才能够得到结果的
SELECT *
FROM tabletable
WHERE lum=lumn
说明
查询两个表格中其中 column 值相同的资料
当然两个表格相互比较的栏位其资料形态必须相同
一个复杂的查询其动用到的表格可能会很多个
整合性的查询
SELECT COUNT (*)
FROM table_name
WHERE column_name = xxx
说明
查询符合条件的资料共有几笔
SELECT SUM(column)
FROM table_name
说明
计算出总和所选的栏位必须是可数的数字形态
除此以外还有 AVG() 是计算平均MAX()MIN()计算最大最小值的整合性查询
SELECT columnAVG(column)
FROM table_name
GROUP BY column
HAVING AVG(column) > xxx
说明
GROUP BY: 以column 为一组计算 column 的平均值必须和 AVGSUM等整合性查询的关键字
一起使用
HAVING : 必须和 GROUP BY 一起使用作为整合性的限制
复合性的查询
SELECT *
FROM table_name
WHERE EXISTS (
SELECT *
FROM table_name
WHERE conditions )
说明
WHERE 的 conditions 可以是另外一个的 query
EXISTS 在此是指存在与否
SELECT *
FROM table_name
WHERE column IN (
SELECT column
FROM table_name
WHERE conditions )
说明
IN 后面接的是一个集合表示column 存在集合里面
SELECT 出来的资料形态必须符合 column
其他查询
SELECT *
FROM table_name
WHERE column LIKE x%
说明LIKE 必须和后面的x% 相呼应表示以 x为开头的字串
SELECT *
FROM table_name
WHERE column IN (xxxyyy)
说明IN 后面接的是一个集合表示column 存在集合里面
SELECT *
FROM table_name
WHERE column BETWEEN xx AND yy
说明BETWEEN 表示 column 的值介于 xx 和 yy 之间
3更改资料
UPDATE table_name
SET column=xxx
WHERE conditoins
说明
更改某个栏位设定其值为xxx
nditions 是所要符合的条件若没有 WHERE 则整个 table 的那个栏位都会全部被更改
4删除资料
DELETE FROM table_name
WHERE conditions
说明删除符合条件的资料
说明关于WHERE条件后面如果包含有日期的比较不同数据库有不同的表达式具体如下
()如果是ACCESS数据库则为WHERE mydate>##
()如果是ORACLE数据库则为WHERE mydate>cast( as date)
或WHERE mydate>to_date(yyyymmdd)
在Delphi中写成
thedate= ;
querySQLadd(select * from abc where mydate>cast(++thedate++ as date));
如果比较日期时间型则为
WHERE mydatetime>to_date( ::yyyymmdd hh:mi:ss)