MySQL:CRUD,函数以及union&union all

一. CRUD

1. SELECT(查询)

基础查询:

select 查询列表 from 表名:从表中查询。

查询列表可以是表中的字段、常量、表达式和函数等。

查询的结果是一个虚拟的表格。

查询多个字段,在查询列表中用逗号隔开。

*可以表示所有字段。

select distinct 查询列表 from 表名:去除查询结果中的重复部分。

所有字段都完全相同才算是重复。

例:SELECT DISTINCT salary FROM employees

为字段起别名:

select 查询列名 As 别名 from 表名

select 查询列名 别名 from 表名

如果要查询的字段有重名的情况,使用别名可以进行区分。

在from后为表起别名也是同理,但是为表起别名后,其原有的表名就无法使用了。

+号的作用:

在MySQL中,+号的作用是作为运算符,而无法作为连接符。

两个数值类型,则作加法运算。

一个数值一个字符,则试图将字符型数值转换为数值型。如果转换失败,则字符型看作0。

如果有一个是null,则结果也为null。

连接符的作用由concat(字段1,字段2)函数实现。

例:SELECT CONCAT(first_name,last_name) FROM employees

判断是否为null:

ifnull(字段,新值):对字段进行判断,如果不为null则返回字段原本的值,如果为null则返回新值。

isnull(字段):对字段进行判断,如果不为null则返回1,如果为null则返回0。

条件查询:

select 查询列表 from 表名 where 筛选条件:查询符合条件的结果。

执行过程:先定位到表名,再按条件进行筛选,最后进行查询。

筛选条件:

条件表达式:使用条件运算符<><>=!=>=<=

逻辑表达式:使用逻辑运算符&&||!、and、or、not。

例:SELECT * FROM employees WHERE salary>10000 AND salary<20000

使用模糊查询:like、between and、in、is null/is not null。

like:使用%(任意多个字符)、_(任意单个字符)通配符。通配符无法匹配null,但是也可以对数值型进行通配。

例:SELECT * FROM employees WHERE first_name LIKE '_a%'

通配符转义一般使用\,也可以用escape指定。

between and:包含临界值,但两个临界值不能颠倒(等价于大于等于左侧值,小于等于右侧值)。

in:判断某字段的值是否与列表中的某一项匹配(等价于使用多个=号,不支持通配符)。

例:SELECT * FROM employees WHERE job_id IN('IT_PROG','FI_MGR')

is null/is not null:使用=/<>号不能匹配null值。

安全等于<=>:可以匹配普通值和null值。

排序查询:

select 查询列表 from 表名 order by 排序列表 ASC/DESC:根据排序列表排序,并且指定或升序降序。排序列表还支持表达式、函数和别名。

例:SELECT * FROM employees WHERE department_id>=90 ORDER BY hiredate ASC

length(字段):获取某个字段对应的各行值的长度。

排序列表也可以包含多个字段,先按先写的字段排序。

order by字句一般在语句的最后,但在limit字句之前。

1.2 INSERT(新增)

插入语句:

insert into 表名(列名,...) value(值,...)

插入的值的类型要与列的类型一致或兼容。

表名后的列名可以省略,默认是所有列按顺序插入。

value后可以有多个()进行插入。

也可以用一个子查询替换value()进行插入。

insert into 表名 set 列名=值

1.3 UPDATE(修改)

修改单表:

update 表名 set 列=新值 where 筛选条件

修改多表:

update 表1 连接类型 join 表2 on 连接条件 set 列名=值 where 筛选条件

1.4 DELETE(删除)

删除单表:

delete from 表名 where 筛选条件

truncate table 表名

truncate table会删除整个表,不能接where。

删除多表:

delete 所要删掉的表 from 表1 连接类型 join 表2 on 连接条件 where 筛选条件

出处:https://www.cnblogs.com/iwehdio/p/13893865.html

二. 函数

常见函数:

select 函数名(实参) from 表名

单行函数:

字符函数:

length(字段):获取字段对应的字节个数。

concat(字段1,字段2):拼接字符串。

upper(字段):全部变为大写。

lower(字段):全部变为消息。

substr(字段,起始索引,截取长度):截取字符串,索引从1开始,长度指的是字符长度。

instr(字段1,字段2):返回字段2在字段1中的第一次出现的起始索引。找不到返回0。

trim(去除字符 from 字段):去除字段中前后为去除字符的内容,不指定去除字符则默认为去除空格。

lpad(字段,总长度,填充字符):用指定的字符实现左填充到指定长度。rpad同理。

replace(字段,被替换字符,新字符):替换字段中的指定字符。

数学函数:

round(字段,小数点保留位数):四舍五入。

ceil(字段):向上取整。

floor(字段):向下取整。

truncate(字段,小数点保留位数):截断小数。

mod(字段,被除数):取余。

rand():获取0到1之间的随机数。

日期函数:

now():返回当前系统日期和时间。

curdate():返回当前日期。

curtime():返回当前时间。

year(日期字段):返回日期的年。同理还有月、日等。

str_to_date(字符串,格式):将字符串按指定格式转换为日期。

date_format(日期字段,格式):将日期转换为指定格式的字符串。

datediff(日期字段1,日期字段2):两个日期相差的天数。

流程控制函数:

if(条件表达式,结果1,结果2):根据条件表达式,true返回结果1,false返回结果2。

case类似switch case的结构,相当于多个where条件查询:

case 要判断的字段或表达式
when 常量1 then 要显示的值1
when 常量2 then 要显示的值2
else 要显示的值3
end

case类似多重if else语句:

case
when 条件1 then 要显示的值1
when 条件2 then 要显示的值2
else 要显示的值3
end

分组函数(聚合函数):

sum(字段):求和。

avg(字段):平均值。

max(字段):最大值。

min(字段):最小值。

count(字段):个数。字段为*可以统计行数。字段为1,也有同样的效果。

以上分组函数都忽略null值。

sum(distinct 字段):去重后再求和。

分组查询:

select 分组函数,分组字段 from 表名 group by 分组字段

例:SELECT MAX(salary),job_id FROM employees GROUP BY job_id

如果where 筛选条件group by之前,是先筛选再分组查询。

如果having 筛选条件group by之后,是先分组查询再筛选。

group by后可以放多个字段,就可以按多个字段分组。

group by、having和order by后可以用别名,但是where后不行。

MySQL 字符串函数

函数 描述
ASCII 返回特定字符的 ASCII 值
CHAR_LENGTH 返回字符串的长度(以字符为单位)
CHARACTER_LENGTH 返回字符串的长度(以字符为单位)
CONCAT 将两个或多个表达式加在一起
CONCAT_WS 使用分隔符将两个或多个表达式添加在一起
FIELD 返回值在值列表中的索引位置
FIND_IN_SET 返回字符串在字符串列表中的位置
FORMAT 将数字格式化为类似"#,###,###.##"的格式,四舍五入到指定的小数位数
INSERT 在字符串中的指定位置插入字符串,并插入一定数量的字符
INSTR 返回一个字符串在另一个字符串中第一次出现的位置
LCASE 将字符串转换为小写
LEFT 从字符串中提取多个字符(从左开始)
LENGTH 返回字符串的长度(以字节为单位)
LOCATE 返回字符串中子字符串第一次出现的位置
LOWER 将字符串转换为小写
LPAD 用另一个字符串向左填充一个字符串,达到一定的长度
LTRIM 从字符串中删除前导空格
MID 从字符串中提取子字符串(从任意位置开始)
POSITION 返回字符串中子字符串第一次出现的位置
REPEAT 按照指定的次数重复一个字符串
REPLACE 用新的子字符串替换字符串中所有出现的子字符串
REVERSE 反转一个字符串并返回结果
RIGHT 从字符串中提取多个字符(从右开始)
RPAD 用另一个字符串右填充一个字符串到一定长度
RTRIM 从字符串中删除尾随空格
SPACE 返回指定空格数的字符串
STRCMP 比较两个字符串
SUBSTR 从字符串中提取子字符串(从任意位置开始)
SUBSTRING 从字符串中提取子字符串(从任意位置开始)
SUBSTRING_INDEX 在出现指定数量的分隔符之前返回字符串的子字符串
TRIM 从字符串中删除前导和尾随空格
UCASE 将字符串转换为大写
UPPER 将字符串转换为大写


MySQL 数值函数

函数 描述
ABS 返回一个数字的绝对值
ACOS 返回数字的反余弦
ASIN 返回数字的反正弦
ATAN 返回一个或两个数字的反正切
ATAN2 返回两个数的反正切
AVG 返回表达式的平均值
CEIL 将 >= 的最小整数值返回为数字
CEILING 将 >= 的最小整数值返回为数字
COS 返回数字的余弦
COT 返回数字的余切
COUNT 返回选择查询返回的记录数
DEGREES 将弧度值转换为度数
DIV 用于整数除法
EXP 返回 e 的指定数次方
FLOOR 将 <= 的最大整数值返回为数字
GREATEST 返回参数列表的最大值
LEAST 返回参数列表中的最小值
LN 返回数字的自然对数
LOG 返回一个数字的自然对数,或者一个数字的对数到指定底数
LOG10 返回一个以 10 为底的自然对数
LOG2 返回以 2 为底的数字的自然对数
MAX 返回一组值中的最大值
MIN 返回一组值中的最小值
MOD 返回一个数除以另一个数的余数
PI 返回 PI 的值
POW 返回一个数字的另一个数字的幂
POWER 返回一个数字的另一个数字的幂
RADIANS 将度数转换为弧度
RAND 返回一个随机数
ROUND 将数字四舍五入到指定的小数位数
SIGN 返回一个数字的符号
SIN 返回数字的正弦
SQRT 返回数字的平方根
SUM 计算一组值的总和
TAN 返回数字的正切
TRUNCATE 将数字截断到指定的小数位数

MySQL 日期函数

函数 描述
ADDDATE 将时间/日期间隔添加到日期,然后返回日期
ADDTIME 将时间间隔添加到时间/日期时间,然后返回时间/日期时间
CURDATE 返回当前日期
CURRENT_DATE 返回当前日期
CURRENT_TIME 返回当前时间
CURRENT_TIMESTAMP 返回当前日期和时间
CURTIME 返回当前时间
DATE 从日期时间表达式中提取日期部分
DATEDIFF 返回两个日期值之间的天数
DATE_ADD 将时间/日期间隔添加到日期,然后返回日期
DATE_FORMAT 格式化日期
DATE_SUB 从日期中减去时间/日期间隔,然后返回日期
DAY 返回给定日期的月份日期
DAYNAME 返回给定日期的工作日名称
DAYOFMONTH 返回给定日期的月份日期
DAYOFWEEK 返回给定日期的工作日索引
DAYOFYEAR 返回给定日期的一年中的哪一天
EXTRACT 从给定日期提取部分
FROM_DAYS 从数字日期值返回日期
HOUR 返回给定日期的小时部分
LAST_DAY 提取给定日期当月的最后一天
LOCALTIME 返回当前日期和时间
LOCALTIMESTAMP 返回当前日期和时间
MAKEDATE 根据年份和天数值创建并返回日期
MAKETIME 根据小时、分钟和秒值创建并返回时间
MICROSECOND 返回时间/日期时间的微秒部分
MINUTE 返回时间/日期时间的分钟部分
MONTH 返回给定日期的月份部分
MONTHNAME 返回给定日期的月份名称
NOW 返回当前日期和时间
PERIOD_ADD 将指定的月数添加到期间
PERIOD_DIFF 返回两个句点之间的差
QUARTER 返回给定日期值的一年中的季度
SECOND 返回时间/日期时间的秒部分
SEC_TO_TIME 根据指定的秒数返回一个时间值
STR_TO_DATE 根据字符串和格式返回日期
SUBDATE 从日期中减去时间/日期间隔,然后返回日期
SUBTIME 从日期时间中减去一个时间间隔,然后返回时间/日期时间
SYSDATE 返回当前日期和时间
TIME 从给定时间/日期时间中提取时间部分
TIME_FORMAT 按指定格式格式化时间
TIME_TO_SEC 将时间值转换为秒
TIMEDIFF 返回两个时间/日期时间表达式之间的差异
TIMESTAMP 根据日期或日期时间值返回一个日期时间值
TO_DAYS 返回日期和日期"0000-00-00"之间的天数
WEEK 返回给定日期的周数
WEEKDAY 返回给定日期的工作日编号
WEEKOFYEAR 返回给定日期的周数
YEAR 返回给定日期的年份部分
YEARWEEK 返回给定日期的年和周数

MySQL 高级函数

函数 描述
BIN 返回数字的二进制表示
BINARY 将值转换为二进制字符串
CASE 遍历条件并在满足第一个条件时返回一个值
CAST 将(任何类型的)值转换为指定的数据类型
COALESCE 返回列表中的第一个非空值
CONNECTION_ID 返回当前连接的唯一连接 ID
CONV 将数字从一种数字基系统转换为另一种数字系统
CONVERT 将值转换为指定的数据类型或字符集
CURRENT_USER 返回服务器用来验证当前客户端的 MySQL 帐户的用户名和主机名
DATABASE 返回当前数据库的名称
IF 如果条件为 TRUE,则返回一个值,如果条件为 FALSE,则返回另一个值
IFNULL 如果表达式为NULL,则返回指定值,否则返回表达式
ISNULL 根据表达式是否为 NULL 返回 1 或 0
LAST_INSERT_ID 返回表中已插入或更新的最后一行的 AUTO_INCREMENT id
NULLIF 比较两个表达式,如果相等则返回 NULL。否则返回第一个表达式
SESSION_USER 返回当前 MySQL 用户名和主机名
SYSTEM_USER 返回当前 MySQL 用户名和主机名
USER 返回当前 MySQL 用户名和主机名
VERSION 返回 MySQL 数据库的当前版本

三. MySQL UNION 运算符

UNION 运算符用于组合两个或多个 SELECT 语句的结果集。

  • UNION 中的每个 SELECT 语句必须具有相同的列数
  • 列还必须具有相似的数据类型
  • 每个 SELECT 语句中的列也必须是相同的顺序

UNION 语法

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

UNION ALL 语法

UNION 运算符默认只选择不同的值。 要允许重复值,请使用 UNION ALL:

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

注意: 结果集中的列名通常等于第一个 SELECT 语句中的列名。

思维导图:

相关推荐
小诸葛的博客22 分钟前
pg入门1——使用容器启动一个pg
数据库
sleP4o1 小时前
Python操作MySQL
开发语言·python·mysql
大熊程序猿1 小时前
python 读取excel数据存储到mysql
数据库·python·mysql
落落落sss1 小时前
sharding-jdbc分库分表
android·java·开发语言·数据库·servlet·oracle
jnrjian1 小时前
Oracle 启动动态采样 自适应执行计划
数据库·oracle
知识分享小能手2 小时前
mysql学习教程,从入门到精通,SQL DISTINCT 子句 (16)
大数据·开发语言·sql·学习·mysql·数据分析·数据库开发
lamb张2 小时前
MySQL锁
数据库·mysql
ForRunner1232 小时前
使用 Python 高分解决 reCAPTCHA v3 的指南
数据库·python·microsoft
躺平的花卷3 小时前
Python爬虫案例六:抓取某个地区某月份天气数据并保存到mysql数据库中
数据库·爬虫·python·mysql