python之路_mysql数据操作1
一、insert插入数据
1. 插入完整数据(顺序插入)语法一:INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);语法二:INSERT INTO 表名 VALUES (值1,值2,值3…值n);2. 指定字段插入数据语法:INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);3. 插入多条记录语法:INSERT INTO 表名 VALUES(值1,值2,值3…值n),(值1,值2,值3…值n),(值1,值2,值3…值n);4. 插入查询结果语法:INSERT INTO 表名(字段1,字段2,字段3…字段n) SELECT (字段1,字段2,字段3…字段n) FROM 表2WHERE …;
上述4中需要提前创建好表,然后才能将查询的结果插入表格中,但是也可以通过创建表的同时将查询的数据插入创建的表中,如下例:
二、使用update更新数据
语法:UPDATE 表名 SET字段1=值1,字段2=值2,WHERE CONDITION;示例:UPDATE mysql.user SET password=password(‘123’) where user=’root’ and host=’localhost’;
三、使用delete删除数据
语法:DELETE FROM 表名 WHERE CONITION;示例:DELETE FROM mysql.user WHERE password=’’;请空表:truncate 表;
四、用select查询单表数据
单表查询的语法介绍如下:
SELECT 字段1,字段2... FROM 表名WHERE 条件GROUP BY fieldHAVING 筛选ORDER BY fieldLIMIT 限制条数注:以上语法顺序不可以置换!!!
以上关键字的执行顺序为:(1)找到表:from;(2)拿着where指定的约束条件,去文件取出一条条记录;(3)将取出的结果进行group by分组,如果没有group by,则将整体作为一组;(4)将分组的结果进行having过滤;(5)执行select;(6)去重distinct;(7)将结果按照条件进行排序order by;(8)限制结果的显示条数limit
方便后面内容进行展开,先按照如下内容创建表格:
#创建表 create table employee( id int not null unique auto_increment, name varchar(20) not null, sex enum('male','female') not null default 'male', #大部分是男的 age int(3) unsigned not null default 28, hire_date date not null, post varchar(50), post_comment varchar(100), salary double(15,2), office int, #一个部门一个屋子 depart_id int );#查看表结构 mysql> desc employee; +--------------+-----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-----------------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | NO | | NULL | | | sex | enum('male','female') | NO | | male | | | age | int(3) unsigned | NO | | 28 | | | hire_date | date | NO | | NULL | | | post | varchar(50) | YES | | NULL | | | post_comment | varchar(100) | YES | | NULL | | | salary | double(15,2) | YES | | NULL | | | office | int(11) | YES | | NULL | | | depart_id | int(11) | YES | | NULL | | +--------------+-----------------------+------+-----+---------+----------------+#插入记录 #三个部门:教学,销售,运营 insert into employee(name,sex,age,hire_date,post,salary,office,depart_id) values ('egon','male',18,'20170301','老男孩驻沙河办事处外交大使',7300.33,401,1), #以下是教学部 ('alex','male',78,'20150302','teacher',1000000.31,401,1), ('wupeiqi','male',81,'20130305','teacher',8300,401,1), ('yuanhao','male',73,'20140701','teacher',3500,401,1), ('liwenzhou','male',28,'20121101','teacher',2100,401,1), ('jingliyang','female',18,'20110211','teacher',9000,401,1), ('jinxin','male',18,'19000301','teacher',30000,401,1), ('成龙','male',48,'20101111','teacher',10000,401,1),('歪歪','female',48,'20150311','sale',3000.13,402,2),#以下是销售部门 ('丫丫','female',38,'20101101','sale',2000.35,402,2), ('丁丁','female',18,'20110312','sale',1000.37,402,2), ('星星','female',18,'20160513','sale',3000.29,402,2), ('格格','female',28,'20170127','sale',4000.33,402,2),('张野','male',28,'20160311','operation',10000.13,403,3), #以下是运营部门 ('程咬金','male',18,'19970312','operation',20000,403,3), ('程咬银','female',18,'20130311','operation',19000,403,3), ('程咬铜','male',18,'20150411','operation',18000,403,3), ('程咬铁','female',18,'20140512','operation',17000,403,3) ;#ps:如果在windows系统中,插入中文字符,select的结果为空白,可以将所有字符编码统一设置成gbk
1、简单查询
#简单查询 SELECT id,name,sex,age,hire_date,post,post_comment,salary,office,depart_id FROM employee;SELECT * FROM employee;SELECT name,salary FROM employee;#避免重复DISTINCT SELECT DISTINCT post FROM employee; #通过四则运算查询SELECT name, salary*12 FROM employee; 以下两条命令作用一样:SELECT name, salary*12 AS Annual_salary FROM employee;SELECT name, salary*12 Annual_salary FROM employee;#定义显示格式 CONCAT() 函数用于连接字符串SELECT CONCAT('姓名: ',name,' 年薪: ', salary*12) AS Annual_salary FROM employee;CONCAT_WS() 第一个参数为分隔符SELECT CONCAT_WS(':',name,salary*12) AS Annual_salary FROM employee;
distinct去重的作用如下:
as显示效果的区别:
2、where约束
where字句中可以使用:1. 比较运算符:> < >= <= <> !=2. between 80 and 100 值在80到100之间,包括80和1003. in(80,90,100) 值是80或90或1004. like 'egon%'pattern可以是%或_,%表示任意多字符_表示任意一个字符 5. 逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not
#1:单条件查询 SELECT name FROM employeeWHERE post='sale';#2:多条件查询 SELECT name,salary FROM employeeWHERE post='teacher' AND salary>10000;#3:关键字BETWEEN AND SELECT name,salary FROM employee WHERE salary BETWEEN 10000 AND 20000;SELECT name,salary FROM employee WHERE salary NOT BETWEEN 10000 AND 20000;#4:关键字IS NULL(判断某个字段是否为NULL不能用等号,需要用IS) SELECT name,post_comment FROM employee WHERE post_comment IS NULL;SELECT name,post_comment FROM employee WHERE post_comment IS NOT NULL;SELECT name,post_comment FROM employee WHERE post_comment=''; 注意''是空字符串,不是nullps:执行update employee set post_comment='' where id=2;再用上条查看,就会有结果了#5:关键字IN集合查询 SELECT name,salary FROM employee WHERE salary=3000 OR salary=3500 OR salary=4000 OR salary=9000 ;SELECT name,salary FROM employee WHERE salary IN (3000,3500,4000,9000) ;SELECT name,salary FROM employee WHERE salary NOT IN (3000,3500,4000,9000) ;#6:关键字LIKE模糊查询通配符’%’SELECT * FROM employee WHERE name LIKE 'eg%';通配符’_’SELECT * FROM employee WHERE name LIKE 'al__';
#练习 1. 查看岗位是teacher的员工姓名、年龄 select name,age from employee where post='teacher';2. 查看岗位是teacher且年龄大于30岁的员工姓名、年龄 select name,age from employee where post='teacher' and age > 30;3. 查看岗位是teacher且薪资在9000-10000范围内的员工姓名、年龄、薪资 select name,age,salary from employeewhere post='teacher' and salary between 9000 and 10000;4. 查看岗位描述不为NULL的员工信息 select * from employee where not post_comment is null;5. 查看岗位是teacher且薪资是10000或9000或30000的员工姓名、年龄、薪资 select name,age,salary from employee where post='teacher' and salary in (10000,9000,30000);6. 查看岗位是teacher且薪资不是10000或9000或30000的员工姓名、年龄、薪资 select name,age,salary from employee where post='teacher' and salary not in (10000,9000,30000);7. 查看岗位是teacher且名字是jin开头的员工姓名、年薪 select name,salary*12 from employee where post='teacher' and name like 'jin%';
3、分组 group by
注意:使用分组只能查看分组的依据和聚合函数,若是查看其它信息,则默认是该组的第一条信息,这其实是没有意义的。如下:
为了防止这样做可以设置全局变量:set global sql_mode='ONLY_FULL_GROUP_BY';,设置成功退出再次登录,重复上述操作则会报错:
(1)什么是分组?为什么要分组?
#1、首先明确一点:分组发生在where之后,即分组是基于where之后得到的记录而进行的#2、分组指的是:将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组等#3、为何要分组呢? 取每个部门的最高工资取每个部门的员工数取男人数和女人数小窍门:‘每’这个字后面的字段,就是我们分组的依据#4、大前提:可以按照任意字段分组,但是分组完毕后,比如group by post,只能查看post字段,如果想查看组内信息,需要借助于聚合函数
(2)group by的使用
分组的字段的选择:如果我们用unique的字段作为分组的依据,则每一条记录自成一组,这种分组没有意义多条记录之间的某个字段值相同,该字段通常用来作为分组的依据
单独使用GROUP BY关键字分组SELECT post FROM employee GROUP BY post;注意:我们按照post字段分组,那么select查询的字段只能是post,想要获取组内的其他相关信息,需要借助函数GROUP BY关键字和GROUP_CONCAT()函数一起使用SELECT post,GROUP_CONCAT(name) FROM employee GROUP BY post;#按照岗位分组,并查看组内成员名 SELECT post,GROUP_CONCAT(name) as emp_members FROM employee GROUP BY post;GROUP BY与聚合函数一起使用select post,count(id) as count from employee group by post;#按照岗位分组,并查看每个组有多少人
(3)聚合函数
#强调:聚合函数聚合的是组的内容,若是没有分组,则默认一组 示例:SELECT COUNT(*) FROM employee;SELECT COUNT(*) FROM employee WHERE depart_id=1;SELECT MAX(salary) FROM employee;SELECT MIN(salary) FROM employee;SELECT AVG(salary) FROM employee;SELECT SUM(salary) FROM employee;SELECT SUM(salary) FROM employee WHERE depart_id=3;
(4)练习
1. 查询岗位名以及岗位包含的所有员工名字 select post,group_concat(name) from employee group by post;2. 查询岗位名以及各岗位内包含的员工个数 select post,count(id) from employee group by post;3. 查询公司内男员工和女员工的个数 select sex,count(id) from employee group by sex;4. 查询岗位名以及各岗位的平均薪资 5. 查询岗位名以及各岗位的最高薪资 6. 查询岗位名以及各岗位的最低薪资 7. 查询男员工与男员工的平均薪资,女员工与女员工的平均薪资 select sex,avg(salary) from employee group by sex;
4、having过滤
haveing与where的区别:
#!!!执行优先级从高到低:where > group by > having #1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。#2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数
若没有分组,使用where和having的效果一样:
练习:
1. 查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数 select post,group_concat(name),count(id) from employee group by post having count(id) < 2;2. 查询各岗位平均薪资大于10000的岗位名、平均工资 select post,avg(salary) from employee group by post having avg(salary) > 10000;3. 查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资 select post,avg(salary) from employee group by post having avg(salary) > 10000 and avg(salary) < 20000;
5、查询排序 order by
按单列排序SELECT * FROM employee ORDER BY salary; #升序SELECT * FROM employee ORDER BY salary ASC;#升序SELECT * FROM employee ORDER BY salary DESC; #降序 按多列排序:先按照age排序,如果年纪相同,则按照薪资排序SELECT * from employeeORDER BY age,salary DESC;
练习:
#1. 查询所有员工信息,先按照age升序排序,如果age相同则按照hire_date降序排序select * from employee order by age asc,hire_date desc; #2. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资升序排列select post,avg(salary) from employee group by post having avg(salary)>10000 order by avg(salary) asc; #3. 查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资降序排列select post,avg(salary) from employee group by post having avg(salary)>10000 order by avg(salary) desc;
6、查询显示的记录数 limit
示例:SELECT * FROM employee ORDER BY salary DESC LIMIT 3; #默认初始位置为0 SELECT * FROM employee ORDER BY salary DESCLIMIT 0,5; #从第0开始,即先查询出第一条,然后包含这一条在内往后查5条 SELECT * FROM employee ORDER BY salary DESCLIMIT 5,5; #从第5开始,即先查询出第6条,然后包含这一条在内往后查5条
7、使用正则表达式查询
SELECT * FROM employee WHERE name REGEXP '^ale';SELECT * FROM employee WHERE name REGEXP 'on$';SELECT * FROM employee WHERE name REGEXP 'm{2}';小结:对字符串匹配的方式 WHERE name = 'egon'; WHERE name LIKE 'yua%'; WHERE name REGEXP 'on$';
例:查看所有员工中名字是jin开头,n或者g结尾的员工信息(select * from employee where name regexp '^jin.*[ng]$')
转载于:https://www.cnblogs.com/seven-007/p/7730349.html
python之路_mysql数据操作1相关推荐
- 0编程基础学python之数据类型和数据操作
0基础学习python之数据类型和数据操作 大家都知道,我们python的强大功能之一就是处理数据,所以我们今天就来探讨一下python中的一些数据类型和他们之间的操作吧. 先来回顾学过知识,上图: ...
- 用于python环境下的数据操作_数据分析(一):环境搭建,以及初步操作文件
1.准备工作 ①定义:用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论,对数据加以详细研究和概括总结的过程 ②环境部署,可以再pycharm中做也可以再jupyter中做 ③ju ...
- python之路_文件操作解析
文件操作 一.操作文件三要素 1. 路径 #文件存放的具体位置的路径 2. 编码 #文件打开的的编码格式:utf-8 3. 模式 - rb:以字节的方式只读 obj = open('D:\ ...
- dml语句包括哪些_MySQL数据操作(DML)语句,入门掌握这些足够了
DML是(Data Manipulation Languages)数据定义语言的缩写 主要包括表记录的插入insert.更新update.删除select 插入记录 insert into table ...
- mysql数据=_mysql 数据操作
数据插入(添加数据) 有3种形式 形式1: insert into 表名(字段名1,字段名2,....)values (值a1,值a2, .....), (值b1,值b2, .....),..... ...
- python之路--小数据池,再谈编码,is和 == 的区别
一 . 小数据池 # 小数据池针对的是: int, str, bool 在py文件中几乎所有的字符串都会缓存.# id() 查看变量的内存地址 s = 'attila' print(id(s)) 二 ...
- python进阶(十)_mysql数据查询
数据的准备 创建一个数据库 create database python_test_1 charset=utf8; 使用一个数据库 use python_test_1; 显示使用的当前数据库是哪个 s ...
- Python初学者:元组数据操作,输出元组内7的倍数以及个位是7的数
输入以空格间隔(好看) x=map(int,input().split()) #split可以提供空格 x=tuple(x) #列表转元组 for i in x :if i % 7 == 0 or i ...
- mysql 数据操作类_MySql 数据操作类
/// /// MySqlHelper 的摘要说明. /// public class MySqlHelper { public static string connectionString = Co ...
- Python之路【第八篇】:堡垒机实例以及数据库操作
Python之路[第八篇]:堡垒机实例以及数据库操作 堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于 ...
最新文章
- 7.html超链接的使用
- iOS开发之解决隐藏tabbar后原位置无法响应点击事件的问题
- iPad上面的emoj是一个很有趣并且很好看的来根据你自己的表情来生成头像的方法
- linux 字符串加入中括号,Shell 中的中括号用法总结
- Java 8中的StringJoiner与String.join的示例
- php 检测编码函数,自己写了一个php检测文件编码的函数
- 排序——选择排序、快速排序
- 忍得住清贫 耐得住寂寞 禁得起诱惑
- (二) CGAL库应用:轮廓中轴骨架生成create_interior_straight_skeleton_2()及轮廓的偏置create_offset_polygons_2()
- 期刊影响因子的中外算法差别很大
- 使用exceljs导出部门-职位联动下拉框的excel
- 線上 Android/Linux Kernel Source Code瀏覽 - Android/Linux Source Code Cross Reference
- Java——计算机随机产生一个[1,100]之间的数字(终极版)
- java的反射机制~~!
- UCOSii和Linux的区别和联系
- Linux搭建MQTT服务器(Mosquitto)
- python 获取百度地图上北京地铁的数据,然后excel导出
- 淘宝店铺如何好评置顶,如何通过好评留住客户?
- 康耐视VisionPro脚本BUG修改教程
- er图 navicat_Navicat 怎么生成ER图表
热门文章
- kubernetes 集群管理平台
- Jasypt 开源加密库使用教程
- C语言指令启动mcs51计时器是,单片机原理及应用-中国大学mooc-题库零氪
- 串口 浮点数 结构体_quot;结构体quot;和quot;共用体quot;在单片机中的妙用
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_15-页面静态化-模板管理-模板管理业务流程...
- java中的VO、PO、BO、DAO、POJO
- [洛谷P4081][USACO17DEC]Standing Out from the Herd
- java课程设计---彩票销售管理系统
- Spring_02 注入类型值、利用引用注入类型值、spring表达式、与类相关的注解、与依赖注入相关的注解、注解扫描...
- Linux C/C++的编译