Python基础之MySQL数据库
为了更加直观的展示、演示SQL语句查询关键字,需导入下列表格与记录(数据)
模拟公司,导入创建公司员工表,表内包含:ID、姓名、年龄、工作时间、岗位
创建人员表格:
create table emp(
id int primary key auto_increment,
name varchar(20) not null,
gender 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
);

生成人员信息:
#插入记录
#三个部门:教学,销售,运营
insert into emp(name,gender,age,hire_date,post,salary,office,depart_id) values
('jason','male',18,'20170301','浦东第一帅形象代言',7300.33,401,1), #以下是教学部
('tom','male',78,'20150302','teacher',1000000.31,401,1),
('kevin','male',81,'20130305','teacher',8300,401,1),
('tony','male',73,'20140701','teacher',3500,401,1),
('owen','male',28,'20121101','teacher',2100,401,1),
('jack','female',18,'20110211','teacher',9000,401,1),
('jenny','male',18,'19000301','teacher',30000,401,1),
('sank','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);:``

关键字:select
功能:基本、最常用的查询方法,可以通过关键字查询表内所有或指定的数据
select : 指定需要查询的字段信息
select * 查询所有字段
select 字段名 查询指定字段记录
select 方法(指定的字段) 查询处理后的字段记录
from
指定需要查询的表信息
from 库名.表名
from 表名
'''
注意事项:
1、SQL语句中关键字的执行顺序和编写顺序并不是一致的
eg:
select * from t1;
我们先写的是select,执行的顺序却是from t1 ——> select *
2、对于执行的顺序我们不用过多在意,只需要注意功能,熟练之后会编写的很自然
'''
对于查询用法,针对‘select’后面的字段我们可以先使用‘*’占位,然后往后面写,写到需要查询的字段时回来补全
在实际应用中‘select’后面很少直接写‘*’ , 因为星号表示所有,在当前表中数据量非常庞大时会非常浪费数据库资源
SQL语句的编写类似于代码的编写,不是一蹴而就的,也需要缝缝补补
在查询的字段后使用‘as’的方式可以用来修改展示的字段名,不会影响表的结构,只用来当前打印下的展示

| 字符 | 方法 | 功能 |
|---|---|---|
| % | 模糊查询 | 搭配字符前后,匹配任意字符 |
| _ | 模糊查询 | 搭配字符前后,匹配单个字符 |
1、方式一:
select * from emp where id>3 and id<=6;
2、方式二: 搭配关键词:between
select * from emp where id between 3 and 6;


1、方式一:
select * from emp where salary=20000 or salary=18000 or salary=17000;
2、方式二:
select * from emp where salary in (20000,18000,17000);

1、方式一:
select * from emp where id<3 or id>6;
2、方式二:
select * from emp where id not between 3 and 6;

条件不够时通常使用模糊查询,搭配查询字符
select * from emp where name like %o%;

1、方式一:
selsect * from emp where name like '____';
2、方式二:
select * from emp where char_length(name)=4;

select * from emp where post_comment is null;

在使用,group by 的时候,可能会出现以下这种用法

这种方法在MySQL5.5之前,并不会报错,但是打印的数据并不利于观看,因为它直接将部门的某一行打印出来,我们应该将需要打印的字符名放在selsct后:
select post from group by post;

在MySQL5.5之后,使用这种方法将会报错,可以通过在配置内添加严格模式来改正这种方法
# 将下列代码拷贝至my.ini文件的MySQLd下,重启系统环境中的MySQL服务端
sql_mode='strict_trans_tables,only_full_group_by'
推导流程:
# 1、先获取部门信息
select post from emp group by post;
# 2、获取部门下人员工资
select post,max(salary) from emp group by post;

推导流程:
# 1、先获取部门信息
select post from emp group by post;
# 2、获取部门下人员工资的综合信息
select post as '部门' ,
max(salary) as '最高薪资',
min(salary) as '最低薪资',
avg(salary) as '平均薪资',
sum(salary) as '薪资总和'
from emp group by post;

推导流程:
# 1、先获取部门信息
select post from emp group by post;
# 2、获取部门下人员工资的综合信息
select post as '部门' ,
count(id) as '部门人数总合'
from emp group by post;

1、打印部门名称及部门下人员姓名
select post,group_concat(name) from emp group by post;
2、打印部门名称,部门下人员姓名、年龄
select post,group_concat(name,age) from emp group by post;
3、自定义输出内容
select post,group_concat('姓名:',name,'年龄:',age) from emp group by post;



推导流程:
# 1、筛选大于30的员工
select * from emp where age > 30;
# 2、对获取的信息进行部门分类
select post from where age > 30 group by;
# 3、对获取的信息取工资的平均值
select post.vag(salary) from emp where age > 30 group bay;
# 4、对平均工资进行过滤,保留大于10000的数据
select post,vag(salary) from emp where age > 30 group by having vag(salary)>10000;

关键词:distinct
功能:可以去除表中重复的数据,但是数据必须要一样才可以,也可以多列使用
1、单列使用
select distinct age from emp;
2、多列使用
select distinct name,age from emp;


推导流程:
# 1、先筛选出年龄大于10的人员平均工资
select avg(salary) from emp where age>10;
# 2、将各部门人员信息分开
select post,avg(salary) from emp where age>10 group by post;
# 3、进行二次筛选,保留平均工资大于1000的部门
select post,avg(salary) from emp where age>10 group by post having avg(salary)>1000;
# 4、对工资进行排序
select post,avg(salary) from emp where age>10 group by post having avg(salary)>1000 order by avg(salary);

1、限制表打开的条数
select * from emp limit 5;
2、控制表打开的范围
select * from emp limit 5,5;


推导流程:
# 1、将表内所有人员的工资进行排序 设置为降序
select * from empor order by salary desc limit 1;

select * from emp where name regexp '^j.*(y|n)$';

我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我注意到类定义,如果我打开classMyClass,并在不覆盖的情况下添加一些东西我仍然得到了之前定义的原始方法。添加的新语句扩充了现有语句。但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开defmy_method时似乎,def中的现有语句和end被覆盖了,我需要重写一遍。那么有什么方法可以使方法定义的行为与定义相同,类似于super,但不一定是子类? 最佳答案 我想您正在寻找alias_method:classAalias_method:old_func,:funcdeffuncold_func#similartoca
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co