Mysql的初体验

声明一下,下面的内容仅代表个人的理解,有问题可以提出,谢谢

1.运行程序时遇到的问题

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your My

请添加图片描述
此时可以看到product_name下出现波浪线,说明出错是在这个位置,主要问题是因为没有使用空格,而是使用了Tab进行缩进

2.在代码写入后发现列表里面没有更新
在这里插入图片描述
在上图圈出来的地方进行刷新就会出现了(注:如果刷新了,create就会出错,所以需要drop掉之前创建的)
3.

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE tha

(1)在代码里面加入

SET SQL_SAFE_UPDATES = 0;

(2)有些时候是因为数据没有初始化造成,所以初始化后,也可以避免报错

4.在workbench里面可视化生成表
方法1:
在这里插入图片描述
点击圈起来的部分就可以看见了
方法2:

SELECT * FROM (表名)

5.视图与表的区别

两者就好比excel里面一些文件仅可读,无法写入,一些文件即可以写入又可以进行读取。视图就是类似于只可读文件,而表就是类似于可读可写文件。
子查询也是建立在视图的基础上,如果想要使用子查询,就需要先建立一个视图,然后进行子查询

6.主键约束

在创建表TABLE的时候,总是会存在一行专门定义为priamry key。这个就表示这一列的内容不能重复,每一个元素代表对应的行。可以通过主键约束行找到某一行

7.查找表中的一部分数据
可以使用where (列名) in(数据)

8.行转列

1.当待转换列为数字时,可以使用SUM AVG MAX MIN等聚合函数+(case when then)
sum表示和,avg表示平均
2.当待转换列为文本时,可以使用MAX MIN等聚合函数+(case when then)

9.外连接中的左右连接区分

左右连接取决与select中的哪些元素,前几列来自那个表。左即对应着前几列对应的表,为主表,左连接就是使得左边几列的数据保持一致,右边列的数据可以不一致。右即对应着后几列对应的表,右连接就是使得右边几列的数据保持一致,左边列的数据可以不一致。

SP.shop_id
       ,SP.shop_name
       ,SP.product_id
       ,P.product_name
       ,P.sale_price

上面就是当为左连接时,sp为主表;当为右连接时,p为主表

10.表与表的增加:列增加与行增加

列增加通常使用union
行则使用inner join、left outer join、cross join

 SELECT SP.*, P.*
  FROM ShopProduct AS SP 
 inner JOIN Product AS P;
 -- colunms add
 select *
  from product as p1
  where p1.sale_price > 500
  union
  select *
  from product2 as p2
  where p2.sale_price > 500;

-- rows add
 select *
  from product as p1
  inner join(select * from product2 
         where  sale_price>500)as p2
   on p2.product_id=p1.product_id;	

11.当聚合函数在窗口函数中使用

sum() / avg() over (order by)按照从上到下进行加减乘除

sum(sale_price) over(order by product_id) as sum_price

在这里插入图片描述

sum列 1000+500+4000+3000

当加入移动函数时,则加减乘除也是在限定的行数内
分为proceding,between,following

sum(sale_price) over(order by product_id rows 2 preceding) as sum_price

在这里插入图片描述

由上图知,加的范围是前两行与当前行,如果前面没有,则默认为0
1000+0+0
500+1000+0
4000+500+1000

12.select的执行是在group by之后执行的,如果想要显示某一列的最大值,同时将该行指出。即在显示某一行在某个数据最大或最小时,无法直接使用max或者min结合group by来执行得到,需要结合其他的才能够得到正确结果
错误示范
在这里插入图片描述

上图本来打算显示每个部门中最高的薪资对应的人,但是由于max控制的只有salary列,无法控制name列,该列的数据属于随机分配

正确示例

 SELECT name, salary 
 from employee
 where salary in (select MAX(salary) AS max_salary
                             From Employee
                      GROUP BY  departmentID);

13.当想要查看表格某一列(平均值或者最大值),并且增加一列来显示该数据,可以使用关联子查询

create view sale_price_al(product_id,product_name,product_type,sale_price,sale_price_all)
as
 SELECT product_id,
       product_name,product_type,
       sale_price,
       (SELECT AVG(sale_price) FROM product) AS avg_price-- 这部分就是增加的列
  FROM product;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值