Mysql查询

Mysql查询

  • 一.DQL基础查询
    • 1.语法
    • 2.特点
    • 3.查询结果处理
  • 二.单行函数
    • (1)字符函数
    • (2)逻辑处理
    • (3)数学函数
    • (4)日期函数
  • 三.分组函数
  • 四.条件查询
  • 五.比较
  • 六.模糊查询
  • 七.UNION和UNION ALL
    • (1)UNION
    • (2)UNION ALL
  • 八.排序
  • 九.数量限制
  • 十.分组查询

一.DQL基础查询

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

1.语法

select 查询列表 from 表名

2.特点

(1)查询列表可以是:表中的字段、常量、表达式、函数
(2)查询的结果是一个虚拟的表格

3.查询结果处理

特定列查询:select column1,column2 from table
全部列查询: select * from table
算数运算符:+ - * /
排除重复行: select distinct column1,column2 from table
查询函数:select 函数; / 例如version()
函数:类似于java中的方法,将一组逻辑语句事先在数据库中定义好,可以直接调用
分类:
单行函数:如concat、length、ifnull等
分组函数:做统计使用,又称为统计函数、聚合函数、组函数

二.单行函数

(1)字符函数

length():获取参数值的字节个数

SELECT id,NAME,LENGTH(NAME) FROM nbaplayer

char_length()获取参数值的字符个数

SELECT id,NAME,CHAR_LENGTH(NAME) FROM nbaplayer

concat(str1,str2,…):拼接字符串

SELECT id,CONCAT(NAME,':',weizhi) FROM nbaplayer

upper()/lower():将字符串变成大写/小写

SELECT id,UPPER(NAME) AS '姓名',weizhi FROM nbaplayer
SELECT id,LOWER(NAME) AS '姓名',weizhi FROM nbaplayer

substring(str,pos,length):截取字符串 位置从1开始

SELECT id,NAME,SUBSTRING(NAME,1,2) AS"截取",weizhi FROM nbaplayer

instr(str,指定字符):返回子串第一次出现的索引,如果找不到返回0

SELECT id,NAME,INSTR(NAME,'特') AS'查找',weizhi FROM nbaplayer

trim(str):去掉字符串前后的空格或子串,trim(指定子串 from 字符串)

SELECT id,NAME,weizhi,TRIM('a' FROM NAME) AS'去掉字串' FROM nbaplayer

lpad(str,length,填充字符):用指定的字符实现左填充将str填充为指定长度

SELECT id,NAME,LPAD(NAME,10,'a') FROM nbaplayer

rpad(str,length,填充字符):用指定的字符实现右填充将str填充为指定长度

SELECT id,NAME,RPAD(NAME,10,'a') FROM nbaplayer

replace(str,old,new):替换,替换所有的子串

SELECT id,NAME,REPLACE(NAME,'特','6') FROM nbaplayer

(2)逻辑处理

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

SELECT
  id,
  NAME,
  (
    CASE
      WHEN weight < 100
      THEN '太轻了'
      WHEN weight >= 100
      AND weight < 150
      THEN '正常'
      ELSE '超重'
    END
  )
FROM
  nbaplayer

(2)ifnull(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回原本的值

SELECT
  id,
  NAME,
  IFNULL (weizhi, '位置还没有录入')
FROM
  nbaplayer

(3)if函数:if else的 效果 if(条件,结果1,结果2)

 -- if函数:if else的 效果 if(条件,结果1,结果2)
SELECT
  id,
  NAME,
  IF (
    weight >= 100
    AND weight < 150,
    '正常',
    '不正常'
  )
FROM
  nbaplayer 

(3)数学函数

(1) round(数值):四舍五入

SELECT id,NAME,height,ROUND(height) FROM nbaplayer

(2)ceil(数值):向上取整,返回>=该参数的最小整数

SELECT id,NAME,height,CEIL(height) FROM nbaplayer

(3)floor(数值):向下取整,返回<=该参数的最大整数

SELECT id,NAME,height,FLOOR(height) FROM nbaplayer

(4)truncate(数值,保留小数的位数):截断,小数点后截断到几位

SELECT id,NAME,height,TRUNCATE(height,0) FROM nbaplayer

(5)mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负

SELECT id,NAME,weight,height,MOD(weight,height) FROM nbaplayer

(6)rand():获取随机数,返回0-1之间的小数

SELECT id,NAME,height,RAND() AS '随机数' FROM nbaplayer

(4)日期函数

(1)now():返回当前系统日期+时间

SELECT NOW()

(2)curdate():返回当前系统日期,不包含时间

SELECT CURDATE()

(3)curtime():返回当前时间,不包含日期

SELECT CURTIME()

可以获取指定的部分,年、月、日、小时、分钟、秒
(1)YEAR(日期列)

SELECT YEAR(birthday) FROM nbaplayer

(2)MONTH(日期列)

SELECT MONTH(birthday) FROM nbaplayer

(3)DAY(日期列)

SELECT DAY(birthday) FROM nbaplayer

(4)HOUR(日期列)

SELECT HOUR(birthday) FROM nbaplayer

(5)MINUTE(日期列)

SELECT MINUTE('2003-2-20 11:39:12')

(6)SECOND(日期列)

SELECT SECOND('2003-2-20 11:39:12')

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

SELECT STR_TO_DATE('2003,2,20','%Y,%m,%d')//这个方法格式必须正确否则会显示NULL

date_format:将日期转换成字符串

SELECT DATE_FORMAT(CURDATE(),'%Y年%m月%d日')

datediff(big,small):返回两个日期相差的天数

SELECT DATEDIFF(CURDATE(),birthday) FROM nbaplayer

Mysql查询_第1张图片
上表是日期转化时的格式

三.分组函数

功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类:sum 求和,avg 平均值,max 最大值,min 最小值,count 计数(非空)

1.sum,avg一般用于处理数值型,max,min,count可以处理任何类型
2.以上分组函数都忽略null值
3.count函数的一般使用count(*)用作统计行数
4.和分组函数一同查询的字段要求是group by后的字段

四.条件查询

使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句。
语法:select <结果> from <表名> where <条件>

五.比较

(1)=, != 或<>, >, <, >=, <=

(2)逻辑运算
and 与
or 或
not

SELECT * FROM nbaplayer WHERE weizhi='后卫' -- =
SELECT * FROM nbaplayer WHERE weizhi!='前锋' -- !=或<>
SELECT * FROM nbaplayer WHERE height>200.0 -- >
SELECT * FROM nbaplayer WHERE height<200.0 -- <
SELECT * FROM nbaplayer WHERE weight>=100 -- >=
SELECT * FROM nbaplayer WHERE weight<=100 -- <=
SELECT * FROM nbaplayer WHERE height<=200 AND weight<=100 --与 AND
SELECT * FROM nbaplayer WHERE weizhi='后卫' OR weizhi='前锋' --或 OR

六.模糊查询

(1)LIKE :是否匹配于一个模式 一般和通配符搭配使用,可以判断字符型数值
或数值型. 通配符: % 任意多个字符,包含0个字符 _ 任意单个字符
(2)between and 两者之间,包含临界值;
(3)in 判断某字段的值是否属于in列表中的某一项
(4)IS NULL(为空的)或 IS NOT NULL(不为空的)

-- is null is not null
SELECT * FROM nbaplayer WHERE weizhi IS NOT NULL
SELECT * FROM nbaplayer WHERE weizhi IS NULL

-- not in()/in()in 判断某字段的值是否属于in列表中的某一项
SELECT * FROM nbaplayer WHERE weight IN(96,111,140)
SELECT * FROM nbaplayer WHERE weight NOT IN(96,111,140)

-- between and 两者之间,包含临界值
SELECT * FROM nbaplayer WHERE weight BETWEEN 100 AND 150

-- 模糊查询
-- LIKE :是否匹配于一个模式 一般和通配符搭配使用,可以判断字符型数值
-- 或数值型. 通配符: % 任意多个字符,包含0个字符 _ 任意单个字符
SELECT * FROM nbaplayer WHERE NAME LIKE '_明'
SELECT * FROM nbaplayer WHERE NAME LIKE '%特%'

七.UNION和UNION ALL

(1)UNION

UNION 的语法如下:
[SQL 语句 1]
UNION
[SQL 语句 2

UNION用于将两条语句合并,并且有自动去重的功能

SELECT * FROM nbaplayer WHERE weizhi='后卫'
UNION
SELECT * FROM nbaplayer WHERE weizhi='前锋'

(2)UNION ALL

UNION ALL 的语法如下:
[SQL 语句 1]
UNION ALL
[SQL 语句 2

UNION ALL同样用于将两条语句合并,但不能自动去重,会把所有记录返回,且效率高于UNION

SELECT * FROM nbaplayer WHERE weizhi='后卫'
UNION ALL
SELECT * FROM nbaplayer WHERE weizhi='前锋'

八.排序

查询结果排序,使用 ORDER BY 子句排序 order by 排序列 ASC/DESC
asc代表的是升序,desc代表的是降序,如果不写,默认是升序
order by子句中可以支持单个字段、多个字段

SELECT * FROM nbaplayer WHERE weizhi='中锋' ORDER BY height DESC, weight ASC

九.数量限制

数量限制
limit子句:对查询的显示结果限制数目 (sql语句最末尾位置)

SELECT * FROM table LIMIT offset rows;
SELECT * from table LIMIT 0

一般用于分页操作

SELECT * FROM nbaplayer WHERE weizhi='后卫' ORDER BY height LIMIT 1,2
-- 跳过1个,查询两个

十.分组查询

语法:
select 分组函数,列(要求出现在group by的后面)
from 表
[where 筛选条件]
group by 分组的列表
[having 分组后的筛选]
[order by 子句]
注意:查询列表比较特殊,要求是分组函数和group by后出现的字段

-- 分组
SELECT weizhi,SUM(height)FROM nbaplayer GROUP BY weizhi
SELECT weizhi,AVG(weight)FROM nbaplayer GROUP BY weizhi HAVING AVG(weight)>100
SELECT weizhi,SUM(id) FROM nbaplayer GROUP BY weizhi HAVING SUM(id)<30

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