SQL基础教程第二章笔记

第二章  查询基础

      2.1 SELECT语句基础

               2.1.1 列的查询

              通过SELECT语句查询并选取出必要的数据称为匹配查询或查询(query)

              代码1.SELECT语句的基本语法如下:

SELECT <列名>,......
  FROM  <表名>;

         SELECT语句中包含了SELECT和FROM两个子句(clause)。子句是SQL语句的组成要素,是以SELECT或者FROM等作为起始的短句。SELECT子句列举了希望从表中查询出列的名称,而FROM子句则指定了选取出数据的表的名称。

              代码2.如果我们要从第一章创建出的Shohin(商品)表中,查询出shohin_id(商品编号)列,shohin_mei(商品名称)列,和shiire_tanka(进货单价)列,语句如下:

SELECT shohin_id,shohin_mei,shiire_tanka
   FROM Shohin;

         查询结果中的列的顺序和SELECT子句中的顺序相同。

              输出结果:

               2.1.2 查询出表中的所有列

              要查询出全部列时,可以使用代表所有列的星号(*)

              代码3.查询全部列的语句

SELECT *
    FROM <表名>;

  

              代码4.输出Shohin表中的全部的列

SELECT  *
   FROM Shohin;

       输出结果:

              如果使用星号的话就无法设定列的顺序了,这个时候可以按照CREATE TABLE语句的定义对列进行排序

               2.1.3 为列设定别名

               SQL语句可以使用AS关键字为列设置别名。

               代码4.为列设置别名的基本语句

SELECT shohin_id AS id,
            shohin_mei AS namae,
            shiire_tanka AS tanka
   FROM Shohin;

               别名可以使用汉语,使用汉语时需要用双引号(“”)括起来

               输出结果:

              代码5.设定汉语别名代码:

SELECT shohin_id AS "商品编号",
            shohin_mei AS "商品名称",
            shiire_tanka AS "进货单价"
   FROM Shohin;

             输出结果:

               2.1.4 常数的查询  

               SELECT子句还可以书写常数

               代码6.如下代码中,SELECT子句中的第一列“商品”是字符串常数,第2列38是数字常数,第3列“2009-02-24”是日期常数,它们将与shohin_id列和shohin_mei列一起被查询:

SELECT '商品'  AS mojiretsu, 38 AS kazu, '2009-02-24' AS hizuke, shohin_id,shohin_mei
    FROM Shohin;

         输出结果:

               

            2.1.5 从结果中删除重复行

               

                代码7.可以通过在SELECT子句中使用DISTINCT来实现删除重复行的语句

SELECT DISTINCT shohin_bunrui
   FROM Shohin;

          在使用DISTINCT时,NULL也被视为一类数据。存在多条NULL数据行时,也会结合为一条NULL数据。

               输出结果:

           

                代码8.对含有NULL数据的列使用DISTINCT关键字

SELECT DISTINCT shiire_tanka
    FROM Shohin;

          输出结果:

                代码9.在多列之前使用DISTINCT

SELECT DISTINCT shohin_bunrui,torokubi
    FROM Shohin;

            输出结果;

               2.1.6 根据WHERE语句来选择记录

               SELECT语句通过WHERE子句来指定查询数据的条件。在WHRER子句中可以指定“某一列的值和这个字符串相等”或者“某一列的值大于这个数字”等条件。执行含有这些条件的SELECT语句,就可以查询出符合该条件的记录了。具体语法如下:

                代码10.语法

SELECT <列名>,......
    FROM <表名>
  WHERE <t条件表达式>;

               代码11.用来选区shohin_bunrui列为“衣服”的记录的SELECT语句

SELECT shohin_mei,shohin_bunrui
     FROM Shohin
   WHERE shohin_bunrui=‘衣服’;

         首先通过WHERE子句查询出符合指定条件的记录,然后再选取出SELECT语句中指定的列

               输出结果:

 

             

               代码12.也可以不选取出作为查询条件的列,语句如下:

SELECT shohin_mei
    FROM Shohin
  WHERE shohin_bunrui='衣服';

        SQL中子句的书写顺序是固定的,不能随意改变,WHERE子句必须紧跟在FROM子句之后

             输出结果:

               

            2.1.7 注释的书写方法

               1行注释,书写在‘--’之后,只能写在同一行

               多行注释,书写在“/*”和“*/”之间,可以跨多行

     

               代码13.1行注释书写的案例:

--本SELECT语句用来除去结果中的重复数据
SELECT DISTINCT shohin_id,shiire_tanka
    FROM Shohin;

         结果展示:

              代码14.多行注释书写的案例:

/*本SELECT语句,
     用来删除结果中的重复数据。*/
SELECT DISTINCT shohin_id,shiire_tanka
     FROM Shohin;

        输出结果:

               代码15.在SQL语句中插入一行注释

SELECT DISTINCT shohin_id,shiire_tanka
--本SELECT语句用来除去结果中的重复数据
    FROM Shohin;

         输出结果:

              代码16.在SQL语句中插入多行注释

SELECT DISTINCT shohin_id,shiire_tanka
/*本SELECT语句,
    用来除去结果中的重复数据。*/
    FROM Shohin;

       输出结果:

      2.2 算术运算符和比较运算符

               2.2.3 算术运算符

               代码17.SQL语句中可以使用计算表达式。SELECT语句中,想要把各个商品单价的2倍(hanbai_tanka的2倍)以hanbai_tanka_x2列的形式读出来

SELECT shohin_mei,hanbai_tanka,
            hanbai_tanka*2 AS "hanbai_tanka_x2"
   FROM Shohin;

          输出结果:

               运算就是这样以行为单位执行的。            

               SQL语句中可以使用加(+),减(-),乘(*),除(/)四则运算,也可以像平常的运算表达式那样使用括号。此外,代码中AS之后必须用双引号("")

               2.2.2  需要注意NULL

               所有包含NULL的计算,结果肯定还是NULL

               2.2.4 比较运算符

               代码18.例子:我们可以使用=选取出销售单价(hanbai_tanka)为500元的记录

SELECT shohin_mei,shohin_bunrui
   FROM Shohin
  WHERE hanbai_tanka=500;

         输出结果:

              代码19.续上例,我们也可以使用代表否定含义的比较运算符<>,选取出hanbai_tanka列的值不为500的记录

SELECT shohin_mei,shohin_bunrui
   FROM Shohin
  WHERE hanbai_tanka<>500;

         输出结果:

               还有如下比较远算符:和~相等(=),和~不相等(<>),大于等于~(>=),大于~(>),小于等于~(<=),小于~(<)

               代码20.选取出销售单价大于或等于1000元的记录

SELECT shohin_mei,shohin_bunrui,hanbai_tanka
    FROM Shohin
 WHERE hanbai_tanka>=100;

         输出结果:

               代码21.选取登记日期在2009年9月27日之前的记录

SELECT shohin_mei,shohin_bunrui,hanbai_tanka
    FROM Shohin
 WHERE torokubi<‘2009-09-27’;

               输出结果:        

               小于某个日期就是在该日期之前的意思。

               使用比较运算符时一定要注意不等号和等号的位置。注意一定要加单引号('   ')

               代码22.WHERE子句的条件表达式中也可以使用计算表达式

SELECT shohin_mei,hanbai_tanka,shiire_tanka
    FROM Shohin
  WHERE hanbai_tanka-shiire_tanka>=500;

         输出结果:

               2.2.5 对字符串使用不等号时的注意事项

                

               代码23.SQL语句创建Chars表并插入数据

--DDL:创建表

CREATE TABLE Chars
(chr CHAR(3) NOT NULL,
PRIMARY KEY (chr));

--DML:插入数据(在SQL Server和PostgreSQL中的操作)

BEGIN TRANSACTION;

INSERT INTO Chars VALUES ('1');
INSERT INTO Chars VALUES ('2');
INSERT INTO Chars VALUES ('3');
INSERT INTO Chars VALUES ('10');
INSERT INTO Chars VALUES ('11');
INSERT INTO Chars VALUES ('222');

COMMIT;

                输出结果:

 

                在MySQL中需要将“BEGIN TRANSACTION”改成‘START TRANSACTION’,在Oracle和DB2中执行时不需要用到这条语句

               

                 代码24.对Chars表执行SELECT语句,查询条件是chr列大于‘2’

SELECT chr
  FROM Chars
 WHERE chr>'2';

          输出结果:

               得到的结果是‘3’,‘222’原因是chr是字符串类型,Chars表chr列中的数据依据字典顺序进行排序结果是:‘1’,‘10’,‘11’,‘2’,‘222’,‘3’

               字符串类型的数据原则上按照字典顺序进行排序。不能与数字的大小顺序搞混了。

               2.2.6 不能对NULL使用比较运算符

              代码25.选取进货单价为2800元的记录

SELECT shohin_mei,shiire_TANKA
    FROM Shohin
  WHERE shiire_tanka=2800;

        输出结果:

             

              代码26.紧接着我们选取进货单价不是2800元的记录

SELECT shohin_mei,shiire_tanka
    FROM Shohin
  WHERE shiire_tanka<>2800;

              输出结果:

   

              但是我们发现执行结果中没有‘叉子’和‘圆珠笔’,这两条记录为NULL,无法判定为不是2800元

              代码27.选取NULL的记录

SELECT shohin_mei,shiire_tanka
    FROM Shohin
  WHERE shiire_tanka IS NULL;

        输出结果:

               

              代码28.选取不为NULL的记录

SELECT shohin_mei,shiire_tanka
    FROM Shohin
  WHERE shiire_tanka IS NOT NULL;

        输出结果:

              希望选取NULL记录时,需要在条件表达式中使用IS NULL运算符。希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL运算符。

      2.3 逻辑运算符

               2.3.1 NOT运算符

               NOT不能单独使用,必须和其他查询条件组合起来使用

   

               代码29.选取出销售单价大于等于1000日元的记录

SELECT shohin_mei,shohin_bunrui,hanbai_tanka
    FROM Shohin
  WHERE hanbai_tanka>=1000;

         输出结果:

               代码30.向代码中的查询条件中添加NOT运算符

SELECT shohin_mei,shohin_bunrui,hanbai_tanka
    FROM Shohin
  WHERE NOT hanbai_tanka >=1000;

         输出结果:

               代码31.WHERE子句的查询条件和上一个代码是等价的

SELECT shohin_mei,shohin_bunrui,hanbai_tanka
    FROM Shohin
  WHERE  hanbai_tanka < 1000;

               输出结果:

               2.3.2 AND运算符和OR运算符

               AND运算符在其两侧的查询条件都成立时整个查询条件才成立。

               OR运算符在其两侧的查询条件有一个成立时整个查询条件都成立。

               代码32.在WHERE子句的查询条件中使用AND运算符

SELECT shohin_mei,shiire_tanka
     FROM Shohin
  WHERE shohin_bunrui = '厨房用具'
       AND hanbai_tanka>=3000;

         输出结果:

               代码33.在WHERE子句的查询条件中使用OR运算符

SELECT shohin_mei,shiire_tanka
   FROM Shohin
 WHERE shoohin_bunrui = ‘厨房用具’
       OR hanbai_kanta >=3000; 

          输出结果:

              多个查询条件进行组合时,需要使用AND运算符和OR运算符。

               2.3.3 通过括号进行强化

               代码34.将查询条件原封不动地写入条件表达式

SELECT shohin_mei,shohin_bunrui,torokubi
    FROM Shohin
 WHERE shohin_bunrui='办公用品'
    AND torokubi='2009-09-11'
    OR   torokubi='2009-09-20';

         输出结果:

              不想要的T恤衫、菜刀和叉子也被选了出来,得到了错误的执行结果,这是因为AND的运算执行优先于OR运算执行,该代码的条件表达式会被解释成(shohin_bunrui='办公用品' AND torokubi='2009-09-11')OR (torokubi='2009-09-20')

               代码35.通过使用括号让OR运算优于AND运算执行

SELECT shohin_mei,shohin_bunrui,torokubi
    FROM Shohin
  WHERE shohin_bunrui='办公用品'
    AND ( torokubi='2009-09-11' 
              OR torokubi='2009-09-20');

         输出结果:

               2.3.4 逻辑运算符和真值

               逻辑就是对其真值进行操作。真值就是指值为真或假其中之一的值。逻辑运算符对比较运算符等返回的真值进行操作。

               2.3.5含有NULL时的真值

               使用逻辑运算符也需要特别对待NULL值。 

              习题:

 

2.1

SELECT shohin_mei,torokubi
FROM Shohin
WHERE torokubi>'2009-04-28';

输出结果:

2.2 

第一条代码:

第二条代码:

第三条代码:

2.3 

代码1

SELECT shohin_mei,hanbai_tanka,shiire_tanka
FROM Shohin
WHERE NOT hanbai_tanka-shiire_tanka<500;

输出结果:

代码2

SELECT shohin_mei,hanbai_tanka,shiire_tanka
FROM Shohin
WHERE hanbai_tanka-shiire_tanka>=500;

输出结果:

2.4

代码

SELECT shohin_mei,sohin_bunrui, hanbai_tanka*0.9-shiire_tanka AS rieki
FROM Shohin
WHERE hanbai_tanka*0.9-shiire_tanka>100 
           AND (sohin_bunrui='办公用品' 
            OR sohin_bunrui='厨房用 具' );

输出结果:

(注:不能在WHERE子句中直接写rieki,会出现如下错误:

全文注意:由于在创建表格的时候输入错误,误将shohin_bunrui输入成sohin_bunrui

猜你喜欢

转载自www.cnblogs.com/zsdeblog/p/9171466.html