一、MySQL LIKE 子句

在 MySQL 中使用 SQL SELECT 命令来读取数据, 同时我们可以在 SELECT 语句中使用 WHERE 子句来获取指定的记录。

WHERE 子句中可以使用等号 = 来设定获取数据的条件,但是有时候我们需要获取 name 字段含有 "xiao" 字符的所有记录,这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。

SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。

如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。

SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

可以在 WHERE 子句中指定任何条件。
可以在 WHERE 子句中使用LIKE子句。
可以使用LIKE子句代替等号 =。
LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
可以使用 AND 或者 OR 指定一个或多个条件。
可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件。

Like模糊查询,通常和通配符百分号 % 和 下划线 _ 联合使用

Select * from user where name like 'X%';
查询 user 表中 name 列中有 'X' 的值,X' 为要查询内容中的模糊信息。

百分号%:匹配任意多个字符;下划线 _:任意一个字符(%是一个特殊的符号,_ 也是一个特殊符号)

'X% ':为能配符,正则表达式,表示的意思为模糊查询信息为 X 开头的

'%X ':为能配符,正则表达式,表示的意思为模糊查询信息为 X 结尾的

'%X%' : 表示查询包含X的所有内容

'%X_': 表示查询以X在倒数第二位的所有内容

'_X%':查询第二个字母为 X

'__X%':查询第三个字母为 X

'%\_%':\ 转义字符;查询带有 下划线 _ 的

【】查询名字中含有O

select name from user where name like '%O%';

【】查询名字以O结尾

 select name from user where name like '%O';

【】查询名字以O开始

select name from user where name like 'O%';

【】查询第二个字每是O

select name from user where name like '_O%';

【】查询第三个字母是O

select name from user where name like '__O%';

【】查询名字中有下划线“_”

select name from user where name like '%\_%'; // \转义字符

二、MySQL UNION 操作符

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据

SELECT expression1, expression2, ... expression_n
FROM tables1
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables2
[WHERE conditions];

expression1, expression2, ... expression_n: 要检索的列。

tables: 要检索的数据表。

WHERE conditions: 可选, 检索条件。

DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。

ALL: 可选,返回所有结果集,包含重复数据。

UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)

UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)

使用形式如下:

SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称 ORDER BY 列名称;
SELECT 列名称 FROM 表名称 UNION ALL SELECT 列名称 FROM 表名称 ORDER BY 列名称;

注:

UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型

同时,每个 SELECT 语句中的列的顺序必须相同

如下,都会报错

列数不同

select empname,job from emp where job = 'salesman' union select empname from emp where job='manager';
ERROR 1222 (21000): The used SELECT statements have a different number of columns

字段类型不同;MYSQL中可以不会报错,但是Oracle语法严格 ,会报错

select empname,job
from emp
where job = 'salesman'
union
select empname,sal
from emp
where job='manager';

UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名

(2)union 和 join 选择

union的效率要高一些

join表连接,每连接一次新表,则匹配的次数满足笛卡尔积,是两张表行数的乘积

union可以减少匹配的次数;还可以完成两个结果集的拼接

如下:a 连接 b;连接 c

a表10条记录;b表 10条记录;c表 10条记录;join匹配次数:10*10*10 = 1000

a 连接 b一个结果:10 * 10  = 100; a 连接 c一个结果:10 * 10 = 100次;union匹配次数:100 + 100 = 200次

(union把乘法变成了加法运算)

三、MySQL 排序 ORDER BY

MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]

ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序ASC排列

如果按照多个字段排序的话,最前面的字段起主导作用,如下

查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,再按照名字升序排列

// sal在前,起主导,只有sal相等的时候,才会考虑启用name排序
select name,sal from emp order by sal asc, name asc; 

我们还可以按照列数排序 ,如下:

// 2表示第二列
select name,sal from emp order by 2;

不建议在SQL中这样写,因为不健壮(列的顺序很容易发生改变,列顺序修改之后,则最新列字段代表的就是另一个字段了)

排序时关键字顺序不能改变

select...
from...
where...
order by...

第一步:from
第二步:where
第三步:select
第四步:order by(排序总是在最后执行!)

四、MySQL GROUP BY 语句

GROUP BY 语句根据一个或多个列对结果集进行分组。

在分组的列上我们可以使用 COUNT, SUM, AVG,等函数

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

WITH ROLLUP

WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)

SELECT name, SUM(student_count) as studentCount FROM  classOne GROUP BY name WITH ROLLUP;

五、MySQL 连接的使用

MySQL 的 JOIN 在两个或多个表中查询数据。

在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。

JOIN 按照功能大致分为如下三类:

INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

六、MySQL NULL 值处理

MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作

为了处理这种情况,MySQL提供了三大运算符:

IS NULL: 当列的值是 NULL,此运算符返回 true。
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
<=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。

is null 为 null;is not null 不为空

在数据库当中null不能使用等号"="进行衡量;需要使用is null

数据库中的null代表什么也没有,它不是一个值,所以不能使用等号"="衡量

SELECT * FROM student WHERE name IS NULL;SELECT * FROM student WHERE name IS NOT NULL;

七、MySQL 正则表达式

MySQL中使用 REGEXP 操作符来进行正则表达式匹配

模式 描述
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像 '[.\n]' 的模式。
[...] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^...] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
p1|p2|p3 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

以 student 表为例

查找name字段中以'st'为开头的所有数据:

SELECT name FROM student WHERE name REGEXP '^st';

查找name字段中以'ok'为结尾的所有数据:

SELECT name FROM student WHERE name REGEXP 'ok$';

查找name字段中包含'mar'字符串的所有数据:

SELECT name FROM student WHERE name REGEXP 'mar';

查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:

SELECT name FROM student WHERE name REGEXP '^[aeiou]|ok$';

八、MySQL ALTER命令

1、删除,添加或修改表字段

用了 ALTER 命令及 DROP 子句来删除以上创建表的 name 字段

ALTER TABLE user DROP name;

如果数据表中只剩余一个字段则无法使用DROP来删除字段

MySQL 中使用 ADD 子句来向数据表中添加列,如下实例在表 user 中添加 age 字段,并定义数据类型

ALTER TABLE user ADD age INT;

age 字段会自动添加到数据表字段的末尾

如果需要指定新增字段的位置,可以使用MySQL提供的关键字 FIRST (设定位第一列), AFTER 字段名(设定位于某个字段之后)

ALTER TABLE user ADD age INT FIRST;ALTER TABLE user ADD age INT AFTER name;

2、修改字段类型及名称

如果需要修改字段类型及名称, 可以在ALTER命令中使用 MODIFY 或 CHANGE 子句

把字段 name 的类型从 CHAR(5) 改为 CHAR(10),可以执行以下命令:

ALTER TABLE user MODIFY name CHAR(10);

使用 CHANGE 子句, 语法有很大的不同。 在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型

ALTER TABLE user CHANGE age age11 BIGINT;

3、ALTER TABLE 对 Null 值和默认值的影响

当修改字段时,可以指定是否包含值或者是否设置默认值。

以下实例,指定字段 j 为 NOT NULL 且默认值为100 。

ALTER TABLE user MODIFY age BIGINT NOT NULL DEFAULT 100;

如果不设置默认值,MySQL会自动设置该字段默认为 NULL

使用 ALTER 来修改字段的默认值

ALTER TABLE user ALTER age SET DEFAULT 1000;

使用 ALTER 命令及 DROP子句来删除字段的默认值

ALTER TABLE user ALTER age DROP DEFAULT;

修改数据表类型,可以使用 ALTER 命令及 TYPE 子句

ALTER TABLE user ENGINE = MYISAM;

 4、修改表名

如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使用 RENAME 子句来实现

ALTER TABLE user RENAME TO user11;

MySQL-SQL语句命令相关推荐

  1. 经典MySQL语句大全和常用SQL语句命令的作用。

    转载自 http://blog.csdn.net/suyu_yuan/article/details/51784893 转自网络: 经典MSSQL语句大全和常用SQL语句命令的作用  下列语句部分是M ...

  2. SQLSERVER数据库、表的创建及SQL语句命令

    SQLSERVER数据库.表的创建及SQL语句命令 备份,还原,创建,删除,查询,修改 ** 数据库定义及操作命令:** 按照数据结构来组织.存储和管理数据的仓库.由表.关系以及操作对象组成,把数据存 ...

  3. 数据库Mysql——sql语句大全

    注意:练习sql语句之前推荐先安装可视化软件如:SQLyog.Navicat 15 for MySQL 不然就在cmd小黑窗口敲命令练习. 一篇掌握Mysql--sql语句 #注意:sql语句不区分大 ...

  4. 导出mysql sql语句吗_mysql sql语句导入与导出

    mysql sql语句导入与导出 导入: mysql -u root -p 数据库名 如: C:/mysql/bin>mysql -u root -p house < c:/1-1.txt ...

  5. Database之SQLSever:SQLSever数据表管理(GUI法/SQL语句命令法两种方法实现建立表、修改表,以及增、删、改、查)之详细攻略

    Database之SQLSever:SQLSever数据表管理(GUI法/SQL语句命令法两种方法实现建立表.修改表,以及增.删.改.查)之详细攻略 目录 一.两种方法建立表.修改表,插入多条数据记录 ...

  6. Database之SQLSever:SQLSever数据库管理(GUI法/SQL语句命令法两种方法实现备份(完整备份、差异备份、日志备份)、还原、删除、修改数据库等案例)之详细攻略

    Database之SQLSever:SQLSever数据库管理(GUI法/SQL语句命令法两种方法实现备份(完整备份.差异备份.日志备份).还原.删除.修改数据库等案例)之详细攻略 目录 数据库管理 ...

  7. MySQL sql语句获取当前日期|时间|时间戳

    文章转载于:博客园--水狼一族 文章地址:<MySQL sql语句获取当前日期|时间|时间戳> 一.基础时间函数 1.1 获得当前日期+时间(date + time)函数:now() My ...

  8. mysql sql语句生成日历表

    转载:http://blog.csdn.net/u010363836/article/details/52788358 mysql sql语句生成日历点击打开链接表  (主要用于按月,按天group ...

  9. Mysql SQL语句执行更新或者插入添加条件判断

    Mysql SQL语句执行更新或者插入添加条件判断 – 更新操作 – INSERT INTO materials (ID,Name,Remaining,Total) VALUES (1,'SolidW ...

  10. mysql sql语句执行顺序

    mysql sql语句执行顺序 引言:作为一个程序猿.要想优化sql,首先要明白sql语句的执行顺序.同时防止该死的面试官问一些数据库专业的问题有必要知道这些 sql语句select语句查询顺序 (7 ...

最新文章

  1. bzoj 1040: [ZJOI2008]骑士 树形dp
  2. 陶哲轩实分析 习题 7.5.2
  3. 关于数据表中插入数据报错(pymysql.err.IntegrityError) (1062, “Duplicate entry ‘0112‘ for key ‘‘teacher.PRIMARY‘“)
  4. concurrenthashmap_ConcurrentHashMap实现原理及源码分析
  5. 浪潮信息:企业互联网化下的数据平台升级 | 云·创课程实录
  6. APM - 零侵入监控Http服务
  7. ASP.NET自定义服务器控件
  8. 两个有序链表序列的合并_leetcode链表之合并两个排序的链表
  9. Redis服务器被劫持风波
  10. caffe︱Pascal VOC 2012 Multilabel Classification Model
  11. Windows压力测试工具SuperBenchmarker
  12. Numpy 笔记(二): 多维数组的切片(slicing)和索引(indexing)
  13. python人工智能方向入门书籍推荐_python 人工智能 入门要看那些理论书
  14. java解析图片GPS等信息,springboot项目获得图片GPS
  15. 项目使用jdk17人傻了
  16. Jmeter-----保存到响应文件
  17. 洛谷P2404 Java解法
  18. Scilab 5.1.1使用感受
  19. MTK平台LK中的APP_START(LK app service)介绍
  20. *Codeforces891E. Lust

热门文章

  1. 如何使用Arduino开发板读取KY-037声音检测传感器
  2. 黑马程序员:IP地址:InetAddress类的介绍(无构造函数)
  3. python actor_Actor的原理
  4. Pyecharts : plot Graph, Line, Liquid, Parallel
  5. 问题:tomcat启动后,可以访问主页面,但是无法访问dubbo-admin
  6. Spring——Spring简介
  7. 刺探内心深处远古的记忆OnDragListener
  8. 【回溯】leetcode1219.黄金矿工
  9. macOS Catalina(mac10.15.5系统)
  10. 机器学习用哪门语言更好