美文网首页
SQL基础查询

SQL基础查询

作者: 活用数据 | 来源:发表于2019-05-26 21:40 被阅读0次

    参考资料:
    《SQL基础教程》

    基础查询

    数据准备

    在查询数据之前,需要往数据库里插入需要用到的数据。

    1.创建数据库

    -- 创建数据库shop
    CREATE DATABASE shop;
    

    2.创建表
    使用数据库shop:

    USE shop;
    

    在数据库Shop中创建表:

    CREATE TABLE Product
    (product_id       CHAR(4)        NOT NULL,
     product_name     VARCHAR(100)   NOT NULL,
     product_type     VARCHAR(32)    NOT NULL,
     sale_price       INTEGER        ,
     purchase_price   INTEGER        ,
     regist_date      DATE           ,
     PRIMARY KEY (product_id));
    

    3.插入数据

    INSERT INTO Product VALUES ('0001', 'T恤' ,'衣服', 1000, 500, '2009-09-20');
    INSERT INTO Product VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
    INSERT INTO Product VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);
    INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
    INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
    INSERT INTO Product VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');
    INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28');
    INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品', 100, NULL, '2009-11-11');
    
    COMMIT;
    

    经过上面的操作,我们已经准备好了后面需要用到的数据表。


    Product表

    SELECT语句基础

    列的查询

    SELECT语句,从表中选取(SELECT)数据。

    基本的SELECT语句

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

    包含了两个子句:

    • SELECT子句:列出了希望从表中查询出的列的名称;
    • FROM子句:指定了选取出数据的表的名称。

    从Product表中输出3列

    SELECT
        product_id, 
        product_name,
        purchase_price
    FROM Product;
    

    执行结果:


    查询出表中所有的列

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

    查询全部的列

    SELECT *
    FROM <表名>;
    

    输出Product表中全部的列

    SELECT *
    FROM Product;
    

    和以上代码具有相同意义的语句:

    SELECT
        product_id,
        product_name,
        product_type,
        sale_price,
        purchase_price,
        regist_date
    FROM Product;
    

    执行结果:


    但是,如果使用星号,就无法设定列的显示顺序了。

    为列设定别名

    可以使用AS关键字为列设定别名AS关键字也可以省略。

    为列设定别名

    SELECT
        product_id AS id,
        product_name AS name,
        purchase_price AS price
    FROM Product;
    

    执行结果:


    别名可以使用中文,使用中文时需要用双括号("")括起来。

    设定中文别名

    SELECT
        product_id AS "商品编号",
        product_name AS "商品名称",
        purchase_price AS "进货单价"
    FROM Product;
    

    执行结果:


    常数的查询

    SELECT子句中不仅可以书写列名,还可以书写常数。

    查询常数

    SELECT
        '商品' AS string,
        38 AS number,
        '2009-02-24' AS date,
        product_id,
        product_name
    FROM Product;
    

    执行结果:


    从结果中删除重复行

    想要删除重复行,可以在SELECT子句中使用DISTINCT来实现。

    使用DISTINCT删除product_type列中重复的数据

    SELECT DISTINCT product_type
    FROM Product;
    

    执行结果:


    对含有NULL数据的列使用DISTINCT关键字
    NULL也被视为一类数据,如果存在多行NULL时,将被合并成一行。

    SELECT DISTINCT purchase_price
    FROM Product;
    

    执行结果:


    在多列之前使用DISTINCT

    SELECT 
        DISTINCT product_type,
                 regist_date
    FROM Product;
    

    没使用DISTINCT关键字的情况:

    执行结果:


    可以看出,DISTINCT关键字会将product_type列和regist_data列都相同的数据合并为一条。
    注意:DISTINCT关键字只能用在第一个列名之前

    WHERE语句选择记录

    WHERE子句可以指定查询数据的条件。

    SELECT语句中的WHERE子句

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

    选取product_type列为‘衣服’的数据

    SELECT 
        product_name,
        product_type
    FROM Product
    WHERE product_type = '衣服';
    

    执行结果:


    SQL顺序

    • 书写顺序:SELECT ——> FROM ——> WHERE
    • 执行顺序:FROM ——> WHERE ——> SELECT

    注释

    注释是SQL语句中用来标识说明或注意事项的部分,注释对SQL的执行没有任何影响。
    注释的书写方法有如下两种:

    1. 单行注释
    -- 这是单行注释,只能写在同一行,注意“--”之后有一个空格。
    
    1. 多行注释
    /*
    这是多行注释,书写在‘/*’和‘*/’之间;
    可以跨多行。
    */
    

    运算符

    运算符:就是对其两边的的列或者值进行运算的符号。

    算数运算符

    算数运算符:可以进行四则运算的运算符。

    SQL语句中使用运算表达式

    SELECT 
        product_name,
        sale_price,
        sale_price*2 AS 'sale_price_x2'
    FROM Product
    

    执行结果:


    注意NULL
    所有包含NULL的计算,结果肯定是NULL!。

    只包含SELECT子句的SELECT语句
    FROM子句并非必不可少,只使用SELECT子句进行计算也是可以的。

    SELECT (100 + 200)*3 AS calculation;
    

    执行结果:


    比较运算符

    比较运算符:用来比较其两边的列或者值的符号。

    比较运算符 含义
    = 和~相等
    <> 和~不等
    >= 大于等于~
    > 大于~
    <= 小于等于~
    < 小于~

    比较运算符可以对字符、数字和日期等几乎所有数据类型的列和值进行比较。

    选出登记日期在2009年9月27日之前的记录
    小于某个日期就是在该日期之前的意思。

    SELECT
        product_name,
        product_type,
        regist_date
    FROM Product
    WHERE regist_date < '2009-09-27';
    

    执行结果:


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

    创建Chars表并插入数据

    -- DDL:创建表
    CREATE TABLE Chars
    (chr CHAR(3) NOT NULL,
    PRIMARY KEY (chr));
    
    -- DML:插入数据
    
    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;
    

    [图片上传失败...(image-5eb355-1558878011527)]

    选出大于‘2’的数据

    SELECT chr
    FROM Chars
    WHERE chr > '2';
    

    执行结果:


    对字符串类型的数据进行大小比较时,使用的是和数字比较不同的规则,典型的规则是按照字典顺序进行比较的。

    不能对NULL使用比较运算符

    我们不能通过使用比较运算符,来判断是否为NULL,SQL专门提供了是否为NULLIS NULL运算符

    选取NULL的记录

    SELECT
        product_name,
        purchase_price
    FROM Product
    WHERE purchase_price IS NULL;
    

    执行结果;


    反之,希望选取不是NULL的记录时,需要使用IS NOT NULL运算符

    逻辑运算符

    逻辑运算符 含义
    NOT 不是~
    AND 并且,在其两侧的查询条件都成立时,整个查询条件才成立
    OR 或者,在其两侧的查询条件有一个成立时,整个查询条件都成立

    查询条件中使用NOT

    SELECT
        product_name,
        product_type,
        sale_price
    FROM Product
    WHERE NOT sale_price >= 1000;
    

    执行结果:


    上面的SQL的查询条件和以下SQL的查询条件是等价的:

    SELECT
        product_name,
        product_type,
        sale_price
    FROM Product
    WHERE sale_price < 1000;
    

    查询条件中使用AND

    SELECT
        product_name,
        product_type,
        sale_price
    FROM Product
    WHERE
        product_type = '厨房用具' 
    AND sale_price >= 3000;
    

    执行结果:


    查询条件中使用OR

    SELECT
        product_name,
        product_type,
        sale_price
    FROM Product
    WHERE
        product_type = '厨房用具' 
     OR sale_price >= 3000;
    

    执行结果:


    使用括号
    注意:AND运算符的优先级高于OR运算符,想要优先执行OR运算符时可以使用括号。

    逻辑运算符和真值
    真值就是值为真(TRUE)假(FALSE)不确定(UNKNOWN)其中之一的值。SQL之外的语言基本上只有真假两种真值,只有SQL中有第三种值——不确定(UNKNOWN)
    当对NULL进行逻辑运算时,其结果是不确定(UNKNOWN),这就是不能对NULL值使用不等式的原因。

    相关文章

      网友评论

          本文标题:SQL基础查询

          本文链接:https://www.haomeiwen.com/subject/jbdxtctx.html