Mysql基本语句总结(Mysql必知必会)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/luffysk/article/details/78531913

1. 连接

mysql -u用户名 -p密码
USE db_name;
SHOW DATABASES;
SHOW TABLES;
SHOW COLUMNS FROM tbl_name;
DESCRIBE tbl_name;
SHOW CREATE TABLE/DATABASE [tbl_name/db_name];

2.检索数据

2.1 检索单列

SELECT col_name FROM tbl_name;

2.2 检索多列

SELECT col_name1,col_name2… FROM tbl_name;

2.3 检索所有列

SELECT * FROM tbl_name;

2.4 去除检索中的重复行

SELECT DISTINCT col_name1,col_name2… FROM tbl_name;

2.5 返回指定数量的行

SELECT col_name1,col_name2… FROM tbl_name LIMIT 返回的行数
SELECT col_name1,col_name2… FROM tbl_name LIMIT 起始位置(从0开始),行数
SELECT col_name1,col_name2… FROM tbl_name LIMIT 返回行数 OFFSET 起始位置

3.排序检索数据

3.1 按单列排序

SELECT col_name1,col_name2… FROM tbl_name ORDER BY col_name;

3.2 按多列排序

SELECT col_name1,col_name2… FROM tbl_name ORDER BY col_name2,col_name4…

3.3 指定排序方向

SELECT col_name1,col_name2… FROM tbl_name ORDER BY col_name ASC(默认值)
SELECT col_name1,col_name2… FROM tbl_name ORDER BY col_name DESC

4.过滤数据

4.1 WHERE 子句过滤

SELECT col_name1,col_name2… FROM tbl_name WHERE (过滤条件)

4.2 WHERE 子句操作符

=(等于)、<>(!=)(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、BETWEEN(两者之间)

4.3 范围检查

SELECT col_name1,col_name2… FROM tbl_name WHERE col_name BETWEEN (start, end);

4.4 空值检查

SELECT col_name1,col_name2… FROM tbl_name WHERE col_name IS NULL;

4.5 AND操作符

SELECT col_name1,col_name2… FROM tbl_name WHERE 过滤条件1 AND 过滤条件2 AND 过滤条件3..;

4.6 OR操作符

SELECT col_name1,col_name2… FROM tbl_name WHERE 过滤条件1 OR 过滤条件2 OR 过滤条件3..;
(AND和OR并列时优先计算AND)

4.7 IN操作符

SELECT col_name1,col_name2… FROM tbl_name WHERE col_name IN (value1,value2…);

4.8 NOT操作符

SELECT col_name1,col_name2… FROM tbl_name WHERE col_name NOT IN (value1,value2…);

5.通配符过滤

5.1 LIKE 操作符

SELECT col_name1,col_name2… FROM tbl_name WHERE col_name LIKE 子串%;(%:任何字符出现任意次数,不能匹配值为NULL的行)
SELECT col_name1,col_name2… FROM tbl_name WHERE col_name LIKE 子串_;(_:匹配单个字符)

6.使用正则表达式搜索

6.1 基本字符匹配

SELECT col_name1,col_name2… FROM tbl_name WHERE col_name REGEXP ‘匹配字符’;

6.2 OR匹配

SELECT col_name1,col_name2… FROM tbl_name WHERE col_name REGEXP ‘匹配字符1 | 匹配字符2 …’;

6.3 匹配多个字符之一

SELECT col_name1,col_name2… FROM tbl_name WHERE col_name REGEXP ‘[匹配字符1匹配字符2…]’;

6.4 匹配范围

SELECT col_name1,col_name2… FROM tbl_name WHERE col_name REGEXP ‘[起始范围-结束范围]’;

6.5 匹配特殊字符

SELECT col_name1,col_name2… FROM tbl_name WHERE col_name REGEXP ‘\\特殊字符’;
\\f(换页)、\\n(换行)、\\r(回车)、\\t(制表)、\\v(纵向制表)

6.6 匹配字符类

[:alnum:] 任意字母或数字
[:alpha:] 任意字符
[:digit:] 任意数字
[:lower:] 任意小写字母
[:upper:] 任意大写字母

6.7 匹配多个实例

* 0个或多个
+ 1个或多个
\? 0个或1个
{n} 指定数目
{n,} 不少于指定数目
{m,n} 范围匹配

7.计算字段

7.1 拼接字段

SELECT Concat(col_name1,’(‘, col_name2, ‘)’) FROM tbl_name;

7.2 去除空格

SELECT Concat(RTrim(col_name1),’(‘, LTrim(col_name2), ‘)’) FROM tbl_name;
LTrim():去除左空格
RTrim():去除右空格

7.3 使用别名

SELECT Concat(RTrim(col_name1),’(‘, LTrim(col_name2), ‘)’) AS 别名 FROM tbl_name;

7.4 执行算术计算

SELECT col_name1[+,-,*,/]col_name2 FROM tbl_name;

8.数据处理函数

8.1 文本处理函数

Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Right() 返回串右边的字符
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值
SubString() 返回子串的字符
Upper() 将串转换为大写

8.2 日期和时间函数

AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Month() 返回一个日期的月份部分
Now() 返回当前日期和时间
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分

8.3 数值处理函数

Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切

8.4 聚集函数

AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和

9.分组数据

SELECT col_name1, col_name2… FROM tbl_name WHERE condition GROUP BY field1, field2…;
SELECT col_name, 聚集函数 FROM tbl_name WHERE condition GROUP BY col_name;(使用分组查询时,列和聚集函数一起使用则group by后必须加入查询列)

9.1 group by 和 order by

order by 位于group by后面,它对分组后的数据进行排序

9.2 having 和 where

where对未分组的数据进行过滤,having对分组后的数据进行过滤,where中不可以加入聚集函数,having中可以用聚集函数过滤,where必须出现在group by之前

9.3 关键词顺序

SELECT col_name1, col_name2… FROM tbl_name WHERE condition GROUP BY condition HAVING condition ORDER BY col_name LIMIT condition

10.子查询

在一条sql语句中出现第二个SELECT 关键词,则其为子查询
子查询可以作为计算字段也可以作为查询过滤,即子查询可以出现在SELECT 之后,FROM之前,也可以出现在WHERE条件过滤之中
SELECT col_name1, (SELECT col_name FROM tbl_name) FROM tbl_name1;
SELECT col_name1,col_name2… FROM tbl_name WHERE col_name = (SELECT col_name FROM tbl_name1);

11.表联结

两张表通过外键进行联结,如果不指定条件则会发生笛卡尔积,即A表中的每一行匹配一次B表中的所有行,最后表的大小为A表行数*B表行数,当指定联结条件后只有符合联结条件的行会被显示出来
SELECT col_name_a,col_name_b FROM A INNER JOIN B ON A.col_name = B.col_name
多表联结类似于双表联结
符合联结条件的行会被显示出来
SELECT col_name_a,col_name_b,col_name_c FROM A,B,C WHERE A.col_name = B.col_name AND A.col_name = C.col_name;

12.插入、更新和删除数据

INSERT INTO tbl_name(字段列表) VALUES (字段值);
UPDATE tbl_name SET col_name = 更新值 WHERE condition;
DELETE FROM tbl_name WHERE condition;
如果update和delete执行时不加where条件则表中所有的值都会被更新或删除

13.表的操作

CREATE TABLE tbl_name (字段 字段类型 是否为空 是否为主键 是否自增 默认值);
ALTER TABLE 更新条件;
DROP TABLE tbl_name;
RENAME TABLE tbl_name_a TO tbl_name_b;

14.视图、存储过程、游标

14.1 视图

视图是一张虚表,主要用来查询,不能执行增删改操作
CREATE VIEW view_name AS 查询语句;

14.2 存储过程

存储过程为某些sql语句在以后会经常使用则将其封装到一起,需要使用时直接调用名字便可执行,存储过程的执行称为调用
CREATE PROCEDURE name() BEGIN sql语句 END;
CALL name();
DROP PROCEDURE name;

CREATE PROCEDURE name(IN/OUT/INOUT args) BEGIN sql语句 END;
CALL name(@args);
IN 传递给存储过程的参数
OUT 存储过程传出的参数
INOUT 对存储过程传入和传出

14.3 游标

游标(cursor) 是一个存储在MySQL服务器上的数据库查询,
它不是一条SELECT语句,而是被该语句检索出来的结果集,mysql游标只能用于存储过程和函数

猜你喜欢

转载自blog.csdn.net/luffysk/article/details/78531913