免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1100 | 回复: 0
打印 上一主题 下一主题

SQL for Mysql [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-22 10:03 |只看该作者 |倒序浏览

                SQL是英文Structured Query
Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle,
Sybase, Microsoft SQL Server,
Access等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select, Insert, Update, Delete,
Create, 以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。下面,我们就来详细介绍一下SQL语言的基本知识。
数据查询
在众多的SQL命令中,select语句应该算是使用最频繁的。Select语句主要被用来对数据库进行查询并返回符合用户查询标准的结果数据。Select语句的语法格式如下:
select column1 [, column2,etc] from tablename
[where condition];
([]
表示可选项)
select语句中位于select关键词之后的列名用来决定那些列将作为查询结果返回。用户可以按照自己的需要选择任意列,还可以使用通配符“*”来设定返回表格中的所有列。
select语句中位于from关键词之后的表格名称用来决定将要进行查询操作的目标表格。
Select语句中的where可选从句用来规定哪些数据值或哪些行将被作为查询结果返回或显示。在where条件从句中可以使用以下一些运算符来设定查询标准:
= 等于
> 大于
= 大于等于
不等于
除了上面所提到的运算符外,LIKE运算符在where条件从句中也非常重要。LIKE运算符的功能非常强大,通过使用LIKE运算符可以设定只选择与用户规定格式相同的记录。此外,我们还可以使用通配符“%”用来代替任何字符串。举例如下:
select firstname, lastname, city from employee where firstname LIKE ‘E%’;
(注意,字符串必须被包含在单括号内)
上述SQL语句将会查询所有名称以E开头的姓名。或者,通过如下语句:
select * from
employee where firstname = ‘May’;
查询所有名称为May的行。
创建表格mssql/mysql学习
SQL语言中的create table语句被用来建立新的数据库表格。Create table语句的使用格式如下: create table
tablename (column1 data type, column2 data type, column3 data type);
如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件选项:
create table tablename (column1 data
type [constraint], column2 data type [constraint], column3 data type
[constraint]);
举例如下: create table employee (firstname varchar(15), lastname
varchar(20), age number(3),address varchar(30),city varchar(20));
简单来说,创建新表格时,在关键词create
table后面加入所要建立的表格的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件等。注意,所有的SQL语句在结尾处都要使用“;”符号。
使用SQL语句创建的数据库表格和表格中列的名称必须以字母开头,后面可以使用字母,数字或下划线,名称的长度不能超过30个字符。注意,用户在选择表格名称时不要使用SQL语言中的保留关键词,如select,
create, insert等,作为表格或列的名称。
数据类型用来设定某一个具体列中数据的类型。例如,在姓名列中只能采用varchar或char的数据类型,而不能使用number的数据类型。
SQL语言中较为常用的数据类型为:
char(size):固定长度字符串,其中括号中的size用来设定字符串的最大长度。Char类型的最大长度为255字节。
varchar(size):可变长度字符串,最大长度由size设定。
number(size):数字类型,其中数字的最大位数由size设定。
Date:日期类型。
number(size,d):数字类型,size决定该数字总的最大位数,而d则用于设定该数字在小数点后的位数。
最后,在创建新表格时需要注意的一点就是表格中列的限制条件。所谓限制条件就是当向特定列输入数据时所必须遵守的规则。例如,unique这一限制条件要求某一列中不能存在两个值相同的记录,所有记录的值都必须是唯一的。除unique之外,较为常用的列的限制条件还包括not
null和primary key等。Not null用来规定表格中某一列的值不能为空。Primary key则为表格中的所有记录规定了唯一的标识符。
mssql/mysql学习向表格中插入数据
SQL语言使用insert语句向数据库表格中插入或添加新的数据行。Insert语句的使用格式如下:
insert into tablename
(first_column,...last_column) values (first_value,...last_value);
例如:
insert into employee (firstname, lastname, age, address, city) values (‘Li’,
‘Ming’, 45, ‘No.77 Changan Road’, ‘Beijing”);
简单来说,当向数据库表格中添加新记录时,在关键词insert
into后面输入所要添加的表格名称,然后在括号中列出将要添加新值的列的名称。最后,在关键词values的后面按照前面输入的列的顺序对应的输入所有要添加的记录值。
更新记录
SQL语言使用update语句更新或修改满足规定条件的现有记录。Update语句的格式为:
update
tablename set columnname = newvalue [, nextcolumn = newvalue2...] where
columnname OPERATOR value [and|or column OPERATOR value];
例如:
update
employee set age = age+1 where first_name= ‘Mary’and last_name= ‘Williams’;
使用update语句时,关键一点就是要设定好用于进行判断的where条件从句。
删除记录
SQL语言使用delete语句删除数据库表格中的行或记录。Delete语句的格式为:
delete from tablename where
columnname OPERATOR value [and|or column OPERATOR value];
例如:
delete
from employee where lastname = May;
简单来说,当需要删除某一行或某个记录时,在delete
from关键词之后输入表格名称,然后在where从句中设定删除记录的判断条件。注意,如果用户在使用delete语句时不设定where从句,则表格中的所有记录将全部被删除。
删除数据库表格
在SQL语言中使用drop table命令删除某个表格以及该表格中的所有记录。Drop table命令的使用格式为:
drop table tablename;
例如:
drop table employee;
如果用户希望将某个数据库表格完全删除,只需要在drop table命令后输入希望删除的表格名称即可。Drop
table命令的作用与删除表格中的所有记录不同。删除表格中的全部记录之后,该表格仍然存在,而且表格中列的信息不会改变。而使用drop
table命令则会将整个数据库表格的所有信息全部删除。
以上,我们对SQL语言主要的命令和语句进行了较为详细的介绍。应该说SQL语句的语法结构和风格还是相当简单和直观的,只要用户结合实践多加练习,一定会在短期内迅速掌握。
我们日常使用SQL语言的工作过程中,使用最多的还是从已经建立好的数据库中查询信息。
SQL功能与特性
SQL命令的一些基本功能,通过SQL命令,程序设计师或数据库管理员(DBA)可以:
(一)建立数据库的表格。(包括设置表格所可以使用之空间)
(二)改变数据库系统环境设置。  
(三)针对某个数据库或表格,授予用户存取权限。  
(四)对数据库表格建立索引值。  
(五)修改数据库表格结构。(新建、删除或是修改表格字段)  
(六)对数据库进行数据的新建。  
(七)对数据库进行数据的删除。  
(八)对数据库进行数据的修改。  
(九)对数据库进行数据的查询。  
这几项便是通过SQL命令可以完成的事情,看起来是不是比起“查询”两个字所代表的功能要多的多了呢?
SQL语法的分类  
其实SQL命令并不是非常多,可是要把SQL用到出神入化,却也只需要短短几个命令便够,因为SQL命令是针对关系型数据库所建立出来的语法叙述,所以SQL在这类数据库中所发挥的功能非常的强,以下将针对在VB中常用的SQL语法基本命令加以分类介绍。在说明SQL的命令以及使用语法之前,以下将SQL做了的分类,在致上SQL语法所使用到的类型,可以说都已包含在这些类别当中。  
第一类、属性词(Predicates)  
在SQL命令中用来指明所要选择的记录的方式。如ALL、TOP与DISTINCT等等。  
第二类、声明(Declaration)  
针对SQL
Parameter或Parameter Query
的名称与数据类型做声明,如PARAMETERS的声明等等。  
第三类、条件子句(Clause)  
在SQL的查询中,利用一些表达式定义出查询的条件,以缩小寻找的范围,如WHERE。  
第四类、运算符(Operator)与操作数(Operation)  
在SQL的查询中,与Operation共同组成表达式(Expression),如BETWEEN....AND
运算符与INNER
JOIN操作数。  
第五类、函数(Function)  
一些SQL常见的函数,像是AVG()是求算数平均数的函数。  
第六类、SQL语句(Statement)  
SQL的语句,可以说是SQL语法的主体,用来对某一个特定的数据库发出指示,并返回相关的数据,而SQL的语法结构,基本上可以利用下面的式子来表示:命令+条件子句
例如:  SELECT*FROM
TAB WHERE
TAB.NAME=’A’  
其中的“FROM....WHERE”便是一个条件子句,其实SQL的语法并不难,您只需记住这样的一个规则,相信可以很快的了解SQL用法。
SQL语法与命令  
SELECT
语句  
SELECT[predicate]{*|table.*|[table.]field [,[table.]field2[,...]]} [AS
alias1 [,alias2[,...]]]  
FROM tableexpression [,...][IN
externaldatabase]  
[WHERE...]  
[GROUP
BY...]  
[HAVING...]  
[ORDER BY...]  
[WITH OWNERACCESS
OPTION]  
SELECT
语句包括下面几个部分  
predicate  
如前面所述,包括了ALL,DISTINCT,DISTINCTROW,与TOP
我们可以利用这样的语句去限制查询后所得的结果。  
*  :从指定表格中指定所有的字段。  
Table
:针对被选择出的记录的字段,所指定表格的名称。
field1,field2
:想要读取数据的字段名称,如果包含了一个以上的字段,会依照列出的顺序来读取数据。
alias1,alias2 :用来替代在表格实际字段名称的化名。
tableexpression  :表格名称或包含我们所想要的数据的表格。  
externaldatabase  :若使用到不是目前的数据库则将其名字定义在externaldatabase当中。  
ALL,DISTINCT,DISTINCTROW,TOP属性词用法  
SELECT
[ALL|DISTINCT|DISTINCTROW|[TOP n[PERCENT]]] FROM
table  
ALL  :若是您不指定任何的字段数据,则Microsoft Jet数据库引擎(database
engine)将会选择所有的字段,并依据所定的条件查询出需求数据集。
例如下面这两个例子将会具有相同的效果,都会从职员表格中返回所有字段的数据。
如:  若是我们要查询出职员表格中的所有记录,可以通过下面的语句来完成。  SELECT
ALL* FROM
职员表格;
DISTINCT  :对某个表格所选择的字段数据,略过重复的情况,也就是说,针对某个字段查询出来的记录结果是唯一的。
例如有许多存放在职员表格的职员数据,也许会具有相同的姓名,所以若是我们用SQL语句中的SELECT
DISTINCT,则查询出来的结果将会针对不一样的姓名加以筛选。若是您把DISTINCT
加以省略,则这样的查询会显示所有的记录。  
DISTINCTROW  :将整条记录重复的记录忽略掉,而不是只有针对某一个字段的数据。  
table  :
指定查询记录所需要的表格。  
例如:  
SELECT
DISTINCTROW 公司名称  
FROM 顾客表格 INNER JOIN 订单表格  
ON
顾客表格.顾客ID=订单表格.顾客ID  
ORDER BY 公司名称;  
如果您忽略 DISTINCTROW
则会对每个公司产生一行以下的订单数据。此外,若是DISTINCTROW只有用在一个表格当中,则会被省略掉。  
TOP  
从第一条或最后一条开始(利用ORDER
BY条件子句),返回特定条数的数据。  
例如:  
当您想要知道在2000年,班上前25名的学生姓名数据时,您可以输入这样的语句:  
SELECT
TOP 25 学生姓名  
FORM 学生表格  
WHERE 毕业年份=1994  
ORDER BY 毕业成绩平均分数
DESC;  
如果您没有加上ORDER BY
这行条件的话,您所得到的数据,将会随机的数据。此外,在TOP语句之后,除了可以加上数字以外,还可以利用保留  
字PERCENT来查询。  
例如:  
SELECT
TOP 10 PERCENT学生姓名  
FROM学生表格  
WHERE毕业年份=1994  
ORDER
BY毕业成绩平均DESC;  
PARAMETERS(参数)声明的用法  
对于参数型的查询语法中,对参数的名称以及数据类型作
声明的操作。  
PARAMETERS name datatype[,name
datatype[,...]]  
name  
PARAMETERS的名称。您可以把参数名称当作字符串来使用,若是名称中包含了空字符串,可以利用中括号来处理,例如:“VBeden”。  
datatype  
输入参数的数据类型。  
例如:  
若是您在查询时,需要机动的输入姓名
,可以利用下列的方式完成:  
PARAMETERS “输入姓名” Text;  
SELECT*  
FROM
职员表格  
WHERE姓名=“输入姓名:”;  
ORDER
BY条件语句  
此条件子句,通常与SELECT语句合并使用目的是将查询的结果,依照指定字段加以排序。  
SELECT
fieldlist  
FROM table  
WHERE selectcriteria  
ORDER BY
field[ASC|DESC][,field2[ASC|DESC][,...]]  
fieldlist  
欲查询的字段名称。其中可以与ALL,DISTINCT,DISINCTROW,或TOP一起来使用。  
table  
欲查询的表格名称。  
selectcriteria  
查询的标准设置。  
field1  
指定要依照那个字段作为排序的依据,若是你没有加上ORDER
BY查询出的数据集将不会作排序的操作。  
ASC  
递增顺序类别。(默认值)  
DESC  
递减顺序类别。  
例如:  
或是我们要将输出数据依据出生的先后次序排列,可以利用下面的命令。  
SELECT
姓名,生日  
FROM 职员表格  
ORDER BY 生日  
SELECT LastName,FirstName  
FROM
Employees  
ORDER BY LastName ASC;  
IN
条件子句  
指定要速胜哪一个外部数据库的表格。(必须是Microsoft
Jet数据库引擎所可以连接的数据库,如dBase,Paradox等等)  
SELECT|INSERT]INTO destination
IN  
{path|["path" "type"]|[""[type;DATABASE=path]]}  
FROM
tableexpression IN  
{path|["path"
"type"]|[""[type;DATABASE=path]]}  
destination  
欲插入数据的外部表格名称。  
tableexpression  
表格名称或是被读取数据的表格名称。这个参数可以是一个单一的表格名称,或是一段已经被存储的SQL查询等。  
path  
包含该表格的完整路径名称。  
type  
数据库的类型名称,
通常是当数据库部属于Jet database时才会使用。(例如:dBASE III,dBASE IV,Paradox 3.x,Paradox 4.x,或
Btrieve)  
例如:下面这两段的意义相同  
PartA....FROM Table  
IN ""[dBASE
IV;DATABASE=C:\DBASE\DATA\SALES;];  
PartB....FROM Table  
IN
"C:\DBASE\DATA\SALES" "dBASE IV;"  
例如:Microsoft Jet database  
SELECT
顾客编号  
FROM 顾客表格  
IN CUSTOMER.MDB  
WHERE 顾客编号 Like
"A*";  
其中CUSTOMER.MDBO 为Jet database 的数据库名称,其中包含了顾客表格。  
例如:dBASE III or
IV  
SELECT 顾客编号  
FROM 顾客表格  
IN "C:\DBASE\DATA\SALES" "dBASE
IV;"  
WHERE 顾客编号 Like "A*";  
所以当我们使用不同于ACCESS 的数据库时,必须指明该数据库的类型名称。
HAVING 条件子句  
指定一特定的分组记录,并满足HAVING
所指定的条件或状态,但条件是针对分组的条件设置。  
SELECT fieldlist  
FROM table  
WHERE
selectcriteria  
GROUP BY groupfieldlist  
HAVING
groupcriteria  
fieldlist  
显示被查询的字段名称。(可与ALL,DISTINCT,DISTINCTROW,或TOP相结合)  
table  
欲查询数据的表格名称。  
selectcriteria  
选取标准。  
groupfieldlist  
分组记录的字段名称,到多10个字段。而这些字段的顺序决定最高到最低的分组阶层。  
groupcriteria  
决定什么样的分组记录要被显示。  
HAVING跟WHERE
的用法相当类似,不同之处在于HAVING必须用于GROUP之后的分组数据上。  
例如:  
SELECT
分类编,Sum(库存数量)  
FROM 产品表格  
GROUP BY 分类编号  
HAVING Sum(库存数量)> 100
AND 产品名称 LIKE "*纸";  
GROUP BY 条件子句  
依据指定的字段,将具有相同数值的记录合并成一条。  
SELECT
fieldlist  
FROM table  
WHERE criteria  
GROUP BY
groupfieldlist  
fieldlist  
欲读取的字段名称。(可与ALL,DISTINCT,DISTINCTROW,或TOP合并使用)  
table  
被查询的表格名称。  
groupfieldlist  
分组记录的字段名称,到多10个字段,而这些字段的顺序决定最高到最低的分组层次。  
例如:  
SELECT
姓名,Count(姓名)AS 职员姓名  
FROM 职员表格  
WHERE 部门名称=’业务部’  
GROUP BY
姓名  
FROM 条件子句  
指定表格名称或是查询,其中包含列在SELECT语句的字段数据。  
SELECT
fieldlist  
FROM tableexpression[IN
externaldatabase]  
fieldlist  
表格中的字段名称。(可与ALL,DISTINCT,DISTINCTROW,或TOP相结合)  
tableexpression  
表格名称,或多个表格的算式。  
externaldatabase  
若该表格参考到外部的数据库时,将其完整的路径名称记下。  
例如:  
从职员表格下,查询出所有姓名字段的数据(只有姓名字段被查询,其他则不显示)。  
SELECT
姓名 FROM 职员表格;  
WHERE 条件子句  
指定查询的条件与限制。  
SELECT fieldlist  
FROM
tableexpression  
WHERE
criteria  
fieldlist  
字段名称。(可与ALL,DISTINCT,DISTINCTROW,或TOP相结合)  
tableexpression  
表格名称,或多个表格的算式。  
criteria  
查询的结果,必须依照这一限制标准。  
例如:  
要查询出职员表格中,所有姓氏是李的数据,可以用下面的语句。  
SELECT
姓名  
FROM 职员表格  
WHERE 姓氏=’李’;
BETWEEN...AND
运算符  
决定某一人数值是否介于特定的范围之内,此运算符只可以用在SQL的语句中。  
expr[Not]BETWEEN value1 AND
value2  
expr  
指定要加以计算的字段与表达式的组合。  
value1,value2  
所指明的数值范围。  
例如:  
若是要从职员表格查询出所有年龄介于25-30岁的员工,可以利用下面的程序来做。  
SELECT
姓名,年龄 BETWEEN 25 AND 30  
FROM 职员表格;  
LIKE
操作数  
用来将一字符串与另一特定字符串样式(pattern)比较,并将符合该字符串样式的记录过滤出来。  
expression LIKE
"pattern"  
expression  
使用在WHERE条件子句,SQL表达式。  
pattern  
用以比较的字符串样式。  
例如:  
若是你要查询出所有以“李”为首的姓氏,可以利用下面的式子。  
Like
"李*"  
LIKE操作数的多种范例:  
1、多个字符:  
(1)"a*a"  
可筛选:"aa","aBa","aBBBa",不能筛选:"aBC"  
(2)"*ab*"  
可筛选:"abc","AABB","Xab",不能筛选:"aZb","bac"  
2、特殊字符:  
"a“*”a"  
可筛选:"a*a",不能筛选:"aaa"  
3、单一字符:  
"a?a"  
可筛选:"aaa","a3a","aBa",不能筛选:"aBBBa"  
4、单一数字:  
"a#a"  
可筛选:"a0a","a1a","a2a",不能筛选:"aaa","a10a"  
5、字符范围:  
"“a-z”"  
可筛选:"f","p","j",不能筛选:"2","&"  
6、指定字符以外部范围:  
"“!a-z”"  
7、指定非数字:  
"“!0-9”"  
可筛选:"A","a","&","~",不能筛选:"0","1","9"  
8、组合式结构:  
"a“!b-m”#"  
可筛选:"An9","az0","a99",不能筛选:"abc","aj0"  
SQL数字函数  
1、AVG:算数平均数  
AVG(expr)  
expr  
字段名称或表达式。  
例如:  
若要计算职员身高超过165厘米的职员平均身高,可以利用下面的SQL语句来完成。  
SELECT
Avg(身高)  
AS 平均身高  
FROM 职员表格 WHERE 身高>
165;  
2、COUNT:计算记录条数  
COUNT(expr)  
expr  
字段名称或表达式。  
例如:  
若是要统计出业务部门的职员人数,并查询出职员的姓名,可以利用下面的程序。  
SELECT
Count(姓名) AS 职员姓名  
FROM 职员表格  
WHERE
部门名称=’业务部’;  
3、FIRST与LAST:返回某字段的第一条数据与最后一条数据。  
FIRST(expr)  
LAST(expr)  
expr  
字段名称或表达式。  
例如:  
若是要找出货品数量字段的第一条数据与货品价格字段的最后一条数据时,可以利用下面的查询方式。  
SELECT
FIRST(货品数量),LAST(货品价格)  
FROM
订单表格  
4、MAX,与MIN:返回某字段的最大值与最小值。  
用法同FIRST与LAST。  
5、SUM:返回某特定字段或是运算的总和数值。  
SUM(expr)  
expr  
字段名称或表达式。  
例如:  
要计算出货品总价,可使用下面的程序。  
SELECT  
Sum(单位价格*货品数量)  
AS
货品总价 FROM
订单表格  
多层SQL查询  
顾名思义,多层的SQL查询的便在于:“在一个SQL语句中可以包含另一个SQL查询语句,形成内部嵌套的查询类型。”  
comparison[ANY|ALL|SOME](sqlstatement)  
expression[NOT]IN
(sqlstatement)  
[NOT]EXISTS(sqlstatement)  
comparison  
将表达式与内层查询的结果比较的操作。  
expression  
对内层查询的结果作搜索的表达式。  
sqlstatement  
为SELECT语句构成的SQL查询,必须用()将该语句括起来。  
例如:  
我们先从订单表格当中,查询出所有的单位,再将产品表格中的单位与的一一对比,查询出所有高于订单表格的单位价格的记录。  
SELECT
* FROM 产品表格  
WHERE 单位价格> ANY (SELECT 单位价格 FROM 订单表格 WHERE 折扣>
=.25);
SQL与数据库的维护  
表格的建立
将SQL中的基本语法作了一番介绍以后,但大多是偏向于数据库数据的查询与过滤,但实际上,我们通过SQL命令所可以做的事还有很多,接下来要介绍的便是如何利用SQL的语法命令来建立一个数据库中的表格。  
CREATE
TABLE语句  
我们可以利用这个命令,来建立一个全新的表格,但前提则是:数据库必须已经存在。  
CREATE TABLE
table(field1 type[(size)][index1][,field2
type[(size)][index2][,...]][,nultifieldindex[,...]])  
table  
欲建立的新的表格名称。  
field1,field2  
在新表格中的新的字段名称,到少要一个字段以上。  
type  
字段的数据类型。  
size  
字段的大小。  
index1,index2  
利用CONSTRAINT条件子句定义一个单一字段的索引名称。  
multifieldindex  
利用CONSTRAINT条件子句定义一个多重字段的索引名称。  
例如:  
建立一个拥有职员姓名与部门字段的表格。  
CREATE
TABLE 职员表格 (姓名TEST,部门TEST,职员编号 INTEGER CONSTRAINT职员字段索引PRIMARY
KEY)  
在这一个范例中,我们建立了一个表格名称为“职员表格”的表格,并且定义了该表格的主键值,以限制数据不能重复输入。  
表格索引的建立  
CREATE
INDEX语句  
这个命令主要是对一个已存在的表格建立索引,其用法如下:  
CREATE[UNIQUE]INDEX index ON
table(field[ASC|DESC][,field[ASC|DESC],...])  
[WITH
{PRIMARY|DISALLOWNULL|IGNORENULL}]  
index  
欲被建立的索引名称。  
table  
欲建立索引的表格名称。  
field  
欲被建立的索引的字段名称。并可通过DESC保留字,来决定索引的顺序。  
例如:  
在职员表格中建立一个索引。  
CREATE
INDEX 新索引名称  
ON 职员表格(姓名部门);  
表格的字段更新  
CONSTRAINT条件子句  
CONSTRAINT
的功能是类似索引(INDEX)的,虽然CONSTRAINT 也可以建立表格之间的关联性。  
单一字段索引:  
CONSTRAINT
name{PRIMARY KEY|UNIQUE|REFERENCES
foreigntable[(foreignfield1,foreignfield2)]}  
多字段索引:  
CONSTRAINT
name  
{PRIMARY
KEY(primary1[,primary2[,...]])  
|UNIQUE(unique1[,unique2[,...]])  
|FOREIGN
KEY (ref1[,ref2[,...]])  
|REFERENCES
foreigntable[(foreignfield1[,foreignfield2[,...]])]}  
name  
要被建立的CONSTRAINT名称。  
primary1,primary2  
被用来设计成主键值的字段名称(可一个以上)。  
unique1,unique2  
被用来设计成唯一键值的字段名称(可一个以上)。  
foreign
key  
字段名称,或是参考到别的表格中字段的字段名称。  
foreigntable  
如前所述,被参考到的表格。  
foreignfield1,foreignfield2  
在参考到的表格当中,被ref1,ref2字段所指定的字段。如果被参考的字段是参考表格中的主键值,你也可以省略这个条件子句。  
例如:  
当我们要建立一个新的职员数据表格,表格包含姓名、部门名称与生日三个字段,且由这三个字段建立一个唯一的索引时,可以使用下面这段SQL的语句。  
CREATE
TABLE 职员数据表格  
(姓名 TEST,部门名称 TEST,生日 DATETIME,CONSTRAINT 职员数据表格限制
UNIQUE(姓名,部门名称,生日));  
以上是SQL中,与数据库表格建立相关的命令,你可以利用这些命令,通过SQL的语句,将数据库表格完整的建立出来,接下来的章节,将针对数据库建立之后的维护与增删所要使用的SQL语句作一介绍。
表的删除  
DELETE语句  
我们可以利用DELETE语句,将表格中的记录删除。(注意:记录被删除后,无法再复原,所以条件设置要正确)  
DELETE[table.*]  
FROM
tableexpression  
WHERE
criteria  
table  
欲删除记录的表格名称,也可以用*来取代。  
tableexpression  
一个或一个以上表格的名称。此一参数可以为单一的表格名称或是从INNER
JOIN,LEFT JOIN,或RIGHTJOIN
等运算所得到的结果。  
criteria  
决定表格中记录要被删除的标准。  
例如:  
若是我们要将职员表格中姓名姓名叫做’李名’的记录删除,我们可以利用下面的SQL语句来完成。  
DELETE
* FROM 职员表格  
WHERE
姓名=’李名’;  
数据库表格相关的操作命令  
SQL除了可以作为查询与数据库表格的建立的工具外,对于数据库与表格的新建、删修、与维护,与具有相当不错的功能,若是读者使用SQL命令得宜,对于整个效率的提高有着很大的帮助,所以对于SQL语句所带来的优势,常常会遇到一个情况,就是:“当我们对多个表格作复杂与多步骤的处理时,或许SQL只要一个语句就可以完成所有的需求与目标”,乍看一下,或许觉得有些玄妙,但是接下来的章节,会让你了解其中的妙处。  
SELECT...INTO语句  
我们可以通过这个命令,利用既存表格查询,来建立一个新表格的查询语句。  
SELECT
field1[,field2[,...]]INTO newtable[IN externaldatabase]  
FROM
source  
field1,field2  
欲拷贝到新表格的字段名称。  
newtable  
欲建立之新表格的名称,不可是已经存在的表格。  
externaldatabase  
若是该表格在另外的外部数据库时,该数据库的名称。  
source  
记录数据拷贝的来源表格名称,可以是单一的表格或是一段SQL查询之语句。  
例如:  
你可以通过下面的SQL语句,来建立一个新的“训练名册”表格。  
SELECT
职员表格.姓名,职员表格.部门  
INTO 训练名册 FROM 职员表格  
WHERE 职称=’新进人员’;  
INNER
JOIN操作数  
当某一个共同的字段数据相等时,将两个表格的记录加以组合。  
SELECT fields  
FROM table1
INNER JOIN table2  
ON table1.field1 compopr
table2.field2  
table1,table2  
欲进行记录组合的表格名称。  
field1,field2  
欲组合的字段名称。(必须具有相同的数据类型)  
compopr  
比较关系运算符如下:“=”,“
”,“  
”等。  
例如:  
若是你要把分类表格与产品表格作组合,可参考下面的SQL语句。  
SELECT 分类名称,产品名称  
FROM
分类表格 INNER JOIN 产品表格  
ON
分类表格.分类编号=产品表格.分类编号;  
UNION操作数  
我们可以通过UNION操作数来建立连接的查询条件,UNION操作数可以将两个以上的表格或是查询的结果组合起来。  
[TABLE]query1
UNION [ALL][TABLE]query2 [UNION [ALL]  
[TABLE]queryn
[...]]  
query1,query2,queryn  
为一个SELECT的语句,或是一个已存在的查询名称,或是一个已存在的表格名称。  
例如:  
你可以利用下面的SQL语句,将订单数量超过1000的顾客表格记录,与新客户表格作UNION的操作。  
TABLE
新客户表格 UNION ALL  
SELECT *  
FROM 顾客表格  
WHERE 订单数量>
1000;  
ALTER语句  
在一个表格被建立之后,利用ALTER语句,我们可以去修改表格的字段设计。  
ALTER TABLE
table  
{ADD {COLUMN field type[(size)][CONSTRAINT index]  
|CONSTRAINT
multifieldindex}  
|DROP {COLUMN field|CONSTRAINT
indexname}}  
table  
欲被ALTER的表格名称。  
field  
要被增加或删除的字段名称。  
type  
字段数据类型。  
size  
字段大小。  
index  
对此字段的索引。  
例如:  
在职员表格中新建一个“薪水”的字段。  
ALTER
TABLE 职员表格  
ADD COLUMN 薪水
CURRENCY;  
例如:  
在职员表格中删除一个“薪水”的字段。  
ALTER TABLE 职员表格 DROP COLUMN
薪水;  
DROP语句  
针对所指定的表格或字段加以删除,或是把索引删除。  
DROP {TABLE table|INDEX index
ON
table}  
table  
欲删除之表格或索引依附之表格名称。  
index  
欲从表格中删除的索引名称。  
例如:  
从职员表格中,删除编号索引。  
DROP
INDEX MyIndex ON Employees;  
例如:  
从数据库中,删除整个表格。  
DROP TABLE
职员表格;  
INSERT INTO语句  
新建一条数据到表格当中。  
多条记录新建查询:  
INSERT INTO
target [IN externaldatabase][(field1[,field2[,...]])]  
SELECT
[source.]field1[,field2[,...]  
FROM
tableexpression  
单条记录新建查询:  
INSERT INTO
target[(field1[,field2[,...]])]  
VALUES(value1[,value2[,...])  
target  
新建记录的表格名称。  
externaldatabase  
外部数据库的路径,搭配IN条件子句使用。  
source  
若是记录从其它表格中拷贝时,指明该表格的名称。  
field1,field2  
欲增加数据的字段名称。  
tableexpression  
表格名称或描述记录是从哪一个表格中插入的表格名称。配合INNER
JOIN,LEFT JOIN,或 RIGHT JOIN
运算符一起使用。  
value1,value2  
欲插入表格中的数值。  
例如:  
在客户数据表格中,从新的表格插入数据。  
INSERT
INTO 客户数据表格  
SELECT 新客户数据表格.*  
FROM
新客户数据表格;  
例如:  
在职员表格中插入数据。  
INSERT INTO
职员表格(姓名,生日,职称)  
VALUES("王荣","57/12/11","经理");  
例如:  
从训练人员表格中,将职员雇用时间超过30天者,加入到正式职员表格中。  
INSERT
INTO 职员表格  
SELECT 训练人员表格.*  
FROM 训练人员表格  
WHERE 雇用天数>
30;  
UPDATE语句  
建立一个UPDATE的查询,通过条件的限制来修改特定的数据。  
UPDATE table  
SET
newvalue  
WHERE
criteria;  
table  
欲修改数据的表格名称。  
newvalue  
欲修改成的数值(将该项数值插入到特定的字段当中)。  
criteria  
查询条件,用来决定要修改哪些记录。  
例如:  
若是要把订单表格中的订单数量修改成1.1倍,运费为1.03倍,可利用下列之SQL语句来完成。  
UPDATE
订单表格  
SET 订单数量=订单数量 * 1.1,运费=运费 * 1.03倍  
WHERE
运达地点=’美国’;  
当我们完成修改后,你可以利用 SELECT 语句,配合同样的 WHERE
条件子句,来察看修改的数据是否正确。  
事实上,要利用SQL完成某些看似复杂的操作,并不需要繁琐的SQL命令组合,或是许许多多的步骤才能完成,其实最重要的还是要活用SQL命令,才会在最精简的SQL语句里获得最高的效率。
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/23663/showart_204601.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP