数据库高级教程(一)

来源:互联网 发布:php继承的几种方式 编辑:程序博客网 时间:2024/04/30 14:00

1.SQL TOP语句

TOP子句用于规定要返回的记录的数目

特别是对于很多条记录,比如数千或者上万条记录,TOP语句是非常有用的

注意:并非所有的语句都支持TOP语句

SQL server的语法

SELECT TOP  number |percent column_name(s)   FROM table_name

MySQL和Oracle 的SQL  SELECT  TOP是等价的

MYSQL语法

SELECT column_name(s) 

FROM  table_name

LIMIT number

例子

SELECT *from Persons LiMIT 5


Oracle语法

SELECT column_name(s) FROM table_name WHERE ROWNUM<=number

例子

SELECT * FROM Persons WHERE ROWNUM<=5


原始的表 Person

Id   firstName   LastName   telePhoneNumber

1      xu            xiao               18766565171

2      li              ming                18766565172

3      zhang      qian               18766565173

4      zhao        ming              18766565174

5      zhou       tong                18766565175

6      sun          ti                      18766565176


SQL TOP 实例

现在我们需要从上面的Person表中选取头两条数据。

则SELECT TOP 2 *FROM Person

则结果为

Id   firstName   LastName   telePhoneNumber

1      xu            xiao               18766565171

2      li              ming                18766565172


SQL TOP PERCENT 实例


现在我们从上面的表中选取50%的记录

SELECT TOP 50  FROM Person

结果为

Id   firstName   LastName   telePhoneNumber

1      xu            xiao               18766565171

2      li              ming                18766565172

3      zhang      qian               18766565173


2.SQL LINK 操作符

LINK操作符用于在WHERE子句中搜索列中的指定模式。

SQL LINK操作符语法

SELECT column_name(s) FROM table_name WHERE column_name LINK pattern

原始的表

Id   firstName   LastName   telePhoneNumber

1      xu            xiao               18766565171

2      li              ming                18766565172

3      zhang      qian               18766565173

4      zhao        ming              18766565174

5      zhou       tong                18766565175

LinK操作符实例

例1

现在我们从Person表中选取LastName以t开头的人。

SELECT *FROM Person where LastName LINK ‘t%’

结果为

Id   firstName   LastName   telePhoneNumber

5     zhou          tong             18766565175

注意 %可用于定义通配符(模式中缺少的字母)

例2

我们希望从Person表中选取LastName以n结尾的人

SELECT *FROM Person WHERE  LastName LIKE=‘%n’

结果为

Id   firstName   LastName   telePhoneNumber

3   zhang           qian            18766565173

例3

我们希望从Person表中选取LastName中包含“in”的人

SELECT  *FROM  Person  WHERE LastName  LINK “%in%”

结果为

Id   firstName   LastName   telePhoneNumber

3   li                     ming            18766565172


例4

NOT关键字 我们从表中选取LastName中不包含‘ing’的人

SELECT *FROM Person WHERE LastName NOT LINK ‘%ing%’

结果为

Id   firstName   LastName   telePhoneNumber

1      xu            xiao               18766565171

3      zhang      qian               18766565173

5      zhou       tong                18766565175

3.SQL通配符

在搜索数据库中的数据时,SQL 通配符可以替代一个或者多个字符。

SQL通配符必须与LINK字符一起使用

在SQL中可以使用以下通配符

通配符           描述

%                  替代一个或者多个字符

_                    仅替代一个字符

[charlist]          字符列中任何单一字符

[^charlist]         不在字符列中的任何单一字符

或者

[!charlist]

原始的表

Person表

Id            firstName         LastName         telePhone

1             lin                      tian                   12345678911

2            wang                   ming                12345678901

3            tian                     zhong                12345678910

使用%通配符

例子1 现在我们将上面的Person表选取以“mi”开始的LastName的人

SELECT * FROM Person where LastName LIKE ‘mi%’

结果为

Id         firstName           LastName         telePhone

2           wang                   ming                 12345678901

使用_通配符

例 

现在,我们希望从Person表中选取姓的第一个字符之后是ian的人

select *from Person where Link LastName=‘_ian’

结果为

Id            firstName         LastName         telePhone

1             lin                      tian                   12345678911

使用[charlist]通配符

我们选取名字中以w or t or a开头的人

select * from Person where Link '[wta%]'

结果为 

2            wang                   ming                12345678901

3            tian                     zhong                12345678910

下面我们选取名字不以w or t or a开头的人

select *from Person where Link ‘[!wta%]’

结果为

1             lin                      tian                   12345678911


4.SQL IN操作符

用于我们在where子句中规定多个值

SQL IN语法

select column_name(s) from table_name where column_name IN (value1,value2,....)

原始的表

Person表

Id            firstName         LastName         telePhone

1             lin                      tian                   12345678911

2            wang                   ming                12345678901

3            tian                     zhong                12345678910

实例

现在我们希望选取姓为tian何zhong的人

select *from Person where LastName IN  ('tian','zhong')

则,结果为

1             lin                      tian                   12345678911

3            tian                     zhong                12345678910



5.SQL between操作符

用于where子句中 ,选取介于两个值之间的数据范围

语法

select column_name(s) from table_name where colume_name between value1 and value2

原始的表

Person表

Id            firstName         LastName         telePhone

1             lin                      tian                   12345678911

2            wang                   ming                12345678901

3            tian                     zhong                12345678910

例  

现在我们以字母顺序选取介于lin (包括)和 tian(不包括) 的人

select *from Person where firstName between ‘lin’ and  'tian'

1             lin                      tian                   12345678911

2            wang                   ming                12345678901

注意:不同数据库的between and 的开闭区间是不同的

例2

选取上述例子中的显示范围之外的人

select *from Person where firstName Not between 'lin' and 'tian'

结果为

3            tian                     zhong                12345678910



6.SQL Alias(别名)

通过SQL,可以为列名称和表名称指定别名

表的SQL Alias语法

select column_name(s)  from  table_name  as alien_name

列的SQL Alias语法

select column_name as alias_name from table_name


使用表名称别名

假设我们有两张表分别为“Person”表和“Person_one”表

我们分别为他们指定别名“p”和‘p_o’  并列出 tian lin 的所有订单

select p_o.firstName,p.LastName,p.telePhone FROM Person  as p,person_one  as p_o

where p.LastName='tian' and p.firstName='lin'

不使用别名的select 语句

select  Person_one.firstName,Person.LastName,p.telePhone FROM Person,Person_one where person.LastName='lian' and person.firstName='lin'

从上面看出,别名更易阅读和书写

例,使用一个列名别名

表Person

Id            firstName         LastName         telePhone

1             lin                      tian                   12345678911

2            wang                   ming                12345678901

3            tian                     zhong                12345678910

select FirstName as  name,LastName as  Family From Person

结果为 

           Name          Family       

             lin                      tian                

          wang                   ming                

          tian                     zhong              

7.SQL join

用于根据两个或者多个表中的列之间的关系,从这些表中查询数据

 

用于从两个或者更多的表中获取结果。

数据库中的表可以通过键将彼此联系起来,primary key是一个列,在该列中的每一行的值都是唯一的,在表中,每一个主键的值都是唯一的。这样的话,可以在不重复每个表中的数据外,把表间的数据交叉捆绑在一起。

表Person

Id_p            firstName         LastName         telePhone

1             lin                      tian                   12345678911

2            wang                   ming                12345678901

3            tian                     zhong                12345678910

从上表中可以看出,Id_p是表Person表中的主键。及没有两行能够拥有相同的Id_p,即使两行中的姓名完全相同,Id_p也可以区分他们。


表number 

Id_n     number     Id_p

1          99456       2

2           90300      2

3           98403       1

4           45986      1

5           24456       44

Id_n列是表number中的主键,同时,number中的Id_p用于引用Person表中的人。而不需要使用他们的姓名。

即Id_p把两张表联系了起来。


下面我们可以通过两个表的方式,从两个表中获取数据。

谁订购了产品,且他们订购了什么产品。

select Person.lastName,Person.firstName,number.number FROM  Person,number Where  Person.Id_p=number.Id_p

则结果为

            firstName         LastName       number

             lin                      tian                   98403

             lin                       tian                45986

              wang                  ming               99456

             wang                   ming              90300


SQL join

除了上面的方法外,我们也可以用 关键词Join从两个表中获取数据。

我们希望列出所有人的订购,可以使用下面的SQL数据。

select Person.lastName,Person.firstName,number.number FROM  Person INNER JOIN  number  on Person .Id_p=number.Id_p ORDER BY Person.LastName

结果集:

           firstName         LastName       number

             lin                      tian                   98403

             lin                       tian                45986

              wang                  ming               99456

             wang                   ming              90300

注意:

  除了上面使用的INNER JOIN (内连接),我们还可以使用其他链接

JOIN: 如果表中有至少一个匹配,则返回行。

LEFT JOIN 即使右表中无匹配,也从左表返回所有的行

RIGHT JOIN  即使左表中无匹配,也从右表返回所有的行


FULL JOIN 只要其中一个表中存在匹配,则会返回行。


下面具体介绍 

(1)INNER jOIN 和JOIN是一样的

(2)LEFT JOIN  会从左表中返回所有的行,即使右表中没有匹配的行。

具体语法为  select  column_name(s)  from table_name1 LEFT  JOIN  table_name2 on table_name1.colunn_name=table2.colume

原始的表为

Person表

Id_p            firstName         LastName         telePhone

1             lin                      tian                   12345678911

2            wang                   ming                12345678901

3            tian                     zhong                12345678910



表number 

Id_n     number     Id_p

1          99456       2

2           90300      2

3           98403       1

4           45986      1

5           24456       44


我们希望列出所有的人,以及他们的订购

select Person.firstName,Person.LastName,number.number From Person  LEFT JOIN  number ON Person.Id_P ORDER BY Person.LastName

结果集

           firstName         LastName       number

             lin                      tian                   98403

             lin                       tian                45986

              wang                  ming               99456

             wang                   ming              90300

             tian                     zhong   

(3)RIGHT JOIN 关键字

在右表哪里返回所有的行,即使左表中没有匹配的行

语法为

select  column_name(s)  from table_name1 LEFT  JOIN  table_name2 on table_name1.colunn_name=table2.colume

原始的表同上


select Person.firstName,Person.LastName,number.number From Person  RIGHT  JOIN  number ON Person.Id_P ORDER BY Person.LastName

结果为
 

           firstName         LastName       number

             lin                      tian                   98403

             lin                       tian                45986

              wang                  ming               99456

             wang                   ming              90300

                                                               24456

   (4) FULL JOIN 关键字

只要其中某个表存在匹配,就会返回行

select  column_name(s)  from table_name1 FULL  JOIN  table_name2 on table_name1.colunn_name=table2.colume

原始的表同上

现在我们希望列出所有的人,以及他们的订单,以及所有的订单,以及订购他们的人。

select Person.firstName,Person.LastName,number.number From Person  FULL  JOIN  number ON Person.Id_P ORDER BY Person.LastName

    firstName         LastName       number

             lin                      tian                   98403

             lin                       tian                45986

              wang                  ming               99456

             wang                   ming              90300

             tian                       zhong

                                                               24456







0 0
原创粉丝点击