MySQL-SQL语句命令
一、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语句命令相关推荐
- 经典MySQL语句大全和常用SQL语句命令的作用。
转载自 http://blog.csdn.net/suyu_yuan/article/details/51784893 转自网络: 经典MSSQL语句大全和常用SQL语句命令的作用 下列语句部分是M ...
- SQLSERVER数据库、表的创建及SQL语句命令
SQLSERVER数据库.表的创建及SQL语句命令 备份,还原,创建,删除,查询,修改 ** 数据库定义及操作命令:** 按照数据结构来组织.存储和管理数据的仓库.由表.关系以及操作对象组成,把数据存 ...
- 数据库Mysql——sql语句大全
注意:练习sql语句之前推荐先安装可视化软件如:SQLyog.Navicat 15 for MySQL 不然就在cmd小黑窗口敲命令练习. 一篇掌握Mysql--sql语句 #注意:sql语句不区分大 ...
- 导出mysql sql语句吗_mysql sql语句导入与导出
mysql sql语句导入与导出 导入: mysql -u root -p 数据库名 如: C:/mysql/bin>mysql -u root -p house < c:/1-1.txt ...
- Database之SQLSever:SQLSever数据表管理(GUI法/SQL语句命令法两种方法实现建立表、修改表,以及增、删、改、查)之详细攻略
Database之SQLSever:SQLSever数据表管理(GUI法/SQL语句命令法两种方法实现建立表.修改表,以及增.删.改.查)之详细攻略 目录 一.两种方法建立表.修改表,插入多条数据记录 ...
- Database之SQLSever:SQLSever数据库管理(GUI法/SQL语句命令法两种方法实现备份(完整备份、差异备份、日志备份)、还原、删除、修改数据库等案例)之详细攻略
Database之SQLSever:SQLSever数据库管理(GUI法/SQL语句命令法两种方法实现备份(完整备份.差异备份.日志备份).还原.删除.修改数据库等案例)之详细攻略 目录 数据库管理 ...
- MySQL sql语句获取当前日期|时间|时间戳
文章转载于:博客园--水狼一族 文章地址:<MySQL sql语句获取当前日期|时间|时间戳> 一.基础时间函数 1.1 获得当前日期+时间(date + time)函数:now() My ...
- mysql sql语句生成日历表
转载:http://blog.csdn.net/u010363836/article/details/52788358 mysql sql语句生成日历点击打开链接表 (主要用于按月,按天group ...
- Mysql SQL语句执行更新或者插入添加条件判断
Mysql SQL语句执行更新或者插入添加条件判断 – 更新操作 – INSERT INTO materials (ID,Name,Remaining,Total) VALUES (1,'SolidW ...
- mysql sql语句执行顺序
mysql sql语句执行顺序 引言:作为一个程序猿.要想优化sql,首先要明白sql语句的执行顺序.同时防止该死的面试官问一些数据库专业的问题有必要知道这些 sql语句select语句查询顺序 (7 ...
最新文章
- bzoj 1040: [ZJOI2008]骑士 树形dp
- 陶哲轩实分析 习题 7.5.2
- 关于数据表中插入数据报错(pymysql.err.IntegrityError) (1062, “Duplicate entry ‘0112‘ for key ‘‘teacher.PRIMARY‘“)
- concurrenthashmap_ConcurrentHashMap实现原理及源码分析
- 浪潮信息:企业互联网化下的数据平台升级 | 云·创课程实录
- APM - 零侵入监控Http服务
- ASP.NET自定义服务器控件
- 两个有序链表序列的合并_leetcode链表之合并两个排序的链表
- Redis服务器被劫持风波
- caffe︱Pascal VOC 2012 Multilabel Classification Model
- Windows压力测试工具SuperBenchmarker
- Numpy 笔记(二): 多维数组的切片(slicing)和索引(indexing)
- python人工智能方向入门书籍推荐_python 人工智能 入门要看那些理论书
- java解析图片GPS等信息,springboot项目获得图片GPS
- 项目使用jdk17人傻了
- Jmeter-----保存到响应文件
- 洛谷P2404 Java解法
- Scilab 5.1.1使用感受
- MTK平台LK中的APP_START(LK app service)介绍
- *Codeforces891E. Lust
热门文章
- 如何使用Arduino开发板读取KY-037声音检测传感器
- 黑马程序员:IP地址:InetAddress类的介绍(无构造函数)
- python actor_Actor的原理
- Pyecharts : plot Graph, Line, Liquid, Parallel
- 问题:tomcat启动后,可以访问主页面,但是无法访问dubbo-admin
- Spring——Spring简介
- 刺探内心深处远古的记忆OnDragListener
- 【回溯】leetcode1219.黄金矿工
- macOS Catalina(mac10.15.5系统)
- 机器学习用哪门语言更好