MySQL单表查询

目录

概念介绍

基本语法

查询结果处理

函数

字符函数

逻辑函数

数学函数

日期函数

分组函数

条件查询

使用where子句

运算符

模糊查询

联合查询

排序

数量限制

分组查询


概念介绍

        DQL(Data Query Language)数据查询语言查询是使用频率最高的一个操作, 可以从一个表中查询数据,也可以从多个表中查询数据。

基本语法

select 列名 from 表名;

特点:

1.查询列表可以是:表中的字段,常量,表达式,函数

2.查询的结果是一个虚拟的表(只读),不可以对查询出来的表进行数据操作

查询结果处理

  • 查询特定列:select column1,column2 from table
  • 查询全部列:select * from table
  • 查询时可用算数运算符:+-*/,但只可以用于算术不可以对字符串进行操作
  • 排除重复列:select distinct column1,column2 from table 一般多用于多表查询中
  • 查询函数:类似于java中的方法,将一组逻辑语句事先在数据库中定义好,可以直接调用 

函数分类:

1.单行函数:如concat,length,ifnull等

2.分组函数:做统计使用,又称问统计函数,聚合函数,组函数。

函数

字符函数

字符函数

length()

获取参数值的个数,以字节为单位,中文占三个字符,英文占一个字符
char_length() 获取参数的字符个数,以字符为单位
concat(s1,s2) 字符串的拼接
upper()/lower() 将字符转化为大写、小写
substring(s,pos,length)

截取字符串,从s的pos位置开始截取length长度,在mysql中位置从1开始

instr(s,指定字符) 返回字串第一次出现位置的索引,如果没有就返回0
trim(str) 去点字符串前后的空格或者子串,trim(子串 from 字符串)
lpad(str,length,指定字符) 用指定字符实现左填充到指定长度
rpad(str,length,指定字符) 用指定字符实现右填充到指定长度
replace(str,old,new) 字符替换,将old替换成new
strcmp(str1,str2) 逐字符比较两个字符串的大小

逻辑函数

1.

case when(条件2 then 结果1 else 条件2 then 结果2 end;可以有多个when

 2.

ifnull(被检测值,默认值)函数检测是否值为null,如果是null,就返回默认值,否则返回原来的值

3.

if函数 if(条件,结果1,结果2) 如果满足if条件就返回结果1,否则返回结果2 

数学函数

数学函数
abs(num) 绝对值
round(数值) 四舍五入
ceil(num) 向上取整,返回比num大的最小整数
floor(num) 向下取整,返回比num小的最大整数
truncate(数值,保留小数的位数) 截断,小数点后截断到几位
format(数据,保留小数位数) 会四舍五入
mod(被除数,除数) 取余,被除数为正,则为正,被除数为负,则为负
rand(num[seed]) 获取随机数,返回0-1之间的小数,如果加入随机数总数,返回的随机数将不变

 truncate和format的对比:

TRUNCATE(X,D) 直接截取,不进行四舍五入

FORMAT(X,D) 会四舍五入,返回类型是字符串,因为满3位会加一个逗号

举例说明:

SELECT  FORMAT(2687.6487,2), ROUND(2687.6487,2),TRUNCATE(2687.6487,2)

MySQL单表查询_第1张图片

日期函数

日期函数
now() 返回当前系统日期加时间
current_timestamp 返回当前时间戳,与now()没有区别
curdate() 返回当前日期,不包括时间
curtime() 返回当前时间,不包括日期
YEAR(日期列),MONTH(日期列),DAY(日期列) SELECT NAME,YEAR(birthday) FROM student WHERE YEAR(birthday)='2001'
str_to_date

将日期格式的字符转换成指定格式的日期

例:SELECT NAME,STR_TO_DATE(birthday,'%Y-%m-%d') FROM student 

date_format

将日期转化为字符串

例:SELECT DATE_FORMAT(birthday,'%Y') FROM student

datediff 返回两个日期相差的天数

 日期格式:

MySQL单表查询_第2张图片

NOW、CURRENT_TIMESTAMP、SYSDATE的区别:

1.NOW和 CURRENT_TIMESTAMP他们都表示的是SQL开始执行时的系统时间

2.SYSDATE则表示执行此函数时的系统时间。

分组函数

功能:用作统计使用,又称问聚合函数或统计函数或组函数

分类:sum 求和、avg 平均值、max 最大值、min 最小值、count 计数 (非空)

1.sum,avg一般用于处理数值型max,min,count可以处理任何类型

2.以上分组函数都忽略null值

3.count函数的一般使用count(*)用作统计行数,count不会统计null值,count(*)全部统计

4.和分组函数一同查询的字段要求是group by后的字段

条件查询

使用where子句

使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句。

语法:select column from table where 条件

运算符

=, != 或<>, >, =, <= 或逻辑运算符 and or not

模糊查询

  • LIKE :是否匹配于一个模式 一般和通配符搭配使用,可以判断字符型数值 或数值型.
  • 通配符: % 任意多个字符,包含0个字符 _ 任意单个字符 
  • between and 两者之间,包含临界值
  • in 判断某字段的值是否在这其中

例:SELECT * FROM student WHERE NAME LIKE '张%' -- 查询张姓

    SELECT * FROM student WHERE height IN(1.75,1.80) -- 查询身高是1.75或1.80

联合查询

union all 将两个查询的结果进行合并,不会去重

union 和union all 语法一致但会去重

[SQL 语句 1]

UNION

[SQL 语句 2]

排序

查询结果排序,使用 ORDER BY 子句排序

order by 排序列 ASC/DESC

asc代表的是升序,desc代表的是降序,如果不写,默认是升序 order by子句中可以支持单个字段、多个字段。

数量限制

limit子句:对查询的显示结果限制数目 (sql语句最末尾位置),常用于分页查询。

SELECT * FROM table LIMIT offset rows;

SELECT * from table LIMIT 0,5 从第0个位置开始,查询5个数据

分组查询

语法:

select 分组函数,列(要求出现在group by的后面)

from 表

[where 筛选条件]

group by 分组的列表

[having 分组后的筛选]

[order by 子句] 

注意:查询列表比较特殊,要求是分组函数和group by后出现的字段 分组查询中的筛选条件分为两类

having和where的区别
数据源 源位置 关键字
分组前筛选 原始表 group by子句的前面 where
分组后筛选 分组后的结果集 group by子句的后面 having

你可能感兴趣的:(mysql,数据库)