python--MySql 表记录的操作
表记录的增删改查
---插入表记录
全列插入:insert into 表名 values(...)
缺省插入:insert into 表名(列1,...) values(值1,...)
-- 插入一条数据 INSERT
INSERT [INTO] table_name (字段名称,...) VALUES(值,...);
---插入多条数据 INSERT
INSERT [INTO] table_name (字段名称,...) VALUES(值,...),
(值,...),
...
(值,...);
--SET插入
INSERT [INTO] table_name SET 字段名=值
---修改表记录 UPDATE
UPDATE table_name SET 字段=值,字段=值... WHERE 字句;
/* UPDATE语法可以用新值更新原有表行中的各列。 SET子句指示要修改哪些列和要给予哪些值。 WHERE子句指定应更新哪些行。 如没有WHERE子句,则更新所有的行。*/
---删除表记录
DELETE FROM table_name [WHERE 字句];
/*
如果不跟where语句则删除整张表中的数据
delete只能用来删除一行记录
delete语句只能删除表中的内容,不能删除表本身,想要删除表,用drop
TRUNCATE TABLE也可以删除表中的所有数据,此语句首先摧毁表,再新建表。此种方式删除的数据不能在
事务中恢复。*/
TRUNCATE TABLE table_name;
查询表记录(重点)
准备表和记录:
CREATE TABLE table_name (
字段名称 字段数据类型 [约束],
字段名称 字段数据类型 [约束],
...
字段名称 字段数据类型 [约束],
);
INSERT [INTO] table_name (字段名称,...) VALUES (值,...),
(值,...),
...
(值,...);
-- 查询语法:
SELECT *|field1,filed2 ... FROM table_name
WHERE 条件
GROUP BY field
HAVING 筛选
ORDER BY field
LIMIT 限制条数
对比where与having
- where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
- having是对group by的结果进行筛选
简单查询
-- (1)select [distinct] *|field1,field2,...... from table_name
-- 其中from指定从哪张表筛选,*表示查找所有列,也可以指定一个列
-- 表明确指定要查找的列,distinct用来剔除重复行。
-- (2)select 也可以使用表达式,并且可以使用: 字段 as 别名或者:字段 别名
注意:不加逗号的后果:
select name,JS from ExamResult;(√)
select name JS from ExamResult; -- what will happen?---->记得加逗号
使用where子句,进行过滤查询
where子句中可以使用:
-- 比较运算符:
> < >= <= <> != (后面两条都是表示不等于)
between 80 and 100 值在80到100之间
in(80,90,100) 值是80或90或100
like 'yuan%'
like '李___'
/* %表示任意多字符 _表示一个字符,两个_则表示两个字符:__ */
-- 逻辑运算符
在多个条件之间可以使用逻辑运算符 and or not
优先级
- 小括号,not,比较运算符,逻辑运算符
- and比or先运算,如果同时出现并希望先算or,需要结合()使用
order by排序
指定排序的列,排序的列既可是表中的列名,也可以是select 语句后指定的别名。
select *|field1,field2... from tab_name order by field [Asc|Desc]
-- Asc 升序、Desc 降序,其中asc为默认值 ORDER BY 子句应位于SELECT语句的结尾。
group by分组查询
--按照字段分组,表示此字段相同的数据会被放到一个组中
--分组后,只能查询出相同的数据列,对于有差异的数据列无法出现在结果集中
--可以对分组后的数据进行统计,做聚合运算
-- 注意,按分组条件分组后每一组只会显示第一条记录
-- group by字句,其后可以接多个列名,也可以跟having子句,对group by 的结果进行筛选。
/*
having 和 where两者都可以对查询结果进行进一步的过滤,差别有:
<1>where语句只能用在分组之前的筛选,having可以用在分组之后的筛选;
<2>使用where语句的地方都可以用having进行替换
<3>having中可以用聚合函数,where中就不行。
*/
-- GROUP_CONCAT() 函数
SELECT id,GROUP_CONCAT(name),GROUP_CONCAT(JS) from ExamResult GROUP BY id;
聚合函数
--<1> 统计表中所有记录 -- COUNT(列名):统计行的个数
-- SUM(列名):统计该列的和
-- AVG(列名):统计该列平均值
-- Max(列名)、Min(列名):统计该列的最大值和最小值
limit记录条数限制
SELECT * from ExamResult limit 1;
SELECT * from ExamResult limit 2,5; -- 跳过前两条显示接下来的五条纪录
SELECT * from ExamResult limit 2,2;
正则表达式
SELECT * FROM employee WHERE emp_name REGEXP '^yu'; SELECT * FROM employee WHERE emp_name REGEXP 'yun$'; SELECT * FROM employee WHERE emp_name REGEXP 'm{2}';
练习
1、创建成绩表,字段包括:学生姓名,语文成绩,数学成绩,英语成绩 向表中插入多条数据;
查询: (1) 查询所有学生的数学成绩和总成绩 (2) 查询所有学生的语文和数学成绩和,按从高到低排序 (2) 查询班级总成绩最高的学生姓名 (3) 查询班里所有姓李学生的总成绩最高的姓名
2、创建一张某超市的购物表,字段包括:商品名,购物价格,商品生茶日期,商品分类; 向该表中插入多条数据; 查询:(1)每一类商品花的总价格 (2)统计每类商品各有多少件 (2)统计水果花了多少钱(两种方式实现) (3)统计购买的2017-01-12日生产的商品中价格最贵的商品(插入的数据中包括2017-01-12生产的商品) (4)统一购买商品的总价格
1.
CREATE TABLE score_form (
name VARCHAR(20),
Chinese_score int,
Math_score int,
English_score int);
INSERT INTO score_form (name,Chinese_score,Math_score,English_score)
VALUES ('alex',98,90,78),
('egon',90,78,90),
('yuanhao',90,89,78),
('wusir',98,96,89),
('李红',94,85,78),
('张三',90,99,68),
('李小龙',99,100,100),
('王小花',99,86,72),
('李佳',72,90,88),
('猪猪',67,60,58),
('李青',40,98,95),
('赵敏',70,89,91);
mysql> select * from score_form;
+---------+---------------+------------+---------------+
| name | Chinese_score | Math_score | English_score |
+---------+---------------+------------+---------------+
| alex | 98 | 90 | 78 |
| egon | 90 | 78 | 90 |
| yuanhao | 90 | 89 | 78 |
| wusir | 98 | 96 | 89 |
| 李红 | 94 | 85 | 78 |
| 张三 | 90 | 99 | 68 |
| 李小龙 | 99 | 100 | 100 |
| 王小花 | 99 | 86 | 72 |
| 李佳 | 72 | 90 | 88 |
| 猪猪 | 67 | 60 | 58 |
| 李青 | 40 | 98 | 95 |
| 赵敏 | 70 | 89 | 91 |
+---------+---------------+------------+---------------+
12 rows in set mysql> SELECT name,Math_score,Chinese_score+Math_score+English_score 总分 FROM score_form;
+---------+------------+------+
| name | Math_score | 总分 |
+---------+------------+------+
| alex | 90 | 266 |
| egon | 78 | 258 |
| yuanhao | 89 | 257 |
| wusir | 96 | 283 |
| 李红 | 85 | 257 |
| 张三 | 99 | 257 |
| 李小龙 | 100 | 299 |
| 王小花 | 86 | 257 |
| 李佳 | 90 | 250 |
| 猪猪 | 60 | 185 |
| 李青 | 98 | 233 |
| 赵敏 | 89 | 250 |
+---------+------------+------+
12 rows in set mysql> SELECT name,Chinese_score+Math_score 语文和数学成绩总分 FROM score_form ORDER BY Chinese_score+Math_score DESC; +---------+--------------------+
| name | 语文和数学成绩总分 |
+---------+--------------------+
| 李小龙 | 199 |
| wusir | 194 |
| 张三 | 189 |
| alex | 188 |
| 王小花 | 185 |
| yuanhao | 179 |
| 李红 | 179 |
| egon | 168 |
| 李佳 | 162 |
| 赵敏 | 159 |
| 李青 | 138 |
| 猪猪 | 127 |
+---------+--------------------+
12 rows in set mysql> SELECT name,Chinese_score+Math_score+English_score 总分 FROM score_form ORDER BY Chinese_score+Math_score+English_score DESC LIMIT 1; +--------+------+
| name | 总分 |
+--------+------+
| 李小龙 | 299 |
+--------+------+
1 row in set mysql> SELECT name,Chinese_score+Math_score+English_score 总分 FROM score_form WHERE name LIKE '李%' ORDER BY Chinese_score+Math_score+English_score DESC LIMIT 1; +--------+------+
| name | 总分 |
+--------+------+
| 李小龙 | 299 |
+--------+------+
1 row in set
(2) 查询班级总成绩最高的学生姓名
两种方式:
1.
mysql> SELECT name,Chinese_score+Math_score+English_score 总分 FROM score_form ORDER BY Chinese_score+Math_score+English_score DESC LIMIT 1; +--------+------+
| name | 总分 |
+--------+------+
| 李小龙 | 299 |
+--------+------+
1 row in set 2.
mysql> SELECT name,Chinese_score+Math_score+English_score 总分 FROM score_form WHERE Chinese_score+Math_score+English_score =(SELECT MAX(Chinese_score+Math_score+English_score) FROM score_form); +--------+------+
| name | 总分 |
+--------+------+
| 李小龙 | 299 |
+--------+------+
1 row in set
2.
CREATE TABLE product_info (
name VARCHAR(20),
price FLOAT(6,2),
born_date DATE,
class VARCHAR(20)
);
INSERT INTO product_info (name,price,born_date,class)
VALUES('apple',5.6,'2017-07-25','fruit'),
('sheet',30,'2017-05-23','bed'),
('cherry',8,'2017-07-20','fruit'),
('kettle',66,'2017-01-20','electric'),
('quilt',38.8,'2016-02-08','bed'),
('banana',3.2,'2017-05-18','fruit'),
('lamp',5.6,'2017-03-09','electric'),
('fridge',4888,'2016-12-12','electric'),
('lemon',9.9,'2017-07-25','fruit'),
('pillow',28,'2017-05-23','bed'),
('TV',3000,'2017-07-25','electric'); mysql> select * from product_info;
+--------+-------+------------+----------+
| name | price | born_date | class |
+--------+-------+------------+----------+
| apple | 5.6 | 2017-07-25 | fruit |
| sheet | 30 | 2017-05-23 | bed |
| cherry | 8 | 2017-07-20 | fruit |
| kettle | 66 | 2017-01-20 | electric |
| quilt | 38.8 | 2016-02-08 | bed |
| banana | 3.2 | 2017-05-18 | fruit |
| lamp | 5.6 | 2017-03-09 | electric |
| fridge | 4888 | 2016-12-12 | electric |
| lemon | 9.9 | 2017-07-25 | fruit |
| pillow | 28 | 2017-05-23 | bed |
| TV | 3000 | 2017-07-25 | electric |
+--------+-------+------------+----------+
11 rows in set mysql> SELECT class,SUM(price) FROM product_info GROUP BY class; +----------+------------+
| class | SUM(price) |
+----------+------------+
| bed | 96.80 |
| electric | 7959.60 |
| fruit | 26.70 |
+----------+------------+
3 rows in set mysql> SELECT class,COUNT(name) FROM product_info GROUP BY class; +----------+-------------+
| class | COUNT(name) |
+----------+-------------+
| bed | 3 |
| electric | 4 |
| fruit | 4 |
+----------+-------------+
3 rows in set mysql> SELECT class,SUM(price) FROM product_info WHERE class ='fruit' GROUP BY class; +-------+------------+
| class | SUM(price) |
+-------+------------+
| fruit | 26.70 |
+-------+------------+
1 row in set mysql> SELECT class,SUM(price) FROM product_info GROUP BY class HAVING class ='fruit'; +-------+------------+
| class | SUM(price) |
+-------+------------+
| fruit | 26.70 |
+-------+------------+
1 row in set mysql> SELECT name,price FROM product_info WHERE born_date LIKE '2017-07-25' order BY price DESC LIMIT 1; +------+-------+
| name | price |
+------+-------+
| TV | 3000 |
+------+-------+
1 row in set mysql> SELECT SUM(price) FROM product_info; +------------+
| SUM(price) |
+------------+
| 8083.10 |
+------------+
1 row in set mysql>
python--MySql 表记录的操作的更多相关文章
- 百万年薪python之路 -- MySQL数据库之 MySQL行(记录)的操作(二) -- 多表查询
MySQL行(记录)的操作(二) -- 多表查询 数据的准备 #建表 create table department( id int, name varchar(20) ); create table ...
- 百万年薪python之路 -- MySQL数据库之 MySQL行(记录)的操作(一)
MySQL的行(记录)的操作(一) 1. 增(insert) insert into 表名 value((字段1,字段2...); # 只能增加一行记录 insert into 表名 values(字 ...
- MySQL(单表的表记录的操作)
一.表记录的增删改查 1.增加表记录 <1>插入一条记录: insert [into] tab_name (field1,filed2,.......) values (value1,va ...
- day36 mysql 表的具体操作
一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset utf8; 1.2 数据库命名规则 可以由字母.数字.下划线.@.#.$ 区分大小写 唯一性 ...
- MySQL 表记录查询小练习
表记录查询小练习 查看岗位是teacher的员工姓名.年龄 查看岗位是teacher且年龄大于26岁的员工姓名.年龄 查看岗位是teacher且薪资在12000-16000范围内的员工姓名.年龄.薪资 ...
- 创建日志表记录DML操作和DDL操作
创建一个日志表,记录dept表的DML操作 create table dept_log(logid number,type varchar2(50),logdate date,deptno numbe ...
- Python mysql表数据和json格式的相互转换
功能: 1.Python 脚本将mysql表数据转换成json格式 2.Python 脚本将json数据转成SQL插入数据库 表数据: SQL查询:SELECT id,NAME,LOCAL,mobil ...
- 树莓派安装ubuntu-server,配置镜像,安装python/mysql/samba记录
目标: 1/在raspberrypi 3B上安装ubuntu-server 2/配置好python/mysql/samba等服务,实现爬虫稳定运行我的硬件准备: 1/raspberrypi 3B 2/ ...
- Python学习第二十三课——Mysql 表记录的一些基本操作 (查)
查(select * from 表名) 基本语法: select <字段1,字段2,...> from <表名> where <表达式>; 例如,查询student ...
随机推荐
- 【Mybatis】Mybatis缓存
mybatis提供了缓存机制减轻数据库压力,提高数据库性能 mybatis的缓存分为两级:一级缓存.二级缓存 一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效 二级缓 ...
- springMVC使用map接收入参 + mybatis使用map 传入查询参数
测试例子: controllel层 ,使用map接收请求参数,通过Debug可以看到,请求中的参数的值都是字符串形式,如果将这个接收参数的map直接传入service,mybatis接收参数时会报错, ...
- div中粘贴图片并上传服务器 div中拖拽图片文件并上传服务器
应用简介:此文主要是描述如何在前端div中直接ctrl+v 粘贴图片,并上传到服务器,包括拖拽图片文件到div中 应用场景描述:用QQ或者其它切图软件截图,在指定的div中ctrl+v 粘贴并显示,点 ...
- BUUCTF | easy_tornado
第一次遇到模板注入的题,赶紧记笔记,此篇相当于对大佬的做法的复现Orz,师傅太强了https://blog.csdn.net/weixin_44255856/article/details/97687 ...
- iOS 开发加密做法
一般做法是这样的: 客户端 每一个请求的URL中加上时间的参数.对url中的参数是排序好的. 然后对这个URL进行MD5.将这个MD5作为最后一个参数(sign)拼接到url最后. 服务端 收到请求后 ...
- jmeter 测试结果分析术语
label:定义http请求名称. samples:测试中一共发出的请求. average:平均响应时长.默认是单个request的平均响应时长. median:中位数,50%用户的响应时长. 90% ...
- Linux-文件系统概述
主要对外部存储设备: 分区与格式化原理: IDE: /dev/hda 第一块硬盘 ……/dev/hdn /dev/hda1 第一块硬盘的第一个分区 第n块IDE硬盘 SCSI:/de/sda ...
- appium常见问题06_如何解决uiaotomator定位工具报错
在使用uiaotomator工具定位元素过程中,经常会弹出报错,截图失败,导致无法定位元素,当遇到该问题时,解决办法如下: 方法一:拔掉手机usb连接,重新连接手机 方法二:adb杀掉手机服务,重起服 ...
- 深入理解javascript原型和闭包(3)——prototype原型 (转载)
深入理解javascript原型和闭包(3)——prototype原型 既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的 ...
- spring, spring mvc, mybatis整合文件配置详解
转自:http://www.cnblogs.com/wxisme/p/4924561.html 使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用 ...