mysql笛卡尔积 去重_MySQL入门(函数、条件、连接)

MySQL入门(四)

distinct:去重

mysql>:

create table t1(

id int,

x int,

y int

);

mysql>: insert into t1 values(1, 1, 1), (2, 1, 2), (3, 2, 2), (4, 2, 2);

mysql>: select distinct * from t1; # 全部数据

mysql>: select distinct x, y from t1; # 结果 1,1 1,2 2,2

mysql>: select distinct y from t1; # 结果 1 2

# 总结:distinct对参与查询的所有字段,整体去重(所查的全部字段的值都相同,才认为是重复数据)

准备数据

CREATE TABLE `emp` (

`id` int(0) NOT NULL AUTO_INCREMENT,

`name` varchar(10) NOT NULL,

`gender` enum('男','女','未知') NULL DEFAULT '未知',

`age` int(0) NULL DEFAULT 0,

`salary` float NULL DEFAULT 0,

`area` varchar(20) NULL DEFAULT '中国',

`port` varchar(20) DEFAULT '未知',

`dep` varchar(20),

PRIMARY KEY (`id`)

);

INSERT INTO `emp` VALUES

(1, 'yangsir', '男', 42, 10.5, '上海', '浦东', '教职部'),

(2, 'engo', '男', 38, 9.4, '山东', '济南', '教学部'),

(3, 'jerry', '女', 30, 3.0, '江苏', '张家港', '教学部'),

(4, 'tank', '女', 28, 2.4, '广州', '广东', '教学部'),

(5, 'jiboy', '男', 28, 2.4, '江苏', '苏州', '教学部'),

(6, 'zero', '男', 18, 8.8, '中国', '黄浦', '咨询部'),

(7, 'owen', '男', 18, 8.8, '安徽', '宣城', '教学部'),

(8, 'jason', '男', 28, 9.8, '安徽', '巢湖', '教学部'),

(9, 'ying', '女', 36, 1.2, '安徽', '芜湖', '咨询部'),

(10, 'kevin', '男', 36, 5.8, '山东', '济南', '教学部'),

(11, 'monkey', '女', 28, 1.2, '山东', '青岛', '教职部'),

(12, 'san', '男', 30, 9.0, '上海', '浦东', '咨询部'),

(13, 'san1', '男', 30, 6.0, '上海', '浦东', '咨询部'),

(14, 'san2', '男', 30, 6.0, '上海', '浦西', '教学部'),

(15, 'ruakei', '女', 67, 2.501, '上海', '陆家嘴', '教学部');

常用函数

"""

拼接:concat() | concat_ws()

大小写:upper() | lower()

浮点型操作:ceil() | floor() | round()

整型:可以直接运算

"""

mysql>: select name,area,port from emp;

mysql>: select name as 姓名, concat(area,'-',port) 地址 from emp; # 上海-浦东

mysql>: select name as 姓名, concat_ws('-',area,port,dep) 信息 from emp; # 上海-浦东-教职部

mysql>: select upper(name) 姓名大写,lower(name) 姓名小写 from emp;

mysql>: select id,salary,ceil(salary)上薪资,floor(salary)下薪资,round(salary)入薪资 from emp;

mysql>: select name 姓名, age 旧年龄, age+1 新年龄 from emp;

条件:where

# 多条件协调操作导入:where 奇数 [group by 部门 having 平均薪资] order by [平均]薪资 limit 1

mysql>: select * from emp where id<5 limit 1; # 正常

mysql>: select * from emp limit 1 where id<5; # 异常,条件乱序

# 判断规则

"""

比较符合:> | < | >= | <= | = | !=

区间符合:between 开始 and 结束 | in(自定义容器)

逻辑符合:and | or | not

相似符合:like _|%

正则符合:regexp 正则语法

"""

mysql>: select * from emp where salary>5;

mysql>: select * from emp where id%2=0;

mysql>: select * from emp where salary between 6 and 9;

mysql>: select * from emp where id in(1, 3, 7, 20);

# _o 某o | __o 某某o | _o% 某o* (*是0~n个任意字符) | %o% *o*

mysql>: select * from emp where name like '%o%';

mysql>: select * from emp where name like '_o%';

mysql>: select * from emp where name like '___o%';

# sql只支持部分正则语法

mysql>: select * from emp where name regexp '.*\d'; # 不支持\d代表数字,认为\d就是普通字符串

mysql>: select * from emp where name regexp '.*[0-9]'; # 支持[]语法

分组与筛选:group by | having

where与having

# 表象:在没有分组的情况下,where与having结果相同

# 重点:having可以对 聚合结果 进行筛选

mysql>: select * from emp where salary > 5;

mysql>: select * from emp having salary > 5;

mysql>: select * from emp where id in (5, 10, 15, 20);

mysql>: select * from emp having id in (5, 10, 15, 20);

聚合函数

"""

max():最大值

min():最小值

avg():平均值

sum():和

count():记数

group_concat():组内字段拼接,用来查看组内其他字段

"""

分组查询 group by

# 修改my.ini配置重启mysql服务

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# 在sql_mode没有 ONLY_FULL_GROUP_BY 限制下,可以执行,但结果没有意义

# 有 ONLY_FULL_GROUP_BY 限制,报错

mysql>: select * from emp group by dep;

# 分组后,表中数据考虑范围就不是 单条记录,因为每个分组都包含了多条记录,参照分组字段,对每个分组中的 多条记录 统一处理

# eg: 按部门分组,每个部门都有哪些人、最高的薪资、最低的薪资、平均薪资、组里一共有多少人

# 将多条数据统一处理,这种方式就叫 聚合

# 每个部门都有哪些人、最高的薪资、最低的薪资、平均薪资 都称之为 聚合结果 - 聚合函数操作的结果

# 注:参与分组的字段,也归于 聚合结果

mysql>:

select

dep 部门,

group_concat(name) 成员,

max(salary) 最高薪资,

min(salary) 最低薪资,

avg(salary) 平均薪资,

sum(salary) 总薪资,

count(gender) 人数

from emp group by dep;

mysql>: select

dep 部门,

max(age) 最高年龄

from emp group by dep;

# 总结:分组后,查询条件只能为 分组字段 和 聚合函数操作的聚合结果

分组后的having

mysql>:

select

dep 部门,

group_concat(name) 成员,

max(salary) 最高薪资,

min(salary) 最低薪资,

avg(salary) 平均薪资,

sum(salary) 总薪资,

count(gender) 人数

from emp group by dep;

# 最低薪资小于2

mysql>:

select

dep 部门,

group_concat(name) 成员,

max(salary) 最高薪资,

min(salary) 最低薪资,

avg(salary) 平均薪资,

sum(salary) 总薪资,

count(gender) 人数

from emp group by dep having min(salary)<2;

# having可以对 聚合结果 再进行筛选,where不可以

排序

# order by 主排序字段 [asc|desc], 次排序字段1 [asc|desc], ...次排序字段n [asc|desc]

限制 limit

# 语法:limit 条数 | limit 偏移量,条数

mysql>: select name, salary from emp where salary<8 order by salary desc limit 1;

mysql>: select * from emp limit 5,3; # 先偏移5条满足条件的记录,再查询3条

连表查询

笛卡尔积

# 笛卡尔积: 集合 X{a, b} * Y{o, p, q} => Z{{a, o}, {a, p}, {a, q}, {b, o}, {b, p}, {b, q}}

mysql>: select * from emp, dep;

# 总结:是两张表 记录的所有排列组合,数据没有利用价值

内连接:inner join on

# 关键字:inner join on

# 语法:from A表 inner join B表 on A表.关联字段=B表.关联字段

mysql>:

select

emp.id,emp.name,salary,dep.name,work

from emp inner join dep on emp.dep_id = dep.id

order by emp.id;

# 总结:只保留两个表有关联的数据

左连接:left join on

# 关键字:left join on

# 语法:from 左表 left join 右表 on 左表.关联字段=右表.关联字段

mysql>:

select

emp.id,emp.name,salary,dep.name,work

from emp left join dep on emp.dep_id = dep.id

order by emp.id;

# 总结:保留左表的全部数据,右表有对应数据直接连表显示,没有对应关系空填充

右连接:right join on

# 关键字:right join on

# 语法:from A表 right join B表 on A表.关联字段=B表关联字段

mysql>:

select

emp.id,emp.name,salary,dep.name,work

from emp right join dep on emp.dep_id = dep.id

order by emp.id;

# 总结:保留右表的全部数据,左表有对应数据直接连表显示,没有对应关系空填充

左右可以相互转化

mysql>:

select

emp.id,emp.name,salary,dep.name,work

from emp right join dep on emp.dep_id = dep.id

order by emp.id;

mysql>:

select

emp.id,emp.name,salary,dep.name,work

from dep left join emp on emp.dep_id = dep.id

order by emp.id;

# 总结:更换一下左右表的位置,相对应更换左右连接关键字,结果相同

全连接:union(并集)

mysql>:

select

emp.id,emp.name,salary,dep.name,work

from emp left join dep on emp.dep_id = dep.id

union

select

emp.id,emp.name,salary,dep.name,work

from emp right join dep on emp.dep_id = dep.id

order by id;

# 总结:左表右表数据都被保留,彼此有对应关系正常显示,彼此没有对应关系均空填充对方

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/540064.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/540064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nmon安装为什么重启mysql_Nmon的安装及使用

一、下载Nmon根据CPU的类型选择下载相应的版本&#xff1a;二、初始化工具[rootmululu ~]# cd /opt[rootmululu opt]# mkdir nmon[rootmululu opt]# cd nmon[rootmululu nmon]#wget http://sourceforge.net/projects/nmon/files/download/nmon_x86_12a.zip[rootmululu nmon]# u…

mysql join 循环_关于mysql联表的内嵌循环操作nested loop join中on和where执行顺序问题...

mysql的理论依据没找到&#xff0c;个人理解是先执行where的过滤条件&#xff0c;先关联再过滤明显做的是无用功。oracle中倒是能在执行计划中看到&#xff0c;先执行的是过滤条件(下面代码中最后一行)。explain plan for SELECT * FROM tmp_t2 t2 LEFT JOIN tmp_t1 t1 ON t2.i…

python非法语句是_python 如何优雅的处理大量异常语句?

bs4的链式调用很赞&#xff0c;所以我把soup包装了一下class MY_SOUP():包装类def __init__(self,soup):self.soup soupif soup:if soup.string:self.string soup.string.strip()else:self.string Noneelse:self.string Nonedef find(self, *args, **kw):ret self.soup.fi…

Iptables详解+实例

2019独角兽企业重金招聘Python工程师标准>>> Iptabels是与Linux内核集成的包过滤防火墙系统&#xff0c;几乎所有的linux发行版本都会包含Iptables的功能。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器&#xff0c; 则Iptables有利于…

django ipython shell_通過django的shell_plus編寫ipython腳本

Im writing a shell script which runs a command through ipython with the -c option like this:我正在編寫一個shell腳本&#xff0c;它通過ipython運行一個命令&#xff0c;使用-c選項&#xff0c;如下所示:ipython -c "from blah import myfunct; myfunct()"but…

阿里云服务器安装onlyoffice_阿里云服务器安装 JDK 8

欢迎关注“科技毒瘤君”&#xff01;上一期给大家分享了如何申请阿里云的免费云服务器&#xff0c;还没有看过的小伙伴可以先前往了解 >>阿里云免费服务器<<这一次将会为大家分享如何在服务器上配置 Java环境&#xff0c;这里演示使用的系统为Ubuntu 18.04 64位&am…

js发送请求

1.Chrome控制台中 net::ERR_CONNECTION_REFUSED js频繁发送请求&#xff0c;有可能连接被拒绝&#xff0c;可用setTimeout&#xff0c;过几秒发送&#xff0c;给个缓冲时间 var overlayAnalystService L.supermap.spatialAnalystService(serviceUrl); setTimeout(function () …

据说有99%的人都会做错的面试题

这道题主要考察了面试者对浮点数存储格式的理解。另外&#xff0c;请不要讨论该题本身是否有意义之类的话题。本题只为了测试面试者相关的知识是否掌握&#xff0c;题目本身并没有实际的意义。 下面有6个浮点类型变量&#xff0c;其中前三个是float类型的&#xff0c;后三个是d…

php使用mysql5和8的区别_mysql8.0和mysql5.7的区别是什么?

区别&#xff1a;mysql8.0的索引可以被隐藏和显示&#xff0c;当一个索引隐藏时&#xff0c;他不会被查询优化器所使用&#xff1b;2、mysql8.0新增了“SET PERSIST”命令&#xff1b;3、从mysql8.0开始&#xff0c;数据库的缺省编码将改为utf8mb4&#xff0c;包含了所有emoji字…

mysql pt check sum_percona工具pt-table-checksum

利用pt-table-checksum进行数据库同步检查rpm方式#wget percona.com/get/percona-toolkit.rpm源码方式#wget http://www.percona.com/downloads/percona-toolkit/2.2.1/percona-toolkit-2.2.8.tar.gz#yum install perl perl-CPAN perl-DBD-MySQL perl-Time-HiRes解压&#xff0…

如何通过BBED找回删除数据

项目案例&#xff1a;客户删除delete了重要数据&#xff0c;无备份&#xff0c;客户联系我&#xff0c;要求恢复相应数据。本次通过实验方式重现客户现场。备份高于一切&#xff0c;首先备份&#xff0c;再操作 创建表格&#xff1a; create table king(age number,name varcha…

mysql 重置密码语音_数字语音信号处理学习笔记语音信号的同态处理(2)

5.4 复倒谱和倒谱 定义 设信号x(n)的z变换为X(z) z[x(n)]&#xff0c;其对数为&#xff1a; (1) 那么 的逆z变换可写成&#xff1a; (2) 取 (1)式则有 (3) 于是式子(2)则可以写成 (4) 则式子(4)即为信号x(n)的复倒谱 的定义。因为 一般为复数&#xff0c;故称 为复倒谱。如果对…

NFS 八步神曲

Server:第一步yum install - y nfs*第二步vi /etc/exports第三步/var/testdirs *(rw,all_squash,anonuid99,anongid99,sync)第四步service nfs start第五步chkconfig --level 35 nfs on Client第一步mount 192.168.1.X:/var/www/testdirs /var/www/testdirs第二步vi /et…

mysql权限日志_mysql权限管理、日志管理及常用工具

mysqlbinlog用法如下&#xff1a;mysqbinlog mysql.err 查询错误日志当然可以通过添加参数来查看指定内容,如&#xff1a;mysqlbinlog mysql-bin.000001 -d test 只显示对test数据库的二进制日志mysqlbinlog mysql-bin.000001 -o 3 -r result-file 首先忽略前三个操作&…

Juicer.js模板引擎问题

由于jsp中的EL表达式语法和jquery.tmpl十分类似&#xff0c;&#xff0c;所以单纯的使用${name}&#xff0c;数据是渲染不上tmpl的. SO.. 要加上转义: ${${}amount} 或者 \${amount} 转载于:https://www.cnblogs.com/fighxp/p/7890288.html

python把回车作为输入_python将回车作为输入内容的实例

当input输入内容的时候,许多情况下输入回车键另起一行输入,但是这时候Pycharm就执行程序,然后结束,导致无法继续输入内容。 原因:Python默认遇到回车的时候,输入结束。所以我们需要更改这个提示符,在遇到其他字符的时候,输入才结束。 比如有一个任务: 请输入文件名:悯…

ubuntu下修改时区和时间

applications-Accessories-Time & Date-点下锁-输入密码-把时区改成上海&#xff08;这个要点图中国与朝鲜之间的弯处才行&#xff0c;写不生效&#xff09;-Set the time 选Manually-改下时间、日期-直接关闭即可(重启后依然生效) 注&#xff1a;从电脑上边的时间处-Time …

python提供了9个基本的数值运算操作符_Python学习笔记(三)Python基本数字类型及其简单操作(1)...

一、数字类型表示数字或数值的数据类型称为数字类型,Python语言提供3种数字类型&#xff1a;整数、浮点数和复数&#xff0c;分别对应数学中的整数、实数和复数&#xff0c;下面就一起来了解一下他们吧&#xff01;1.整数类型整数类型与数学中整数的概念一致&#xff0c;整数类…

hdu 5139 数据的离线处理

所谓的数据离线处理&#xff0c;就是将所有的输入数据全部读入后&#xff0c;在进行统一的操作&#xff0c;这样当然有好处&#xff0c;比如让你算好多数的阶层&#xff0c;但是输入的每个数是没有顺序的&#xff0c;其实跟可以线性的解决&#xff0c;但是由于没有顺序的输入&a…