MySql之查询基础与进阶
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8283547.html
一:基本查询
SELECT [DISTINCT] 列1,列2,列3...
FROM 表1,表2...
二:分页查询
SELECT [DISTINCT] 列1,列2,列3...
FROM 表1,表2...
WHERE 条件
LIMIT n,m; //从n行开始的m行中检索
三:排序查询
SELECT 列名...
FROM 表名...
ORDER BY 排序列名... [DESC|ASC]
LIMIT n,m; //limit必须位于ORDER BY语句之后
多列排序:如果指定多个排序列,则根据先后顺序比较,如果列1值同,再比较列2,根据列2排序。
排序方向:DESC逆序、ASC顺序。
四:条件查询
SELECT 列名...
FROM 表名...
WHERE 条件
where子句操作符:
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN n AND m 在n到m之间
IS NULL 空值检测
NOT 取反操作,如:NOT IN 、NOT BETWEEN等
IN 范围:范围判断,如:IN (N,M)、IN(SELECT子查询
组合子句
AND :多条子句必须都成立
OR:多条语句某些成立
() :使用括号来保证语句的优先级
五:模糊查询
通配符:
% :任意字符任意次数
_ :任意字符一次
模糊查询条件语句:
SELECT 列...
FROM 表...
WHERE 列名 LIKE '模式' //模式由 具体值与通配符组成
六:正则表达式查询
正则表达式查询语句:
SELECT 列..
FROM 表..
WHERE 列名 REGEXP '正则表达式'
正则表达式的构成:
内容:
. 匹配任意一个字符
n|m or匹配:n或者m
[多个值、n-m] 范围匹配
[:alnum:] 任意字母和数字(通[a-zA-Z0-])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表符(同[\\t])
[:cntrl:] ascii控制字符
[:digit:] 任意数字(同[-])
[:xdigit:] 任意十六进制数字
[:lower:] 任意小写字母
[:upper:] 任意大写字母
[:space:] 包括空格在内的任意空白字符
次数:
* 0个或者多个匹配
+ 1个或者多个匹配(等于{,})
? 0个或者1个匹配(等于{,})
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)
位置:
^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾
七:计算字段
计算字段不实际存在于表中,而是通过检索表中已有数据,进行一系列操作、计算而得到的结果,进行输出。
1)拼接:将多个列、字符串拼接在一起进行输出
SELECT Concat(列1,字符,列2,字符)
FROM 表
2)算术运算:将列参与的算术运算结果作为一列进行输出
SELECT 列+-*/运算 AS 结果别名
FROM 表名
3)使用函数:使用函数对某列值进行处理再输出函数结果
SELECT 函数(列名) AS 结果别名
FROM 表名
函数主要分为四类:
文本处理函数:
Left() :返回串的左边字符
Right() :返回串的右边字符
Length():返回串长度
Locate():找出串的一个子串
SubString():返回子串
Lower():将串转为小写
Upper():将串转为大写
LTrim():去掉串的左边空格
RTrim():去掉串的右边空格
Trim():去掉两边空格
Soundex():根据发音来模糊查询,sound as
时间与日期处理函数:

使用技巧:灵活使用上述函数截取一个 日期时间 字符串的 年、月、日、日期、时、分、秒、时间 部分。
数值处理函数:

系统函数:用户信息、系统状态等函数。一般不会在编程中用到。
八:汇总数据
可以使用聚集函数,对满足查询条件的数据们进行汇总统计,例如:求极大极小值、求平均值等。

九:分组查询
SELECT 列..
FROM 表..
WHERE 条件 //分组前过滤:对所有记录进行过滤
GROUP BY 分组列
HAVING 条件 //分组后过滤:对各组记录的过滤
ORDER BY 排序列 [DESC|ASC]
十:SELECT查询子句格式
SELECT 列名
FROM 表名
WHERE 条件
GROUP BY 分组列
HAVING 分组过滤条件
ORDER BY 排序列
LIMIT 检索的页数、行数
十一:子查询
1)用于过滤条件的子查询
WHERE子句中的IN、NOT IN操作符用于判断范围,而这个范围包括简单的数值范围,也包括一系列的数据集合,而这些数据集合有可能直接给出,也可以从数据库的表中进行查询。其中,从数据库中检索出一系列数据作为WHERE子句的判断范围,就是子查询。
SELECT 列
FROM 表
WHERE 列 IN\NOT IN (SELECT 子查询)
2)作为计算字段的子查询
在SELECT子句中,可以直接检索表中的列,也可以内嵌查询语句,检索其他表中的列。在SELECT子句中作为计算字段进行的查询,也是子查询。一般在SELECT子句中的子查询都是进行数据汇总操作,如:统计总数、平均值、最大最小值等。
SELECT 列...,(SELECT 子查询) AS 子查询结果别名
十二:联结查询
1)等值联结(内部联结)
SELECT 列..
FROM table1,table2
ON table1.列 = table2.列
SELECT 列。。
FROM table1 INNER JOIN table2
ON table1.列 = table2.列
2)多表联结(通过WHERE子句中的AND,使得多个表之间的某些列值相等)
SELECT 列...
FROM 表...【可以使用别名来简化表名的表达】
WHERE tab1.列 = tab2.列 AND tab2.列 = tab3.列 ...
3)外部联结
SELECT 列。。。
FROM table1 LEFT\RIGHT OUTER JOIN table2
ON table1.列 = table2.列
十三:组合查询(多语句查询)
SELECT 语句1
UNION
SELECT 语句2
UNION
SELECT 语句3
...
注意:
1)UNION组合的多个查询语句,必须检索相同的 列、聚集函数或者表达式。也就是说各个语句的输出列相同。组合查询的结果就是 同一张输出表,各列的值来自不同的查询语句。
2)UNION自动合并重复列,如果需要显示所有列(包括重复),则使用 UNION ALL来组合。
十四:全文本搜索
1)MySQL最常用的两种数据库引擎为MyISAM和InnoDB。
MyISAM支持全文本搜索,但不支持事务。
InnoDB支持事务、外键等高级特性,但不支持全文本搜索。
2)一般搜索
前面介绍的检索,都是对于整张表进行检索的。随着表中数据的不断增加,检索可能会变得耗时。
3)全文本搜索
全文本搜索是一种高级索引。
在建立表时,我们可以为某些列创建FULLTEXT索引。这样一来,每当有增加、修改、删除行时,MySQL都会自动更新索引。
索引的存在形式:
目前,使用最多的是 B-Tree 的形式。
另一种形式是 哈希表 。
索引如何提高性能:
当我们为某列建立索引时,数据库则为该列的值们维护一张索引表。
索引表以 (列值,行地址) 的形式来保存数据,每当有记录插入、修改、删除 时,都和同步更新索引表。
我们在使用索引进行查询时,只需检索 索引表 ,根据索引表中的列值来过滤记录,根据对应的 行地址 来确定在数据库中真正的表中的对应记录。
4)建立FULLTEXT索引
CREATE TABLE tableName
(
列名 类型 限制条件,
...
PRIMARY KEY(主键),
FULLTEXT(建立索引的列名), )ENGINE=MyISAM;
5)进行全文本搜索
SELECT 列..
FROM 表
WHERE Match(建立了全文本索引的列) Against('查找模式'); //查找模式可以是具体值,也可以是模糊查询,或者正则表达式
6)进行扩展的全文本搜索
查询扩展:首先进行一次全文本搜索,得出要查找的记录;然后根据这些记录中出现的单词作为查找值再进行一次全文本查询;最后得出结果。
SELECT 列..
FROM 表
WHERE Match(建立了全文本索引的列) Against('查找模式' WITH QUERY EXPANSION);
7)全文本布尔查询
布尔查询通过模式中的操作符,在进行全文本查询时根据 查找内容是否存在、存在次数、模糊匹配 等等情况进行检索。
SELECT 列..
FROM 表
WHERE Match(建立了全文本索引的列) Against('表达式' IN BOOLEAN MODE);
表达式中的操作符主要有:

MySql之查询基础与进阶的更多相关文章
- MySQL学习笔记——基础与进阶篇
目录 一.###MySQL登录和退出 二.###MySQL常用命令 三.###MySQL语法规范 四.###基础查询 五.###条件查询 六.###排序查询 七.###常见函数的学习 八.###分组查 ...
- MySQL数据库—查询基础,简单查询,条件查询,对查询结果排序
一.SELECT语句 SELECT COL1,COL2,....COLn FROM TABLE1,TABLE2,....TABLEn [WHERE CONDITIONS] -- 查询条件 [GROUP ...
- mysql基础sql进阶
回顾前面的基础命令语句 修改数据表 添加字段: alter table 表名 add 字段名 列类型[not null|null][primary key][unique][auto_incremen ...
- Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)
day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库: 简称:DataBase ---->DB 数据库即存放数据的仓库, ...
- 04 mysql 基础三 (进阶)
mysql 基础三 阶段一 mysql 单表查询 1.查询所有记录 select * from department; select * from student; select * from ...
- python进阶09 MySQL高级查询
python进阶09 MySQL高级查询 一.筛选条件 # 比较运算符 # 等于:= 不等于:!= 或<> 大于:> 小于:< 大于等于>= 小于等于:<= #空: ...
- MYSQL进阶学习笔记十:MySQL慢查询!(视频序号:进阶_23-24)
知识点十一:MySQL 慢查询的应用(23) 一.慢查询定义 MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为慢查询. 查看时间限制 show variables lik ...
- MySQL的查询计划中ken_len的值计算
本文首先介绍了MySQL的查询计划中ken_len的含义:然后介绍了key_len的计算方法:最后通过一个伪造的例子,来说明如何通过key_len来查看联合索引有多少列被使用. key_len的含义 ...
- [慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时
案例梳理时间:2013-9-25 写在前面的话: 在慢查优化1和2里都反复强调过 explain 的重要性,但有时候肉眼看不出 explain 结果如何指导优化,这时候还需要有一些其他基础知识的佐助, ...
随机推荐
- 《剑指offer》-统计整数二进制表示中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 直观思路就是把二进制表示从右往左统计1的个数.直接想到移位操作来迭代处理.坑点在于负数的移位操作会填充1.有人贴出了逻辑移位 ...
- 《SQL基础教程》
Product表 CREATE TABLE Product (product_id CHAR(4) NOT NULL, product_name VARCHAR(100) NOT NULL, prod ...
- PowerDesigner表创建脚本双引号问题
在使用PowerDesigner表属性的Preview查看创建脚本的时候,发现大多表名和字段名都加上了双引号,而且有引号的都是大小写混合的,导致创建的表里,表名和字段名也都是大小写混合的. 在一番搜索 ...
- GitHub安装教程
第一步是安装两个软件 安装 git for windows这个是一个git的windows系统的命令行版本https://git-scm.com/downloads或者https://pan.baid ...
- MySQL 8.0 Docker使用注解
PUBLIC | AUTOMATED BUILD cytopia/mysql-8.0 Last pushed: 8 months ago Repo Info Tags Dockerfile Build ...
- Redis分布式锁实现方式(附有正解及错误示例)
一.前言 本文内容主要来自博客:https://wudashan.com/2017/10/23/Redis-Distributed-Lock-Implement/,本文用于归纳总结及笔记用途,如有需要 ...
- mac OS X下Java项目环境搭建+IntelliJ IDEA Jrebel插件安装与破解+Office 2016破解版安装
一.mac OS X下Java项目环境搭建 因为某些原因新入手了台最新版的MacBook Pro,意味着今天要花一天时间安装各种软件以及项目环境搭建╮(╯▽╰)╭ 项目环境搭建步骤: 1.安装jdk ...
- IntelliJ IDEA 2018.3 重大升级(转)
|0前言 2018.11.28 IntelliJ IDEA 2018.3 正式版发布.对于一个忠实爱好者,迫不及待的我下载了最新版本来体验下.而且 IDEA 今年的第三次重大更新提供了不容错过的显著功 ...
- [洛谷P1731][NOI1999]生日蛋糕(dfs)(剪枝)
典型的深搜+剪枝策略 我们采用可行性剪枝.上下界剪枝.优化搜索顺序剪枝.最优性剪枝的方面来帮助我们进行剪枝. 也许有人还不知道剪枝,那我就弱弱地为大家补习一下吧qwq: .优化搜索顺序: 在一些搜索问 ...
- C# 设置MDI子窗体只能弹出一个的方法
Windows程序设计中的MDI(Multiple Document Interface)官方解释就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows .0下的Mi ...