再跟SQL谈一谈--高级篇(一)

1.SELECT KEYWORD

  ①TOP

  ②LIKE

  ③IN

  ④BETWEEN...AND

  ⑤ALIAS

2.SELECT JOIN

  ①JOIN | INNER JOIN

  ②LEFT JOIN

  ③RIGHT JOIN

  ④FULL JOIN

3.SELECT INTO & UNION


1.SELECT KEYWORD

  ①TOP 語法: SELECT TOP number|percent column_name FROM table_name

                   number|percent:返回记录的个数或百分比,|:二选一。

                       column_name:列名,全部列用*、多个列用逗号隔开; 

       ・从“Person”表里选取头两条记录 ⇒ SELECT TOP 2 * FROM Person 

       ・从“Person”表里选取50%的记录 ⇒ SELECT TOP 50 PERCENT * FROM Person

  ②LIKE 語法: SELECT column_name FROM table_name WHERE column_name LIKE|NOT LIKE pattern

                       LIKE|NOT LIKE:筛选列中的指定模式,或筛选指定模式之外的列。

                        pattern:匹配列内容的指定模式。

                           ⇒% :替代一个或多个字符   例: abc%  以abc为开头的内容   如:abcd   abcde   abcec  abc

                                                                    %abc  以abc为结尾的内容   如:daabc   ddabc   abc

                           ⇒_ : 仅替代一个字符   例: ab_  以ab开头加任一字符的内容   如:abc  abd  abg

                                                               _bc  第一个字符之后是以bc结尾的内容  如:abc  hbc nbc

                           ⇒[charlist] : 字符列中的任何单一字符   例: _[abc]   两个字符,第一个字符之后是abc其中一个字符的内容   如:db da  hc ja

                                                                                   [abc]_    两个字符,第一个字符是abc中的一个后续接任一字符的内容   如:ad  an  bd  ca

                                                                                   [abc]__  三个字符,第一个字符是abc中的一个后续接任意两个字符的内容   如:add  and  bod  cad

                                                                                   %[abc]   以abc任一字符结尾的内容   如:asdfa  qwerb  zxcvc

                                                                                   [abc]%   以abc任一字符开头的内容   如:azxcv basdf  cqwere

                           ⇒[^charlist] | [!charlist]:不在字符列中的任何单一字符  例: _[^abc]  两个字符  后一字符不可为abc中的字符

                                                                                                         [^abc]_   两个字符  前一字符不可为abc中的字符

                                                                                                         [^abc]__  三个字符  第一个字符不可为abc中的字符

                                                                                                         %[^abc]   不可以abc中的内容结尾的内容

                                                                                                         [^abc]%   不可以abc中的内容开头的内容

   ③IN 語法: SELECT column_name FROM table_name WHERE column_name IN (value1,value2,...)

       ・从"Person"表中选取姓氏为 Adams 和 Carter 的人 ⇒ SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')

   ④BETWEEN...AND  操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

            語法: SELECT column_name FROM table_name WHERE column_name BETWEEN minValue AND maxValue 

       ・以字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之间的人 ⇒ SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'   

       ・显示"Adams"和 "Carter"之外的人,请使用 NOT 操作符 ⇒ SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'

   ⑤ALIAS  为列名称和表名称指定别名

       ・SELECT po.OrderID, p.LastName, p.FirstName FROM Persons AS p, Product_Orders AS po WHERE p.LastName='Adams' AND p.FirstName='John'

       ・SELECT LastName AS Family, FirstName AS Name FROM Persons


 2.SELECT JOIN

  ①JOIN | INNER JOIN  根据两个或多个表中的列之间的关系,从这些表中查询数据

  Persons表:

Id_PLastNameFirstNameAddressCity
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

     Orders表: 

Id_OOrderNoId_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons 

 INNER JOIN Orders ON Persons.Id_P = Orders.Id_P

   ※INNER JOIN 与 JOIN 是相同的

   

 ②LEFT JOIN 会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

  SELECT column_name FROM table_name1 

  LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name

 

  例:LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

  SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons

  LEFT JOIN Orders ON Persons.Id_P=Orders.Id_P

LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George  

 

  ③RIGHT JOIN 会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

   SELECT column_name FROM table_name1 

   RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name

   

   例:RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行

   SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons

   RIGHT JOIN Orders ON Persons.Id_P=Orders.Id_P

LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
    34764

   ④FULL JOIN  只要其中某个表存在匹配,FULL JOIN 关键字就会返回行 

    SELECT column_name FROM table_name1 

       FULL JOIN table_name2  ON table_name1.column_name=table_name2.column_name

 

   例:RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行

   SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons
   FULL JOIN Orders ON Persons.Id_P=Orders.Id_P

LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George  
    34764

 3.SELECT INTO & UNION

        SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中、常用于创建表的备份复件或者用于对记录进行存档。

         制作 "Persons" 表的备份复件 ⇒ SELECT * INTO Persons_backup FROM Persons

     IN 子句可用于向另一个数据库中拷贝表 ⇒ SELECT * INTO Persons IN 'Backup.mdb' FROM Persons

     创建一个名为 "Persons_Order_Backup" 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息 ⇒  

    SELECT Persons.LastName,Orders.OrderNo INTO Persons_Order_Backup FROM Persons
    INNER JOIN Orders ON Persons.Id_P=Orders.Id_P

         UNION & UNION ALL  UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

         列出所有在中国和美国的不同的雇员名 ⇒ SELECT E_Name FROM Employees_China
                       UNION
                                   SELECT E_Name FROM Employees_USA

         

posted @ 2013-09-26 17:45  NexArchi  阅读(842)  评论(0编辑  收藏  举报