网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

sql_高级

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

    SQLTOP子句
    
    PreviousPageNextPage
    TOP子句
    TOP子句用于规定要返回的记录的数目.
    对于拥有数千条记录的大型表来说,TOP子句是非常有用的.
    注释:注释:并非所有的数据库系统都支持TOP子句.
    SQLServer的语法:的语法:
    SELECTTOPnumber|percentcolumn_name(s)FROMtable_name
    MySQL和Oracle中的SQLSELECTTOP是等价的
    MySQL语法
    SELECTcolumn_name(s)FROMtable_nameLIMITnumber
    例子
    SELECT*FROMPersonsLIMIT5
    Oracle语法
    SELECTcolumn_name(s)FROMtable_nameWHEREROWNUM<=number
    例子
    SELECT*FROMPersonsWHEREROWNUM<=5
    用在例子中的):原始的表(用在例子中的:用在例子中的
    Persons表:
    Id
    LastName
    FirstName
    Address
    City
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    4
    Obama
    Barack
    PennsylvaniaAvenue
    Washington
    SQLTOP实例
    现在,我们希望从上面的"Persons"表中选取头两条记录.
    我们可以使用下面的SELECT语句:
    SELECT
    TOP2
    *FROMPersons
    结果:结果:IdLastNameFirstNameAddressCity
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    SQLTOPPERCENT实例
    现在,我们希望从上面的"Persons"表中选取50%的记录.
    我们可以使用下面的SELECT语句:
    SELECT
    TOP50PERCENT
    *FROMPersons
    结果:
    Id
    LastName
    FirstName
    Address
    City
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    SQLLIKE操作符
    
    PreviousPageNextPageLIKE操作符用于在WHERE子句中搜索列中的指定模式.子句中搜索列中的指定模式.
    LIKE操作符
    LIKE操作符用于在WHERE子句中搜索列中的指定模式.
    SQLLIKE操作符语法
    SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameLIKEpattern
    用在例子中的):原始的表(用在例子中的:用在例子中的
    Persons表:
    Id
    LastName
    FirstName
    Address
    City
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    LIKE操作符实例
    例子1现在,我们希望从上面的"Persons"表中选取居住在以"N"开始的城市里的人:
    我们可以使用下面的SELECT语句:
    SELECT*FROMPersonsWHERECityLIKE'N%'
    提示:提示:"%"可用于定义通配符(模式中缺少的字母).
    结果集:结果集:IdLastNameFirstNameAddressCity
    2
    Bush
    George
    FifthAvenue
    NewYork
    例子2接下来,我们希望从"Persons"表中选取居住在以"g"结尾的城市里的人:
    我们可以使用下面的SELECT语句:
    SELECT*FROMPersonsWHERECityLIKE'%g'
    结果集:果集:IdLastNameFirstNameAddressCity
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    例子3接下来,我们希望从"Persons"表中选取居住在包含"lon"的城市里的人:
    我们可以使用下面的SELECT语句:
    SELECT*FROMPersonsWHERECityLIKE'%lon%'
    结果集:结果集:IdLastNameFirstNameAddressCity
    1
    Adams
    John
    OxfordStreet
    London
    例子4通过使用NOT关键字,我们可以从"Persons"表中选取居住在不包含"lon"的城市里的人:不包含
    我们可以使用下面的SELECT语句:
    SELECT*FROMPersonsWHERECityNOTLIKE'%lon%'
    结果集:结果集:IdLastNameFirstNameAddressCity
    2
    Bush
    George
    FifthAvenue
    NewYork
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    SQL通配符
    
    PreviousPageNextPage在搜索数据库中的数据时,通配符.在搜索数据库中的数据时,您可以使用SQL通配符.
    SQL通配符
    在搜索数据库中的数据时,SQL通配符可以替代一个或多个字符.
    SQL通配符必须与LIKE运算符一起使用.
    在SQL中,可使用以下通配符:
    通配符
    描述
    %
    替代一个或多个字符
    _
    仅替代一个字符
    [charlist][^charlist]或者[!charlist]
    字符列中的任何单一字符不在字符列中的任何单一字符
    用在例子中的):原始的表(用在例子中的:用在例子中的
    Persons表:
    Id
    LastName
    FirstName
    Address
    City
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    使用%通配符
    例子1现在,我们希望从上面的"Persons"表中选取居住在以"Ne"开始的城市里的人:
    我们可以使用下面的SELECT语句:
    SELECT*FROMPersonsWHERECityLIKE'Ne%'
    结果集:结果集:IdLastNameFirstNameAddressCity
    2
    Bush
    George
    FifthAvenue
    NewYork
    例子2接下来,我们希望从"Persons"表中选取居住在包含"lond"的城市里的人:
    我们可以使用下面的SELECT语句:
    SELECT*FROMPersonsWHERECityLIKE'%lond%'
    结果集:结果集:IdLastNameFirstNameAddressCity
    1
    Adams
    John
    OxfordStreet
    London
    使用_通配符
    例子1现在,我们希望从上面的"Persons"表中选取名字的第一个字符之后是"eorge"的人:
    我们可以使用下面的SELECT语句:
    SELECT*FROMPersonsWHEREFirstNameLIKE'_eorge'
    结果集:结果集:IdLastNameFirstNameAddressCity
    2
    Bush
    George
    FifthAvenue
    NewYork
    例子2接下来,我们希望从"Persons"表中选取的这条记录的姓氏以"C"开头,然后是一个任意字符,然后是"r",然后是任意字符,然后是"er":
    我们可以使用下面的SELECT语句:
    SELECT*FROMPersonsWHERELastNameLIKE'C_r_er'
    结果集:结果集:IdLastNameFirstNameAddressCity
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    使用[charlist]通配符
    例子1现在,我们希望从上面的"Persons"表中选取居住的城市以"A"或"L"或"N"开头的人:
    我们可以使用下面的SELECT语句:
    SELECT*FROMPersonsWHERECityLIKE'[ALN]%'
    结果集:果集:
    Id
    LastName
    FirstName
    Address
    City
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    例子2现在,我们希望从上面的"Persons"表中选取居住的城市不以"A"或"L"或"N"开头的人:不以
    我们可以使用下面的SELECT语句:
    SELECT*FROMPersonsWHERECityLIKE'[!ALN]%'
    结果集:结果集:IdLastNameFirstNameAddressCity
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    SQLIN操作符
    
    PreviousPageNextPage
    IN操作符
    IN操作符允许我们在WHERE子句中规定多个值.
    SQLIN语法
    SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameIN(value1,value2,...)
    在实例中使用:原始的表(在实例中使用:)在实例中使用
    Persons表:
    Id
    LastName
    FirstName
    Address
    City
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    IN操作符实例
    现在,我们希望从上表中选取姓氏为Adams和Carter的人:
    我们可以使用下面的SELECT语句:
    SELECT*FROMPersonsWHERELastNameIN('Adams','Carter')
    结果集:结果集:IdLastNameFirstNameAddressCity
    1
    Adams
    John
    OxfordStreet
    London
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    SQLBETWEEN操作符
    
    PreviousPageNextPageBETWEEN操作符在WHERE子句中使用,作用是选取介于两个值之间的数据范围.子句中使用,作用是选取介于两个值之间的数据范围.
    BETWEEN操作符
    操作符BETWEEN...AND会选取介于两个值之间的数据范围.这些值可以是数值,文本或者日期.
    SQLBETWEEN语法
    SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameBETWEENvalue1ANDvalue2
    在实例中使用:原始的表(在实例中使用:)在实例中使用
    Persons表:
    Id
    LastName
    FirstName
    Address
    City
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    4
    Gates
    Bill
    Xuanwumen10
    Beijing
    BETWEEN操作符实例
    如需以字母顺序显示介于"Adams"(包括)和"Carter"(不包括)之间的人,请使用下面的SQL:
    SELECT*FROMPersonsWHERELastName
    BETWEEN
    结果集:结果集:Id
    'Adams'
    AND
    'Carter'
    LastName
    FirstName
    Address
    City
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    重要事项:重要事项:不同的数据库对BETWEEN...AND操作符的处理方式是有差异的.某些数据库会列出介于"Adams"和"Carter"之间的人,但不包括"Adams"和"Carter";某些数据库会列出介于"Adams"和"Carter"之间并包括"Adams"和"Carter"的人;而另一些数据库会列出介于"Adams"和"Carter"之间的人,包括"Adams",但不包括"Carter".
    所以,请检查你的数据库是如何处理BETWEEN....AND操作符的!
    实例2
    如需使用上面的例子显示范围之外的人,请使用NOT操作符:
    SELECT*FROMPersonsWHERELastName
    NOT
    BETWEEN'Adams'AND'Carter'
    结果集:结果集:IdLastNameFirstNameAddressCity
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    4
    Gates
    Bill
    Xuanwumen10
    Beijing
    Alias(别名)SQLAlias(别名)
    
    PreviousPageNextPage通过使用SQL,可以为列名称和表名称指定别名(Alias).,可以为列名称和表名称指定别名().
    SQLAlias
    表的SQLAlias语法
    SELECTcolumn_name(s)FROMtable_nameASalias_name
    列的SQLAlias语法
    SELECTcolumn_nameASalias_nameFROMtable_name
    Alias实例使用表名称别名实例:
    假设我们有两个表分别是:"Persons"和"Product_Orders".我们分别为它们指定别名"p"和"po".
    现在,我们希望列出"JohnAdams"的所有定单.
    我们可以使用下面的SELECT语句:
    SELECTpo.OrderID,p.LastName,p.FirstNameFROMPersons
    ASp,
    Product_Orders
    ASpo
    WHEREp.LastName='Adams'ANDp.FirstName='John'
    不使用别名的SELECT语句:
    SELECTProduct_Orders.OrderID,Persons.LastName,Persons.FirstNameFROMPersons,Product_OrdersWHEREPersons.LastName='Adams'ANDPersons.FirstName='John'
    从上面两条SELECT语句您可以看到,别名使查询程序更易阅读和书写.
    Alias实例:使用一个列名别名实例
    表Persons:IdLastNameFirstNameAddressCity
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    SQL:
    SELECTLastNameFROMPersons
    ASFamily,
    FirstName
    ASName
    结果:结果:FamilyName
    Adams
    John
    Bush
    George
    Carter
    Thomas
    SQLJOIN
    
    PreviousPageNextPageSQLjoin用于根据两个或多个表中的列之间的关系,从这些表中查询数据.用于根据两个或多个表中的列之间的关系,从这些表中查询数据.
    Join和Key
    有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行join.
    数据库中的表可通过键将彼此联系起来.主键(PrimaryKey)是一个列,在这个列中的每一行的值都是唯一的.在表中,每个主键的值都是唯一的.这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起.
    请看"Persons"表:
    Id_P
    LastName
    FirstName
    Address
    City
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    请注意,"Id_P"列是Persons表中的的主键.这意味着没有两行能够拥有相同的Id_P.即使两个人的完全相同,Id_P也可以区分他们.
    接下来请看"Orders"表:
    Id_O
    OrderNo
    Id_P
    1
    77895
    3
    2
    44678
    3
    3
    22456
    1
    4
    24562
    1
    5
    34764
    65
    请注意,"Id_O"列是Orders表中的的主键,同时,"Orders"表中的"Id_P"列用于引用"Persons"表中的人,而无需使用他们的确切.
    请留意,"Id_P"列把上面的两个表联系了起来.
    引用两个表
    我们可以通过引用两个表的方式,从两个表中获取数据:
    谁订购了产品,并且他们订购了什么产品?
    SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersons,OrdersWHEREPersons.Id_P=Orders.Id_P
    结果集:
    LastName
    FirstName
    OrderNo
    Adams
    John
    22456
    Adams
    John
    24562
    Carter
    Thomas
    77895
    Carter
    Thomas
    44678
    SQLJOIN-使用Join
    除了上面的方法,我们也可以使用关键词JOIN来从两个表中获取数据.
    如果我们希望列出所有人的定购,可以使用下面的SELECT语句:
    SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersons
    INNERJOINOrders
    ONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName
    结果集:
    LastName
    FirstName
    OrderNo
    Adams
    John
    22456
    Adams
    John
    24562
    Carter
    Thomas
    77895
    Carter
    Thomas
    44678
    不同的SQLJOIN
    除了我们在上面的例子中使用的INNERJOIN(内连接),我们还可以其他几种连接.
    下面列出了您可以使用的JOIN类型,以及它们之间的差异.
    JOIN:如果表中有至少一个匹配,则返回行LEFTJOIN:即使右表中没有匹配,也从左表返回所有的行RIGHTJOIN:即使左表中没有匹配,也从右表返回所有的行
    FULLJOIN:只要其中一个表中存在匹配,就返回行
    SQLINNERJOIN关键字
    
    PreviousPageNextPage
    SQLINNERJOIN关键字
    在表中存在至少一个匹配时,INNERJOIN关键字返回行.
    INNERJOIN关键字语法
    SELECTcolumn_name(s)FROMtable_name1INNERJOINtable_name2ONtable_name1.column_name=table_name2.column_name
    注释:注释:INNERJOIN与JOIN是相同的.
    用在例子中的):原始的表(用在例子中的:用在例子中的
    "Persons"表:
    Id_P
    LastName
    FirstName
    Address
    City
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork3
    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
    内连接(内连接(INNERJOIN)实例)
    现在,我们希望列出所有人的定购.
    您可以使用下面的SELECT语句:
    SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersonsINNERJOINOrdersONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName
    结果集:
    LastName
    FirstName
    OrderNo
    Adams
    John
    22456
    Adams
    John
    24562
    Carter
    Thomas
    77895
    Carter
    Thomas
    44678
    INNERJOIN关键字在表中存在至少一个匹配时返回行.如果"Persons"中的行在"Orders"中没有匹配,就不会列出这些行.
    SQLLEFTJOIN关键字
    
    PreviousPageNextPage
    SQLLEFTJOIN关键字
    LEFTJOIN关键字会从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行.
    LEFTJOIN关键字语法
    SELECTcolumn_name(s)FROMtable_name1LEFTJOINtable_name2ONtable_name1.column_name=table_name2.column_name
    注释:注释:在某些数据库中,LEFTJOIN称为LEFTOUTERJOIN.
    用在例子中的):原始的表(用在例子中的:用在例子中的
    "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
    左连接(左连接(LEFTJOIN)实例)
    现在,我们希望列出所有的人,以及他们的定购-如果有的话.
    您可以使用下面的SELECT语句:
    SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersonsLEFTJOINOrdersONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName
    结果集:
    LastName
    FirstName
    OrderNo
    Adams
    John
    22456
    Adams
    John
    24562
    Carter
    Thomas
    77895
    Carter
    Thomas
    44678
    Bush
    George
    LEFTJOIN关键字会从左表(Persons)那里返回所有的行,即使在右表(Orders)中没有匹配的行.
    SQLRIGHTJOIN关键字
    
    PreviousPageNextPage
    SQLRIGHTJOIN关键字
    RIGHTJOIN关键字会右表(table_name2)那里返回所有的行,即使在左表(table_name1)中没有匹配的行.
    RIGHTJOIN关键字语法
    SELECTcolumn_name(s)FROMtable_name1RIGHTJOINtable_name2ONtable_name1.column_name=table_name2.column_name
    注释:注释:在某些数据库中,RIGHTJOIN称为RIGHTOUTERJOIN.
    用在例子中的):原始的表(用在例子中的:用在例子中的
    "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
    右连接(右连接(RIGHTJOIN)实例)
    现在,我们希望列出所有的定单,以及定购它们的人-如果有的话.
    您可以使用下面的SELECT语句:
    SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersonsRIGHTJOINOrdersONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName
    结果集:
    LastName
    FirstName
    OrderNo
    Adams
    John
    22456
    Adams
    John
    24562
    Carter
    Thomas
    77895
    Carter
    Thomas
    44678
    34764
    RIGHTJOIN关键字会从右表(Orders)那里返回所有的行,即使在左表(Persons)中没有匹配的行.
    SQLFULLJOIN关键字
    
    PreviousPageNextPage
    SQLFULLJOIN关键字
    只要其中某个表存在匹配,FULLJOIN关键字就会返回行.
    FULLJOIN关键字语法
    SELECTcolumn_name(s)FROMtable_name1FULLJOINtable_name2ONtable_name1.column_name=table_name2.column_name
    注释:注释:在某些数据库中,FULLJOIN称为FULLOUTERJOIN.
    用在例子中的):原始的表(用在例子中的:用在例子中的
    "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
    全连接(全连接(FULLJOIN)实例)
    现在,我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人.
    您可以使用下面的SELECT语句:
    SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersonsFULLJOINOrdersONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName
    结果集:
    LastName
    FirstName
    OrderNo
    Adams
    John
    22456
    Adams
    John
    24562
    Carter
    Thomas
    77895
    Carter
    Thomas
    44678
    Bush
    George
    34764
    FULLJOIN关键字会从左表(Persons)和右表(Orders)那里返回所有的行.如果"Persons"中的行在表"Orders"中没有匹配,或者如果"Orders"中的行在表"Persons"中没有匹配,这些行同样会列出.
    UNIONSQLUNION和UNIONALL操作符
    
    PreviousPageNextPage
    SQLUNION操作符
    UNION操作符用于合并两个或多个SELECT语句的结果集.
    请注意,UNION内部的SELECT语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条SELECT语句中的列的顺序必须相同.
    SQLUNION语法
    SELECTcolumn_name(s)FROMtable_name1UNIONSELECTcolumn_name(s)FROMtable_name2
    注释:注释:默认地,UNION操作符选取不同的值.如果允许重复的值,请使用UNIONALL.
    SQLUNIONALL语法
    SELECTcolumn_name(s)FROMtable_name1UNIONALLSELECTcolumn_name(s)FROMtable_name2
    另外,UNION结果集中的列名总是等于UNION中第一个SELECT语句中的列名.
    下面的例子中使用的原始表:下面的例子中使用的原始表:
    Employees_China:E_IDE_Name
    01
    Zhang,Hua
    02
    Wang,Wei
    03
    Carter,Thomas
    04
    Yang,Ming
    Employees_USA:E_IDE_Name
    01
    Adams,John
    02
    Bush,George
    03
    Carter,Thomas
    04
    Gates,Bill
    使用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命令会列出所有的值.
    SQLStatement1UNIONALLSQLStatement2
    使用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
    SQLSELECTINTO语句
    
    PreviousPageNextPageSQLSELECTINTO语句可用于创建表的备份复件.语句可用于创建表的备份复件.
    SELECTINTO语句
    SELECTINTO语句从一个表中选取数据,然后把数据插入另一个表中.
    SELECTINTO语句常用于创建表的备份复件或者用于对记录进行存档.
    SQLSELECTINTO语法您可以把所有的列插入新表:
    SELECT*INTOnew_table_name[INexternaldatabase]FROMold_tablename
    或者只把希望的列插入新表:
    SELECTcolumn_name(s)INTOnew_table_name[INexternaldatabase]FROMold_tablename
    SQLSELECTINTO实例-制作备份复件
    下面的例子会制作"Persons"表的备份复件:
    SELECTINTO
    *
    Persons_backup
    FROMPersons
    IN子句可用于向另一个数据库中拷贝表:
    SELECTINTO
    *
    Persons
    IN
    'Backup.mdb'
    FROMPersons
    如果我们希望拷贝某些域,可以在SELECT语句后列出这些域:
    SELECTINTO
    LastName,FirstName
    Persons_backup
    FROMPersons
    SQLSELECTINTO实例-带有WHERE子句
    我们也可以添加WHERE子句.
    下面的例子通过从"Persons"表中提取居住在"Beijing"的人的信息,创建了一个带有两个列的名为"Persons_backup"的表:
    SELECTINTO
    LastName,Firstname
    Persons_backup
    FROMPersons
    WHERE
    City='Beijing'
    SQLSELECTINTO实例-被连接的表
    从一个以上的表中选取数据也是可以做到的.
    下面的例子会创建一个名为"Persons_Order_Backup"的新表,其中包含了从Persons和Orders两个表中取得的信息:
    SELECTINTOFROM
    Persons.LastName,Orders.OrderNo
    Persons_Order_BackupPersonsOrders
    INNERJOINON
    Persons.Id_P=Orders.Id_P
    SQLCREATEDATABASE语句
    
    PreviousPageNextPage
    CREATEDATABASE语句
    CREATEDATABASE用于创建数据库.
    SQLCREATEDATABASE语法
    CREATEDATABASEdatabase_name
    SQLCREATEDATABASE实例
    现在我们希望创建一个名为"my_db"的数据库.
    我们使用下面的CREATEDATABASE语句:
    CREATEDATABASEmy_db
    可以通过CREATETABLE来添加数据库表.
    SQLCREATETABLE语句
    
    PreviousPageNextPage
    CREATETABLE语句
    CREATETABLE语句用于创建数据库中的表.
    SQLCREATETABLE语法
    CREATETABLE表名称(列名称1数据类型,列名称2数据类型,列名称3数据类型,....)
    数据类型(data_type)规定了列可容纳何种数据类型.下面的表格包含了SQL中最常用的数据类型:
    数据类型
    描述integer(size)仅容纳整数.在括号内规定数字的最大位数.
    
    int(size)smallint(size)tinyint(size)decimal(size,d)numeric(size,d)"size"规定数字的最大位数."d"规定小数点右侧的最大位数.容纳带有小数的数字.
    char(size)
    容纳固定长度的字符串(可容纳字母,数字以及特殊字符).在括号中规定字符串的长度.
    varchar(size)
    容纳可变长度的字符串(可容纳字母,数字以及特殊的字符).在括号中规定字符串的最大长度.
    date(yyyymmdd)
    容纳日期.
    SQLCREATETABLE实例
    本例演示如何创建名为"Person"的表.
    该表包含5个列,列名分别是:"Id_P","LastName","FirstName","Address"以及"City":
    CREATETABLEPersons(Id_Pint,LastNamevarchar(255),FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))
    Id_P列的数据类型是int,包含整数.其余4列的数据类型是varchar,最大长度为255个字符.
    空的"Persons"表类似这样:
    Id_P
    LastName
    FirstName
    Address
    City
    可使用INSERTINTO语句向空表写入数据.
    (Constraints)SQL约束(Constraints)
    
    PreviousPageNextPage
    SQL约束
    约束用于限制加入表的数据的类型.
    可以在创建表时规定约束(通过CREATETABLE语句),或者在表创建之后也可以(通过ALTERTABLE语句).
    我们将主要探讨以下几种约束:
    NOTNULLUNIQUEPRIMARYKEYFOREIGNKEYCHECKDEFAULT
    注释:注释:在下面的章节,我们会详细讲解每一种约束.
    SQLNOTNULL约束
    
    PreviousPageNextPage
    SQLNOTNULL约束
    NOTNULL约束强制列不接受NULL值.
    NOTNULL约束强制字段始终包含值.这意味着,如果不向字段添加值,就无法插入新纪录或者更新记录.
    下面的SQL语句强制"Id_P"列和"LastName"列不接受NULL值:
    CREATETABLEPersons(Id_Pint
    NOTNULL,NOTNULL,
    LastNamevarchar(255)
    FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))
    SQLUNIQUE约束
    
    PreviousPageNextPage
    SQLUNIQUE约束
    UNIQUE约束唯一标识数据库表中的每条记录.
    UNIQUE和PRIMARYKEY约束均为列或列集合提供了唯一性的保证.
    PRIMARYKEY拥有自动定义的UNIQUE约束.
    请注意,每个表可以有多个UNIQUE约束,但是每个表只能有一个PRIMARYKEY约束.
    SQLUNIQUEConstraintonCREATETABLE
    下面的SQL在"Persons"表创建时在"Id_P"列创建UNIQUE约束:
    MySQL:
    CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),
    Addressvarchar(255),Cityvarchar(255),
    UNIQUE(Id_P)
    )
    SQLServer/Oracle/MSAccess:
    CREATETABLEPersons(Id_PintNOTNULL
    UNIQUE,
    LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))
    如果需要命名UNIQUE约束,以及为多个列定义UNIQUE约束,请使用下面的SQL语法:
    MySQL/SQLServer/Oracle/MSAccess:
    CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),
    CONSTRAINTuc_PersonIDUNIQUE(Id_P,LastName)
    )
    SQLUNIQUEConstraintonALTERTABLE
    当表已被创建时,如需在"P_Id"列创建UNIQUE约束,请使用下列SQL:
    MySQL/SQLServer/Oracle/MSAccess:
    ALTERTABLEPersons
    ADDUNIQUE(P_Id)
    如需命名UNIQUE约束,并定义多个列的UNIQUE约束,请使用下面的SQL语法:
    MySQL/SQLServer/Oracle/MSAccess:
    ALTERTABLEPersons
    ADDCONSTRAINTuc_PersonIDUNIQUE(P_Id,LastName)
    撤销UNIQUE约束
    如需撤销UNIQUE约束,请使用下面的SQL:
    MySQL:
    ALTERTABLEPersons
    DROPINDEXuc_PersonID
    SQLServer/Oracle/MSAccess:
    ALTERTABLEPersons
    DROPCONSTRAINTuc_PersonID
    SQLPRIMARYKEY约束
    
    PreviousPageNextPage
    SQLPRIMARYKEY约束
    PRIMARYKEY约束唯一标识数据库表中的每条记录.
    主键必须包含唯一的值.
    主键列不能包含NULL值.
    每个表应该都一个主键,并且每个表只能有一个主键.
    SQLPRIMARYKEYConstraintonCREATETABLE
    下面的SQL在"Persons"表创建时在"Id_P"列创建PRIMARYKEY约束:
    MySQL:
    CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),
    PRIMARYKEY(Id_P)
    )
    SQLServer/Oracle/MSAccess:
    CREATETABLEPersons(Id_PintNOTNULL
    PRIMARYKEY,
    LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))
    如果需要命名PRIMARYKEY约束,以及为多个列定义PRIMARYKEY约束,请使用下面的SQL语法:
    MySQL/SQLServer/Oracle/MSAccess:
    CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),
    CONSTRAINTuc_PersonIDPRIMARYKEY(Id_P,LastName)
    )
    SQLPRIMARYKEYConstraintonALTERTABLE
    如果在表已存在的情况下为"Id_P"列创建PRIMARYKEY约束,请使用下面的SQL:
    MySQL/SQLServer/Oracle/MSAccess:
    ALTERTABLEPersons
    ADDPRIMARYKEY(Id_P)
    如果需要命名PRIMARYKEY约束,以及为多个列定义PRIMARYKEY约束,请使用下面的SQL语法:
    MySQL/SQLServer/Oracle/MSAccess:
    ALTERTABLEPersons
    ADDCONSTRAINTpk_PersonIDPRIMARYKEY(Id_P,LastName)
    注释:注释:如果您使用ALTERTABLE语句添加主键,必须把主键列声明为不包含NULL值(在表首次创建时).
    撤销PRIMARYKEY约束
    如需撤销PRIMARYKEY约束,请使用下面的SQL:
    MySQL:
    ALTERTABLEPersons
    DROPPRIMARYKEY
    SQLServer/Oracle/MSAccess:
    ALTERTABLEPersons
    DROPCONSTRAINTpk_PersonID
    SQLFOREIGNKEY约束
    
    PreviousPageNextPage
    SQLFOREIGNKEY约束
    一个表中的FOREIGNKEY指向另一个表中的PRIMARYKEY.
    让我们通过一个例子来解释外键.请看下面两个表:
    "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
    请注意,"Orders"中的"Id_P"列指向"Persons"表中的"Id_P"列.
    "Persons"表中的"Id_P"列是"Persons"表中的PRIMARYKEY.
    "Orders"表中的"Id_P"列是"Orders"表中的FOREIGNKEY.
    FOREIGNKEY约束用于预防破坏表之间连接的动作.
    FOREIGNKEY约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一.
    SQLFOREIGNKEYConstraintonCREATETABLE
    下面的SQL在"Orders"表创建时为"Id_P"列创建FOREIGNKEY:
    MySQL:
    CREATETABLEOrders(O_IdintNOTNULL,OrderNointNOTNULL,Id_Pint,PRIMARYKEY(O_Id),
    FOREIGNKEY(Id_P)REFERENCESPersons(Id_P)
    )
    SQLServer/Oracle/MSAccess:
    CREATETABLEOrders(O_IdintNOTNULLPRIMARYKEY,OrderNointNOTNULL,
    Id_PintFOREIGNKEYREFERENCESPersons(Id_P)
    )
    如果需要命名FOREIGNKEY约束,以及为多个列定义FOREIGNKEY约束,请使用下面的SQL语法:
    MySQL/SQLServer/Oracle/MSAccess:
    CREATETABLEOrders(O_IdintNOTNULL,OrderNointNOTNULL,Id_Pint,
    PRIMARYKEY(O_Id),
    CONSTRAINTfk_PerOrdersFOREIGNKEY(Id_P)REFERENCESPersons(Id_P)
    )
    SQLFOREIGNKEYConstraintonALTERTABLE
    如果在"Orders"表已存在的情况下为"Id_P"列创建FOREIGNKEY约束,请使用下面的SQL:
    MySQL/SQLServer/Oracle/MSAccess:
    ALTERTABLEOrders
    ADDFOREIGNKEY(Id_P)REFERENCESPersons(Id_P)
    如果需要命名FOREIGNKEY约束,以及为多个列定义FOREIGNKEY约束,请使用下面的SQL语法:
    MySQL/SQLServer/Oracle/MSAccess:
    ALTERTABLEOrders
    ADDCONSTRAINTfk_PerOrdersFOREIGNKEY(Id_P)REFERENCESPersons(Id_P)
    撤销FOREIGNKEY约束
    如需撤销FOREIGNKEY约束,请使用下面的SQL:
    MySQL:
    ALTERTABLEOrders
    DROPFOREIGNKEYfk_PerOrders
    SQLServer, /Oracle/MSAccess:
    ALTERTABLEOrders
    DROPCONSTRAINTfk_PerOrders
    CHECKSQLCHECK约束
    
    PreviousPageNextPage
    SQLCHECK约束
    CHECK约束用于限制列中的值的范围.
    如果对单个列定义CHECK约束,那么该列只允许特定的值.
    如果对一个表定义CHECK约束,那么此约束会在特定的列中对值进行限制.
    SQLCHECKConstraintonCREATETABLE
    下面的SQL在"Persons"表创建时为"Id_P"列创建CHECK约束.CHECK约束规定"Id_P"列必须只包含大于0的整数.
    MySQL:
    CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),
    CHECK(Id_P>0)
    )
    SQLServer/Oracle/MSAccess:
    CREATETABLEPersons(Id_PintNOTNULL
    CHECK(Id_P>0),
    LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))
    如果需要命名CHECK约束,以及为多个列定义CHECK约束,请使用下面的SQL语法:
    MySQL/SQLServer/Oracle/MSAccess:
    CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),
    Cityvarchar(255),
    CONSTRAINTchk_PersonCHECK(Id_P>0ANDCity='Sandnes')
    )
    SQLCHECKConstraintonALTERTABLE
    如果在表已存在的情况下为"Id_P"列创建CHECK约束,请使用下面的SQL:
    MySQL/SQLServer/Oracle/MSAccess:
    ALTERTABLEPersons
    ADDCHECK(Id_P>0)
    如果需要命名CHECK约束,以及为多个列定义CHECK约束,请使用下面的SQL语法:
    MySQL/SQLServer/Oracle/MSAccess:
    ALTERTABLEPersons
    ADDCONSTRAINTchk_PersonCHECK(Id_P>0ANDCity='Sandnes')
    撤销CHECK约束
    如需撤销CHECK约束,请使用下面的SQL:
    SQLServer/Oracle/MSAccess:
    ALTERTABLEPersons
    DROPCONSTRAINTchk_Person
    SQLDEFAULT约束
    
    PreviousPageNextPage
    SQLDEFAULT约束
    DEFAULT约束用于向列中插入默认值.
    如果没有规定其他的值,那么会将默认值添加到所有的新纪录.
    SQLDEFAULTConstraintonCREATETABLE
    下面的SQL在"Persons"表创建时为"City"列创建DEFAULT约束:
    MySQL/SQLServer/Oracle/MSAccess:
    CREATETABLEPersons(Id_PintNOTNULL,
    LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255)DEFAULT'Sandnes')
    通过使用类似GETDATE()这样的函数,DEFAULT约束也可以用于插入系统值:
    CREATETABLEOrders(Id_OintNOTNULL,OrderNointNOTNULL,Id_Pint,OrderDatedateDEFAULTGETDATE())
    SQLDEFAULTConstraintonALTERTABLE
    如果在表已存在的情况下为"City"列创建DEFAULT约束,请使用下面的SQL:
    MySQL:
    ALTERTABLEPersonsALTERCitySETDEFAULT'SANDNES'
    SQLServer/Oracle/MSAccess:
    ALTERTABLEPersonsALTERCOLUMNCitySETDEFAULT'SANDNES'
    撤销DEFAULT约束
    如需撤销DEFAULT约束,请使用下面的SQL:
    MySQL:
    ALTERTABLEPersonsALTERCityDROPDEFAULT
    SQLServer/Oracle/MSAccess:
    ALTERTABLEPersonsALTERCOLUMNCityDROPDEFAULT
    SQLCREATEINDEX语句
    
    PreviousPageNextPageCREATEINDEX语句用于在表中创建索引.语句用于在表中创建索引.
    在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据.在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据.
    索引
    您可以在表中创建索引,以便更加快速高效地查询数据.
    用户无法看到索引,它们只能被用来加速搜索/查询.
    注释:注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新.因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引.
    SQLCREATEINDEX语法在表上创建一个简单的索引.允许使用重复的值:
    CREATEINDEXindex_nameONtable_name(column_name)
    注释:注释:"column_name"规定需要索引的列.
    SQLCREATEUNIQUEINDEX语法在表上创建一个唯一的索引.唯一的索引意味着两个行不能拥有相同的索引值.
    CREATEUNIQUEINDEXindex_nameONtable_name(column_name)
    CREATEINDEX实例
    本例会创建一个简单的索引,名为"PersonIndex",在Person表的LastName列:
    CREATEINDEXPersonIndexONPerson(LastName)
    如果您希望以降序降序索引某个列中的值,您可以在列名称之后添加保留字DESC:降序
    CREATEINDEXPersonIndexONPerson(LastNameDESC)
    假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
    CREATEINDEXPersonIndexONPerson(LastName,FirstName)
    撤销索引,SQL撤销索引,表以及数据库
    
    PreviousPageNextPage语句,可以轻松地删除索引,表和数据库.通过使用DROP语句,可以轻松地删除索引,表和数据库.
    SQLDROPINDEX语句
    我们可以使用DROPINDEX命令删除表格中的索引.
    的语法:用于MicrosoftSQLJet(以及MicrosoftAccess)的语法以及
    DROPINDEXindex_nameONtable_name
    的语法:用于MSSQLServer的语法
    DROPINDEXtable_name.index_name
    语法:用于IBMDB2和Oracle语法
    DROPINDEXindex_name
    的语法:用于MySQL的语法
    ALTERTABLEtable_nameDROPINDEXindex_name
    SQLDROPTABLE语句
    DROPTABLE语句用于删除表(表的结构,属性以及索引也会被删除):
    DROPTABLE表名称
    SQLDROPDATABASE语句
    DROPDATABASE语句用于删除数据库:
    DROPDATABASE数据库名称
    SQLTRUNCATETABLE语句
    如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?
    请使用TRUNCATETABLE命令(仅仅删除表格中的数据):
    TRUNCATETABLE表名称
    SQLALTERTABLE语句
    
    PreviousPageNextPage
    ALTERTABLE语句
    ALTERTABLE语句用于在已有的表中添加,修改或删除列.
    SQLALTERTABLE语法如需在表中添加列,请使用下列语法:
    ALTERTABLEtable_nameADDcolumn_namedatatype
    要删除表中的列,请使用下列语法:
    ALTERTABLEtable_nameDROPCOLUMNcolumn_name
    注释:注释:某些数据库系统不允许这种在数据库表中删除列的方式(DROPCOLUMNcolumn_name).
    要改变表中列的数据类型,请使用下列语法:
    ALTERTABLEtable_nameALTERCOLUMNcolumn_namedatatype
    用在例子中的):原始的表(用在例子中的:用在例子中的
    Persons表:
    Id
    LastName
    FirstName
    Address
    City
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    SQLALTERTABLE实例
    现在,我们希望在表"Persons"中添加一个名为"Birthday"的新列.
    我们使用下列SQL语句:
    ALTERTABLEPersonsADDBirthdaydate
    请注意,新列"Birthday"的类型是date,可以存放日期.数据类型规定列中可以存放的数据的类型.
    新的"Persons"表类似这样:
    Id
    LastName
    FirstName
    Address
    City
    Birthday
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    改变数据类型实例
    现在我们希望改变"Persons"表中"Birthday"列的数据类型.
    我们使用下列SQL语句:
    ALTERTABLEPersonsALTERCOLUMNBirthdayyear
    请注意,"Birthday"列的数据类型是year,可以存放2位或4位格式的年份.
    DROPCOLUMN实例
    接下来,我们删除"Person"表中的"Birthday"列:
    ALTERTABLEPersonDROPCOLUMNBirthday
    Persons表会成为这样:
    Id
    LastName
    FirstName
    Address
    City
    1
    Adams
    John
    OxfordStreet
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    3
    Carter
    Thomas
    ChanganStreet
    Beijing
    SQLAUTOINCREMENT字段
    
    PreviousPageNextPageAuto-increment会在新纪录插入表中时生成一个唯一的数字.会在新纪录插入表中时生成一个唯一的数字.
    AUTOINCREMENT字段
    我们通常希望在每次插入新纪录时,自动地创建主键字段的值.
    我们可以在表中创建一个auto-increment字段.
    用于MySQL的语法
    下列SQL语句把"Persons"表中的"P_Id"列定义为auto-increment主键:
    CREATETABLEPersons(
    P_IdintNOTNULLAUTO_INCREMENT,
    LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),
    PRIMARYKEY(P_Id)
    )
    MySQL使用AUTO_INCREMENT关键字来执行auto-increment任务.
    默认地,AUTO_INCREMENT的开始值是1,每条新纪录递增1.
    要让AUTO_INCREMENT序列以其他的值起始,请使用下列SQL语法:
    ALTERTABLEPersonsAUTO_INCREMENT=100
    要在"Persons"表中插入新纪录,我们不必为"P_Id"列规定值(会自动添加一个唯一的值):
    INSERTINTOPersons(FirstName,LastName)VALUES('Bill','Gates')
    上面的SQL语句会在"Persons"表中插入一条新纪录."P_Id"会被赋予一个唯一的值."FirstName"会被设置为"Bill","LastName"列会被设置为"Gates".
    用于SQLServer的语法
    下列SQL语句把"Persons"表中的"P_Id"列定义为auto-increment主键:
    CREATETABLEPersons(
    P_IdintPRIMARYKEYIDENTITY,
    LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))
    MSSQL使用IDENTITY关键字来执行auto-increment任务.
    默认地,IDENTITY的开始值是1,每条新纪录递增1.
    要规定"P_Id"列以20起始且递增10,请把identity改为IDENTITY(20,10)
    要在"Persons"表中插入新纪录,我们不必为"P_Id"列规定值(会自动添加一个唯一的值):
    INSERTINTOPersons(FirstName,LastName)VALUES('Bill','Gates')
    上面的SQL语句会在"Persons"表中插入一条新纪录."P_Id"会被赋予一个唯一的值."FirstName"会被设置为"Bill","LastName"列会被设置为"Gates".
    用于Access的语法
    下列SQL语句把"Persons"表中的"P_Id"列定义为auto-increment主键:
    CREATETABLEPersons(
    P_IdintPRIMARYKEYAUTOINCREMENT,
    LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255))
    MSAccess使用AUTOINCREMENT关键字来执行auto-increment任务.
    默认地,AUTOINCREMENT的开始值是1,每条新纪录递增1.
    要规定"P_Id"列以20起始且递增10,请把autoincrement改为AUTOINCREMENT(20,10)
    要在"Persons"表中插入新纪录,我们不必为"P_Id"列规定值(会自动添加一个唯一的值):
    INSERTINTOPersons(FirstName,LastName)VALUES('Bill','Gates')
    上面的SQL语句会在"Persons"表中插入一条新纪录."P_Id"会被赋予一个唯一的值."FirstName"会被设置为"Bill","LastName"列会被设置为"Gates".
    用于Oracle的语法
    在Oracle中,代码稍微复杂一点.
    您必须通过sequence对创建auto-increment字段(该对象生成数字序列).
    请使用下面的CREATESEQUENCE语法:
    CREATESEQUENCEseq_personMINVALUE1STARTWITH1INCREMENTBY1CACHE10
    上面的代码创建名为seq_person的序列对象,它以1起始且以1递增.该对象缓存10个值以提高性能.CACHE选项规定了为了提高访问速度要存储多少个序列值.
    要在"Persons"表中插入新纪录,我们必须使用nextval函数(该函数从seq_person序列中取回下一个值):
    INSERTINTOPersons(P_Id,FirstName,LastName)VALUES(seq_person.nextval,'Lars','Monsen')
    上面的SQL语句会在"Persons"表中插入一条新纪录."P_Id"的赋值是来自seq_person序列的下一个数字."FirstName"会被设置为"Bill","LastName"列会被设置为"Gates".
    VIEW(视图)SQLVIEW(视图)
    
    PreviousPageNextPage视图是可视化的表.视图是可视化的表.
    本章讲解如何创建,更新和删除视图.本章讲解如何创建,更新和删除视图.
    SQLCREATEVIEW语句
    什么是视图?什么是视图?在SQL中,视图是基于SQL语句的结果集的可视化的表.
    视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段.我们可以向视图添加SQL函数,WHERE以及JOIN语句,我们也可以提交数据,就像这些来自于某个单一的表.
    注释:注释:数据库的设计和结构不会受到视图中的函数,where或join语句的影响.
    SQLCREATEVIEW语法
    CREATEVIEWview_nameASSELECTcolumn_name(s)FROMtable_name
    WHEREcondition
    注释:注释:视图总是显示最近的数据.每当用户查询视图时,数据库引擎通过使用SQL语句来重建数据.
    SQLCREATEVIEW实例
    可以从某个查询内部,某个存储过程内部,或者从另一个视图内部来使用视图.通过向视图添加函数,join等等,我们可以向用户精确地提交我们希望提交的数据.
    样本数据库Northwind拥有一些被默认安装的视图.视图"CurrentProductList"会从Products表列出所有正在使用的产品.这个视图使用下列SQL创建:
    CREATEVIEWSELECTFROM
    [CurrentProductList]
    AS
    ProductID,ProductName
    ProductsDiscontinued=No
    WHERE
    我们可以查询上面这个视图:
    SELECT*FROM[CurrentProductList]
    Northwind样本数据库的另一个视图会选取Products表中所有单位价格高于平均单位价格的产品:
    CREATEVIEWSELECTFROM
    [ProductsAboveAveragePrice]
    AS
    ProductName,UnitPrice
    ProductsUnitPrice>(SELECTAVG(UnitPrice)FROMProducts)
    WHERE
    我们可以像这样查询上面这个视图:
    SELECT*FROM[ProductsAboveAveragePrice]
    另一个来自Northwind数据库的视图实例会计算在1997年每个种类的销售总数.请注意,这个视图会从另一个名为"ProductSalesfor1997"的视图那里选取数据:
    CREATEVIEW
    [CategorySalesFor1997]
    ASAS
    CategorySales
    SELECTDISTINCTFROM
    CategoryName,Sum(ProductSales)
    [ProductSalesfor1997]CategoryName
    GROUPBY
    我们可以像这样查询上面这个视图:
    SELECT*FROM[CategorySalesFor1997]
    我们也可以向查询添加条件.现在,我们仅仅需要查看"Beverages"类的全部销量:
    SELECTWHERE
    *
    FROM
    [CategorySalesFor1997]
    CategoryName='Beverages'
    SQL更新视图
    您可以使用下面的语法来更新视图:
    SQLCREATEORREPLACEVIEWSyntaxCREATEORREPLACEVIEWview_nameASSELECTcolumn_name(s)FROMtable_nameWHEREcondition
    现在,我们希望向"CurrentProductList"视图添加"Category"列.我们将通过下列SQL更新视图:
    CREATEVIEW[CurrentProductList]ASSELECTProductID,ProductName,CategoryFROMProductsWHEREDiscontinued=No
    SQL撤销视图
    您可以通过DROPVIEW命令来删除视图.
    SQLDROPVIEWSyntaxDROPVIEWview_name
    SQLDate函数
    
    PreviousPageNextPage
    SQL日期
    当我们处理日期时,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配.
    只要数据包含的只是日期部分,运行查询就不会出问题.但是,如果涉及时间,情况就有点复杂了.
    在讨论日期查询的复杂性之前,我们先来看看最重要的内建日期处理函数.
    MySQLDate函数
    下面的表格列出了MySQL中最重要的内建日期函数:
    函数
    描述
    NOW()
    返回当前的日期和时间
    CURDATE()
    返回当前的日期
    CURTIME()
    返回当前的时间
    DATE()
    提取日期或日期/时间表达式的日期部分
    EXTRACT()
    返回日期/时间按的单独部分
    DATE_ADD()
    给日期添加指定的时间间隔
    DATE_SUB()
    从日期减去指定的时间间隔
    DATEDIFF()
    返回两个日期之间的天数
    DATE_FORMAT()
    用不同的格式显示日期/时间
    SQLServerDate函数
    下面的表格列出了SQLServer中最重要的内建日期函数:
    函数
    描述
    GETDATE()
    返回当前日期和时间
    DATEPART()
    返回日期/时间的单独部分
    DATEADD()
    在日期中添加或减去指定的时间间隔
    DATEDIFF()
    返回两个日期之间的时间
    CONVERT()
    用不同的格式显示日期/时间
    SQLDate数据类型
    MySQL使用下列数据类型在数据库中存储日期或日期/时间值:
    DATE-格式YYYY-MM-DDDATETIME-格式:YYYY-MM-DDHH:MM:SSTIMESTAMP-格式:YYYY-MM-DDHH:MM:SSYEAR-格式YYYY或YY
    SQLServer使用下列数据类型在数据库中存储日期或日期/时间值:
    DATE-格式YYYY-MM-DDDATETIME-格式:YYYY-MM-DDHH:MM:SSSMALLDATETIME-格式:YYYY-MM-DDHH:MM:SSTIMESTAMP-格式:唯一的数字
    SQL日期处理
    如果不涉及时间部分,那么我们可以轻松地比较两个日期!
    假设我们有下面这个"Orders"表:
    OrderId
    ProductName
    OrderDate
    1
    computer
    2008-12-26
    2
    printer
    2008-12-26
    3
    electrograph
    2008-11-12
    4
    telephone
    2008-10-19
    现在,我们希望从上表中选取OrderDate为"2008-12-26"的记录.
    我们使用如下SELECT语句:
    SELECT*FROMOrdersWHEREOrderDate='2008-12-26'
    结果集:
    OrderId
    ProductName
    OrderDate
    1
    computer
    2008-12-26
    3
    electrograph
    2008-12-26
    现在假设"Orders"类似这样(请注意"OrderDate"列中的时间部分):
    OrderId
    ProductName
    OrderDate
    1
    computer
    2008-12-2616:23:55
    2
    printer
    2008-12-2610:45:26
    3
    electrograph
    2008-11-1214:12:08
    4
    telephone
    2008-10-1912:56:10
    如果我们使用上面的SELECT语句:
    SELECT*FROMOrdersWHEREOrderDate='2008-12-26'
    那么我们得不到结果.这是由于该查询不含有时间部分的日期.
    提示:提示:如果您希望使查询简单且更易维护,那么请不要在日期中使用时间部分!
    SQLNULL值
    
    PreviousPageNextPageNULL值是遗漏的未知数据.值是遗漏的未知数据.
    默认地,默认地,表的列可以存放NULL值.
    操作符.本章讲解ISNULL和ISNOTNULL操作符.
    SQLNULL值
    如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新纪录或更新已有的记录.这意味着该字段将以NULL值保存.
    NULL值的处理方式与其他值不同.
    NULL用作未知的或不适用的值的占位符.
    注释:注释:无法比较NULL和0;它们是不等价的.
    SQL的NULL值处理
    请看下面的"Persons"表:
    Id
    LastName
    FirstName
    Address
    City
    1
    Adams
    John
    London
    2
    Bush
    George
    FifthAvenue
    NewYork
    3
    Carter
    Thomas
    Beijing
    假如"Persons"表中的"Address"列是可选的.这意味着如果在"Address"列插入一条不带值的记录,"Address"列会使用NULL值保存.
    那么我们如何测试NULL值呢?
    无法使用比较运算符来测试NULL值,比如=,<,或者<>.
    我们必须使用ISNULL和ISNOTNULL操作符.
    SQLISNULL
    我们如何仅仅选取在"Address"列中带有NULL值的记录呢?
    我们必须使用ISNULL操作符:
    SELECTLastName,FirstName,AddressFROMPersonsWHEREAddressISNULL
    结果集:
    LastName
    FirstName
    Address
    Adams
    John
    Carter
    Thomas
    提示:请始终使用ISNULL来查找NULL值.提示:
    SQLISNOTNULL
    我们如何选取在"Address"列中不带有NULL值的记录呢?
    我们必须使用ISNOTNULL操作符:
    SELECTLastName,FirstName,AddressFROMPersonsWHEREAddressISNOTNULL
    结果集:
    LastName
    FirstName
    Address
    Bush
    George
    FifthAvenue
    在下一节中,我们了解ISNULL(),NVL(),IFNULL()和COALESCE()函数.
    SQLNULL函数
    
    PreviousPageNextPage
    SQLISNULL(),NVL(),IFNULL()和COALESCE()函数,,
    请看下面的"Products"表:
    P_Id
    ProductName
    UnitPrice
    UnitsInStock
    UnitsOnOrder
    1
    computer
    699
    25
    15
    2
    printer
    365
    36
    3
    telephone
    280
    159
    57
    假如"UnitsOnOrder"是可选的,而且可以包含NULL值.
    我们使用如下SELECT语句:
    SELECTProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)FROMProducts
    在上面的例子中,如果有"UnitsOnOrder"值是NULL,那么结果是NULL.
    微软的ISNULL()函数用于规定如何处理NULL值.
    NVL(),IFNULL()和COALESCE()函数也可以达到相同的结果.
    在这里,我们希望NULL值为0.
    下面,如果"UnitsOnOrder"是NULL,则不利于计算,因此如果值是NULL则ISNULL()返回0.
    SQLServer/MSAccess
    SELECTProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))FROMProducts
    OracleOracle没有ISNULL()函数.不过,我们可以使用NVL()函数达到相同的结果:
    SELECTProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))FROMProducts
    MySQLMySQL也拥有类似ISNULL()的函数.不过它的工作方式与微软的ISNULL()函数有点不同.
    在MySQL中,我们可以使用IFNULL()函数,就像这样:
    SELECTProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))FROMProducts
    或者我们可以使用COALESCE()函数,就像这样:
    SELECTProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))FROMProducts
    SQL数据类型
    
    PreviousPageNextPageMicrosoftAccess,MySQL以及SQLServer所使用的数据类型和范围.,所使用的数据类型和范围.
    MicrosoftAccess数据类型
    数据类型描述存储
    Text
    用于文本或文本与数字的组合.最多255个字符.Memo用于更大数量的文本.最多存储65,536个字符.注释:无法对memo字段进行排序.不过它们是可搜索的.
    Memo
    ByteIntegerLongSingleDoubleCurrency
    允许0到255的数字.允许介于-32,768到32,767之间的数字.允许介于-2,147,483,648与2,147,483,647之间的全部数字单精度浮点.处理大多数小数.双精度浮点.处理大多数小数.用于货币.支持15位的元,外加4位小数.提示:您可以选择使用哪个国家的货币.
    1字节2字节4字节4字节8字节8字节
    AutoNumberDate/TimeYes/No
    AutoNumber字段自动为每条记录分配数字,通常从1开始.用于日期和时间逻辑字段,可以显示为Yes/No,True/False或On/Off.在代码中,使用常量True和False(等价于1和0)注释:Yes/No字段中不允许Null值可以存储图片,音频,视频或其他BLOBs(BinaryLargeOBjects)包含指向其他文件的链接,包括网页.允许你创建一个可从下列列表中进行选择的选项列表.
    4字节8字节1比特
    OleObjectHyperlinkLookupWizard
    最多1GB
    4字节
    MySQL数据类型
    在MySQL中,有三种主要的类型:文本,数字和日期/时间类型.
    Text类型:类型:数据类型描述
    CHAR(size)
    保存固定长度的字符串(可包含字母,数字以及特殊字符).在括号中指定字符串的长度.最多255个字符.保存可变长度的字符串(可包含字母,数字以及特殊字符).在括号中指定字符串的最大长度.最多255个字符.注释:如果值的长度大于255,则被转换为TEXT类型.存放最大长度为255个字符的字符串.存放最大长度为65,535个字符的字符串.用于BLOBs(BinaryLargeOBjects).存放最多65,535字节的数据.存放最大长度为16,777,215个字符的字符串.用于BLOBs(BinaryLargeOBjects).存放最多16,777,215字节的数据.存放最大长度为4,294,967,295个字符的字符串.用于BLOBs(BinaryLargeOBjects).存放最多4,294,967,295字节的数据.允许你输入可能值的列表.可以在ENUM列表中列出最大65535个值.如果列表中不存在插入的值,则插入空值.注释:这些值是按照你输入的顺序存储的.
    VARCHAR(size)
    TINYTEXTTEXTBLOBMEDIUMTEXTMEDIUMBLOBLONGTEXTLONGBLOBENUM(x,y,z,etc.)
    可以按照此格式输入可能的值:ENUM('X','Y','Z')
    SET
    与ENUM类似,SET最多只能包含64个列表项,不过SET可存储一个以上的值.
    Number类型:类型:数据类型描述
    TINYINT(size)
    -128到127常规.0到255无符号*.在括号中规定最大位数.
    SMALLINT(size)
    -32768到32767常规.0到65535无符号*.在括号中规定最大位数.
    MEDIUMINT(size)
    -8388608到8388607普通.0to16777215无符号*.在括号中规定最大位数.
    INT(size)
    -2147483648到2147483647常规.0到4294967295无符号*.在括号中规定最大位数.
    BIGINT(size)
    -9223372036854775808到9223372036854775807常规.0到18446744073709551615无符号*.在括号中规定最大位数.
    FLOAT(size,d)
    带有浮动小数点的小数字.在括号中规定最大位数.在d参数中规定小数点右侧的最大位数.
    DOUBLE(size,d)
    带有浮动小数点的大数字.在括号中规定最大位数.在d参数中规定小数点右侧的最大位数.
    DECIMAL(size,d)
    作为字符串存储的DOUBLE类型,允许固定的小数点.
    *这些整数类型拥有额外的选项UNSIGNED.通常,整数可以是负数或正数.如果添加UNSIGNED属性,那么范围将从0开始,而不是某个负数.
    Date类型:类型:数据类型描述日期.格式:YYYY-MM-DD注释:支持的范围是从'1000-01-01'到'9999-12-31'
    DATE()
    DATETIME()
    *日期和时间的组合.格式:YYYY-MM-DDHH:MM:SS注释:支持的范围是从'1000-01-0100:00:00'到'9999-12-3123:59:59'
    TIMESTAMP()
    *时间戳.TIMESTAMP值使用Unix纪元('1970-01-0100:00:00'UTC)至今的描述来存储.格式:YYYY-MM-DDHH:MM:SS注释:支持的范围是从'1970-01-0100:00:01'UTC到'2038-01-0903:14:07'UTC时间.格式:HH:MM:SS注释:支持的范围是从'-838:59:59'到'838:59:59'2位或4位格式的年.注释:4位格式所允许的值:1901到2155.2位格式所允许的值:70到69,表示从1970到2069.
    TIME()YEAR()
    *即便DATETIME和TIMESTAMP返回相同的格式,它们的工作方式很不同.在INSERT或UPDATE查询中,TIMESTAMP自动把自身设置为当前的日期和时间.TIMESTAMP也接受不同的格式,比如YYYYMMDDHHMMSS,YYMMDDHHMMSS,YYYYMMDD或YYMMDD.
    SQLServer数据类型
    Character字符串:字符串:数据类型描述存储
    char(n)
    固定长度的字符串.最多8,000个字符.
    n
    varchar(n)
    可变长度的字符串.最多8,000个字符.
    varchar(max)
    可变长度的字符串.最多1,073,741,824个字符.
    text
    可变长度的字符串.最多2GB字符数据.
    Unicode字符串:字符串:数据类型描述存储
    nchar(n)
    固定长度的Unicode数据.最多4,000个字符.
    nvarchar(n)
    可变长度的Unicode数据.最多4,000个字符.
    nvarchar(max)
    可变长度的Unicode数据.最多536,870,912个字符.
    ntext
    可变长度的Unicode数据.最多2GB字符数据.
    Binary类型:类型:数据类型描述存储
    bit
    允许0,1或NULL
    binary(n)
    固定长度的二进制数据.最多8,000字节.
    varbinary(n)
    可变长度的二进制数据.最多8,000字节.
    varbinary(max)
    可变长度的二进制数据.最多2GB字节.
    image
    可变长度的二进制数据.最多2GB.
    Number类型:类型:数据类型描述存储
    tinyint
    允许从0到255的所有数字.
    1字节
    smallint
    允许从-32,768到32,767的所有数字.
    2字节
    int
    允许从-2,147,483,648到2,147,483,647的所有数字.
    4字节
    bigint
    允许介于-9,223,372,036,854,775,808和9,223,372,036,854,775,807之间的所有数字.固定精度和比例的数字.允许从-10^38+1到10^38-1之间的数字.p参数指示可以存储的最大位数(小数点左侧和右侧).p必须是1到38之间的值.默认是18.s参数指示小数点右侧存储的最大位数.s必须是0到p之间的值.默认是0.
    8字节5-17字节
    decimal(p,s)
    numeric(p,s)
    固定精度和比例的数字.允许从-10^38+1到10^38-1之间的数字.p参数指示可以存储的最大位数(小数点左侧和右侧).p必须是1到38之间的值.默认是18.s参数指示小数点右侧存储的最大位数.s必须是0到p之间的值.默认是0.介于-214,748.3648和214,748.3647之间的货币数据.介于-922,337,203,685,477.5808和922,337,203,685,477.5807之间的货币数据.从-1.79E+308到1.79E+308的浮动精度数字数据.参数n指示该字段保存4字节还是8字节.float(24)保存4字节,而float(53)保存8字节.n的默认值是53.
    5-17字节
    smallmoneymoneyfloat(n)
    4字节8字节4或8字节
    real
    从-3.40E+38到3.40E+38的浮动精度数字数据.
    4字节
    Date类型:类型:数据类型描述存储
    datetime
    从1753年1月1日到9999年12月31日,精度为3.33毫秒.
    8bytes
    datetime2
    从1753年1月1日到9999年12月31日,精度为100纳秒.
    6-8bytes
    smalldatetime
    从1900年1月1日到2079年6月6日,精度为1分钟.
    4bytes
    date
    仅存储日期.从0001年1月1日到9999年12月31日.
    3bytes
    time
    仅存储时间.精度为100纳秒.
    3-5bytes
    datetimeoffset
    与datetime2相同,外加时区偏移.
    8-10bytes
    timestamp
    存储唯一的数字,每当创建或修改某行时,该数字会更新.timestamp基于内部时钟,不对应真实时间.每个表只能有一个timestamp变量.
    其他数据类型:其他数据类型:数据类型描述
    sql_variant
    存储最多8,000字节不同数据类型的数据,除了text,ntext以及timestamp.
    uniqueidentifier
    存储全局标识符(GUID).
    xml
    存储XML格式化数据.最多2GB.
    cursor
    存储对用于数据库操作的指针的引用.
    table
    存储结果集,供稍后处理.
    SQL服务器-RDBMS
    
    PreviousPageNextPage之上.现代的SQL服务器构建在RDBMS之上.
    DBMS-数据库管理系统(DatabaseManagementSystem)数据库管理系统()
    数据库管理系统是一种可以访问数据库中数据的计算机程序.
    DBMS使我们有能力在数据库中提取,修改或者存贮信息.
    不同的DBMS提供不同的函数供查询,提交以及修改数据.
    RDBMS-关系数据库管理系统(RelationalDatabaseManagementSystem)关系数据库管理系统()
    关系数据库管理系统(RDBMS)也是一种数据库管理系统,其数据库是根据数据间的关系来组织和访问数据的.
    20世纪70年代初,IBM公司发明了RDBMS.
    RDBMS是SQL的基础,也是所有现代数据库系统诸如Oracle,SQLServer,IBMDB2,Sybase,MySQL以及MicrosoftAccess的基础.
    
  • 上一篇资讯: SQL与JAVA笔记
  • 下一篇资讯: SQL_常用命令
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师