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

时间:2022-07-22 14:27:33

1.基本增删改查操作

 #一。 数据类型  常用的3中
# 1.字符串 例如:你的名字 我是中国人 在数据库中要使用 ‘’引起来 '苹果手机'
# 2.整数类型 例如: 你的年龄 23 ,办公室的人数 5 个 ,直接使用 5000
# 3.时间 当着一个字符串用 #二。几乎所有的编程标点符号都要使用 英文状态下的 #三。数据库中不区分大小写,但是 生产上的 规范 关键字大写 INSERT,其他的小写 新增
需求:添加一条数据到产品表 产品名称为苹果手机 卖价为5000
INSERT INTO product (product_name,sale_price) VALUES ('苹果手机',5000) 删除
需求:删除产品表中id=20的数据
DELETE FROM product WHERE id=20
# = > < >= <=
# product_name='联想M115'
# 或OR 且AND 非! 两个条件同时满足 AND
需求:删除产品表中id=20并且product_name='联想M115'的数据
DELETE FROM product WHERE id=20 AND product_name='联想M115' 需求:删除产品表中id=20或者product_name='联想M115'的数据
DELETE FROM product WHERE id=20 OR product_name='联想M115' 需求:删除产品表中product_name!='联想M115'的数据
DELETE FROM product WHERE product_name !='联想M115' 更新 #需求:把成本价大于100的所有商品的卖价修改为200,并且把名称修改为特殊商品
UPDATE product SET sale_price=200,product_name='特殊商品' WHERE cost_price>100 查询
#查询所有商品
SELECT * FROM product
#需求:查询id<8的数据
#过滤行
SELECT * FROM product WHERE id<8
#需求:查询id<8的数据,只看id,产品名称,卖价
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.创建用户表案例

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

3.表结构认识

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

4.简单查询之列操作

 简单查询:
语法:
SELECT {*, column [alias],...}
FROM table_name;
说明:
SELECT 选择查询列表
FROM 提供数据源(表、视图或其他的数据源)
如果为 * 和创建表时的顺序一致。
可以自己调整顺序,在select后边加上要查询的列名。
需求:查询所有货品信息
需求:查询所有货品的id,product_name,sale_price
--------------------------------------------------------------
消除结果中重复的数据。
需求:查询商品的分类编号。
语法:
SELECT DISTINCT 列名,..
--------------------------------------------------------------
实现数学运算查询: 对NUMBER型数据可以使用算数操作符创建表达式(+ - * /) 对DATE型数据可以使用部分算数操作符创建表达式 (+ -) 运算符优先级: 1、乘法和除法的优先级高于加法和减法 2、同级运算的顺序是从左到右 3、表达式中使用"括号"可强行改变优先级的运算顺序 -----------------------------------------------------------------
需求:查询所有货品的id,名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格)
SELECT id ,product_name,sale_price-cost_price FROM product 需求:查询所有货品的id,名称和批发价(批发价=卖价*折扣) 需求:查询所有货品的id,名称,和各进50个的成本价(成本=cost_price) ------------------------------------------------------------------ 设置列名的别名。 1、改变列的标题头; 2、用于表示计算结果的含义; 3、作为列的别名; 4、如果别名中使用特殊字符,或者是强制大小写敏感,或有空格时,都需加单引号;--->英文单词 需求:查询所有货品的id,名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格),并取别名 SELECT id ,product_name 名称 ,sale_price-cost_price 每零售1个产品所赚取的钱 FROM product 需求:查询所有货品的id,名称,各进50个,并且每个运费1元的成本(使用别名) ------------------------------------------------------------------ 设置显示格式: 为方便用户浏览查询的结果数据,有时需要设置显示格式,可以使用CONCAT函数来连接字符串。 需求:查询所有货品名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格),
格式为: 每零售一个XXX产品,赚取:XX元
SELECT CONCAT('每零售一个',product_name,'产品,赚取:',sale_price-cost_price,'元') FROM product 需求:查询商品的名字和零售价。
格式:xxx商品的零售价为:xxx SELECT CONCAT(productName,'商品的零售价为:',salePrice) AS productSalePrice FROM product;
//CONCAT('你好','吗','?','我很好') 你好吗?我很好

5.带条件查询

 使用WHERE子句限定返回的记录:

 语法:

 SELECT  <selectList> 

 FROM        table_name

 WHERE    条件1 AND/OR 条件2;

 注意:

 WHERE子句在 FROM 子句后

 ----------------------------------------------------

 比较运算符               含义

 -------------------------------------------------

 =                     等于

 >                     大于

 >=                    大于或等于

 <                     小于

 <=                    小于或等于

 !=(<>)                不等于

 ---------------------------------------------------
需求: 查询货品零售价大于119的所有货品信息.
SELECT * FROM product WHERE sale_price>119 需求: 查询货品零售价为119的所有货品信息. 需求: 查询货品名为联想G9X的所有货品信息. 需求: 查询货品名 不为 联想G9X的所有货品信息. 需求: 查询分类编号不等于2的货品信息 需求: 查询货品名称,零售价小于等于200的货品 需求: 查询id,货品名称,批发价大于350的货品 思考:where后面使用别名不行,总结select和where的执行顺序 先执行where ,在执行select SQL的执行顺序: 1.先执行FROM子句: 确定查询哪一张表 2.接着执行WHERE : 过滤筛选条件 3.接着做SELECT : 确定选择的列 4.最后做ORDER BY: 对结果集按照某列排序 --------------------------------------------------- 注意:字符串和日期要用单引号扩起来. 要让MySQL查询区分大小写,可以:使用 BINARY SELECT * FROM table_name WHERE BINARY product_name='g9x' SELECT * FROM table_name WHERE BINARY product_name='G9X' ----------------------------------------------------------------- 逻辑运算符 含义 ---------------------------------------- AND 如果组合的条件都是TRUE,返回TRUE OR 如果组合的条件之一是TRUE,返回TRUE NOT(!) 如果下面的条件是FALSE,返回TRUE` ------------------------------------------------------------- 需求: 选择id,货品名称,批发价在300-400之间的货品 需求: 选择id,货品名称,分类编号为2,4的所有货品 需求: 选择id,货品名词,分类编号不为2的所有商品 需求: 选择id,货品名称,分类编号的货品零售价大于等于250或者是成本大于等于200 -----------------------------------------------------------------------
优先级 运算符
------------------------------------
1 所有比较运算符
2 NOT
3 AND
4 OR 注意:括号将跨越所有优先级规则
 使用BETWEEN运算符显示某一值域范围的记录,这个操作符最常见的使用在数字类型数据的范围上,但对于字符类型数据和日期类型数据同样可用。
格式:
SELECT <selectList>
FROM table_name
WHERE 列名 BETWEEN minvalue AND maxvalue:闭区间。
需求: 选择id,货品名称,批发价在300-400之间的货品
需求: 选择id,货品名称,批发价不在300-400之间的货品
--------------------------------------------------------
使用IN运算符,判断列的值是否在指定的集合中。
格式:
SELECT <selectList>
FROM table_name
WHERE 列名 IN (值1,值2....); 需求:选择id,货品名称,分类编号为2,4的所有货品
需求:选择id,货品名称,分类编号不为2,4的所有货品
--------------------------------------------------------
IS NULL:判断列的值是否为空。
格式:WHERE 列名 IS NULL;
需求:查询商品名为NULL的所有商品信息。
--------------------------------------------------------
使用LIKE运算符执行通配查询,查询条件可包含文字字符或数字:
%:通配符:可表示零或多个字符。
_:通配符:可表示一个字符。
通配符:用来实现匹配部分值得特殊字符。
-----------------------------------------------------
需求: 查询id,货品名称,货品名称匹配'%联想M9_'
需求: 查询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.分页

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

8.函数

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

9.分组

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

10.笛卡尔积

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

11.内连接查询

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

12.外连接查询

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

13.自连接查询

 自连接查询:
把一张表看成两张来做查询.
需求: 查询每个商品分类的名称和父分类名称: 隐式内连接:
SELECT sub.classify_name,super.classify_name
FROM product_classify super,product_classify sub
WHERE sub.parent_id = super.id 显示内连接:
SELECT sub.classify_name,super.classify_name
FROM product_classify super JOIN product_classify sub ON sub.parent_id = super.id

14.子查询

 什么是子查询(嵌套查询):一个查询语句中嵌套在另一个查询语句中,内层查询的结果可以作为外层查询条件或者临时表。
一般的,嵌套在WHERE或者FROM字句中。
为什么使用子查询:
多表连接查询过程:
1):两张表做笛卡尔积。
2):筛选匹配条件的数据记录。
若,笛卡尔积记录数比较大,可能造成服务器崩溃。
-----------------------------------------------------------------------
单行单列子查询:
需求: 查询零售价比联想MX1100更高的所有商品信息。
SELECT * FROM product
WHERE salePrice > (
SELECT salePrice FROM product WHERE productName = '联想MX1100'
)
单行多列子查询:
需求: 查询分类编号和折扣与联想M100相同的所有商品信息。
SELECT * FROM product
WHERE (dir_id,cutoff)=(
SELECT dir_id,cutoff FROM product WHERE productName = '联想M100'
)
多行多列子查询:
需求: 查询各商品分类的分类编号,分类名称,商品数量,平均零售价。 内连接:
SELECT pc.id, pc.classify_name,COUNT(p.id),AVG(p.sale_price) FROM product p JOIN product_classify pc ON p.classify_id = pc.id GROUP BY pc.id 产生的笛卡尔积记录:80条
SELECT COUNT(*) FROM product,product_classify 子查询:
SELECT pc.id,pc.classify_name,countNum,avgSalePrice FROM product_classify pc JOIN ( SELECT classify_id ,COUNT(id) countNum,AVG(sale_price) avgSalePrice FROM product GROUP BY classify_id) p ON pc.id = p.classify_id

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

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

举例:角色不能一样

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.基本增删改查操作
需求:添加一条数据到产品表 产品名称为苹果手机 卖价为5000
需求:删除产品表中id=20的数据
需求:删除产品表中id=20并且product_name='联想M115'的数据
需求:删除产品表中id=20或者product_name='联想M115'的数据
需求:删除产品表中product_name!='联想M115'的数据
需求:把成本价大于100的所有商品的卖价修改为200,并且把名称修改为特殊商品
需求:查询所有商品
需求:查询id<8的数据
需求:查询id<8的数据,只看id,产品名称,卖价 2.简单查询之列操作
需求:查询所有货品信息
需求:查询所有货品的id,product_name,sale_price
需求:查询商品的分类编号。
需求:查询所有货品的id,名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格)
需求:查询所有货品的id,名称和批发价(批发价=卖价*折扣)
需求:查询所有货品的id,名称,和各进50个的成本价(成本=cost_price)
需求:查询所有货品的id,名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格),并取别名
需求:查询所有货品的id,名称,各进50个,并且每个运费1元的成本(使用别名)
需求:查询所有货品名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格),
需求:查询商品的名字和零售价。格式:xxx商品的零售价为:xxx 3.带条件查询
需求: 查询货品零售价大于119的所有货品信息.
需求: 查询货品零售价为119的所有货品信息.
需求: 查询货品名为联想G9X的所有货品信息.
需求: 查询货品名 不为 联想G9X的所有货品信息.
需求: 查询分类编号不等于2的货品信息
需求: 查询货品名称,零售价小于等于200的货品
需求: 查询id,货品名称,批发价大于350的货品
需求: 选择id,货品名称,批发价在300-400之间的货品
需求: 选择id,货品名称,分类编号为2,4的所有货品
需求: 选择id,货品名词,分类编号不为2的所有商品
需求: 选择id,货品名称,分类编号的货品零售价大于等于250或者是成本大于等于200
需求: 选择id,货品名称,批发价在300-400之间的货品
需求: 选择id,货品名称,批发价不在300-400之间的货品
需求: 选择id,货品名称,分类编号为2,4的所有货品
需求: 选择id,货品名称,分类编号不为2,4的所有货品
需求: 查询商品名为NULL的所有商品信息。
需求: 查询id,货品名称,货品名称匹配'%联想M9_'
需求: 查询id,货品名称,分类编号,零售价大于等于200并且货品名称匹配'%联想M1__'
需求:选择id,货品名称,分类编号,零售价并且按零售价降序排序
需求: 选择id,货品名称,分类编号,零售价先按分类编号排序,再按零售价排序
需求:查询M系列并按照批发价排序(加上别名)
需求:查询分类为2并按照批发价排序(加上别名) 4.函数
需求:查询所有商品平均零售价
需求:查询商品总记录数
需求:查询分类为2的商品总数
需求:查询商品的最小零售价,最高零售价,以及所有商品零售价总和 5.分组
需求:查询每个商品分类编号和每个商品分类各自的平均零售价
需求:查询每个商品分类编号和每个商品分类各自的商品总数。
需求:查询每个商品分类编号和每个商品分类中零售价大于100的商品总数:
需求:查询零售价总和大于1500的商品分类编号以及总零售价和 6.综合查询
需求:查询所有的货品信息+对应的货品分类信息
需求:查询所有商品的名称和分类名称
需求: 查询货品id,货品名称,货品所属分类名称
需求: 查询零售价大于200的无线鼠标
需求: 查询零售价大于200的无线鼠标(使用表的别名)
需求: 查询每个货品对应的分类以及对应的库存
需求: 如果库存货品都销售完成,按照利润从高到低查询货品名称,零售价,货品分类(三张表).
需求: 查询每个商品分类的名称和父分类名称
需求: 查询零售价比联想MX1100更高的所有商品信息。
需求: 查询分类编号和折扣与联想M100相同的所有商品信息。
需求: 查询各商品分类的分类编号,分类名称,商品数量,平均零售价。

练习sql

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

  1.设计员工表

  2.设计部门表

  3.sql语句练习

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

  3.2查询各部门的平均工资

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

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

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

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

17.练习题sql语句答案

 CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product_name` varchar(50) DEFAULT NULL,
`classify_id` int(11) DEFAULT NULL,
`sale_price` double(10,2) DEFAULT NULL,
`supplier` varchar(50) DEFAULT NULL,
`brand` varchar(50) DEFAULT NULL,
`cutoff` double(2,2) DEFAULT NULL,
`cost_price` double(10,2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=utf8; 1.基本增删改查操作
需求:添加一条数据到产品表 产品名称为苹果手机 卖价为5000
INSERT INTO product (product_name,sale_price) VALUES ('苹果手机',5000); 需求:删除产品表中id=20的数据
DELETE FROM product WHERE id=20;
需求:删除产品表中id=20并且product_name='联想M115'的数据
DELETE FROM product WHERE id=20 AND product_name='联想M115'; 需求:删除产品表中id=20或者product_name='联想M115'的数据
DELETE FROM product WHERE id=20 OR product_name='联想M115'; 需求:删除产品表中product_name!='联想M115'的数据
DELETE FROM product WHERE product_name='联想M115'; 需求:把成本价大于100的所有商品的卖价修改为200,并且把名称修改为特殊商品
UPDATE product SET sale_price=200,product_name='特殊商品' WHERE cost_price>100 需求:查询所有商品
SELECT * FROM product 需求:查询id<8的数据
SELECT * FROM product WHERE id<8 需求:查询id<8的数据,只看id,产品名称,卖价 SELECT id,product_name,sale_price FROM product WHERE id<8 2.简单查询之列操作
需求:查询所有货品信息 SELECT * FROM product 需求:查询所有货品的id,product_name,sale_price
SELECT id,product_name,sale_price FROM product 需求:查询商品的分类编号。
SELECT classify_id FROM product 需求:查询所有货品的id,名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格) SELECT id,product_name,sale_price,cost_price,(sale_price-cost_price)*1 FROM product 需求:查询所有货品的id,名称和批发价(批发价=卖价*折扣)
SELECT id,product_name,sale_price,cutoff,(sale_price*cutoff) FROM product 需求:查询所有货品的id,名称,和各进50个的成本价(成本=cost_price)
SELECT id,product_name,cost_price,cost_price*50 FROM product 需求:查询所有货品的id,名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格),并取别名
SELECT id,product_name,sale_price,cost_price,(sale_price-cost_price)*1 每零售1个产品所赚取的钱 FROM product 需求:查询所有货品的id,名称,各进50个,并且每个运费1元的成本(使用别名)
SELECT id,product_name,cost_price,(cost_price+1)*50 成本 FROM product 需求:查询所有货品名称和每零售1个产品所赚取的钱(每零售1个产品所赚取的钱=零售价-成本价格)
SELECT product_name,sale_price,cost_price,(sale_price-cost_price) 利润 FROM product 需求:查询商品的名字和零售价。格式:xxx商品的零售价为:xxx SELECT product_name,'商品的零售价为:',sale_price FROM product
SELECT CONCAT(product_name,'商品的零售价为:',sale_price) FROM product 3.带条件查询
需求: 查询货品零售价大于119的所有货品信息.
SELECT * FROM product WHERE sale_price>119 需求: 查询货品零售价为119的所有货品信息.
SELECT * FROM product WHERE sale_price=119 需求: 查询货品名为联想G9X的所有货品信息.
SELECT * FROM product WHERE product_name='联想G9X' 需求: 查询货品名 不为 联想G9X的所有货品信息.
SELECT * FROM product WHERE product_name !='联想G9X' 需求: 查询分类编号不等于2的货品信息 SELECT * FROM product WHERE classify_id!=2 需求: 查询货品名称,零售价小于等于200的货品 SELECT product_name,sale_price FROM product WHERE sale_price=200 需求: 查询id,货品名称,批发价大于350的货品 SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff>350 需求: 选择id,货品名称,批发价在300-400之间的货品
SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff>300 AND sale_price*cutoff<400 需求: 选择id,货品名称,分类编号为2,4的所有货品
SELECT id, product_name,classify_id FROM product WHERE classify_id=2 OR classify_id=4 SELECT id, product_name,classify_id FROM product WHERE classify_id IN (2,4) # (推荐使用这种) 需求: 选择id,货品名词,分类编号不为2的所有商品
SELECT id, product_name,classify_id FROM product WHERE classify_id !=2 # (推荐使用这种) SELECT id, product_name,classify_id FROM product WHERE classify_id NOT IN (2) 需求: 选择id,货品名称,分类编号的货品零售价大于等于250或者是成本大于等于200 SELECT id, product_name,classify_id FROM product WHERE sale_price>=250 OR cost_price>=200
需求: 选择id,货品名称,批发价在300-400之间的货品
SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff>300 AND sale_price*cutoff<400 #推荐这种 SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff BETWEEN 300 AND 400 需求: 选择id,货品名称,批发价不在300-400之间的货品 SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff<=300 OR sale_price*cutoff>=400 #推荐这种 SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff NOT BETWEEN 300 AND 400 需求: 选择id,货品名称,分类编号为2,4的所有货品
SELECT id, product_name,classify_id FROM product WHERE classify_id=2 OR classify_id=4 SELECT id, product_name,classify_id FROM product WHERE classify_id IN (2,4) # (推荐使用这种) 需求: 选择id,货品名称,分类编号不为2,4的所有货品
SELECT id, product_name,classify_id FROM product WHERE classify_id!=2 AND classify_id!=4 SELECT id, product_name,classify_id FROM product WHERE classify_id NOT IN (2,4) # (推荐使用这种) 需求: 查询商品名为NULL的所有商品信息。
SELECT * FROM product WHERE product_name IS NULL SELECT * FROM product WHERE product_name = NULL (这是错误的写法 必须重视,初学者很容易犯错) 需求: 查询id,货品名称,货品名称匹配'%联想M9_'
SELECT id, product_name FROM product WHERE product_name LIKE '%联想M9_' 需求: 查询id,货品名称,分类编号,零售价大于等于200并且货品名称匹配'%联想M1__'
SELECT id, product_name,classify_id,sale_price FROM product WHERE product_name LIKE '%联想M1__' AND sale_price>=200 需求:选择id,货品名称,分类编号,零售价并且按零售价降序排序
SELECT id, product_name,classify_id,sale_price FROM product ORDER BY sale_price DESC (默认的ASC是升序)
SELECT id, product_name,classify_id,sale_price FROM product ORDER BY sale_price ASC 需求: 选择id,货品名称,分类编号,零售价先按分类编号排序,再按零售价排序
SELECT id, product_name,classify_id,sale_price FROM product ORDER BY classify_id ASC ,sale_price ASC 需求:查询M系列并按照批发价排序(加上别名) #ORDER BY sc 可以使用别名,因为执行select在执行order。。by..
SELECT id, product_name,classify_id,sale_price,cutoff,(sale_price*cutoff) sc FROM product WHERE product_name LIKE '%M%' ORDER BY sc 需求:查询分类为2并按照批发价排序(加上别名) SELECT id, product_name,classify_id,sale_price,cutoff,(sale_price*cutoff) sc FROM product WHERE classify_id=2 ORDER BY sc 4.函数
需求:查询所有商品平均零售价 SELECT AVG(sale_price) FROM product 需求:查询商品总记录数
SELECT COUNT(1) FROM product 需求:查询分类为2的商品总数
SELECT COUNT(1) FROM product WHERE classify_id=2 需求:查询商品的最小零售价,最高零售价,以及所有商品零售价总和 SELECT MIN(sale_price),MAX(sale_price),SUM(sale_price) FROM product 5.分组
需求:查询每个商品分类编号和每个商品分类各自的平均零售价 SELECT classify_id,AVG(sale_price) FROM product GROUP BY classify_id 需求:查询每个商品分类编号和每个商品分类各自的商品总数。
SELECT classify_id,COUNT(1) FROM product GROUP BY classify_id 需求:查询每个商品分类编号和每个商品分类中零售价大于100的商品总数:
SELECT classify_id,COUNT(1) FROM product WHERE sale_price>100 GROUP BY classify_id 需求:查询零售价总和大于1500的商品分类编号以及总零售价和 SELECT classify_id,SUM(sale_price) s FROM product GROUP BY classify_id HAVING s>1500 6.综合查询
需求:查询所有的货品信息+对应的货品分类信息 SELECT * FROM product p LEFT JOIN product_classify pc ON (p.classify_id=pc.id) 需求:查询所有商品的名称和分类名称 SELECT p.product_name,pc.classify_name FROM product p LEFT JOIN product_classify pc ON (p.classify_id=pc.id) 需求: 查询货品id,货品名称,货品所属分类名称
SELECT p.id,p.product_name,pc.classify_name FROM product p LEFT JOIN product_classify pc ON (p.classify_id=pc.id) 需求: 查询零售价大于200的无线鼠标
SELECT p.id,p.product_name,pc.classify_name,p.sale_price
FROM product p LEFT JOIN product_classify pc ON (p.classify_id=pc.id)
WHERE p.sale_price>200 AND pc.classify_name='无线鼠标' 需求: 查询零售价大于200的无线鼠标(使用表的别名)
SELECT p.id,p.product_name,pc.classify_name,p.sale_price
FROM product p LEFT JOIN product_classify pc ON (p.classify_id=pc.id)
WHERE p.sale_price>200 AND pc.classify_name='无线鼠标' 需求: 查询每个货品对应的分类以及对应的库存
SELECT *
FROM product p
LEFT JOIN product_classify pc ON (p.classify_id=pc.id)
LEFT JOIN product_stock ps ON (ps.product_id=p.id) 需求: 如果库存货品都销售完成,按照利润从高到低查询货品名称,零售价,货品分类(三张表).
SELECT p.product_name,p.sale_price,pc.classify_name,(p.sale_price-p.cost_price)*ps.store_num c
FROM product p
LEFT JOIN product_classify pc ON (p.classify_id=pc.id)
LEFT JOIN product_stock ps ON (ps.product_id=p.id)
ORDER BY c DESC 需求: 查询每个商品分类的名称和父分类名称 SELECT *
FROM product_classify a
LEFT JOIN product_classify b ON (a.parent_id=b.id) 需求: 查询零售价比联想MX1100更高的所有商品信息。 SELECT sale_price FROM product WHERE product_name='联想MX1100' #sale_price=119 SELECT * FROM product WHERE sale_price>119 使用的是子查询 SELECT * FROM product WHERE sale_price>(SELECT sale_price FROM product WHERE product_name='联想MX1100' ) 需求: 查询分类编号和折扣与联想M100相同的所有商品信息。 SELECT classify_id,cutoff FROM product WHERE product_name='联想M100' SELECT * FROM product WHERE (classify_id,cutoff) = (3,0.9) #单行多列 子查询 最后:
SELECT * FROM product WHERE (classify_id,cutoff) = (SELECT classify_id,cutoff FROM product WHERE product_name='联想M100') 需求: 查询各商品分类的分类编号,分类名称,商品数量,平均零售价。 SELECT p.classify_id,pc.classify_name,COUNT(1),AVG(p.sale_price)
FROM product p
LEFT JOIN product_classify pc ON (p.classify_id=pc.id)
GROUP BY p.classify_id

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