zoukankan      html  css  js  c++  java
  • SQL连表查询

    多表的联接查询
     联接查询是指涉及两个或两个以上的表的查询,联接查询是关系数据库最主要的查询。
    实现方法:
    1) 用WHERE子句实现多表间的联接查询
    2) 指定联接类型实现多表间的联接查询
    3) 使用嵌套查询实现多表间的联接查询

    内部联接(INNER JOIN):只有满足条件的记录才显示;
    左联接(LEFT JOIN) :满足条件的记录+左边不满足条件的都显示;
    右联接(RIGHT JOIN):满足条件的记录+右边不满足条件的都显示;
    完全联接(FULL JOIN) :满足条件的记录+左、右边不满足条件的都显示;

    SQL_SELECT语句的常用格式
       SELECT [ ALL/DISTINCT] <目标列表达式>        
        FROM <[数据库名!]表名或视图名>
        [[INNER/LEFT[OUTER]/[RIGHT[OUTER]/FULL[OUTER]JOIN
        [<[数据库名!]表名或视图名>][ON 联接条件] ]…]
    [INTO <输出结果>]|[TO <文件名>| TO printer| TO screen]
    [WHERE <条件表达式> [ AND / OR 条件表达式 ]…]
    [GROUP BY<列名11>[,<列名12> …] [HAVING条件表达式]]
    [ORDER BY<列名21> [ASC/DESC] [,<列名22>…][ASC/DESC]]

    向数据库表插入数据

    INSERT INTO 语句用于向数据库表添加新记录。

    语法

    INSERT INTO table_name
    VALUES (value1, value2,....)

    您还可以规定希望在其中插入数据的列:

    INSERT INTO table_name (column1, column2,...)
    VALUES (value1, value2,....)

    注释:SQL 语句对大小写不敏感。INSERT INTO 与 insert into 相同。

    为了让 PHP 执行该语句,我们必须使用 mysql_query() 函数。该函数用于向 MySQL 连接发送查询或命令。

    4、删除重复行
      
    Select语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在Select返回的结果集合中只保留一行。

    5、限制返回的行数
      
    使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。例如:  
    Select TOP 2 *FROM testtable Select TOP 20 PERCENT * FROM testtable

     

    6、使用 TOP 和 PERCENT 限制结果集

    TOP 子句限制返回到结果集中的行数。

    TOP n [PERCENT]

    n 指定返回的行数。如果未指定 PERCENT,n 就是返回的行数。如果指定了 PERCENT,n 就是返回的结果集行的百分比,如下所示:

    TOP 120 /*Return the top 120 rows of the result set. */
    TOP 15 PERCENT /* Return the top 15% of the result set. */.
    

    如果一个 SELECT 语句既包含 TOP 又包含 ORDER BY 子句,那么返回的行将会从排序后的结果集中选择。整个结果集按照指定的顺序建立并且返回排好序的结果集的前 n 行。

    限制结果集大小的另一种方法是在执行一个语句之前执行 SET ROWCOUNT n 语句。SET ROWCOUNT 与 TOP 的不同之处在于:

        • SET ROWCOUNT 限制适用对 ORDER BY 取值后在结果集中生成行。如果指定了 ORDER BY,SELECT 语句将在从某个已根据指定的 ORDER BY 分类进行了排序的值集中选择 n 行后终止。

        • TOP 子句适用于指定了该子句的单个 SELECT 语句。在执行另一个 SET ROWCOUNT 语句之前,SET ROWCOUNT 会一直有效,例如执行 SET ROWCOUNT 0 将会关闭此选项。

    (二) FROM子句
      
    FROM子句指定Select语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
      
    在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:

      
      Select username,citytable.cityid
      FROM usertable,citytable
      Where usertable.cityid=citytable.cityid

    在FROM子句中可用以下两种格式为表或视图指定别名:
      表名 as 别名
      表名 别名

    例如上面语句可用表的别名格式表示为:
      Select username,b.cityid
      FROM usertable a,citytable b
      Where a.cityid=b.cityid

    Select不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。例如:

      
      Select a.au_fname+a.au_lname
      FROM authors a,titleauthor ta
      (Select title_id,title
      FROM titles
      Where ytd_sales>10000
      ) AS t
      Where a.au_id=ta.au_id
      AND ta.title_id=t.title_id

    此例中,将Select返回的结果集合给予一别名t,然后再从中检索数据。

    (三) 使用Where子句设置查询条件  
    Where子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: 
      Select *
      FROM usertable
      Where age>20

    Where子句可包括各种条件运算符:
      
      比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<
      范围运算符(表达式值是否在指定的范围):BETWEEN…AND…
      NOT BETWEEN…AND…
      列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……)
      NOT IN (项1,项2……)
      模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE
      空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL
      逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR

    1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30  
    2、列表运算符例:country IN ('Germany','China')  
    3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。

    可使用以下通配字符:
      
      百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。
      
      下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。
      
      方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
      
    例如:
      
      限制以Publishing结尾,使用LIKE '%Publishing'
      
      限制以A开头:LIKE '[A]%'
      
      限制以A开头外:LIKE '[^A]%'
      
    4、空值判断符例Where age IS NULL
      
    5、逻辑运算符:优先级为NOT、AND、OR

    (四)查询结果排序 
    使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: 
      ORDER BY {column_name [ASC|DESC]} [,…n] 
    其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排序。例如:
      Select *
      FROM usertable
      ORDER BY age desc,userid ASC 

    另外,可以根据表达式进行排序。

    二、 联合查询
      
    UNION运算符可以将两个或两个以上上Select语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:

      
      select_statement
      UNION [ALL] selectstatement
      [UNION [ALL] selectstatement][…n]

     

    其中selectstatement为待联合的Select查询语句。
      
    ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。
      
    联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。
      
    在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。
      
    在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:
      
    查询1 UNION (查询2 UNION 查询3)

     

    索引查询

    CREATE INDEX 语句

    创建一个索引

    --------------------------------------------------------------------------------

    注意:对于非微软数据库, Microsoft Jet 数据库引擎 不支持 CREATE PROCEDURE 或 DDL 语句的使用。

    --------------------------------------------------------------------------------

    CREATE [ UNIQUE ] INDEX index

    ON table (field [ASC|DESC][, field [ASC|DESC], ...])

    [WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]

    CREATE INDEX 语句说明:

    index: 要创建的索引的名称。

    table: 将包含索引的现有表的名称。

    field :要进行索引的字段的名称。若要创建单字段索引,请在表名后的括号中列出字段名。若要创建多字段索引,请列出要包括在索引中的每个字段的名称。要创建降序索引,请使用 DESC 保留字 (保留字:一种语言(如 Visual Basic)的一部分。保留字包括语句名称、预定义函数以及数据类型、方法、运算符和对象。);否则,索引假设为升序。

    create index默认建立的是非聚簇索引,索引值可以重复。如果要建立特殊的索引,则需要显示的写出关键字,如create clustered index建立聚簇索引。create unique index建立唯一索引

  • 相关阅读:
    java实现两个大数的相加
    转载:perl cpan 安装出现问题
    Linux下Clock skew detected的解决办法
    Object Builder Application Block
    Asp.Net MVC
    命名参数(转)
    (转)HTTP POST GET 本质区别详解
    jquery
    Introducing “Razor” – a new view engine for ASP.NET
    (转)全面讲解Oracle查询用户表空间
  • 原文地址:https://www.cnblogs.com/heyang71212/p/3622421.html
Copyright © 2011-2022 走看看