mysql综合

插入数据

全列插入(一一对应)
INSERT INTO employee VALUES (2,'李四','男'),(3,'造钱','男')
部分插入
INSERT INTO 表名(列名,列名) VALUES (值),(值)
多条插入
INSERT INTO 表名(列名,列名) VALUES (值,值,值),(值,值,值)
删除数据(指定)
DELETE FROM employee WHERE name='李四';
删除全部
DELETE FROM employee;
TRUNCATE TABLE employee;
区别:DELETE:可指定删除,也可全部删除(不删表,只删数据)删除可找回
TRUNCATE:只删全部(先完全删除表,再创建新表)删除不能找回

检索查看(架构)

SELECT * FROM employee \G;(所有)
SELECT 指定列名 FROM employee;(单个)
SELETE DISTINCT 指定列名 FROM employee;(去重)
使用完全限定的表名()
SELETE 表.列 FROM dbname.tablename;

将一个表的数据复制到另一个表

INSERT INTO copy_employee(id,name,gender) SELECT id,name,gender FROM employee;
数据更新
UPDATE employee SET name='周七' WHERE id=2;
UPDATE employee SET name='胡八',salary=6000 WHERE name='孙一';
UPDATE employee SET salary+1000 where name='蟹二'
UPDATE employee SET sum=math+yuwen+english WHERE id; 更新所有总分

查询语句:WHERE

SELECT * FROM employee WHERE id=1(name='yi'); 等于 SELECT id,name FROM employee WHERE id=1(name='yi');
SELECT * FROM employee WHERE id!=1(name!='yi'); 不等于
SELECT * FROM employee WHERE id <> 1; 不等
SELECT * FROM employee WHERE id < 2(id >= 2);
SELTCT * FROM employee WHERE id BETWEEN 2 AND 5;
包含2,5
检查空值
SELECT * FROM employee WHERE hire_date IS NULL(IS NOT NULL);
AND
SELECT * FROM employee WHERE gender='男' AND salary > 2000;
OR
SELECT * FROM employee WHERE gender='男' OR salary > 2000;
IN 范围
SELECT * FROM employee WHERE id IN(1,3); 取1,3 NOT IN (取反)
AND OR 一块用
SELECT * FROM employee WHERE (id >= 2 OR gemder='男') AND salary > 8000;
优先AND
SELECT * FROM employee WHERE id >= 2 OR gemder='男 AND salary > 8000;
模糊查询
%:任意字符,出现任意次数
:任意字符,有且只有一个 李% 俩位汉字以上
SELECT * FROM employee WHERE name LIKE '%a%'; 包含a的
SELECT * FROM emplpyee WHERE name LIKE '%a_'; 前面无数个,后面一个

. 除\n 之外任意字符
\d 数字0-9
\D 非数字 ->^0-9
\w 单词字符(a-z,A_Z,0-9,_)
\W 非单词字符
\s 空白字符
\S 非空白字符

^ 以...开头
$ 结尾

  • *号之前的字符,出现任意次
  • +号之前的字符,至少一次
    ? 之前的字符,0-1次

非贪婪:尽可能少匹配
str = 'asdfghsdfg'
'*'贪婪 到结尾结束
'??'非贪婪 asd +? *?

| 或
() 分组匹配
re.complice()
python使用正则re模块
import re
从头开始匹配,单次匹配,匹配到结果立即返回,如果没有符合规则的返回NONE
re.match()
在全文中匹配,单次匹配,含有符合正则规则的字串,返回结果,反之返回NONE
re.search()
在全文中多次匹配,返回所有
re.findall
替换
re.sub
patter:正则complice对象
repl:替换对象
string:原始字符串
字符串分割,返回列表
re.split()
作用和findall类似,斗返回符合正则规则的字符串,不同的是,返回可迭代对象,可for循环 .group()
re.finditer
分组

在mysql中使用正则(REGEXP)
SELECT * FROM 表名 WHERE 列名 REGEXP
排序 order by
升序:ASC(默认)
降序:DESC
SELECT salary FROM employee ORDER BY salary 方向
升序
SELECT NAME,yuwen,math,english FROM result ORDER BY wuli ASC;
物理升序,语文升序
SELECT NAME,yuwen,math,english FROM result ORDER BY wuli ASC,yuwen ASC;

限定查询 LIMIT

限定返回前两条 offset:偏移量,从哪条开始返回,不包含这条:0,2
num:返回多少行 从头开始
SELECT * FROM result LIMIT num;
SELECT * FROM result LIMIT offset,num;
2后两条
SELECT * FROM result LIMIT 2,2; 第2条开始,不包含第2条
组合(不论升降,指名方向)
第一
SELECT NAME,yuwen FROM result ORDER BY yuwen DESC LIMIT 1;
倒数第一
SELECT NAME,yuwen FROM result ORDER BY yuwen ASC LIMIT 1;
中文 首字母顺序
SELECT NAME FROM result ORDER BY CONVERT(name USING gbk)

mysql常见聚合函数
MAX():最大
MIN():最小
AVG():平均
COUNT():统计某列行数
SUM():求和

SELECT MAX(yuwen,math,wuli) FROM result;
改名
SELECT MAX(yuwen) as max_a,MAX(math) as max_b,MAX(wuli) as max_c FROM result;

平均
SELECT AVG(yuwen) as 别名 FROM result;
统计某列行数
SELECT COUNT(1) as 别名 FROM result;

SELECT SUM(math) as 别名 FROM result;
综合使用
SELECT COUNT(1) as 别名,SUM(列名) as 别名,AVG(列名) as 别名,COUNT(列名) as 别名;

共用

分组 GROUP BY 可和聚合参数同使用
根据班级分组,统计语文平均成绩,,和班级总人数
SELECT class,COUNT(1) FROM result GROUP BY class;
SELECT class,,COUNT(1),AVG(yuwen) FROM result GROUP BY class,;
根据班级和性别分组,统计语文平均成绩,和班级总人数,返回同一分组下学生姓名
SELECT class,gender,count(1),AVG(yuwen),group_concat(name) FROM result GROUP BY class,gender;

GROUP BY和ROLLUP共同使用
会在最后一行1添加一条记录,记录当前列里所有记录和
SELECT class,COUNT(1) as 别名 FROM result GROUP BY class Wq3ITH ROLLUP;
HAVING:过滤分组 同样是过滤,和WHERE 相似 WHERE:过滤表中记录 HAVING过滤组 WHERE过滤行
根据班级分组,统计班级人数,返回总人数大于等于2的班级名和学生人数
SELECT class,COUNT(1) as 别名 FROM result GROUP BY class HAVING COUNT(1)>=2;

GROUP BY 和 ORDER BY 共用
SELECT class,gender,count(1) from result group by class,gender having gender='男' and class='一年级';
根据班级,性别 分组,统计总人数,根据总人数降序
SELECT class,gender,count(1) as 别名 from result group by class,gender ORDER BY COUNT(1) DESC;

GROUP BY ORDER BY HAVING 共用
根据班级和性别分组,统计班级总人数,过滤出分组人数大于1
SELECT class,gender,COUNT(1) as 别名 FROM grade(表名) DROUP BY class,gender HAVING COUNT(1)>1 ORDER BY COUNT(1) DESC;
根据班级和语文成绩分组,统计每个分组的总的记录,过滤出分组总记录大于2的组,根据分组的总行数倒序排列,限定返回一条
SELECT class,yuwen,COUNT(1) FROM result GROUP BY class,yuwen,HAVING COUNT(1)>=2 ORDER BY COUNT(1) DESC LIMIT 1;
按年龄分组,返回每个年龄分组下对应的员工姓名和薪资
select age,group_concat(name,salary) from group by salary;
员工平均年龄,总员工数量,每月支出,最大,最小
select avg(age),count(1),sum(salary),max(salary),min(salary) from employee;
按月薪分组,每个分组下总人数,总人数大于2的分组返回
select salary,count(1) from employee group by salary having count(1)>2;

SELECT 要检索的列,或表达式
FROM 表名
WHERE 条
GROUP BY 分组(根据哪些列分组)
HAVING 条件(过滤组)
ORDER BY 排序
LIMIT 要检索的行数

select 列
from 表名
where 条件,过滤行
group by 根据列分组
haaving 条键
order by 列,方向
limit 要返回行数
原表中薪资加减乘除
select salary+1000 from employee;
select salary*1000 from employee;
select salary/1000 from employee;

条件判断函数

if(条件,v1,v1):满足返回v1,否则v2
ifnull(manage,'123'):是返回123,否则返回manage

case when 条件 then 结果1 else 结果2 end from 表;
例:年龄大于30返回yes,否则返回no
case when age>30 then 'yes' else 'no' end
select case when age>30 then 'yes' else 'no' end as if age from newemployee;
字符串处理函数
数值处理函数
时间日期处理函数
加密函数
password():mysql 数据库用户信息表中密码就使用此函数
md5:加密函数
insert into uer(name,pw) values ('yi',)
创建表:default , not null , primary key , auto_increment 约束
数据完整性:
保证用户输入的数据存储到数据库中是正确的

实体完整型:针对行的限制
实体完整性约束:
主键:唯一性,值非空,一个表里只一个主键,一个主键可由多个列构成
唯一:列对应的值具有唯一性,值可以为null
自增:一般为主键(int类型)设置自增,设置自增后再次插入数据会在原来基础加1
域完整性 都对应约束
针对列的限制
从数据类型限制:数值类型,字符串,时间类型
约束限制:
NOT NULL:往数据库插入数据时,该列不为null
default:设置默认值,当没有为该列设置数据,会显示默认值
参照完整性:表与表之间约束
外键:引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束
外键用于建立和加强加两个表数据之间的链接

                    07day

mysql 函数
字符串函数 拼接,替换
数字函数 最大,最小,平均,求余
时间日期函数 处理当前时间,返回时间属于哪天

条件判断函数
ifnull(列,value)
if(条件,v1,v2)
case 条件 then value1 else value2 end from employee
加密函数 md5() password()
完整性 目的:让输入数据库中的记录是正确的
实体完整形(行约束)
主键:primary key
唯一:unique

域完整性值:
数据类型 约束:not null
default

参照完整性
外键:foreign key

自增:auto_increment
alter table 表名 auto_increment=10;
自增步长改为10
set session auto_increment_increment = 10;
偏移5
set session auto_increment_offset = 5
查看步长,偏移量:
show session variables like 'auto_incre%';
自增列自增规律
1行 100+5
2行 10
1+5
n行 10*(n-1)+5
设置全局自增步长:
set global auto_increment_increment = 10;
设置全局自增偏移量:
set global auto_increment_offset = 5

三范式

1NF:列不可再分
2NF:每个表需有一个主键(主键可由单个列,多个列构成)
所有非主键列,需完全依赖主键,不能部分依赖
3NF:非主键列需直接依赖主键,不能传递依赖

E-R模型:
一对一:身份证
夫妻
用户密码
一对多:一个班级多个学生
多对多:一个老师教多班级,一个班级多个老师教
学生可以选多门课,一门课多个学生选

多表查询
笛卡尔集现象
消除笛卡尔集,只返回满足条件的结果
99写法:隐式内连接
select * from studnets,class where studnets.cls_id=class.cls_id;

链接查询:

内连接:查询出两表共同有的数据
select * from student INNER JOIN student ON student.cls_id=class.cls_id
外连接:左连接:同样查询两表中的数据,以左边表为参照,先把左边表中数据查询出来,
通过字段关联另一个表中数据,如果能关联到结果则展示,否则null填充
select * from class LEFT JOIN students ON class.cls_id=students.cls_id;
右连接 同样查询两表中的数据,以右边表为参照,先把右边表中数据查询出来,
通过字段关联另一表中数据,如果能关联到结果则展示,否则null填充
select * from class RIGHT JOIN students ON class.cls_id=students.cls_id;
right 右边表为依据,左边有Null
可添加条件
select stu_name,cls_name,teacher,score FROM class
INNER JOIN students ON class.cls_id = student.cls_id
INNER JOIN score ON students.stu_id = score.stu_id
WHERE scorec.score>60 and teacher='胡老师';
自然连接
select * from class NATURAL JOIN students;

ALTER TABLE students ADD CONSTRAINT f-CS FOREIGN KEY(cls_id) REFERENCES CLASS(cls_id);
references class 依赖主键class
ALTER TABLE students DROP FOREIGN KEY F_CS; 删除外键
ALTER TABLE students ADD CONSTRAINT F_CS FOREIGN KEY(cls_id) REFERENCES class(cls_id)
ON UPDATE CASCRED;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容