SQL语句教程




City char(50) Country char(25) Birth_Date 
date 
SQL语句教程(28) 主键
主键 (Primary Key) 中的每一笔资料都是表格中的唯一值。换言之,它是用来独一无二地确认一个表格中的每一行资料。主键可以是原本资料内的一个栏位,或是一个人造栏位 (与原本资料没有关系的栏位)。主键可以包含一或多个栏位。当主键包含多个栏位时,称为组合键 (Composite Key)。 
主键可以在建置新表格时设定 (运用 CREATE TABLE 语句),或是以改变现有的表格架构方式设定 (运用 ALTER TABLE)。 
以下举几个在建置新表格时设定主键的方式: MySQL: 
CREATE TABLE Customer (SID integer, 
Last_Name varchar(30), First_Name varchar(30), PRIMARY KEY (SID)); Oracle: 
CREATE TABLE Customer (SID integer PRIMARY KEY, Last_Name varchar(30), First_Name varchar(30)); SQL Server: 
CREATE TABLE Customer (SID integer PRIMARY KEY, Last_Name varchar(30), First_Name varchar(30)); 
以下则是以改变现有表格架构来设定主键的方式: MySQL: 
ALTER TABLE Customer ADD PRIMARY KEY (SID); Oracle: 
ALTER TABLE Customer ADD PRIMARY KEY (SID); SQL Server: 
ALTER TABLE Customer ADD PRIMARY KEY (SID); 
请注意,在用ALTER TABLE语句来添加主键之前,我们需要确认被用来当做主键的栏位是设定为『NOT NULL』;也就是说,那个栏位一定不能没有资料。 
SQL语句教程(29) 外来键
外来键是一个(或数个)指向另外一个表格主键的栏位。外来键的目的是确定资料的参考完整性(referential integrity)。换言之,只有被准许的资料值才会被存入资料库内。 
举例来说,假设我们有两个表格:一个 CUSTOMER 表格,里面记录了所有顾客的资料;另一个 ORDERS 表格,里面记录了所有顾客订购的资料。在这里的一个限制,就是所有的订购资料中的顾客,都一定是要跟在 CUSTOMER 表格中存在。在这里,我们就会在 ORDERS 表格中设定一个外来键,而这个外来键是指向 CUSTOMER 表格中的主键。这样一来,我们就可以确定所有在 ORDERS 表格中的顾客都存在 
CUSTOMER 表格中。换句话说,ORDERS表格之中,不能有任何顾客是不存在于 CUSTOMER 表格中的资料。 
这两个表格的结构将会是如下: CUSTOMER 表格 
栏位名 性质 
SID 主键 Last_Name 
 






  




First_Name  
ORDERS 表格 
栏位名 性质 
Order_ID 主键 Order_Date  Customer_SID 外来键 Amount 
 
在以上的例子中,ORDERS 表格中的 customer_SID 栏位是一个指向 CUSTOMERS 表格中 SID 栏位的外来键。 
以下列出几个在建置 ORDERS 表格时指定外来键的方式: MySQL: 
CREATE TABLE ORDERS (Order_ID integer, Order_Date date, 
Customer_SID integer, Amount double, 
Primary Key (Order_ID), 
Foreign Key (Customer_SID) references CUSTOMER(SID)); Oracle: 
CREATE TABLE ORDERS 
(Order_ID integer primary key, Order_Date date, 
Customer_SID integer references CUSTOMER(SID), Amount double); SQL Server: 
CREATE TABLE ORDERS 
(Order_ID integer primary key, Order_Date datetime, 
Customer_SID integer references CUSTOMER(SID), Amount double); 
以下的例子则是藉着改变表格架构来指定外来键。这里假设 ORDERS 表格已经被建置,而外来键尚未被指定: MySQL: 
ALTER TABLE ORDERS 
ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid); Oracle: 
ALTER TABLE ORDERS 
ADD (CONSTRAINT fk_orders1) FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid); SQL Server: 
ALTER TABLE ORDERS 
ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid); 
SQL语句教程(30) Drop Table
有时候我们会决定我们需要从数据库中清除一个表格。事实上,如果我们不能这样做的话,那将会是一个很大的问题,因为数据库管理师 (Database Administrator -- DBA) 势必无法对数据库做有效率的管理。还好,SQL 有提供一个 DROP TABLE的语法来让我们清除表格。 DROP TABLE 的语法是: DROP TABLE "表格名" 
我们如果要清除在SQL CREATE 中建立的顾客表格,我们就打入: DROP TABLE customer. 






  




SQL语句教程(31) Truncate Table
有时候我们会需要清除一个表格中的所有资料。要达到这个目的,一种方式是我们在 SQL DROP 那一页 看到的 DROP TABLE 指令。不过这样整个表格就消失,而无法再被用了。另一种方式就是运用 TRUNCATE TABLE 的指令。在这个指令之下,表格中的资料会完全消失,可是表格本身会继续存在。 TRUNCATE TABLE 的语法为下: 
TRUNCATE TABLE "表格名" 
所以,我们如果要清除在 SQL Create 那一页建立的顾客表格之内的资料,我们就打入: TRUNCATE TABLE customer. 
SQL语句教程(32) Insert Into
到目前为止,我们学到了将如何把资料由表格中取出。但是这些资料是如何进入这些表格的呢?这就是这一页 (INSERT INTO) 和下一页 (UPDATE) 要讨论的。 
基本上,我们有两种作法可以将资料输入表格中内。一种是一次输入一笔,另一种是一次输入好几笔。我们先来看一次输入一笔的方式。 
依照惯例,我们先介绍语法。一次输入一笔资料的语法如下: 
INSERT INTO "表格名" ("栏位1", "栏位2", ...) VALUES ("值1", "值2", ...) 假设我们有一个架构如下的表格: Store_Information 表格 Column   Name Data   Type store_name char(50) Sales float Date 
datetime 
而我们要加以下的这一笔资料进去这个表格:在 January 10, 1999,Los Angeles 店有 $900 的营业额。我们就打入以下的 SQL 语句: 
INSERT INTO Store_Information (store_name, Sales, Date) VALUES ('Los Angeles', 900, 'Jan-10-1999') 第二种 INSERT INTO 能够让我们一次输入多笔的资料。跟上面刚的例子不同的是,现在我们要用 SELECT 指令来指明要输入表格的资料。如果您想说,这是不是说资料是从另一个表格来的,那您就想对了。一次输入多笔的资料的语法是: 
INSERT INTO "表格1" ("栏位1", "栏位2", ...) SELECT "栏位3", "栏位4", ... FROM "表格2" 
以上的语法是最基本的。这整句 SQL 也可以含有 WHERE、 GROUP BY、 及 HAVING 等子句,以及表格连接及别名等等。 
举例来说,若我们想要将 1998 年的营业额资料放入 Store_Information 表格,而我们知道资料的来源是可以由 Sales_Information 表格取得的话,那我们就可以打入以下的 SQL: INSERT INTO Store_Information (store_name, Sales, Date) SELECT store_name, Sales, Date FROM Sales_Information WHERE Year(Date) = 1998 
在这里,我用了 SQL Server 中的函数来由日期中找出年。不同的数据库会有不同的语法。举个例来说,在 Oracle 上,您将会使用 WHERE to_char(date,'yyyy')=1998。 
SQL语句教程(33) Update
我们有时候可能会需要修改表格中的资料。在这个时候,我们就需要用到 UPDATE 指令。这个指令的语法是: 
UPDATE "表格名" SET "栏位1" = [新值] WHERE {条件} 






  




最容易了解这个语法的方式是透过一个例子。假设我们有以下的表格: Store_Information 表格 store_name Sales Date Los   Angeles $1500 Jan-05-1999 San   Diego $250 Jan-07-1999 Los   Angeles $300 Jan-08-1999 Boston 
$700 
Jan-08-1999 
我们发现说 Los Angeles 在 01/08/1999 的营业额实际上是 $500,而不是表格中所储存的 $300,因此我们用以下的 SQL 来修改那一笔资料: UPDATE Store_Information SET Sales = 500 
WHERE store_name = "Los Angeles" AND Date = "Jan-08-1999" 现在表格的内容变成: Store_Information 表格 store_name Sales Date Los   Angeles $1500 Jan-05-1999 San   Diego $250 Jan-07-1999 Los   Angeles $500 Jan-08-1999 Boston 
$700 
Jan-08-1999 
在这个例子中,只有一笔资料符合 WHERE 子句中的条件。如果有多笔资料符合条件的话,每一笔符合条件的资料都会被修改的。 
我们也可以同时修改好几个栏位。这语法如下: UPDATE "表格" 
SET "栏位1" = [值1], "栏位2" = [值2] WHERE {条件} 
SQL语句教程(34) Delete
在某些情况下,我们会需要直接由数据库中去除一些资料。这可以藉由 DELETE FROM 指令来达成。它的语法是: 
DELETE FROM "表格名" WHERE {条件} 
以下我们用个实例说明。假设我们有以下这个表格: Store_Information 表格 store_name Sales Date Los   Angeles $1500 Jan-05-1999 San   Diego $250 Jan-07-1999 Los   Angeles $300 Jan-08-1999 Boston 
$700 
Jan-08-1999 
而我们需要将有关 Los Angeles 的资料全部去除。在这里我们可以用以下的 SQL 来达到这个目的: DELETE FROM Store_Information WHERE store_name = "Los Angeles" 现在表格的内容变成: Store_Information 表格 store_name Sales Date San   Diego 
$250 
Jan-07-1999 


Boston $700 Jan-08-1999
   


City char(50) Country char(25) Birth_Date 
date 
SQL语句教程(28) 主键
主键 (Primary Key) 中的每一笔资料都是表格中的唯一值。换言之,它是用来独一无二地确认一个表格中的每一行资料。主键可以是原本资料内的一个栏位,或是一个人造栏位 (与原本资料没有关系的栏位)。主键可以包含一或多个栏位。当主键包含多个栏位时,称为组合键 (Composite Key)。 
主键可以在建置新表格时设定 (运用 CREATE TABLE 语句),或是以改变现有的表格架构方式设定 (运用 ALTER TABLE)。 
以下举几个在建置新表格时设定主键的方式: MySQL: 
CREATE TABLE Customer (SID integer, 
Last_Name varchar(30), First_Name varchar(30), PRIMARY KEY (SID)); Oracle: 
CREATE TABLE Customer (SID integer PRIMARY KEY, Last_Name varchar(30), First_Name varchar(30)); SQL Server: 
CREATE TABLE Customer (SID integer PRIMARY KEY, Last_Name varchar(30), First_Name varchar(30)); 
以下则是以改变现有表格架构来设定主键的方式: MySQL: 
ALTER TABLE Customer ADD PRIMARY KEY (SID); Oracle: 
ALTER TABLE Customer ADD PRIMARY KEY (SID); SQL Server: 
ALTER TABLE Customer ADD PRIMARY KEY (SID); 
请注意,在用ALTER TABLE语句来添加主键之前,我们需要确认被用来当做主键的栏位是设定为『NOT NULL』;也就是说,那个栏位一定不能没有资料。 
SQL语句教程(29) 外来键
外来键是一个(或数个)指向另外一个表格主键的栏位。外来键的目的是确定资料的参考完整性(referential integrity)。换言之,只有被准许的资料值才会被存入资料库内。 
举例来说,假设我们有两个表格:一个 CUSTOMER 表格,里面记录了所有顾客的资料;另一个 ORDERS 表格,里面记录了所有顾客订购的资料。在这里的一个限制,就是所有的订购资料中的顾客,都一定是要跟在 CUSTOMER 表格中存在。在这里,我们就会在 ORDERS 表格中设定一个外来键,而这个外来键是指向 CUSTOMER 表格中的主键。这样一来,我们就可以确定所有在 ORDERS 表格中的顾客都存在 
CUSTOMER 表格中。换句话说,ORDERS表格之中,不能有任何顾客是不存在于 CUSTOMER 表格中的资料。 
这两个表格的结构将会是如下: CUSTOMER 表格 
栏位名 性质 
SID 主键 Last_Name 
 


First_Name  
ORDERS 表格 
栏位名 性质 
Order_ID 主键 Order_Date  Customer_SID 外来键 Amount 
 
在以上的例子中,ORDERS 表格中的 customer_SID 栏位是一个指向 CUSTOMERS 表格中 SID 栏位的外来键。 
以下列出几个在建置 ORDERS 表格时指定外来键的方式: MySQL: 
CREATE TABLE ORDERS (Order_ID integer, Order_Date date, 
Customer_SID integer, Amount double, 
Primary Key (Order_ID), 
Foreign Key (Customer_SID) references CUSTOMER(SID)); Oracle: 
CREATE TABLE ORDERS 
(Order_ID integer primary key, Order_Date date, 
Customer_SID integer references CUSTOMER(SID), Amount double); SQL Server: 
CREATE TABLE ORDERS 
(Order_ID integer primary key, Order_Date datetime, 
Customer_SID integer references CUSTOMER(SID), Amount double); 
以下的例子则是藉着改变表格架构来指定外来键。这里假设 ORDERS 表格已经被建置,而外来键尚未被指定: MySQL: 
ALTER TABLE ORDERS 
ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid); Oracle: 
ALTER TABLE ORDERS 
ADD (CONSTRAINT fk_orders1) FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid); SQL Server: 
ALTER TABLE ORDERS 
ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid); 
SQL语句教程(30) Drop Table
有时候我们会决定我们需要从数据库中清除一个表格。事实上,如果我们不能这样做的话,那将会是一个很大的问题,因为数据库管理师 (Database Administrator -- DBA) 势必无法对数据库做有效率的管理。还好,SQL 有提供一个 DROP TABLE的语法来让我们清除表格。 DROP TABLE 的语法是: DROP TABLE "表格名" 
我们如果要清除在SQL CREATE 中建立的顾客表格,我们就打入: DROP TABLE customer. 






SQL语句教程(31) Truncate Table
有时候我们会需要清除一个表格中的所有资料。要达到这个目的,一种方式是我们在 SQL DROP 那一页 看到的 DROP TABLE 指令。不过这样整个表格就消失,而无法再被用了。另一种方式就是运用 TRUNCATE TABLE 的指令。在这个指令之下,表格中的资料会完全消失,可是表格本身会继续存在。 TRUNCATE TABLE 的语法为下: 
TRUNCATE TABLE "表格名" 
所以,我们如果要清除在 SQL Create 那一页建立的顾客表格之内的资料,我们就打入: TRUNCATE TABLE customer. 
SQL语句教程(32) Insert Into
到目前为止,我们学到了将如何把资料由表格中取出。但是这些资料是如何进入这些表格的呢?这就是这一页 (INSERT INTO) 和下一页 (UPDATE) 要讨论的。 
基本上,我们有两种作法可以将资料输入表格中内。一种是一次输入一笔,另一种是一次输入好几笔。我们先来看一次输入一笔的方式。 
依照惯例,我们先介绍语法。一次输入一笔资料的语法如下: 
INSERT INTO "表格名" ("栏位1", "栏位2", ...) VALUES ("值1", "值2", ...) 假设我们有一个架构如下的表格: Store_Information 表格 Column   Name Data   Type store_name char(50) Sales float Date 
datetime 
而我们要加以下的这一笔资料进去这个表格:在 January 10, 1999,Los Angeles 店有 $900 的营业额。我们就打入以下的 SQL 语句: 
INSERT INTO Store_Information (store_name, Sales, Date) VALUES ('Los Angeles', 900, 'Jan-10-1999') 第二种 INSERT INTO 能够让我们一次输入多笔的资料。跟上面刚的例子不同的是,现在我们要用 SELECT 指令来指明要输入表格的资料。如果您想说,这是不是说资料是从另一个表格来的,那您就想对了。一次输入多笔的资料的语法是: 
INSERT INTO "表格1" ("栏位1", "栏位2", ...) SELECT "栏位3", "栏位4", ... FROM "表格2" 
以上的语法是最基本的。这整句 SQL 也可以含有 WHERE、 GROUP BY、 及 HAVING 等子句,以及表格连接及别名等等。 
举例来说,若我们想要将 1998 年的营业额资料放入 Store_Information 表格,而我们知道资料的来源是可以由 Sales_Information 表格取得的话,那我们就可以打入以下的 SQL: INSERT INTO Store_Information (store_name, Sales, Date) SELECT store_name, Sales, Date FROM Sales_Information WHERE Year(Date) = 1998 
在这里,我用了 SQL Server 中的函数来由日期中找出年。不同的数据库会有不同的语法。举个例来说,在 Oracle 上,您将会使用 WHERE to_char(date,'yyyy')=1998。 
SQL语句教程(33) Update
我们有时候可能会需要修改表格中的资料。在这个时候,我们就需要用到 UPDATE 指令。这个指令的语法是: 
UPDATE "表格名" SET "栏位1" = [新值] WHERE {条件} 






最容易了解这个语法的方式是透过一个例子。假设我们有以下的表格: Store_Information 表格 store_name Sales Date Los   Angeles $1500 Jan-05-1999 San   Diego $250 Jan-07-1999 Los   Angeles $300 Jan-08-1999 Boston 
$700 
Jan-08-1999 
我们发现说 Los Angeles 在 01/08/1999 的营业额实际上是 $500,而不是表格中所储存的 $300,因此我们用以下的 SQL 来修改那一笔资料: UPDATE Store_Information SET Sales = 500 
WHERE store_name = "Los Angeles" AND Date = "Jan-08-1999" 现在表格的内容变成: Store_Information 表格 store_name Sales Date Los   Angeles $1500 Jan-05-1999 San   Diego $250 Jan-07-1999 Los   Angeles $500 Jan-08-1999 Boston 
$700 
Jan-08-1999 
在这个例子中,只有一笔资料符合 WHERE 子句中的条件。如果有多笔资料符合条件的话,每一笔符合条件的资料都会被修改的。 
我们也可以同时修改好几个栏位。这语法如下: UPDATE "表格" 
SET "栏位1" = [值1], "栏位2" = [值2] WHERE {条件} 
SQL语句教程(34) Delete
在某些情况下,我们会需要直接由数据库中去除一些资料。这可以藉由 DELETE FROM 指令来达成。它的语法是: 
DELETE FROM "表格名" WHERE {条件} 
以下我们用个实例说明。假设我们有以下这个表格: Store_Information 表格 store_name Sales Date Los   Angeles $1500 Jan-05-1999 San   Diego $250 Jan-07-1999 Los   Angeles $300 Jan-08-1999 Boston 
$700 
Jan-08-1999 
而我们需要将有关 Los Angeles 的资料全部去除。在这里我们可以用以下的 SQL 来达到这个目的: DELETE FROM Store_Information WHERE store_name = "Los Angeles" 现在表格的内容变成: Store_Information 表格 store_name Sales Date San   Diego 
$250 
Jan-07-1999 

Boston $700 Jan-08-1999
SQL 指令 SELECT DISTINCT WHERE AND OR IN BETWEEN LIKE ORDER BY 函数 COUNT GROUP BY HAVING ALIAS 表格链接 外部链接 CONCATENATE SUBSTRING TRIM 表格处理 CREATE TABLE CONSTRAINT NOT NULL UNIQUE CHECK 主键 外来键 CREATE VIEW CREATE INDEX ALTER TABLE DROP TABLE TRUNCATE TABLE INSERT INTO UPDATE DELETE FROM 进阶 SQL UNION UNION ALL INTERSECT MINUS 子查询 EXISTS CASE 算排名 算中位数 算总合百分比 算累积总合百分比 SQL 语法 无论您是一位 SQL 的新手,或是一位只是需要对 SQL 复习一下的资料仓储业界老将,您 就来对地方了。这个 SQL 教材网站列出常用的 SQL 指令,包含以下几个部分: ♦ SQL 指令: SQL 如何被用来储存、读取、以及处理数据库之中的资料。 ♦ 表格处理: SQL 如何被用来处理数据库中的表格。 ♦ 进阶 SQL: 介绍 SQL 进阶概念,以及如何用 SQL 来执行一些较复杂的运算。 ♦ SQL 语法: 这一页列出所有在这个教材中被提到的 SQL 语法。 对于每一个指令, 我们将会先列出及解释这个指令的语法, 然后用一个例子来让读者了解这 个指令是如何被运用的。当您读完了这个网站的所有教材后,您将对 SQL 的语法会有一个 大致上的了解。另外,您将能够正确地运用 SQL 来由数据库中获取信息。笔者本身的经验 是,虽然要对 SQL 有很透彻的了解并不是一朝一夕可以完成的,可是要对 SQL 有个基本 的了解并不难。希望在看完这个网站后,您也会有同样的想法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值