• 02_数据库基础之(二)sql语句入门


    1.基本增删改查操作

     1 #一。 数据类型  常用的3中
     2  # 1.字符串  例如:你的名字 我是中国人    在数据库中要使用 ‘’引起来   '苹果手机'
     3  # 2.整数类型  例如: 你的年龄 23 ,办公室的人数  5 个 ,直接使用  5000
     4  # 3.时间    当着一个字符串用
     5 
     6 #二。几乎所有的编程标点符号都要使用 英文状态下的
     7 
     8 #三。数据库中不区分大小写,但是  生产上的 规范  关键字大写 INSERT,其他的小写
     9 
    10 新增
    11 需求:添加一条数据到产品表   产品名称为苹果手机   卖价为5000
    12 INSERT INTO  product (product_name,sale_price) VALUES ('苹果手机'5000)
    13 
    14 删除
    15 需求:删除产品表中id=20的数据
    16 DELETE FROM product WHERE id=20
    17 # = >  <   >=    <=   
    18 # product_name='联想M115'
    19 #  或OR  且AND  非!     两个条件同时满足  AND
    20 需求:删除产品表中id=20并且product_name='联想M115'的数据
    21 DELETE FROM product WHERE id=20  AND product_name='联想M115'
    22 
    23 需求:删除产品表中id=20或者product_name='联想M115'的数据
    24 DELETE FROM product WHERE id=20  OR product_name='联想M115'
    25 
    26 需求:删除产品表中product_name!='联想M115'的数据
    27 DELETE FROM product WHERE product_name !='联想M115'
    28 
    29 更新
    30 
    31 #需求:把成本价大于100的所有商品的卖价修改为200,并且把名称修改为特殊商品
    32 UPDATE product SET sale_price=200,product_name='特殊商品'  WHERE cost_price>100
    33 
    34 查询   
    35 #查询所有商品
    36 SELECT * FROM product  
    37 #需求:查询id<8的数据
    38                        #过滤行
    39 SELECT * FROM product  WHERE id<8
    40 #需求:查询id<8的数据,只看id,产品名称,卖价
    41 SELECT id,product_name,sale_price FROM product  WHERE id<8

    2.创建表与规范命名

        2.1.命名规则:

                 a.见名知意  千万不要使用中文拼音
                 b.多个单词使用下划线(数据库中不区分大小写,生产规范关键字大写,其他小写)
                 c.不要使用关键字  #关键字 INSERT INTO  VALUES

         2.2.数据库设计必备基本字段
        1.id 序号
        2.state 状态 
        3.type  类型
        4.create_time 创建时间
        5.update_time 更新时间     

          2.3.创建用户表案例

         

     3.表结构认识

          

       4.简单查询之列操作

     1 简单查询:
     2 语法:
     3 SELECT {*, column [alias],...}
     4 FROM       table_name;
     5 说明:
     6 SELECT  选择查询列表
     7 FROM      提供数据源(表、视图或其他的数据源)
     8 如果为 * 和创建表时的顺序一致。
     9 可以自己调整顺序,在select后边加上要查询的列名。
    10 需求:查询所有货品信息
    11 需求:查询所有货品的id,product_name,sale_price
    12 --------------------------------------------------------------
    13 消除结果中重复的数据。
    14 需求:查询商品的分类编号。
    15 语法:
    16 SELECT    DISTINCT 列名,..
    17 --------------------------------------------------------------
    18 实现数学运算查询:
    19 
    20 对NUMBER型数据可以使用算数操作符创建表达式(+  -  *  /21 
    22 对DATE型数据可以使用部分算数操作符创建表达式 (+  -23 
    24 运算符优先级:
    25 
    26 1、乘法和除法的优先级高于加法和减法
    27 
    28 2、同级运算的顺序是从左到右
    29 
    30 3、表达式中使用"括号"可强行改变优先级的运算顺序
    31 
    32 -----------------------------------------------------------------
    33 需求:查询所有货品的id,名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格)
    34 SELECT id ,product_name,sale_price-cost_price FROM product
    35 
    36 需求:查询所有货品的id,名称和批发价(批发价=卖价*折扣)
    37 
    38 需求:查询所有货品的id,名称,和各进50个的成本价(成本=cost_price)
    39 
    42 ------------------------------------------------------------------
    43 
    44 设置列名的别名。
    45 
    46 1、改变列的标题头;
    47 
    48 2、用于表示计算结果的含义;
    49 
    50 3、作为列的别名;
    51 
    52 4、如果别名中使用特殊字符,或者是强制大小写敏感,或有空格时,都需加单引号;--->英文单词
    53 
    54 需求:查询所有货品的id,名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格),并取别名
    55 
    56 SELECT id ,product_name 名称 ,sale_price-cost_price 每零售1个产品所赚取的钱 FROM product
    57 
    58 需求:查询所有货品的id,名称,各进50个,并且每个运费1元的成本(使用别名)
    59 
    60 ------------------------------------------------------------------
    61 
    62 设置显示格式:
    63 
    64 为方便用户浏览查询的结果数据,有时需要设置显示格式,可以使用CONCAT函数来连接字符串。
    65 
    66 需求:查询所有货品名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格),
    67 格式为: 每零售一个XXX产品,赚取:XX元
    68 SELECT CONCAT('每零售一个',product_name,'产品,赚取:',sale_price-cost_price,'') FROM product 
    69 
    70 需求:查询商品的名字和零售价。
    71      格式:xxx商品的零售价为:xxx
    72 
    73 SELECT CONCAT(productName,'商品的零售价为:',salePrice) AS productSalePrice FROM product;
    74  //CONCAT('你好','','?','我很好')  你好吗?我很好

     5.带条件查询

      1 使用WHERE子句限定返回的记录:
      2 
      3 语法:
      4 
      5 SELECT  <selectList> 
      6 
      7 FROM        table_name
      8 
      9 WHERE    条件1 AND/OR 条件2;
     10 
     11 注意:
     12 
     13 WHERE子句在 FROM 子句后
     14 
     15 ----------------------------------------------------
     16 
     17 比较运算符               含义
     18 
     19 -------------------------------------------------
     20 
     21 =                     等于
     22 
     23 >                     大于
     24 
     25 >=                    大于或等于
     26 
     27 <                     小于
     28 
     29 <=                    小于或等于
     30 
     31 !=(<>)                不等于
     32 
     33 ---------------------------------------------------
     34 需求: 查询货品零售价大于119的所有货品信息.
     35 SELECT * FROM product WHERE sale_price>119
     36 
     37 需求: 查询货品零售价为119的所有货品信息.
     38 
     39 需求: 查询货品名为联想G9X的所有货品信息.
     40 
     41 需求: 查询货品名 不为 联想G9X的所有货品信息.
     42 
     43 需求: 查询分类编号不等于2的货品信息
     44 
     45 需求: 查询货品名称,零售价小于等于200的货品
     46 
     47 需求: 查询id,货品名称,批发价大于350的货品
     48 
     49 思考:where后面使用别名不行,总结select和where的执行顺序   先执行where ,在执行select
     50 
     51 
     52 
     53 SQL的执行顺序:
     54 
     55 1.先执行FROM子句:  确定查询哪一张表
     56 
     57 2.接着执行WHERE :  过滤筛选条件
     58 
     59 3.接着做SELECT  :  确定选择的列
     60 
     61 4.最后做ORDER BY:  对结果集按照某列排序
     62 
     63 ---------------------------------------------------
     64 
     65 注意:字符串和日期要用单引号扩起来.
     66 
     67 要让MySQL查询区分大小写,可以:使用 BINARY
     68 
     69 SELECT * FROM table_name WHERE BINARY product_name='g9x'
     70 
     71 SELECT * FROM table_name WHERE BINARY product_name='G9X'
     72 
     73 -----------------------------------------------------------------
     74 
     75 逻辑运算符                含义
     76 
     77 ----------------------------------------
     78 
     79 AND              如果组合的条件都是TRUE,返回TRUE
     80 
     81 OR               如果组合的条件之一是TRUE,返回TRUE
     82 
     83 NOT(!)               如果下面的条件是FALSE,返回TRUE`
     84 
     85 -------------------------------------------------------------
     86 
     87 需求: 选择id,货品名称,批发价在300-400之间的货品
     88 
     89 需求: 选择id,货品名称,分类编号为2,4的所有货品
     90 
     91 需求: 选择id,货品名词,分类编号不为2的所有商品
     92 
     93 需求: 选择id,货品名称,分类编号的货品零售价大于等于250或者是成本大于等于200
     94 
     95 -----------------------------------------------------------------------
     96 优先级            运算符
     97 ------------------------------------
     98 1                所有比较运算符
     99 2                NOT
    100 3                AND
    101 4                OR
    102 
    103 注意:括号将跨越所有优先级规则

        

     1 使用BETWEEN运算符显示某一值域范围的记录,这个操作符最常见的使用在数字类型数据的范围上,但对于字符类型数据和日期类型数据同样可用。
     2 格式:
     3 SELECT <selectList>
     4 FROM table_name
     5 WHERE 列名 BETWEEN minvalue AND maxvalue:闭区间。
     6 需求: 选择id,货品名称,批发价在300-400之间的货品
     7 需求: 选择id,货品名称,批发价不在300-400之间的货品
     8 --------------------------------------------------------
     9 使用IN运算符,判断列的值是否在指定的集合中。
    10 格式: 
    11 SELECT <selectList>
    12 FROM table_name
    13 WHERE 列名 IN (值1,值2....);
    14 
    15 需求:选择id,货品名称,分类编号为2,4的所有货品
    16 需求:选择id,货品名称,分类编号不为2,4的所有货品
    17 --------------------------------------------------------
    18 IS NULL:判断列的值是否为空。
    19 格式:WHERE  列名 IS NULL;
    20 需求:查询商品名为NULL的所有商品信息。
    21 --------------------------------------------------------
    22 使用LIKE运算符执行通配查询,查询条件可包含文字字符或数字:
    23 %:通配符:可表示零或多个字符。
    24 _:通配符:可表示一个字符。
    25 通配符:用来实现匹配部分值得特殊字符。
    26 -----------------------------------------------------
    27 需求: 查询id,货品名称,货品名称匹配'%联想M9_'
    28 需求: 查询id,货品名称,分类编号,零售价大于等于200并且货品名称匹配'%联想M1__'

    6.排序

    使用ORDER BY子句将结果的记录排序.
    ASC : 升序,缺省。
    DESC: 降序。
    ORDER BY 子句出现在SELECT语句的最后。
    格式:
    SELECT <selectList> 
    FROM table_name
    WHERE 条件
    ORDER BY 列名1 [ASC/DESC],列名2 [ASC/DESC]...;
    -------------------------------------------------------
    需求:选择id,货品名称,分类编号,零售价并且按零售价降序排序
    需求: 选择id,货品名称,分类编号,零售价先按分类编号排序,再按零售价排序
    需求:查询M系列并按照批发价排序(加上别名)
    需求:查询分类为2并按照批发价排序(加上别名)
    注意:别名不能使用引号括起来,否则不能排序。
    --------------------------------------------------------------------------
    SELECT语句执行顺序:
    先执行FROM--->接着执行WHERE--->再执行SELECT--->最后执行ORDER BY

     7.分页

     1 分页查询:
     2 分页设计:
     3   假分页(逻辑分页): 把数据全部查询出来,存在于内存中,翻页的时候,直接从内存中去截取.
     4   真分页(物理分页): 每次翻页都去数据库中去查询数据.
     5 
     6   假分页: 翻页比较快,但是第一次查询很慢,若数据过大,可能导致内存溢出.
     7   真分页: 翻页比较慢,若数据过大,不会导致内存溢出.
     8 ----------------------------------------------------------------------------------------
     9 规定:每页显示3条数据. pageSize = 3
    10 第一页:   SELECT * FROM `product` LIMIT 0, 3
    11 第二页:   SELECT * FROM `product` LIMIT 3, 3
    12 第三页:   SELECT * FROM `product` LIMIT 6, 3
    13 第 N页:   SELECT * FROM `product` LIMIT (N-1)*3, 3
    14 ----------------------------------------------------------------------------------------
    15 分页查询的SQL:
    16 SELECT * FROM table_name LIMIT ?,?;
    17 SELECT * FROM table_name LIMIT beginIndex,pageSize;
    18 beginIndex = (currentPage-1) * pageSize;
    19 第一个?: 表示本页,开始索引(从0开始).
    20 第二个?: 每页显示的条数

     8.函数

     1 什么是聚集函数:统计函数.
     2 聚集函数作用于一组数据,并对一组数据返回一个值。
     3 -------------------------------------------------------
     4 聚集函数:
     5 COUNT:统计结果记录数  
     6 MAX:  统计计算最大值
     7 MIN:  统计计算最小值
     8 SUM:  统计计算求和
     9 AVG:  统计计算平均值
    10 -------------------------------------------------------
    11 需求:查询所有商品平均零售价   
    SELECT AVG(sale_price) FROM product
    12 需求:查询商品总记录数 13 需求:查询分类为2的商品总数 14 需求:查询商品的最小零售价,最高零售价,以及所有商品零售价总和

     9.分组

     1 分组查询:
     2 可以使用GROUP BY 子句将表中的数据分成若干组,再对分组之后的数据做统计计算,一般使用聚集函数才使用GROUP BY.
     3 语法格式:
     4 SELECT <selectList>,聚集函数
     5 FROM table_name  
     6 WHERE 条件
     7 GROUP BY 列名
     8 注意:GROUP BY 后面的列名的值要有重复性分组才有意义。
     9 
    10 ----------------------------------------------------------------------
    11 需求:查询每个商品分类编号和每个商品分类各自的平均零售价
    SELECT classify_id,AVG(sale_price) FROM product  GROUP BY classify_id
    12 需求:查询每个商品分类编号和每个商品分类各自的商品总数。 13 需求:查询每个商品分类编号和每个商品分类中零售价大于100的商品总数: 14 需求:查询零售价总和大于1500的商品分类编号以及总零售价和:

    10.笛卡尔积

     1 单表查询:从一张表中查询数据
     2 多表查询:从多张表中联合查询出数据
     3 ------------------------------------
     4 单表查询:
     5 SELECT <selectList>
     6 FROM  table_name
     7 -----------------------------------
     8 多表查询(最简单的):
     9 SELECT <selectList>
    10 FROM  表名A,表名B
    11 ----------------------------------------------------------------------
    12 笛卡尔积:
    13 需求:查询所有的货品信息+对应的货品分类信息
    14 没有连接条件的表关系返回的结果。
    15 多表查询会产生笛卡尔积:
    16 
    17 假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。
    18 
    19 实际运行环境下,应避免使用全笛卡尔集。
    20 
    21 解决方案: 在WHERE加入有效的连接条件---->等值连接
    22 注意:
    23 连接 n张表,至少需要 n-1个连接条件。

     11.内连接查询

     1 内连接查询:
     2 内连接查询:是相对于外连接。
     3 内连接分为:隐式内连接、显示内连接(推荐),其查询效果相同,仅仅只是语法不同而已。
     4 -----------------------------------------------
     5 隐式内连接:
     6 SELECT    <selectList>
     7 FROM    A ,B  WHERE A.列 = B.列
     8 -----------------------------------------------
     9 显示内连接(推荐写法):.
    10 SELECT    <selectList>
    11 FROM    A [INNER] JOIN B ON A.列 = B.列 
    12 -----------------------------------------------
    13 需求:查询所有商品的名称和分类名称:
    14 隐式内连接: SELECT p.product_name,pc.classify_name FROM product p,product_classify  pc WHERE p.classify_id = pc.id
    15 显示内连接:  SELECT p.product_name,pc.classify_name FROM product p INNER JOIN product_classify pc ON p.classify_id = pc.id
    16 显示内连接: SELECT p.product_name,pc.classify_name FROM product p  JOIN product_classify pc ON p.classify_id = pc.id
    17 -----------------------------------------------
    18 在做等值连接的时候,若A表中和B表中的列名相同. 则可以简写:
    19 SELECT    <selectList>
    20 FROM    A [INNER] JOIN B USING(同名的列)
    21 前提:在emp员工和dept部门表中都有deptno部门编号列. 并且是外键关系。
    22 则: SELECT * FROM emp JOIN dept USING (deptno)
    23 ---------------------------------------------------------------------
    24 使用表名前缀在多个表中区分相同的列。
    25 在不同表中具有相同列名的列可以用表的别名加以区分。
    26 使用别名可以简化查询。
    27 使用表名前缀可以提高执行效率。
    28 如果使用了表的别名,则不能再使用表的真名
    29 ---------------------------------------------------------------------
    30 需求: 查询货品id,货品名称,货品所属分类名称
    31 需求: 查询零售价大于200的无线鼠标
    32 需求: 查询零售价大于200的无线鼠标(使用表的别名)
    33 需求: 查询每个货品对应的分类以及对应的库存
    34 需求: 如果库存货品都销售完成,按照利润从高到低查询货品名称,零售价,货品分类(三张表).

     12.外连接查询

     1 外连接查询:
     2   左外连接:查询出JOIN左边表的全部数据查询出来,JOIN右边的表不匹配的数据使用NULL来填充数据.
     3   右外连接:查询出JOIN右边表的全部数据查询出来,JOIN左边的表不匹配的数据使用NULL来填充数据.
     4 ----------------------------
     5 语法格式:
     6 SELECT    <selectList>
     7 FROM    A LEFT/RIGHT [OUTER] JOIN B
     8   ON (A.column_name = B.column_name)];
     9 查询所有的商品信息和对应的分类信息.
    10 左连接:
    11 SELECT * FROM product p LEFT JOIN product_classify pc ON p.classify_id = pc.id
    12 右连接:
    13 SELECT * FROM product p RIGHT  JOIN product_classify pc ON p.classify_id = pc.id
    14 ----------------------------------------------
    15 在做等值连接的时候,若A表中和B表中的列名相同. 则可以简写:
    16 SELECT    <selectList>
    17 FROM    A LEFT JOIN B USING(同名的列)
    18 前提:在emp员工和dept部门表中都有deptno部门编号列. 并且是外键关系
    19 如: SELECT * FROM emp LEFT JOIN dept USING (deptno)
    20 
    21 思考:查询每种商品分类的名称和包含的的商品总数:
    22 
    23 SELECT pc.classify_name,COUNT(p.id)
    24 
    25 FROM product p RIGHT JOIN product_classify pc ON p.classify_id = pc.id
    26 
    27 GROUP BY pc.classify_name

    13.自连接查询

     1 自连接查询:
     2   把一张表看成两张来做查询.
     3 需求: 查询每个商品分类的名称和父分类名称:
     4 
     5 隐式内连接:
     6 SELECT sub.classify_name,super.classify_name
     7         FROM product_classify super,product_classify sub
     8         WHERE sub.parent_id = super.id
     9 
    10 显示内连接:
    11 SELECT sub.classify_name,super.classify_name
    12         FROM product_classify super JOIN product_classify sub
    13 
    14                 ON sub.parent_id = super.id

    14.子查询

     1 什么是子查询(嵌套查询):一个查询语句中嵌套在另一个查询语句中,内层查询的结果可以作为外层查询条件或者临时表。
     2 一般的,嵌套在WHERE或者FROM字句中。
     3 为什么使用子查询:
     4    多表连接查询过程:
     5    1):两张表做笛卡尔积。
     6    2):筛选匹配条件的数据记录。
     7    若,笛卡尔积记录数比较大,可能造成服务器崩溃。
     8 -----------------------------------------------------------------------
     9 单行单列子查询:
    10 需求: 查询零售价比联想MX1100更高的所有商品信息。
    11 SELECT * FROM product
    12 WHERE salePrice > (
    13     SELECT salePrice FROM product WHERE productName = '联想MX1100'
    14 )
    15 单行多列子查询:
    16 需求: 查询分类编号和折扣与联想M100相同的所有商品信息。
    17 SELECT * FROM product
    18 WHERE (dir_id,cutoff)=(
    19     SELECT dir_id,cutoff FROM product WHERE productName = '联想M100'
    20 )
    21 多行多列子查询:
    22 需求: 查询各商品分类的分类编号,分类名称,商品数量,平均零售价。
    23 
    24 内连接:
    25 SELECT  pc.id, pc.classify_name,COUNT(p.id),AVG(p.sale_price)
    26 
    27 FROM product p JOIN product_classify pc ON p.classify_id = pc.id
    28 
    29 GROUP BY pc.id
    30 
    31 产生的笛卡尔积记录:80条
    32 SELECT COUNT(*) FROM product,product_classify
    33 
    34 子查询:
    35 SELECT pc.id,pc.classify_name,countNum,avgSalePrice
    36 
    37 FROM product_classify pc JOIN (
    38 
    39         SELECT classify_id ,COUNT(id) countNum,AVG(sale_price) avgSalePrice
    40 
    41         FROM product 
    42 
    43         GROUP BY classify_id) p 
    44 
    45 ON pc.id = p.classify_id

     15.保存之前先检查该数据是否存在

      

          举例:角色不能一样

          INSERT INTO tab_pc_role (role_name,remark) SELECT 'testMast2','测试权限' FROM DUAL  WHERE NOT EXISTS (SELECT id FROM tab_pc_role WHERE role_name='testMast2')

    16.考查与评估

      a.练习题

     1 1.基本增删改查操作
     2 需求:添加一条数据到产品表   产品名称为苹果手机   卖价为5000
     3 需求:删除产品表中id=20的数据
     4 需求:删除产品表中id=20并且product_name='联想M115'的数据
     5 需求:删除产品表中id=20或者product_name='联想M115'的数据
     6 需求:删除产品表中product_name!='联想M115'的数据
     7 需求:把成本价大于100的所有商品的卖价修改为200,并且把名称修改为特殊商品
     8 需求:查询所有商品
     9 需求:查询id<8的数据
    10 需求:查询id<8的数据,只看id,产品名称,卖价
    11 
    12 2.简单查询之列操作
    13 需求:查询所有货品信息
    14 需求:查询所有货品的id,product_name,sale_price
    15 需求:查询商品的分类编号。
    16 需求:查询所有货品的id,名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格)
    17 需求:查询所有货品的id,名称和批发价(批发价=卖价*折扣) 
    18 需求:查询所有货品的id,名称,和各进50个的成本价(成本=cost_price)
    19 需求:查询所有货品的id,名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格),并取别名
    20 需求:查询所有货品的id,名称,各进50个,并且每个运费1元的成本(使用别名)
    21 需求:查询所有货品名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格),
    22 需求:查询商品的名字和零售价。格式:xxx商品的零售价为:xxx
    23 
    24 3.带条件查询
    25 需求: 查询货品零售价大于119的所有货品信息.
    26 需求: 查询货品零售价为119的所有货品信息.
    27 需求: 查询货品名为联想G9X的所有货品信息.
    28 需求: 查询货品名 不为 联想G9X的所有货品信息.
    29 需求: 查询分类编号不等于2的货品信息
    30 需求: 查询货品名称,零售价小于等于200的货品
    31 需求: 查询id,货品名称,批发价大于350的货品
    32 需求: 选择id,货品名称,批发价在300-400之间的货品
    33 需求: 选择id,货品名称,分类编号为2,4的所有货品
    34 需求: 选择id,货品名词,分类编号不为2的所有商品
    35 需求: 选择id,货品名称,分类编号的货品零售价大于等于250或者是成本大于等于200
    36 需求: 选择id,货品名称,批发价在300-400之间的货品
    37 需求: 选择id,货品名称,批发价不在300-400之间的货品
    38 需求: 选择id,货品名称,分类编号为2,4的所有货品
    39 需求: 选择id,货品名称,分类编号不为2,4的所有货品
    40 需求: 查询商品名为NULL的所有商品信息。
    41 需求: 查询id,货品名称,货品名称匹配'%联想M9_'
    42 需求: 查询id,货品名称,分类编号,零售价大于等于200并且货品名称匹配'%联想M1__'
    43 需求:选择id,货品名称,分类编号,零售价并且按零售价降序排序
    44 需求: 选择id,货品名称,分类编号,零售价先按分类编号排序,再按零售价排序
    45 需求:查询M系列并按照批发价排序(加上别名)
    46 需求:查询分类为2并按照批发价排序(加上别名)
    47 
    48 4.函数
    49 需求:查询所有商品平均零售价   
    50 需求:查询商品总记录数
    51 需求:查询分类为2的商品总数
    52 需求:查询商品的最小零售价,最高零售价,以及所有商品零售价总和
    53 
    54 5.分组
    55 需求:查询每个商品分类编号和每个商品分类各自的平均零售价
    56 需求:查询每个商品分类编号和每个商品分类各自的商品总数。
    57 需求:查询每个商品分类编号和每个商品分类中零售价大于100的商品总数:
    58 需求:查询零售价总和大于1500的商品分类编号以及总零售价和
    59 
    60 6.综合查询
    61 需求:查询所有的货品信息+对应的货品分类信息
    62 需求:查询所有商品的名称和分类名称
    63 需求: 查询货品id,货品名称,货品所属分类名称
    64 需求: 查询零售价大于200的无线鼠标
    65 需求: 查询零售价大于200的无线鼠标(使用表的别名)
    66 需求: 查询每个货品对应的分类以及对应的库存
    67 需求: 如果库存货品都销售完成,按照利润从高到低查询货品名称,零售价,货品分类(三张表).
    68 需求: 查询每个商品分类的名称和父分类名称
    69 需求: 查询零售价比联想MX1100更高的所有商品信息。
    70 需求: 查询分类编号和折扣与联想M100相同的所有商品信息。
    71 需求: 查询各商品分类的分类编号,分类名称,商品数量,平均零售价。
    练习sql

          b.需求:以常见OA系统中的员工部门为案例完成:

      1.设计员工表

      2.设计部门表

      3.sql语句练习

      3.1查询所有员工按照年龄排序

      3.2查询各部门的平均工资

      3.3查询各部门人数并按照部门人数排序

      3.4查询研发部门的所有员工

      3.5查询工资高于10000的员工信息

      3.6查询工资低于平均工资的员工信息

    17.练习题sql语句答案

      1 CREATE TABLE `product` (
      2   `id` int(11) NOT NULL AUTO_INCREMENT,
      3   `product_name` varchar(50) DEFAULT NULL,
      4   `classify_id` int(11) DEFAULT NULL,
      5   `sale_price` double(10,2) DEFAULT NULL,
      6   `supplier` varchar(50) DEFAULT NULL,
      7   `brand` varchar(50) DEFAULT NULL,
      8   `cutoff` double(2,2) DEFAULT NULL,
      9   `cost_price` double(10,2) DEFAULT NULL,
     10   PRIMARY KEY (`id`)
     11 ) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
     12 
     13 1.基本增删改查操作
     14 需求:添加一条数据到产品表   产品名称为苹果手机   卖价为5000
     15 INSERT INTO product (product_name,sale_price) VALUES ('苹果手机',5000);
     16 
     17 需求:删除产品表中id=20的数据
     18 DELETE FROM product WHERE id=20;
     19 需求:删除产品表中id=20并且product_name='联想M115'的数据
     20 DELETE FROM product WHERE id=20 AND product_name='联想M115';
     21 
     22 需求:删除产品表中id=20或者product_name='联想M115'的数据
     23 DELETE FROM product WHERE id=20 OR product_name='联想M115';
     24 
     25 
     26 需求:删除产品表中product_name!='联想M115'的数据
     27 DELETE FROM product WHERE product_name='联想M115';
     28 
     29 
     30 需求:把成本价大于100的所有商品的卖价修改为200,并且把名称修改为特殊商品
     31 UPDATE product SET sale_price=200,product_name='特殊商品' WHERE cost_price>100
     32 
     33 
     34 需求:查询所有商品
     35 SELECT * FROM product
     36 
     37 需求:查询id<8的数据
     38 SELECT * FROM product WHERE id<8
     39 
     40 需求:查询id<8的数据,只看id,产品名称,卖价
     41 
     42 SELECT id,product_name,sale_price FROM product WHERE id<8
     43 
     44 2.简单查询之列操作
     45 需求:查询所有货品信息
     46 
     47 SELECT * FROM product
     48 
     49 需求:查询所有货品的id,product_name,sale_price
     50 SELECT id,product_name,sale_price FROM product 
     51 
     52 
     53 需求:查询商品的分类编号。
     54 SELECT classify_id FROM product
     55 
     56 需求:查询所有货品的id,名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格)
     57 
     58 SELECT id,product_name,sale_price,cost_price,(sale_price-cost_price)*1 FROM product 
     59 
     60 需求:查询所有货品的id,名称和批发价(批发价=卖价*折扣) 
     61 SELECT id,product_name,sale_price,cutoff,(sale_price*cutoff) FROM product 
     62 
     63 需求:查询所有货品的id,名称,和各进50个的成本价(成本=cost_price)
     64 SELECT id,product_name,cost_price,cost_price*50 FROM product 
     65 
     66 需求:查询所有货品的id,名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格),并取别名
     67 SELECT id,product_name,sale_price,cost_price,(sale_price-cost_price)*1 每零售1个产品所赚取的钱 FROM product 
     68 
     69 
     70 需求:查询所有货品的id,名称,各进50个,并且每个运费1元的成本(使用别名)
     71 SELECT id,product_name,cost_price,(cost_price+1)*50 成本 FROM product 
     72 
     73 
     74 需求:查询所有货品名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格)
     75 SELECT product_name,sale_price,cost_price,(sale_price-cost_price) 利润 FROM product
     76 
     77 需求:查询商品的名字和零售价。格式:xxx商品的零售价为:xxx
     78 
     79 SELECT product_name,'商品的零售价为:',sale_price FROM product 
     80 SELECT CONCAT(product_name,'商品的零售价为:',sale_price) FROM product
     81 
     82 3.带条件查询
     83 需求: 查询货品零售价大于119的所有货品信息.
     84 SELECT * FROM product WHERE sale_price>119
     85 
     86 需求: 查询货品零售价为119的所有货品信息.
     87 SELECT * FROM product WHERE sale_price=119
     88 
     89 
     90 需求: 查询货品名为联想G9X的所有货品信息.
     91 SELECT * FROM product WHERE product_name='联想G9X'
     92 
     93 
     94 需求: 查询货品名 不为 联想G9X的所有货品信息.
     95 SELECT * FROM product WHERE product_name !='联想G9X'
     96 
     97 
     98 需求: 查询分类编号不等于2的货品信息
     99 
    100 SELECT * FROM product WHERE classify_id!=2
    101 
    102 需求: 查询货品名称,零售价小于等于200的货品
    103 
    104 SELECT product_name,sale_price FROM product WHERE sale_price=200
    105 
    106 需求: 查询id,货品名称,批发价大于350的货品
    107 
    108 SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff>350
    109 
    110 需求: 选择id,货品名称,批发价在300-400之间的货品
    111 SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff>300 AND sale_price*cutoff<400
    112 
    113 
    114 需求: 选择id,货品名称,分类编号为2,4的所有货品
    115 SELECT id, product_name,classify_id FROM product WHERE classify_id=2 OR  classify_id=4
    116 
    117 SELECT id, product_name,classify_id FROM product WHERE classify_id  IN (2,4) # (推荐使用这种)
    118 
    119 
    120 
    121 需求: 选择id,货品名词,分类编号不为2的所有商品
    122 SELECT id, product_name,classify_id FROM product WHERE classify_id !=2 # (推荐使用这种)
    123 
    124 SELECT id, product_name,classify_id FROM product WHERE classify_id NOT IN (2) 
    125 
    126 
    127 
    128 需求: 选择id,货品名称,分类编号的货品零售价大于等于250或者是成本大于等于200
    129 
    130 SELECT id, product_name,classify_id FROM product WHERE sale_price>=250 OR cost_price>=200
    131 需求: 选择id,货品名称,批发价在300-400之间的货品
    132 SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff>300 AND sale_price*cutoff<400  #推荐这种
    133 
    134 
    135 SELECT id, product_name,sale_price*cutoff FROM product WHERE  sale_price*cutoff BETWEEN  300 AND 400
    136 
    137 
    138 
    139 需求: 选择id,货品名称,批发价不在300-400之间的货品
    140 
    141 SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff<=300 OR sale_price*cutoff>=400  #推荐这种
    142 
    143 SELECT id, product_name,sale_price*cutoff FROM product WHERE  sale_price*cutoff  NOT BETWEEN  300 AND 400
    144 
    145 
    146 需求: 选择id,货品名称,分类编号为2,4的所有货品
    147 SELECT id, product_name,classify_id FROM product WHERE classify_id=2 OR  classify_id=4
    148 
    149 SELECT id, product_name,classify_id FROM product WHERE classify_id  IN (2,4) # (推荐使用这种)
    150 
    151 需求: 选择id,货品名称,分类编号不为2,4的所有货品
    152 SELECT id, product_name,classify_id FROM product WHERE classify_id!=2 AND  classify_id!=4
    153 
    154 SELECT id, product_name,classify_id FROM product WHERE classify_id NOT  IN (2,4) # (推荐使用这种)
    155 
    156 需求: 查询商品名为NULL的所有商品信息。
    157 SELECT * FROM product WHERE product_name IS NULL
    158 
    159 SELECT * FROM product WHERE product_name = NULL  (这是错误的写法     必须重视,初学者很容易犯错)
    160 
    161 需求: 查询id,货品名称,货品名称匹配'%联想M9_'
    162 SELECT id, product_name FROM product WHERE product_name LIKE '%联想M9_'
    163 
    164 
    165 需求: 查询id,货品名称,分类编号,零售价大于等于200并且货品名称匹配'%联想M1__'
    166 SELECT id, product_name,classify_id,sale_price FROM product WHERE product_name LIKE '%联想M1__' AND sale_price>=200
    167 
    168 
    169 需求:选择id,货品名称,分类编号,零售价并且按零售价降序排序
    170 SELECT id, product_name,classify_id,sale_price FROM product ORDER BY sale_price DESC   (默认的ASC是升序)
    171 SELECT id, product_name,classify_id,sale_price FROM product ORDER BY sale_price ASC 
    172 
    173 需求: 选择id,货品名称,分类编号,零售价先按分类编号排序,再按零售价排序
    174 SELECT id, product_name,classify_id,sale_price FROM product ORDER BY classify_id ASC ,sale_price ASC 
    175 
    176 
    177 需求:查询M系列并按照批发价排序(加上别名)
    178 
    179 #ORDER BY sc   可以使用别名,因为执行select在执行order。。by..
    180 SELECT id, product_name,classify_id,sale_price,cutoff,(sale_price*cutoff) sc FROM product WHERE product_name LIKE '%M%' ORDER BY sc
    181 
    182 需求:查询分类为2并按照批发价排序(加上别名)
    183 
    184 SELECT id, product_name,classify_id,sale_price,cutoff,(sale_price*cutoff) sc FROM product WHERE classify_id=2 ORDER BY sc
    185 
    186 
    187 4.函数
    188 需求:查询所有商品平均零售价
    189 
    190 SELECT AVG(sale_price) FROM product
    191    
    192 需求:查询商品总记录数
    193 SELECT COUNT(1) FROM product
    194 
    195 需求:查询分类为2的商品总数
    196 SELECT COUNT(1) FROM product WHERE classify_id=2
    197 
    198 需求:查询商品的最小零售价,最高零售价,以及所有商品零售价总和
    199 
    200 SELECT MIN(sale_price),MAX(sale_price),SUM(sale_price) FROM product 
    201 
    202 5.分组
    203 需求:查询每个商品分类编号和每个商品分类各自的平均零售价
    204 
    205 SELECT classify_id,AVG(sale_price) FROM product GROUP BY classify_id
    206 
    207 需求:查询每个商品分类编号和每个商品分类各自的商品总数。
    208 SELECT classify_id,COUNT(1) FROM product GROUP BY classify_id
    209 
    210 需求:查询每个商品分类编号和每个商品分类中零售价大于100的商品总数:
    211 SELECT classify_id,COUNT(1) FROM product WHERE sale_price>100 GROUP BY classify_id
    212 
    213 需求:查询零售价总和大于1500的商品分类编号以及总零售价和
    214 
    215 SELECT classify_id,SUM(sale_price) s FROM product GROUP BY classify_id HAVING s>1500
    216 
    217 6.综合查询
    218 需求:查询所有的货品信息+对应的货品分类信息
    219 
    220 SELECT * FROM product p LEFT  JOIN product_classify pc ON (p.classify_id=pc.id)
    221 
    222 需求:查询所有商品的名称和分类名称
    223 
    224 SELECT p.product_name,pc.classify_name FROM product p LEFT  JOIN product_classify pc ON (p.classify_id=pc.id)
    225 
    226 
    227 需求: 查询货品id,货品名称,货品所属分类名称
    228 SELECT p.id,p.product_name,pc.classify_name FROM product p LEFT  JOIN product_classify pc ON (p.classify_id=pc.id)
    229 
    230 
    231 需求: 查询零售价大于200的无线鼠标
    232 SELECT p.id,p.product_name,pc.classify_name,p.sale_price 
    233 FROM product p LEFT  JOIN product_classify pc ON (p.classify_id=pc.id) 
    234 WHERE p.sale_price>200 AND pc.classify_name='无线鼠标'
    235 
    236 需求: 查询零售价大于200的无线鼠标(使用表的别名)
    237 SELECT p.id,p.product_name,pc.classify_name,p.sale_price 
    238 FROM product p LEFT  JOIN product_classify pc ON (p.classify_id=pc.id) 
    239 WHERE p.sale_price>200 AND pc.classify_name='无线鼠标'
    240 
    241 需求: 查询每个货品对应的分类以及对应的库存
    242 SELECT * 
    243 FROM product p 
    244 LEFT  JOIN product_classify pc ON (p.classify_id=pc.id)
    245 LEFT JOIN product_stock ps ON (ps.product_id=p.id)
    246 
    247 需求: 如果库存货品都销售完成,按照利润从高到低查询货品名称,零售价,货品分类(三张表).
    248 SELECT p.product_name,p.sale_price,pc.classify_name,(p.sale_price-p.cost_price)*ps.store_num c
    249 FROM product p 
    250 LEFT  JOIN product_classify pc ON (p.classify_id=pc.id)
    251 LEFT JOIN product_stock ps ON (ps.product_id=p.id)
    252 ORDER BY c DESC
    253 
    254 需求: 查询每个商品分类的名称和父分类名称
    255 
    256 SELECT * 
    257 FROM product_classify a
    258 LEFT JOIN product_classify b ON (a.parent_id=b.id)
    259 
    260 
    261 需求: 查询零售价比联想MX1100更高的所有商品信息。
    262 
    263 SELECT sale_price FROM product WHERE product_name='联想MX1100'   #sale_price=119
    264 
    265 SELECT * FROM product WHERE sale_price>119
    266 
    267 使用的是子查询
    268 
    269 SELECT * FROM product WHERE sale_price>(SELECT sale_price FROM product WHERE product_name='联想MX1100' )
    270 
    271 
    272 
    273 需求: 查询分类编号和折扣与联想M100相同的所有商品信息。
    274 
    275 SELECT classify_id,cutoff FROM product WHERE product_name='联想M100'
    276 
    277 SELECT * FROM product WHERE (classify_id,cutoff) = (3,0.9)
    278 
    279 #单行多列 子查询  
    280 
    281 最后:
    282 SELECT * FROM product WHERE (classify_id,cutoff) = (SELECT classify_id,cutoff FROM product WHERE product_name='联想M100')
    283 
    284 
    285 需求: 查询各商品分类的分类编号,分类名称,商品数量,平均零售价。
    286 
    287 SELECT p.classify_id,pc.classify_name,COUNT(1),AVG(p.sale_price)
    288 FROM product p
    289 LEFT JOIN product_classify  pc ON (p.classify_id=pc.id)
    290 GROUP BY p.classify_id
    View Code

    到此数据库第一阶段课程类容就完了,每一位学习者必须认真的把博客上的需求写完整,然后我们做一个习题讲解!

  • 相关阅读:

    Windows终端无法通过cd切换盘符目录
    linux工程相对路径读取文件
    Ubuntu常用命令的安装
    vue项目的创建和遇到的一些问题
    超详细!Head First:HTML and CSS的读书笔记
    laravel开发环境部署遇到的问题和个人感受
    java并发:线程池之ScheduledExecutorService
    java并发:线程池之饱和策略
    java并发:线程池之ThreadPoolExecutor
  • 原文地址:https://www.cnblogs.com/newAndHui/p/8360809.html
Copyright © 2020-2023  润新知