首页 > 数据库 >mysql补充

mysql补充

时间:2023-03-20 22:00:21浏览次数:35  
标签:test1 tnum test2 补充 num mysql where select

目录

select

1. 查找不同行 distinct

select distinct num from test1;

2. 限制输出行数 limit

select num from test1 limit 5;#限制输出的行数最多5行

select num
from test1 limit 5,5;#第一个五表示从第五行开始,第二个五表示输出五行

#注意行号是从0开始的,所以limit1,1相当于从第二行开始的一行
#mysql还有一种平替语法,limit 4 offset 3 == limit 3,4
  • 运行结果:
select * from test1 limit 2,1;

image

image

3. 排序 order by

  • 根据order by的列来排序输出
select *
from  test1 order by num;
#按照num的大小升序输出,默认为升序

select *
from test1
order by num desc; #加上desc之后为降序

select *
from test1
order by num,name; #按照num和name排序,先看num,如果相同再看name

select * 
from test1
order by num,name desc; #这里的降序是只针对name的,num还是升序,所以要全降序,需要每个地方都加desc

select * name
from test1
order by age 
limit 1;
#limit和order by结合可以输出最小和最大的值

4. 筛选where,条件符andor

select *
from test1
where age=10;#输出所有年龄为10的信息

where... order by ... #order by要在where 之后要不会出错

select *
from test1
where age <> 10;#输出年龄不等于10的信息

select *
from test1
where age between 10 and 20;#输出年龄在10-20之间的信息

select *
from test1
where age is null;#检查是否有空值

select *
from test1
where age>10 and age<20;#符号 and 表示并,需要同时满足

select *
from test1
where age<10 or age>20;#符号 or 表示或,至少满足其中一个即可

select *
from test1
where age<10 or age>20 and name='111';
#and的优先级是高于or的,所以这个条件可以翻译为,name为'111'并且age>20的,或者age<10的
#解决方法是加括号确定优先级

image

5. in操作符,和not

In

  • in操作符给定取值区间,然后判断是否在区间内
select * 
from test1
where age in (10,20,30);#找出age为10,20,30的信息
  • 其实可以发现,in和or很类似,之间完全可以互相转换
  • 那为什么要使用In,有如下优点
    image

not

  • not的作用就是否定
select * 
from test1
where age not in (10,20,30);#找出age不为10,20,30的信息

6.通配符like(%) (_)

  • 用来匹配一部分值的特殊字符

( % )

  • %可以表示任意数量的字符
select *
from test2
where tnum like '0%';#查询后缀有0的内容,%可以表示任意数量的字符,任意数量可以是0

select *
from test2
where tnum like '110%';#前缀有110的内容

select *
from test2
where tnum like '%0%';#某个位置有0

select *
from test2
where tnum like '1%0';#以1开头0结尾

( _ )

  • 与%类似,但是只能表示一个字符,并且不能为空
select *
from test2
where tnum like '%1_';#表示1前面可以有任意个字符,后面必须有一个字符

+ 通配符使用所需要注意的

image

7. 正则表达式

regexp

select *
from test2
where tnum regexp '10'; // 相当于 where tnum like '%10%';

select *
from test2
where tnum regexp '00.1';// .表示可以代替任意一个字符

select *
from test2
where tnum regexp '00[123]';//相当于in,001 002 003,看看那个能匹配上
# [^123] 就是除了123意外的数
# 还可以简化写[1-3],就是[123]的简化版
  • 关于为什么有like还使用regexp

image

OR匹配

select *
from test2
where tnum regexp '00|1';#和or差不多

转义字符

  • 一个字符串为'adw.we',我们想通过'.'来找到他,然后输出,然后如果我们 regexp '.',会输出全部内容,因为这里的'.'被认为是代替一个字符了,所以我们要写成regexp '\\.' ,如果是'\'这样的字符,则需要写成'\\\'

定位符

image

select * 
from test2
where tnum regexp '^[0-9\\.]'; #只有在第一个是其中数字时才匹配

计算字段

拼接concat

select concat(num,'(',name,')') //有点像规定输出格式
from test2;

image


  • Trim函数,LTrim函数去除对应列左边的空格,RTrim右边的空格
select RTrim(tnum)
from test2;

别名

  • 我们可以将表名替换成一个别名
select concat(num,'(',name,')') as hh
from test2;

image


函数

  • 调用文本处理函数来实现某些功能
    比如:
select upper(str)//upper的功能是将字符转化为大写
from test3;
  • 其他常用的文本处理函数
    image
    image

日期处理函数

  • 常用的函数
    image

  • 一般表示日期的数据类型类datetime,顾名思义就是日期+时间,具体格式为yyyy-mm-nn

select *
from test4
where dat='2002-04-05';
  • 问:上面这种写法是否可靠?
    答: 不可靠,假如其中有一项数据为'2002-04-05 11:30:30',也就是时间不为00:00:00,那么就无法匹配,所以在匹配时应该只让日期匹配,所以就要用date()函数,取其中的日期,同理还有time()函数,取其中的时间
  • 与一些关系符结合
select *
from test4
where date(dat) between '2002-07-01' and '2002-07-31'; //匹配7月份所有数据

select *
from test4
where year(dat)=2002 and month(dat)=7;//也是匹配七月份所有数据,另一种写法

数值处理函数

  • 常用的数值处理函数
    image

聚集函数

  • 常用函数
    image

  • 用法

avg

select avg(num) as avg_num//输出num这一列的平均值
from test1;

count
image

select count(num) as count_num//输出num列的行数
from test1;

max min

  • 返回一列中最大的(最小的)
    image

  • min类似

  • 聚集函数中的列,默认为ALL,也就是选择全部的行,如果前面加上distinct,则只会选择不同的行


分组

标签:test1,tnum,test2,补充,num,mysql,where,select
From: https://www.cnblogs.com/hhzp/p/17235967.html

相关文章

  • Android Studio通过jdbc连接MySQL
    1、下载MySQL-connector-jave.jar包地址如下:https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.46 2、将jar包移到如图所示的位置,然后右键addasl......
  • mysql索引、优化、sql性能分析
    为什么InnoDB存储引擎选择使用B+tree索引结构?相对于二叉树,层级更少,搜索效率高对于B-tree,无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页中存储的键值减少,指针......
  • Oracle/Mysql/SqlServer 常用函数区别
    1.类型转换   --Oracle  select to_number('123') from dual;  --123;   select to_char(33) from dual;       --33;  select to_date('......
  • android studio连接mysql
    今天下午课上建民让我们准备安卓端的地铁查询开发,但是我用的是mysql储存,之前的远程数据库是用的sqlserver,所以又重新挑战了我的心魔(当时试了好几天都没法连接mysql),终于成......
  • linux安装mysql8
    #解压tarxvJfmysql-8.0.30-linux-glibc2.12-x86_64.tar.xz#改名mvmysql-8.0.30-linux-glibc2.12-x86_64mysql-8.0.30cdmysql-8.0.30;mkdirdata;mkdirlog......
  • run mysql server in docker with exist database
    step1:putyourdatabasein$mysql_data_dirfirststep2:putyourmy.confto$mysql_cnf,forexample:thatmy.cnffromalibabacloud[mysqld]pid-file......
  • mysql 查找删除重复数据
    创建测试数据MySQL[test]>createtablepeople(idintauto_incrementprimarykey,namevarchar(50)notnull,emailvarchar(100)notnull);QueryOK,0rowsaf......
  • 8.1.6mysql的条件子查询
    如题。一个不算复杂的东西,书上说的太绕了,不能忍。准备数据,这里有三张表(偷懒,各种编号都是整数)。t1是学生基本情况表,重要的字段是学号和姓名。t2是课程表,包括课程号和课程......
  • install mysql in docker
    installmysqlindocker#step-1:configuremysql_port='3306'mysql_password='123qwe'mysql_data_dir="~/docker/mysqld_${mysql_port}/data"#step-2:delete-da......
  • mysql视图
    1.常见的数据库对象2.视图2.1为什么使用视图视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。比如,针对一个公司的......