SQL语言(3)
来源:互联网 发布:程序员平均薪资 编辑:程序博客网 时间:2024/05/01 21:31
(1)SQL LEFT JOIN 关键字讲解
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
语法:SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。
"Persons" 表:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons LEFT JOIN Orders ON Persons.Id_P=Orders.
Id_P ORDER BY Persons.LastName
LastName FirstName OrderNo AdamsJohn22456AdamsJohn24562CarterThomas77895CarterThomas44678BushGeorge(2)SQL RIGHT JOIN 关键字讲解
RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
语法:
SELECT column_name(s)FROM table_name1RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。
"Persons" 表:
Id_P LastName FirstName Address City 1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York3CarterThomasChangan StreetBeijing"Orders" 表:
Id_O OrderNo Id_P 177895324467833224561424562153476465实例:列出所有的定单,以及定购它们的人 - 如果有的话。
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsRIGHT JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
LastName FirstName OrderNo AdamsJohn22456AdamsJohn24562CarterThomas77895CarterThomas44678 34764(3)SQL FULL JOIN 关键字讲解只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。
语法:
SELECT column_name(s)FROM table_name1FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。
"Persons" 表:
Id_P LastName FirstName Address City 1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York3CarterThomasChangan StreetBeijing"Orders" 表:
Id_O OrderNo Id_P 177895324467833224561424562153476465实例:现在,列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsFULL JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
LastName FirstName OrderNo AdamsJohn22456AdamsJohn24562CarterThomas77895CarterThomas44678BushGeorge 34764FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出。
(4)SQL UNION 和 UNION ALL 操作符讲解
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SQL UNION语法:
SELECT column_name(s) FROM table_name1UNIONSELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
SQL UNION ALL 语法:
SELECT column_name(s) FROM table_name1UNION ALLSELECT column_name(s) FROM table_name2
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
Employees_China:
E_ID E_Name 01Zhang, Hua02Wang, Wei03Carter, Thomas04Yang, MingEmployees_USA:
E_ID E_Name 01Adams, John02Bush, George03Carter, Thomas04Gates, Bill实例:
列出所有在中国和美国的不同的雇员名:
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA结果
E_Name Zhang, HuaWang, WeiCarter, ThomasYang, MingAdams, JohnBush, GeorgeGates, Bill注释:这个命令无法列出在中国和美国的所有雇员。在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。UNION 命令只会选取不同的值。
UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。
实例:
列出在中国和美国的所有的雇员:
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA结果
E_Name Zhang, HuaWang, WeiCarter, ThomasYang, MingAdams, JohnBush, GeorgeCarter, ThomasGates, Bill(5)SQL SELECT INTO 语句讲解SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。
SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。
语法:
把所有的列插入新表:
SELECT *INTO new_table_name [IN externaldatabase] FROM old_tablename
或者只把希望的列插入新表:
SELECT column_name(s)INTO new_table_name [IN externaldatabase] FROM old_tablename
实例:
a.制作 "Persons" 表的备份复件:
b.IN 子句可用于向另一个数据库中拷贝表:
SELECT
*INTO
Persons_backup FROM PersonsSELECT
*INTO
PersonsIN
'Backup.mdb'FROM Personsc.如果希望拷贝某些域,可以在 SELECT 语句后列出这些域:
SELECT
LastName,FirstNameINTO
Persons_backup FROM Personsd.通过从 "Persons" 表中提取居住在 "Beijing" 的人的信息,创建了一个带有两个列的名为 "Persons_backup" 的表:
SELECT
LastName,FirstnameINTO
Persons_backup FROM PersonsWHERE
City='Beijing'e.创建一个名为 "Persons_Order_Backup" 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息:
SELECT
Persons.LastName,Orders.OrderNoINTO
Persons_Order_BackupFROM
PersonsINNER JOIN
OrdersON
Persons.Id_P=Orders.Id_P
(6)SQL CREATE DATABASE 语句讲解
CREATE DATABASE 用于创建数据库。语法:
CREATE DATABASE database_name
实例:
创建一个名为 "my_db" 的数据库。
CREATE DATABASE my_db
(7)SQL CREATE TABLE 语句讲解
语法:
CREATE TABLE 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,....)
数据类型(data_type)规定了列可容纳何种数据类型。
数据类型 描述 仅容纳整数。在括号内规定数字的最大位数。
- integer(size)
- int(size)
- smallint(size)
- tinyint(size)
- decimal(size,d)
- numeric(size,d)
容纳带有小数的数字。
"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。
char(size)容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。
在括号中规定字符串的长度。
varchar(size)容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。
在括号中规定字符串的最大长度。
date(yyyymmdd)容纳日期。实例实例:如何创建名为 "Person" 的表。
该表包含 5 个列,列名分别是:"Id_P"、"LastName"、"FirstName"、"Address" 以及 "City":
CREATE TABLE Persons( Id_P int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255))
Id_P 列的数据类型是 int,包含整数。其余 4 列的数据类型是 varchar,最大长度为 255 个字符。
空的 "Persons" 表类似这样:
Id_P LastName FirstName Address City (8)SQL 约束 (Constraints)约束用于限制加入表的数据的类型。
可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。
(9)SQL NOT NULL 约束讲解
NOT NULL 约束强制列不接受 NULL 值。
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
下面的 SQL 语句强制 "Id_P" 列和 "LastName" 列不接受 NULL 值:
CREATE TABLE Persons(Id_P int
NOT NULL
,LastName varchar(255)NOT NULL
,FirstName varchar(255),Address varchar(255),City varchar(255))(10)SQL UNIQUE 约束讲解
UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
实例:
a.在 "Persons" 表创建时在 "Id_P" 列创建 UNIQUE 约束:
MySQL:
CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),
UNIQUE (Id_P)
)SQL Server / Oracle / MS Access:
CREATE TABLE Persons(Id_P int NOT NULL
UNIQUE
,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)b.当表已被创建时,如需在 "Id_P" 列创建 UNIQUE 约束,请使用下列 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD UNIQUE (Id_P)
如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
c.
如需撤销 UNIQUE 约束,请使用下面的 SQL:MySQL:
ALTER TABLE PersonsDROP INDEX uc_PersonID
SQL Server / Oracle / MS Access:
ALTER TABLE PersonsDROP CONSTRAINT uc_PersonID
(10)
SQL PRIMARY KEY 约束PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
实例:
a.在 "Persons" 表创建时在 "Id_P" 列创建 PRIMARY KEY 约束。
MySQL:
CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),
PRIMARY KEY (Id_P)
)SQL Server / Oracle / MS Access:
CREATE TABLE Persons(Id_P int NOT NULLPRIMARY KEY
,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))b.如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束。
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),
CONSTRAINT uc_PersonID PRIMARY KEY (Id_P,LastName)
)c.如果在表已存在的情况下为 "Id_P" 列创建 PRIMARY KEY 约束。
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD PRIMARY KEY (Id_P)
d.如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束。
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
注释:如果您使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。
e.撤销 PRIMARY KEY 约束。
MySQL:
ALTER TABLE Persons
DROP PRIMARY KEY
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID
(11)
SQL FOREIGN KEY 约束讲解一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
"Persons" 表:
Id_P LastName FirstName Address City 1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York3CarterThomasChangan StreetBeijing"Orders" 表:
Id_O OrderNo Id_P 1778953244678332245614245621请注意,"Orders" 中的 "Id_P" 列指向 "Persons" 表中的 "Id_P" 列。
"Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY。
"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的动作。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
实例:a.在 "Orders" 表创建时为 "Id_P" 列创建 FOREIGN KEY。
MySQL:
CREATE TABLE Orders(O_Id int NOT NULL,OrderNo int NOT NULL,Id_P int,PRIMARY KEY (O_Id),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)SQL Server / Oracle / MS Access:
CREATE TABLE Orders(O_Id int NOT NULL PRIMARY KEY,OrderNo int NOT NULL,Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)b.如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束。
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders(O_Id int NOT NULL,OrderNo int NOT NULL,Id_P int,PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)REFERENCES Persons(Id_P)
)c.如果在 "Orders" 表已存在的情况下为 "Id_P" 列创建 FOREIGN KEY 约束。
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (Id_P)REFERENCES Persons(Id_P)
d.如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束。
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrdersFOREIGN KEY (Id_P)REFERENCES Persons(Id_P)
e.
撤销 FOREIGN KEY 约束。MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
ALTER TABLE OrdersDROP CONSTRAINT fk_PerOrders
(12)
SQL CHECK 约束讲解CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
实例:
a.在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数。
My SQL:
CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),
CHECK (Id_P>0)
)SQL Server / Oracle / MS Access:
CREATE TABLE Persons(Id_P int NOT NULL
CHECK (Id_P>0),
LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))b.如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束。
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)c.如果在表已存在的情况下为 "Id_P" 列创建 CHECK 约束。
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CHECK (Id_P>0)
d.如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束。
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
e.撤销 CHECK 约束。ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
如需撤销 CHECK 约束,请使用下面的 SQL:
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
MySQL:
ALTER TABLE Persons
DROP CHECK chk_Person
(13)
SQL DEFAULT 约束讲解DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。
实例:
a.在 "Persons" 表创建时为 "City" 列创建 DEFAULT 约束。
My SQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255) DEFAULT 'Sandnes')
通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:
CREATE TABLE Orders(Id_O int NOT NULL,OrderNo int NOT NULL,Id_P int,OrderDate date DEFAULT GETDATE())
b.如果在表已存在的情况下为 "City" 列创建 DEFAULT 约束。
MySQL:
ALTER TABLE PersonsALTER City SET DEFAULT 'SANDNES'
SQL Server / Oracle / MS Access:
ALTER TABLE PersonsALTER COLUMN City SET DEFAULT 'SANDNES'
c.撤销 DEFAULT 约束。MySQL:
ALTER TABLE PersonsALTER City DROP DEFAULT
SQL Server / Oracle / MS Access:
ALTER TABLE PersonsALTER COLUMN City DROP DEFAULT
- SQL语言(3)
- SQL语言练习3
- SQL语言基础(3)
- SQL 语言
- SQL语言
- SQL语言
- SQL语言
- SQL语言
- SQL语言
- SQL 语言
- SQL 语言
- sql语言
- sql 语言
- SQL 语言
- SQL语言
- SQL语言
- SQL 语言
- SQL语言
- 编译htop命令
- 算法习题25:写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)
- Android Application对象
- DEDECMS学习之遍历GET、POST、COOKIE简写
- 【Hadoop】JobTracker Restart Recovery
- SQL语言(3)
- (C++)输入四个数,输出最大的数
- 标准输入输出及管道
- Js使用资料总结
- Google的量子计算机项目面临危机
- mongodb update 方法(感觉不错挺好的就转载了 )
- SDN首页> 云计算 Oracle“炮轰”开源:称其永远无法在军事领域取得一席之地
- 15亿美元!软银联合GungHo收购手游巨头Supercell
- AT指令发送接收短信(Text/Pdu模式)