datawhale9月组队学习task02基础查询与排序
Posted 临风而眠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了datawhale9月组队学习task02基础查询与排序相关的知识,希望对你有一定的参考价值。
datawhale9月组队学习task02基础查询与排序
文章目录
先启动mysql,之前一直都是右键此电脑,去管理那里手动启动的…
以后直接在终端操作吧(别忘了要以管理员方式启动)
▲|O(∩_∩)O|▲ 补充学习:执行SQL脚本
一开始没发现给的GitHub教程里面有一个shop.sql文件
然后学到
AND、 OR
那里发现按理说不应该全都INSERT INTO
进去之后发现之后,发现没有download按钮,只能复制
然后突然想到那个方法 :在github后面加上1s
然后右键download ✌
然后打开sql文件一看,CREATE DATABASE shop
那我决定我先把我建立的shop删掉:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-97UZmTKx-1631817803733)(C:\\Users\\86171\\AppData\\Roaming\\Typora\\typora-user-images\\image-20210916234025697.png)]
额,发现其实也不用删
他会先把表删掉重建…
命令行执行SQL脚本
参考教程:https://blog.csdn.net/S0001100/article/details/106408024
datagrip执行sql脚本
复制一个sql脚本,把里面的shop改成shop2
👉参考教程
-
找到sql脚本
-
右键点击run
-
麻了
-
原来就是在这里加一个target data source 啊,点加号选一个就行
因为这个问题搜了这个教程https://blog.csdn.net/xiaocy66/article/details/82766635
顺便回忆起了之前是怎么用datagrip连到mysql的
如图:
成功了!
navicat执行sql脚本
复制一个sql脚本,把里面的shop改成shop3
👉参考教程
-
右键 选择运行sql文件
-
选择文件,点击开始
-
点击开始
-
再点击开始
-
检查下子
有shop3了
迷惑!!!
上面的navicat和datagrip搞出来的都???…
难道是因为和shop太像了??
-
那就先把命令行里搞出来的shop先删掉,然后再用可视化工具试一试吧
-
非也!无意间看到navicat报错,赶紧打开sql脚本
-
是sql代码没改好!
-
下一句也要改成shop2…
-
相应的那个shop3也是
-
-
OK 都OK了
一.SELECT语句基础
1.从表中选取数据
SELECT语句
-
SELECT 顾名思义,是选择的意思
-
SELECT语句用于从数据库中选取数据
- 结果被存储在一个结果表中,称为结果集
-
基本语法:
SELECT column_name,column_name FROM table_name;
与
SELECT * FROM table_name;
- 其中,SELECT子句中列举了希望从表中查询出的列的名称,而FROM子句则指定了选取出数据的表的名称
*
表示全部列的意思
-
SQL语句可以使用
AS
关键字为列设定别名-
设定汉语别名时要双引号
-
如:
日常低级错误了属于是…
product_name又是忘记下划线,又是d写成c 🙄🙄
而且试了六七次才发现 🤯
-
-
SELECT语句中使用DISTINCT可以删除重复行(去重)
-
语法:
SELECT DISTINCT column_name,column_name FROM table_name;
-
对比MongoDB相关操作
-
MongoDB 中的集合与 SQL 数据库中的表相同
- 像本教程里的表prodcuct在mongodb里面就叫集合
-
MongoDB 中的文档与 SQL 数据库中的记录相同
-
选取数据:
- db.集合名称.find()
- db是当前数据库
- 先要用use 选取
- MySQL也要用use先选取数据库
- db.集合名称 就相当于MySQL的FROM <表名>
- 先要用use 选取
-
去重:
-
db.集合名称.distinct(‘去重字段’,{条件})
- 这里的字段就相当于MySQL的列名
-
2.从表中选取符合条件的数据
WHERE语句
-
语法:
SELECT <列名>, …… FROM <表名> WHERE <条件表达式>;
- 条件表达式就是:
列名 运算符 值👇
SELECT column_name,column_name FROM table_name WHERE column_name operator value;
- 例
- 条件表达式就是:
对比MongoDB相关操作
-
mongodb的条件查询
- db.集合名称.find({条件文档})
-
mongodb中也有where ,是用于自定义查询
-
是使用
$where
,在$where
后面写一个函数 -
如 返回年龄大于30的
db.stu.find({ $where:function() { return this.age>30;} })
-
二.算术运算符和比较运算符
1.算术运算符
- 加 +
- 减 -
- 乘 *
- 除 /
2.比较运算符
- 相等 =
- 不相等 <>
- 大于等于 >=
- 大于 >
- 小于等于 <
- 小于 <
上面WHERE 语句条件表达式里面就用到了
3.常用法则
-
SELECT 语句可以使用常数或者表达式
注意AS重命名的列名若有空格则也需要加双引号
-
需要注意等号和不等号的位置
-
字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小混淆
-
先创建一个表
-
插入几条记录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-McNwMklB-1631817803760)(https://cdn.jsdelivr.net/gh/xin007-kong/picture_new/img/20210916173413.png)]
INTO 又写成INFO…🙄
-
看看插入了哪些
-
-
-
查询
111比2大,但“2”比“111”大
-
-
希望选取NULL记录时,需要在条件表达式中使用IS NULL运算符。希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL运算符
三.逻辑运算符
1.NOT
-
表示否定
- 比 不等号 <> 运算符应用范围广
-
例
选出销售单价大于等于1000的记录 及其 否定(小于1000)
2.AND、OR
- AND 相当于取交集
- OR 相当于取并集
括号优先处理
- AND运算符优先于OR运算符
- 用括号可以做到优先执行OR运算
mysql> SELECT product_name, product_type, regist_date
-> FROM product
-> WHERE product_type = '办公用品'
-> AND (regist_date ='2009-09-11'
-> OR regist_date ='2009-09-20');
3.真值表
- 可以用真值表梳理逻辑关系
- 三个运算符 NOT、AND 和 OR 称为逻辑运算符。这里所说的逻辑就是对真值进行操作的意思
- 最近正在学数电 刚学过真值表🤭
- 真值就是值为真(TRUE)或假 (FALSE)其中之一的值
含NULL时的真值
-
NULL的真值结果既不为真,也不为假,因为并不知道这样一个值
-
这时真值是除真假之外的第三种值——不确定(UNKNOWN)
-
一般的逻辑运算并不存在这第三种值。SQL 之外的语言也基本上只使用真和假这两种真值。与通常的逻辑运算被称为二值逻辑相对,只有 SQL 中的逻辑运算被称为三值逻辑
-
三值逻辑:
四.对表进行聚合查询
1.聚合函数
SQL中用于汇总的函数叫做聚合函数。以下五个是最常用的聚合函数:
-
计算全部数据的行数
SELECT COUNT(*) FROM product;
-
计算NULL 以外数据的行数
将 COUNT(*) 的参数改成指定对象的列,就可以得到该列的 非 NULL 行数
SELECT COUNT(purchase_price) FROM product;
-
计算销售单价和进货单价的合计值
SELECT SUM(sale_price), SUM(purchase_price)
FROM product;
-
计算售价和进价的平均值
SELECT AVG(sale_price), AVG(purchase_price) FROM product;
-
MIN MAX
-
对字符串也可
中文不知道按什么法则排序的
-
使用聚合函数删除重复值
-
计算去重后的数据行数
SELECT COUNT(DISTINCT product_type) FROM product;
mysql> SELECT COUNT(DISTINCT purchase_price) -> FROM product;
-
SUM函数
-
2.常用法则
3.对比MongoDB相关操作
-
mongodb管道命令
五.对表进行分组
1.GROUP BY 语句
-
基本语法
SELECT <列名1>,<列名2>, <列名3>, …… FROM <表名> GROUP BY <列名1>, <列名2>, <列名3>, ……;
-
试试水
-- 按照商品种类统计数据行数 SELECT product_type, COUNT(*) FROM product GROUP BY product_type; -- 不含GROUP BY SELECT product_type, COUNT(*) FROM product
- 在 GROUP BY 子句中指定的列称为聚合键或者分组列
聚合键中包含NULL时
-
purchase_price作为聚合键举例
SELECT purchase_price, COUNT(*) FROM product GROUP BY purchase_price;
此时会将NULL作为一组特殊数据进行处理
GROUP BY书写位置
在WHERE子句中使用GROUP BY
SELECT purchase_price, COUNT(*)
FROM product
WHERE product_type = '衣服'
GROUP BY purchase_price;
2.常见错误
3.对比MongoDB相关操作
👉之前整理过的MongoDB博客链接
六.为聚合结果指定条件
1.用HAVING得到特定分组
- 将表使用GROUP BY分组后,怎样才能只取出其中两组?
- WHERE不可行,
- WHERE子句只能指定记录(行)的条件,而不能用来指定组的条件(例如,“数据行数为 2 行”或者“平均值为 500”等)
2.HAVING特点
- HAVING子句用于对分组进行过滤,可以使用数字、聚合函数和GROUP BY中指定的列名(聚合键)
-
注意错误形式
七.对查询结果进行排序
1.ORDER BY
-
SQL中的执行结果是随机排列的,当需要按照特定顺序排序时,可已使用ORDER BY子句
-
语法:
SELECT <列名1>, <列名2>, <列名3>, …… FROM <表名> ORDER BY <排序基准列1>, <排序基准列2>, ……
-
默认为升序排列,降序排列为DESC
- 多个排序键
- 当用于排序的列名中含有NULL时,NULL会在开头或末尾进行汇总
2. ORDER BY中列名可使用别名
3.ORDER BY 排序列中存在 NULL 时,指定其出现在首行或者末行的方式
八.练习题
1.第一部分
SELECT product_name,regist_date
FROM product
WHERE regist_date >'2009-04-28';
-
全都会无结果
判断是否为空要写
IS NULL
或者IS NOT NULL
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jIkgBIbu-1631817803794)(https://cdn.jsdelivr.net/gh/xin007-kong/picture_new/img/20210917012450.png)]
-
SELECT product_name, sale_price, purchase_price FROM product WHERE sale_price-purchase_price >= 500;
另一种就是取其反面再否定了
SELECT product_name, sale_price, purchase_price FROM product WHERE NOT sale_price-purchase_price < 500;
2.第二部分
-
SUM只能针对数值型
-
WHERE 只能指定记录的条件,不能指定组的条件
-
写一个能执行的:
对着下面的product表全貌理解再理解一下
mysql> SELECT product_type,SUM(purchase_price) AS sum ,SUM(sale_price) AS sum
-> FROM product
-> GROUP BY product_type
-> HAVING SUM(sale_price)>SUM(purchase_price)*1.5
-> ;
mysql> SELECT product_id,product_name,product_type,sale_price,purchase_price,regist_date
-> FROM product
-> ORDER BY regist_date DESC,purchase_price;
九.总结
别忘了先打开MySQL服务
没打开MySQL服务之前,像datagrip这些可视化工具连不上的
执行脚本
暑假接触了.bat脚本
脚本可以把那些要实现的功能都写进去
直接跑shop.sql的时候感觉还蛮神奇的
以上是关于datawhale9月组队学习task02基础查询与排序的主要内容,如果未能解决你的问题,请参考以下文章