Mysql数据库基本介绍
1、mysql不分大小写, 他是存放数据的数据库管理系统字符集使用utf-8,python分大小写,r也分大小写,常用的数据库是关系型数据库,workbench编辑工具,Ctrl+回车执行;
2、一个数据库管理系统下有多个数据库,一个数据库下可以有个数据表,一个数据表下可以有多个不同的字段,同一个数据表的不同的字段数据维度要一样,一个字段只能有一个数据类型;
3、数据库的默认编码是utf-8,excel中的默认编码是ansi格式,一种是二进制文件,二进制文件用记事本打开后不是文字,一种是文本文件,文本文件包括csv格式、txt格式,CSV文件是用逗号隔开的,TXT文件是用空格隔开的;
4、create database +数据库名称;
show create database+数据库名称;
show databases; 查看所有数据库 show tables; 查看所有表
use + 数据库名称;每次使用数据库之前,都要先执行使用数据库命令
drop + database +数据库名称;drop + table + 表名; 删除整个表或者数据库
delete from 表名;删除表中的数据 delete from fruits where f_id = 'b5';删除一部分数据;
5、创建数据表时,包括类型和约束条件;时间类型是time,日期类型叫date,timestamp是时间戳,datetime和timestamp的显示格式相同,但是存储的字节和支持的范围不同,并且datetime没有时区的差别,输入什么就是什么,但是时间戳有时区的区别,不同的区域有不同的时间,是按世界标准时间格式保存的,时间戳的取值范围小于datetime的取值范围,
浮点数类型包括float、double。double的精度比float的精度高,如果进行数值比较最好使用decimal类型,
char是固定长度字符,varchar是可变长度字符,char会自动删除插入尾部的空格,varchar不会删除尾部空格,
常见的运算符
6、算数运算符、比较运算符、逻辑运算符、位操作运算符
算数运算符:+、-、*、/、%
比较运算符:在进行判断时,如果两个数的类型不一致,mysql 会自动将类型转换成一致的,比较运算符的结果显示有三种,一种是0,一种是1,一种是null,当判断结果正确时则输出1,否则输出0;“=”不能用于null的判断,因此结果仍然是null ;当比较运算符为“<=>”安全运算符时,则会输出1;
约束条件
7、primary key:主键约束;一个表里面必须只有一个主键,一个主键可以有多个字段组成;not null:非空约束,这样可以把空值过滤出去;unique:唯一约束;auto_increment:自增字段一个表中只能有一个自增字段,并且必须是逐渐的一部分,在写自增字段之前必须先写上数据类型和主键约束,起到了非空不重复的目的;default:默认值;
8、导入数据:
load data local infile "文件路径.txt" 一定要写上扩展名 路径里面不可以有中文,左斜杠\变成右斜杠/
into table 表名
fields terminated by '\t' 如果是.txt文档就用\t格式,如果是.csv文档就用逗号‘,’格式 ignore 1 lines; 如果第一行是标题行就用这个命令,如果第一行不是标题行就不需要这个命令。
如果在安装或者导入数据时,并没有设置为utf8格式,这个时候需要写上命令语句,将导入的带有中文的数据不至于乱码:CREATE DATABASE market DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
验证数据的准确性
直接打开数据表,跟文本文档对比一下,查看一下内容和行数,再查看一下表结构,
检查导入的内容:select* from 表名;
查看数据的行数:select count(*) from 表名;
查看一下数据的结构:desc 表名;
修改数据表
修改表名:alter table (原始表名)emp rename empdep;
修改类型:alter table (表名)empdep modify (字段名)(修改后的字段类型);注意是类型
修改字段名:alter table (表名)empdep change (旧字段名)(新字段名,类型);
添加新字段:ALTER TABLE empdep ADD maname VARCHAR(10) NOT NULL;
将字段名放在第一行:ALTER TABLE empdep MODIFY maname VARCHAR (10) FIRST;
alter table bingovalue1 modify rownumbers int(只写个类型就可以) first;
将字段放在某一行:ALTER TABLE empdep MODIFY maname VARCHAR(10) AFTER depid;
删除字段:alter table empdep drop maname;
删除主键:alter table empdep drop primary key;
添加自增字段:alter table 表名 add 字段名 int primary key auto_increment;添加自增字段时,这列数据需要时整数且为主键;
sql的数据查询功能
select * from 表
where 对总表的原始数据加条件
group by
having 对分组后的数据进行加条件
order by (desc降序的方式进行排序)
select中的运算符包含:算数运算符、比较运算符、逻辑运算符、聚合函数
连接方式
方向性:left join;right join; inner join 可以确定主附表,
对应关系:一对一,一对多,多对多 一对一的最不会出现;
select * from A left join B on A.key=B.key; 如果两个表中的字段相同时,一定要注意在用的时候写上表名;
横向合并:left join;right join; inner join
纵向合并:追加查询,下表分别表示当主键相同时和主键不同的时候
联合查询:union和union all的用法:union是合并后回去重,union all是合并后不会去重;
(select *from a) union (select from * b); (select *from a) union all (select from * b);
查询操作符,逻辑运算符
-- 用and操作符查询s_id为101并且f_id为a1的水果记录
select * from fruits
where s_id = '101' and f_id = 'a1';
-- 用or操作符查询苹果或者橙子的相关记录
select * from fruits
where f_name = 'apple' or f_name = 'orange';
-- 用in操作符查询苹果和橙子的相关记录
select * from fruits
where f_name in('apple','orange');
-- 用not in操作符查询苹果和橙子之外的水果的相关记录
select * from fruits
where f_name not in('apple','orange');
-- 用between...and操作符查询f_price在10元到20元之间的水果记录
select * from fruits
where f_price between 10 and 20;
-- 用is null操作符查询所有f_name为空的水果记录
select * from fruits
where f_name is null;
like 操作符
-- 用like操作符查询所有f_name由a开始的水果记录
select * from fruits
where f_name like 'a%';
select * from fruits
where f_name like "%a%";
-- 用like操作符查询所有f_id由b开始且字符长度为两位的水果记录
select * from fruits
where f_id like 'b_';
distinct 操作符
-- 查询fruits表中所有不重复的s_id
select distinct s_id from fruits;
子查询
-- 用 in 操作符与子查询语句来查询所有f_id对应的f_price在10元到20元之间的水果记录
select * from fruits where f_id in
(select f_id from fruits where f_price between 10 and 20);
select f_id from fruits where f_price between 10 and 20;
-- 用 any 操作符与子查询语句来查询任意f_price大于20元的水果记录
select * from fruits where f_price > any
(select f_price from fruits where f_price < 20); 找最小的 ,并且只要大于这个值就可以
-- 用 all 操作符与子查询语句来查询所有f_price大于20元的水果记录
select * from fruits where f_price > all
(select f_price from fruits where f_price < 20); 找最大的,要找大于所有的值得值
-- 用 exists 操作符与子查询语句来查询是否存在f_price大于30元的水果记录
select * from fruits where exists
(select * from fruits where f_price > 30);
as 重命名和limit限制查询
-- 用as将fruits表名重命名为f后使用
select f.* from fruits as f;
-- 显示f_price金额最大的前三名水果记录
select * from fruits
order by f_price desc
limit 3;
常用函数
-- 使用abs函数求所有水果平均值与最大值差值的绝对值
select abs(avg(f_price)-max(f_price)) from fruits;
-- 使用length函数求每个f_name的名字与他们的字符长度
select f_name, length(f_name) from fruits;
select f_name, length(f_name) from fruits group by f_name;
-- 使用now函数求当前的日期和时间
select now();
GROUP_CONCAT,将分组后的所有值显示出来
-- 使用group_concat函数查询不同s_id下对应的所有f_name信息
SELECT s_id, GROUP_CONCAT(f_name) FROM fruits
GROUP BY s_id;
update..set 更新和delete删除
-- 使用concat函数在f_name字段值前添加'fruit_'信息
SET SQL_SAFE_UPDATES = 0;#1175错误,意思是默认是1,不能任意更新
update fruits set f_name = concat ('fruit_',f_name);
select * from fruits;
-- 删除f_id为'b5'的数据记录
delete from fruits where f_id = 'b5';
select * from fruits;
案例分析中的笔记
set @allcount = (select count(*) from final);#用set函数创建新的变量
set @allsum = (select count(*)*5 from final);
select count(bingovalue)/@allcount as 中奖张数占比,sum(bingovalue)/@allsum as 中奖金额占比 from final
where bingovalue > 0;