在mysql怎样查询地址和电话_Mysql数据查询

Mysql查询

数据多次过滤

条件:from、where、group by、having、distinct、order by、limit => 层层筛选后的结果

查:

select [distinct] 字段1 [[as] 别名1],...,字段n [[as] 别名n] from [数据库名.]表名 [条件];

注:一条查询语句,可以拥有多种筛选条件,条件的顺序必须按照上方顺序进行逐步筛选,distinct稍有特殊(书写位置),条件的种类可以不全

可以缺失,但不能乱序

单表查询

distinct 去重

数据为:

+------+------+

| x | y |

+------+------+

| 1 | 2 |

| 2 | 3 |

| 3 | 4 |

| 1 | 2 |

+------+------+

#执行

select distinct * from t1;

+------+------+

| x | y |

+------+------+

| 1 | 2 |

| 2 | 3 |

| 3 | 4 |

+------+------+

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

常用函数

拼接:concat() | concat_ws()

大小写:upper() | lower()

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

整型:可以直接运算

concat()和concat_ws()

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

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

#concat_ws(),可以在每个字段之间加上第一个字符

upper()和lower()

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

ceil(),floor(),round()

#元数据

+------+

| x |

+------+

| 1.5 |

| 1.2 |

| 1.51 |

+------+

#ceil() 向上取整

mysql> select ceil(x) from t2;

+---------+

| ceil(x) |

+---------+

| 2 |

| 2 |

| 2 |

+---------+

#floor()向下取整

mysql> select floor(x) from t2;

+----------+

| floor(x) |

+----------+

| 1 |

| 1 |

| 1 |

+----------+

#round() 特殊版本的四舍五入 5的时候舍

mysql> select round(x) from t2;

+----------+

| round(x) |

+----------+

| 2 |

| 1 |

| 2 |

+----------+

整数

select x+1 from t1;

where

常用判断

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

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

逻辑符合:and | or | not

相似符合:like _|%

正则符合:regexp 正则语法

自定义区间:id in (2,3) | id not in (2,3) | id < all(2,3) | id < any(2,3)

案例

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]'; # 支持[]语法

all与any:区间修饰条件

# 语法规则

# where id in (1, 2, 3) => id是1或2或3

# where id not in (1, 2, 3) => id不是1,2,3

# where salary < all(3, 6, 9) => salary必须小于所有情况(小于最小)

# where salary > all(3, 6, 9) => salary必须大于所有情况(大于最大)

# where salary < any(3, 6, 9) => salary只要小于一种情况(小于最大)

# where salary > any(3, 6, 9) => salary只要大于一种情况(大于最小)

in < > ()

# 案例

select * from emp where salary < all(select salary from emp where id>11);

分组group by

分组与筛选:group by|having

where和having区别

1.where在分组之前限定,如果不满足条件,则不参与分组。

having在分组之后进行限定,如果不满足结果,则不会被查询出来

2.where后不可以跟聚合函数,having可以进行聚合函数的判断

聚合函数

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

注意

分组查询的字段只有:分组字段、聚合函数

having不能使用聚合函数别名

完整体

select sex,AVG(math),COUNT(id) from student where math>70 group by sex having count(id) > 2

实验

#元数据

+------+------+

| z1 | z2 |

+------+------+

| 1 | zx |

| 2 | zy |

| 9 | zx |

| 5 | zy |

| 6 | zx |

| 7 | zy |

+------+------+

#执行

select z2,avg(z1) from t3 group by z2;

+------+---------+

| z2 | avg(z1) |

+------+---------+

| zx | 5.3333 |

| zy | 4.6667 |

+------+---------+

联合分组

简单来说就是对多个字段分组

#执行

select z1,z2 from t3 group by z1,z2;

+------+------+

| z1 | z2 |

+------+------+

| 1 | zx |

| 2 | zy |

| 5 | zy |

| 6 | zx |

| 7 | zy |

| 9 | zx |

+------+------+

排序

排序规则

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

未分组状态下

mysql>: select * from emp;

# 按年龄升序

mysql>: select * from emp order by age asc;

# 按薪资降序

mysql>: select * from emp order by salary desc;

# 按薪资降序,如果相同,再按年龄降序

mysql>: select * from emp order by salary desc, age desc;

# 按龄降序,如果相同,再按薪资降序

mysql>: select * from emp order by age desc, salary desc;

分组状态下

mysql>:

select

dep 部门,

group_concat(name) 成员,

max(salary) 最高薪资,

min(salary) 最低薪资,

avg(salary) 平均薪资,

sum(salary) 总薪资,

count(gender) 人数

from emp group by dep;

# 最高薪资降序

mysql:

select

dep 部门,

group_concat(name) 成员,

max(salary) 最高薪资,

min(salary) 最低薪资,

avg(salary) 平均薪资,

sum(salary) 总薪资,

count(gender) 人数

from emp group by dep

order by 最高薪资 desc;

分页limit

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

#元数据

+------+------+

| z1 | z2 |

+------+------+

| 1 | zx |

| 2 | zy |

| 9 | zx |

| 5 | zy |

| 6 | zx |

| 7 | zy |

+------+------+

#执行

select * from t3 limit 1;

+------+------+

| z1 | z2 |

+------+------+

| 1 | zx |

+------+------+

#执行

select * from t3 limit 2,2;

+------+------+

| z1 | z2 |

+------+------+

| 9 | zx |

| 5 | zy |

+------+------+

多表查询

分类

1.内连接

2.左连接

3.右连接

4.全连接

from 左表 inner|left|right join 右表 on 两个表之间的关联条件

inner:都是有用的

left:左边全有

right:右边全有

全连:left union right 有用没用都有

笛卡尔积

笛卡尔积是数据库多表连接的基础,它会列出所有的组合,多表查询其实就是对笛卡尔积进行过滤留下有用的数据

1 2 3和z x y的笛卡尔积

1 z 1 x 1 y

2 z 2 x 2 y

3 z 3 x 3 y

select * from z1,z2

一对一和一对多

元数据

+------+----------+

| id | name |

+------+----------+

| 1 | 教室_1 |

| 2 | 教室_2 |

| 3 | 教室_3 |

| 4 | NULL |

| NULL | NULL |

+------+----------+

+------+------+

| id | name |

+------+------+

| 1 | zx |

| 2 | wl |

| 3 | zy |

| 1 | zxy |

| 2 | fd |

| 3 | hj |

| 4 | ds |

| 1 | NULL |

| NULL | NULL |

+------+------+

内连接

找两张表共有的部分,相当于利用条件从笛卡尔积结果中筛选出了正确的结果

# 关键字:inner join on

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

可以简写为join

#执行

select * from class join student on class.id=student.id;

+------+----------+------+------+

| id | name | id | name |

+------+----------+------+------+

| 1 | 教室_1 | 1 | zx |

| 2 | 教室_2 | 2 | wl |

| 3 | 教室_3 | 3 | zy |

| 1 | 教室_1 | 1 | zxy |

| 2 | 教室_2 | 2 | fd |

| 3 | 教室_3 | 3 | hj |

| 4 | NULL | 4 | ds |

| 1 | 教室_1 | 1 | NULL |

+------+----------+------+------+

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

左连接

优先显示左表全部记录

# 关键字:left join on

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

#执行

select class.id,class.name,student.name from class left join student on class.id=student.id;

+------+----------+------+

| id | name | name |

+------+----------+------+

| 1 | 教室_1 | zx |

| 2 | 教室_2 | wl |

| 3 | 教室_3 | zy |

| 1 | 教室_1 | zxy |

| 2 | 教室_2 | fd |

| 3 | 教室_3 | hj |

| 4 | NULL | ds |

| 1 | 教室_1 | NULL |

| NULL | NULL | NULL |

+------+----------+------+

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

右连接

优先显示右表全部记录

# 关键字:right join on

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

#执行

select class.id,student.name,class.name from class right join student on class.id=student.id;

+------+------+----------+

| id | name | name |

+------+------+----------+

| 1 | zx | 教室_1 |

| 1 | zxy | 教室_1 |

| 1 | NULL | 教室_1 |

| 2 | wl | 教室_2 |

| 2 | fd | 教室_2 |

| 3 | zy | 教室_3 |

| 3 | hj | 教室_3 |

| 4 | ds | NULL |

| NULL | NULL | NULL |

+------+------+----------+

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

左右可以相互转化

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

全连接

全外连接:在内连接的基础上增加左边有右边没有的和右边有左边没有的结果

#执行

select class.id,student.name,class.name from class left join student on class.id=student.id

UNION

select class.id,student.name,class.name from class right join student on class.id=student.id

order by id;

+------+------+----------+

| id | name | name |

+------+------+----------+

| NULL | NULL | NULL |

| 1 | zxy | 教室_1 |

| 1 | NULL | 教室_1 |

| 1 | zx | 教室_1 |

| 2 | fd | 教室_2 |

| 2 | wl | 教室_2 |

| 3 | hj | 教室_3 |

| 3 | zy | 教室_3 |

| 4 | ds | NULL |

+------+------+----------+

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

# 注意 union与union all的区别:union会去掉相同的纪录

多对多

相当于在一对多的基础上,多建立一次连接

##源数据

#人物表

zx

+----+------+

| id | name |

+----+------+

| 1 | zx |

| 2 | wl |

| 3 | zy |

| 4 | zxy |

+----+------+

#关系表

zx_zy

+----+-------+-------+

| id | zx_id | zy_id |

+----+-------+-------+

| 1 | 1 | 1 |

| 2 | 1 | 3 |

| 3 | 2 | 2 |

| 4 | 2 | 4 |

| 5 | 3 | 1 |

| 6 | 3 | 3 |

| 7 | 4 | 5 |

| 8 | 4 | 2 |

| 9 | 4 | 3 |

+----+-------+-------+

#技能表

zy

+----+-----------+

| id | name |

+----+-----------+

| 1 | 吃饭 |

| 2 | 睡觉 |

| 3 | 打代码 |

| 4 | 写作业 |

| 5 | 上厕所 |

+----+-----------+

查询1

#执行

以关系表为中心,进行两次左连接

select zx_zy.id,zx.name,zy.name from zx_zy LEFT JOIN zx on zx.id=zx_zy.zx_id LEFT JOIN zy on zy.id=zx_zy.zy_id

+----+------+-----------+

| id | name | name |

+----+------+-----------+

| 1 | zx | 吃饭 |

| 2 | zx | 打代码 |

| 3 | wl | 睡觉 |

| 4 | wl | 写作业 |

| 5 | zy | 吃饭 |

| 6 | zy | 打代码 |

| 7 | zxy | 上厕所 |

| 8 | zxy | 睡觉 |

| 9 | zxy | 打代码 |

+----+------+-----------+

查询2

#执行

任意表,进行两次内连接

select zx_zy.id,zx.name,zy.name from zx join zx_zy on zx_zy.zx_id=zx.id join zy on zx_zy.zy_id=zy.id

+----+------+-----------+

| id | name | name |

+----+------+-----------+

| 1 | zx | 吃饭 |

| 2 | zx | 打代码 |

| 3 | wl | 睡觉 |

| 4 | wl | 写作业 |

| 5 | zy | 吃饭 |

| 6 | zy | 打代码 |

| 7 | zxy | 上厕所 |

| 8 | zxy | 睡觉 |

| 9 | zxy | 打代码 |

+----+------+-----------+

子查询

简单来说就是一个查询的数据当做另一个查询的查询条件

要注意的是子查询的数据一般有好多,一般用in

# 增:insert into 表 select子查询

# 删:delete from 表 条件是select子查询(表不能与delete表相同)

# 查:select 字段 from 表 条件是select子查询

# 改:update 表 set 字段=值 条件是select子查询(表不能与update表相同)

简单案例-子查询

##元数据

t1

+------+------+

| x | y |

+------+------+

| 1 | 2 |

| 2 | 3 |

| 3 | 4 |

| 1 | 2 |

+------+------+

t3

+------+------+

| z1 | z2 |

+------+------+

| 1 | zx |

| 2 | zy |

| 9 | zx |

| 5 | zy |

| 6 | zx |

| 7 | zy |

+------+------+

##需求根据t1的x,删除t3,与t1相同的z1数据

#执行

select * from t3;

+------+------+

| z1 | z2 |

+------+------+

| 9 | zx |

| 5 | zy |

| 6 | zx |

| 7 | zy |

+------+------+

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

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

相关文章

谷歌搜索技巧:搜索语法+隐藏彩蛋+高级设置

Google是一个非常精密成熟的搜索引擎&#xff0c;其搜索结果的丰富性和准确度较其他搜索引擎都要好&#xff0c;但大多数用户都还只是停留在搜索框中输入一两个关键字&#xff0c;然后点击“搜索”按钮的阶段&#xff0c;这一过程是非常低效和无谓的。学习一些搜索引擎常用的搜…

mysql如何给表字段加密_Mysql 字段加密

1、PASSWORD()2、ENCODE(,) DECODE(,)3、MD5()4、SHA5()5、AES_ENCRYPT AES_DECRYPT加密 select aes_encrypt(name, password );解密 select aes_decrypt(aes_encrypt(name, password ), password );可用hex或base64转码(base64在mysql5.6及以上支持)select hex(aes_en…

mysql数据类型支持比较运_Mysql支持的数据类型(总结)

一.数值类型Mysql支持所有标准SQL中的数值类型&#xff0c;其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC)&#xff0c;以及近似数值数据类型(FLOAT,REAL,DOUBLE PRESISION),并在此基础上进行扩展。扩展后增加了TINYINT,MEDIUMINT,BIGINT这3种长度不同的整形&#x…

Java 面向对象的设计思维

面向对象的设计思维&#xff1a;合适的方法应该出现在合适的类里面 |解释|&#xff1a;方法是哪个类的,方法便在哪个类里,由这个类去调用 |实际应用|:基本数据类型包装类:因为想要对基本类型数据进行更多的操作,最方便的方式就是将其封装成对象.在对象的描述中定义更多的属性和…

i5 1135g7什么水平_i7-10510U和i5-1135G7对比,该怎么选择呢?

导读:新旧笔记本交替,intel十代i7是否还有与十一代i5一战之力?两者之间差距多少呢?作为买家,肯定想要了解下的哈!! 参数对比 对比项i7-10510U的参数i5-1135G7的参数CPU主频1.8GHz2.4GHz最高睿频4.9GHz4.2GHz三级缓存8MB8MBC/T四核八线程四核八线程核显频率1.15GHZ1.3GHZ…

《学习心得》

最近在学习设计模式&#xff0c;正好也要做毕业设计&#xff0c;就想着把学到的一些皮毛用到毕业设计上面去&#xff0c;结果真的是无从下手。也看了很多其他人关于设计模式的博客&#xff0c;讲了很多很多的好处&#xff0c;但是就是不知道该怎么样运用到实际的项目上去。 毕业…

java获取硬盘序列号_Win7 64+Python3.7获取计算机硬盘信息初探

一、需求由于最近负责电脑资产清查的工作&#xff0c;有100多台分散的电脑需要获得用户名、MAC地址、硬盘序列号、硬盘品牌一般方法&#xff1a;&#xff08;1&#xff09;查看系统用户名&#xff08;2&#xff09; 获取MAC地址 windos命令行使用ipconfig /all&#xff08;3&am…

js for in 获得遍历数组索引和对象属性

for in 遍历对象属性 获取的是对象的属性名 var person { name:"admin", age:"21", address:"shanghai"};for(var i in person){ console.log(i)}结果 取得对象的属性名 for in 获取数组的索引值 var array [admin,manager,db];for(var i in arr…

mysql数据库诊断_RDS MySQL 数据库全量SQL诊断

三大难点问题使用MySQL数据库的用户&#xff0c;不可避免都会遇到下面三个难题&#xff1a;1、历史问题难定位数据库凌晨3点发生了CPU 100%的告警&#xff0c;但是该时间段却没有任何慢SQL&#xff0c;怎么继续查找原因&#xff1f;2、SQL压测模版难获取下周要进行大促压测&…

opencv图像处理时使用stringstream批量读取图片,处理后并保存

简介&#xff1a; 同文件输入输出流一样&#xff0c;使用stringstream可以批量读取图片&#xff0c;处理后并进行保存。因为C中头文件 stringstream既可以从string读数据也可向string写数据&#xff0c;利于其这个特点&#xff0c;我们可以进行批量读取和批量保存工作。 参考程…

大数据可视化案例分析_Tableau数据可视化分析案例

0x00 Tableau简介Tableau是一款定位于数据可视化敏捷开发和实现的商务智能展现工具&#xff0c;可用来实现交互的、可视化的分析和仪表盘应用。Tableau提供了体验感良好且易用的使用界面&#xff0c;在处理大规模、多维数据时&#xff0c;可以即时从不同角度看到数据呈现的规律…

1bit和1byte_1byte等于( )bit_学小易找答案

【单选题】WWW上每个资源都有一个唯一地址,称为( )。【单选题】传输层使用( )地址形式区分应用进程?【简答题】习题13【单选题】在网上传输语音和影像,传输层协议一般采用( )。【简答题】分别求出[0,1) 在六个拓扑空间中的内部和闭包。【单选题】以下算法中属于非对称算法的是…

java吃货联盟app讲解_吃货联盟订餐系统——JAVA实现

package com.chihuo;import java.util.Scanner;public class OrderingMgr {public static void main(String[] args){/*数据初始化*/String[] namesnew String[4];//保存订餐人的姓名String[] dishMegsnew String[4];//保存所选信息&#xff0c;包括菜品名及份数String[] addre…

JavaScript-简单的页面输入控制

1.姓名只能是汉字 var nameCheck /^[\u4e00-\u9fa5]{2,21}$/; if(!nameCheck .test(name)){ alert("输入的姓名中含有非汉字字符!"); return false; }2.简单的身份证校验&#xff08;校验内容包括数字&#xff0c;位数&#xff0c;以及末尾的x,X&#xff09;  va…

linux 脚本调用企业微信_shell脚本实现企业微信报警

CorpID"ww3c6298264d839e2f"Secret"YvyMQpMRIoXtdQRWo0RNkMBTZnHWKvBwC3ILkyuCsKQ"agentid1000002Ip$(ip a |grep ens33 |grep inet|awk -F "/" ‘{ print $1 }‘ |awk -F " " ‘{ print $2 }‘)/usr/bin/curl --data-ascii ‘{"…

PyTorch深度学习实战(27)——变分自编码器(Variational Autoencoder, VAE)

PyTorch深度学习实战&#xff08;27&#xff09;——变分自编码器 0. 前言1. 变分自编码器1.1 自编码器的局限性1.2 VAE 工作原理1.3 VAE 构建策略1.4 KL 散度1.5 重参数化技巧 2. 构建 VAE小结系列链接 0. 前言 变分自编码器 (Variational Autoencoder, VAE) 是一种生成模型&…

mysql function怎么创建_mysql,function_mysql创建函数出现问题?,mysql,function - phpStudy

mysql创建函数出现问题?大家好,帮我看看下面的mysql的函数有什么问题?一直创建不了.DELIMITER $$DROP FUNCTION IF EXISTS check_if_exists$$CREATE FUNCTION check_if_exists(object_name VARCHAR(100),db_name VARCHAR(100),object_type enum(t, f, v, p))RETURNS INTBEGIN…

基于百度AI+jquery-webcam+servlet实现人脸识别登录,兼容各主流浏览器

1、注册百度AI账号&#xff0c;获取到AI开发资格 详情参见个人博客&#xff1a;你的第一个人脸识别demo&#xff08;http://www.cnblogs.com/guo-eric/p/8109411.html&#xff09; 2、环境准备 首先按照第一步说明将百度的AI类文件和用到的三方类文件下载到本地&#xff0c;需要…

杨辉三角java代码_【LeetCode】118. 杨辉三角(Pascal#x27;s Triangle)解题思路

题目如下&#xff08;题目链接戳我&#xff09;&#xff1a;给定一个非负整数 numRows&#xff0c;生成杨辉三角的前 numRows 行。 备注&#xff1a;在杨辉三角中&#xff0c;每个数是它左上方和右上方的数的和。示例&#xff1a; 输入: 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],…

Django项目创建图解

注&#xff1a;创建完views.py&#xff08;也可以不做编写直接测试&#xff09;就可以运行 python manage.py runserver 来检测服务器是否创建成功了&#xff08;打开浏览器输入提示的网址即可&#xff09; 项目创建解析&#xff1a;http://www.cnblogs.com/monkpy/p/8377190.…