标准SQL.docx
《标准SQL.docx》由会员分享,可在线阅读,更多相关《标准SQL.docx(10页珍藏版)》请在冰豆网上搜索。
![标准SQL.docx](https://file1.bdocx.com/fileroot1/2022-11/15/26172e82-bdce-4656-a643-a56605be94b8/26172e82-bdce-4656-a643-a56605be94b81.gif)
标准SQL
标准SQL
一、SQLINNERJOIN
在表中存在至少一个匹配时,INNERJOIN关键字返回行。
1、INNERJOIN语法
SELECTcolumn_name(s)
FROMtable_name1
INNERJOINtable_name2
ONtable_name1.column_name=table_name2.column_name
注释:
INNERJOIN与JOIN是相同的。
2、原始的表(用在例子中的)
"Persons"表:
Id_P
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
3
Carter
Thomas
ChanganStreet
Beijing
"Orders"表:
Id_O
OrderNo
Id_P
1
77895
3
2
44678
3
3
22456
1
4
24562
1
5
34764
65
3、内连接(INNERJOIN)实例
现在,我们希望列出所有人的定购。
您可以使用下面的SELECT语句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNo
FROMPersons
INNERJOINOrders
ONPersons.Id_P=Orders.Id_P
ORDERBYPersons.LastName
结果集:
LastName
FirstName
OrderNo
Adams
John
22456
Adams
John
24562
Carter
Thomas
77895
Carter
Thomas
44678
INNERJOIN关键字在表中存在至少一个匹配时返回行。
如果"Persons"中的行在"Orders"中没有匹配,就不会列出这些行。
二、SQLLEFTJOIN
LEFTJOIN关键字会从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行。
1、LEFTJOIN语法
SELECTcolumn_name(s)
FROMtable_name1
LEFTJOINtable_name2
ONtable_name1.column_name=table_name2.column_name
注释:
在某些数据库中,LEFTJOIN称为LEFTOUTERJOIN。
2、原始的表(用在例子中的)
"Persons"表:
Id_P
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
3
Carter
Thomas
ChanganStreet
Beijing
"Orders"表:
Id_O
OrderNo
Id_P
1
77895
3
2
44678
3
3
22456
1
4
24562
1
5
34764
65
3、左连接(LEFTJOIN)实例
现在,我们希望列出所有的人,以及他们的定购-如果有的话。
您可以使用下面的SELECT语句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNo
FROMPersons
LEFTJOINOrders
ONPersons.Id_P=Orders.Id_P
ORDERBYPersons.LastName
结果集:
LastName
FirstName
OrderNo
Adams
John
22456
Adams
John
24562
Carter
Thomas
77895
Carter
Thomas
44678
Bush
George
LEFTJOIN关键字会从左表(Persons)那里返回所有的行,即使在右表(Orders)中没有匹配的行。
三、SQLRIGHTJOIN
RIGHTJOIN关键字会右表(table_name2)那里返回所有的行,即使在左表(table_name1)中没有匹配的行。
1、RIGHTJOIN语法
SELECTcolumn_name(s)
FROMtable_name1
RIGHTJOINtable_name2
ONtable_name1.column_name=table_name2.column_name
注释:
在某些数据库中,RIGHTJOIN称为RIGHTOUTERJOIN。
2、原始的表(用在例子中的)
"Persons"表:
Id_P
LastName
FirstName
Address
City
1
Adams
John
OxfordStreet
London
2
Bush
George
FifthAvenue
NewYork
3
Carter
Thomas
ChanganStreet
Beijing
"Orders"表:
Id_O
OrderNo
Id_P
1
77895
3
2
44678
3
3
22456
1
4
24562
1
5
34764
65
3、右连接(RIGHTJOIN)实例
现在,我们希望列出所有的定单,以及定购它们的人-如果有的话。
您可以使用下面的SELECT语句:
SELECTPersons.LastName,Persons.FirstName,Orders.OrderNo
FROMPersons
RIGHTJOINOrders
ONPersons.Id_P=Orders.Id_P
ORDERBYPersons.LastName
结果集:
LastName
FirstName
OrderNo
Adams
John
22456
Adams
John
24562
Carter
Thomas
77895
Carter
Thomas
44678
34764
RIGHTJOIN关键字会从右表(Orders)那里返回所有的行,即使在左表(Persons)中没有匹配的行。
四、SQLUNION
UNION操作符用于合并两个或多个SELECT语句的结果集。
请注意,UNION内部的SELECT语句必须拥有相同数量的列。
列也必须拥有相似的数据类型。
同时,每条SELECT语句中的列的顺序必须相同。
1、SQLUNION语法
SELECTcolumn_name(s)FROMtable_name1
UNION
SELECTcolumn_name(s)FROMtable_name2
注释:
默认地,UNION操作符选取不同的值。
如果允许重复的值,请使用UNIONALL。
2、SQLUNIONALL语法
SELECTcolumn_name(s)FROMtable_name1
UNIONALL
SELECTcolumn_name(s)FROMtable_name2
另外,UNION结果集中的列名总是等于UNION中第一个SELECT语句中的列名。
3、例子中使用的原始表
Employees_China:
E_ID
E_Name
01
Zhang,Hua
02
Wang,Wei
03
Carter,Thomas
04
Yang,Ming
Employees_USA:
E_ID
E_Name
01
Adams,John
02
Bush,George
03
Carter,Thomas
04
Gates,Bill
3、使用UNION命令实例
列出所有在中国和美国的不同的雇员名:
SELECTE_NameFROMEmployees_China
UNION
SELECTE_NameFROMEmployees_USA
结果
E_Name
Zhang,Hua
Wang,Wei
Carter,Thomas
Yang,Ming
Adams,John
Bush,George
Gates,Bill
注释:
这个命令无法列出在中国和美国的所有雇员。
在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。
UNION命令只会选取不同的值。
五、UNIONALL
UNIONALL命令和UNION命令几乎是等效的,不过UNIONALL命令会列出所有的值。
SQLStatement1
UNIONALL
SQLStatement2
使用UNIONALL命令实例
列出在中国和美国的所有的雇员:
SELECTE_NameFROMEmployees_China
UNIONALL
SELECTE_NameFROMEmployees_USA
结果
E_Name
Zhang,Hua
Wang,Wei
Carter,Thomas
Yang,Ming
Adams,John
Bush,George
Carter,Thomas
Gates,Bill
六、SELECTINTO
SELECTINTO语句从一个表中选取数据,然后把数据插入另一个表中。
SELECTINTO语句常用于创建表的备份复件或者用于对记录进行存档。
1、SQLSELECTINTO语法
您可以把所有的列插入新表:
SELECT*
INTOnew_table_name[INexternaldatabase]
FROMold_tablename
或者只把希望的列插入新表:
SELECTcolumn_name(s)
INTOnew_table_name[INexternaldatabase]
FROMold_tablename
2、SQLSELECTINTO实例-制作备份复件
下面的例子会制作"Persons"表的备份复件:
SELECT*
INTOPersons_backup
FROMPersons
IN子句可用于向另一个数据库中拷贝表:
SELECT*
INTOPersonsIN'Backup.mdb'
FROMPersons
如果我们希望拷贝某些域,可以在SELECT语句后列出这些域:
SELECTLastName,FirstName
INTOPersons_backup
FROMPersons
3、SQLSELECTINTO实例-带有WHERE子句
我们也可以添加WHERE子句。
下面的例子通过从"Persons"表中提取居住在"Beijing"的人的信息,创建了一个带有两个列的名为"Persons_backup"的表:
SELECTLastNam