Python-MySQL学习笔记(二):表记录查询(1)

前一篇中最后对部分对数据表进行了简单对查询操作,但在实际应用中,很大一部分工作都是在对数据库进行查询操作,即对数据表记录的查询。


环境
PyCharm Professional 2018.3.1 + MySQL Community 8.0.15


创建一张表
打开MySQL服务后,进入数据库,创建表 “exam_result” :

-- 创建表
CREATE TABLE exam_result(
    	id INT PRIMARY KEY AUTO_INCREMENT,  -- 主键
   	 	name VARCHAR(20),  -- 姓名
    	JS DOUBLE,  -- JS 成绩
    	Django DOUBLE,  -- Django 成绩
    	Python DOUBLE  --   Python 成绩
);

-- 插入表记录
INSERT INTO exam_result VALUES (1,"Alia",87,78,91),
                               (2,"John",75,83,96),
                               (3,"Downey",98,91,87),
                               (4,"Lee",99,83,95),
                               (5,"Manda",71,65,80),
                               (6,"Karla",61,59,100);

查看所有表记录——SELECT * FROM tab_name;

SELECT * FROM exam_result;

exam_result 表记录


查看表记录中的一列——SELECT col_name FROM tab_name;

SELECT name FROM exam_result;

”name“ 列
DISTICT关键字——去除重复,保留不同
在表记录中,可能会包含重复值,有时我们希望仅仅列出不同的值,就需要使用 DISTICT关键词。
首先我在 “exam_result” 中添加几个重复值:

INSERT INTO exam_result VALUES (7,"Alia",72,94,86),
                               (8,"Alia",71,94,53),
                               (9,"Lee",100,94,95);

SELECT * FROM exam_result;

含重复信息的表记录
使用 “DISTICT” 关键字:

SELECT DISTINCT name FROM exam_result;

使用DISTICT关键字
AS 关键字——更改字段名
在显示时使用 “AS" 关键字可以更改字段名,可以省略,使用空格替代(建议保留AS关键字)。
注意: “AS” 关键字仅仅更改显示内容,不会改变数据表对内容。

SELECT name AS 姓名, JS JS成绩, Python+10 AS Python成绩 FROM exam_result;

使用AS关键字
WHERE字句——进行过滤查询
“WHERE” 字句可以对查询信息进行过滤,字句中可以使用:

  • 比较运算符: > 、< 、= 、<= 、>= 、!= 、<>
    BETWEEN 80 AND100—— 值在80到100之间
    IN(80,90,100)—— 值为80、90、100
    LIKE ‘Alia%’—— pattern 可以是 “%” 或 “_”,如果是 % 则表示任意多字符,如果是 _ 则表示一个字符
SELECT name,JS FROM exam_result WHERE JS BETWEEN 75 AND 95;
SELECT name,JS FROM exam_result WHERE JS IN (71,85,90);
SELECT name,JS FROM exam_result WHERE name LIKE 'A%';
SELECT name,JS FROM exam_result WHERE name LIKE 'Le_';

between
in
任意字符
单字符

  • 逻辑运算符:在多个条件下,可以直接使用逻辑运算符 and、or、not
SELECT name,JS,Django FROM exam_result WHERE JS >80 AND Django != 100;

在这里插入图片描述
ORDER BY——指定排序的列
默认升序(ASC):

SELECT name,JS,Django FROM exam_result WHERE JS >80 ORDER BY Django;

在这里插入图片描述
降序为(DESC):

SELECT name,JS,Django FROM exam_result WHERE JS >80 ORDER BY Django DESC;

在这里插入图片描述
按总成绩排序:

SELECT name,JS+Django+Python as 总成绩 FROM  exam_result ORDER BY 总成绩;

在这里插入图片描述
GROUP BY字句 —— 分组查询
注意:

  • 按分组条件分组后每一组只会显示第一条记录
  • MySQL5.7 及更高版本对 GROUP BY 的使用与此前略有不同。
    我自己使用的时MySQL8.0.11,在使用语句SELECT * FROM exam_result GROUP BY name;进行查询时,会出现这样的报错:
    group by 报错
    查找了原因,是MySQL5.7对"GROUP BY"进行了一定的限制(sql_mode 默认开启 “ONLY_FULL_GROUP_BY”),使得 “GROUP BY” 中的列一定要出现在 “SELECT” 中。
    网上有几种解决方法,但我只有使用console更改"sql_mode"成功的方法成功了。
    在这里插入图片描述
    需要了解更多请阅读官方文档:
    MySQL 5.7 聚合功能描述
    MySQL 8.0 聚合功能描述

  • 书写顺序为 SELECT + WHERE + ORDER BY
  • MySQL 在执行sql语句是对执行顺序为:FROM、WHERE、SELECT、GROUP BY、HAVING、ORDER BY

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值