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 需求: 查询各商品分类的分类编号,分类名称,商品数量,平均零售价。
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
到此数据库第一阶段课程类容就完了,每一位学习者必须认真的把博客上的需求写完整,然后我们做一个习题讲解!
来源:oschina
链接:https://my.oschina.net/u/4263875/blog/4219037