在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 |
microphone
| 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;
mysql语句顺序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;
人体有96种元素组成
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可以进⾏聚合函数的判断
聚合函数
switchcase语句判断范围max():最⼤值
min():最⼩值
avg():平均值
sum():和
c编程软件有哪些count():记数enable的动词用法
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_
注意
分组查询的字段只有:分组字段、聚合函数
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]未分组状态下

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。