SQL语句教程

来源:互联网 发布:.cx域名行情 编辑:程序博客网 时间:2024/06/10 20:05



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
0 0
原创粉丝点击