您的位置:首页 > 数据库

SQL连表查询

2014-03-25 09:29 148 查看
[b]多表的联接查询[/b]
联接查询是指涉及两个或两个以上的表的查询,联接查询是关系数据库最主要的查询。
实现方法:
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)

[b]索引查询[/b]

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建立唯一索引
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: