MYSQL数据库学习----查询
查询语句是MYSQL数据库中用到的最多的语句。
查询语句分为几种
- 单表查询
- 集合函数查询
- 连接查询
- 子查询
- 合并查询
- 正则表达式查询
一:单表查询
SELECT 属性 FROM 表名 [WHERE 查询条件][GROUP BY 属性名1 [HAVING 分组条件]][ORDER BY 属性2 [ASC/DESC]][LIMIT];
WHERE 查询条件
| 查询条件 | 符号或关键字 | 例子 |
| 比较 | =、<、<=、>、>=、!=、<>、!>、!< | WHERE ID = 1 |
| 指定范围 | BETWEEN AND、NOT BETWEEN AND | WHERE ID BETWEEN 2 AND 3 |
| 指定集合 | IN、NOT IN | WHERE ID IN(1,2,3) |
| 匹配字符 | LIKE、NOT LIKE | WHERE ID LIKE '1%' |
| 是否为空值 | IS NULL、IS NOT NULL | WHERE ID IS NULL |
| 多个条件查询 | AND、OR | WHERE ID > 1 AND ID <3 |
这里说下LIKE,如果是WHERE ID LIKE 'ID' 这里LIKE等同与‘=’ 就是WHERE ID = 'ID'
'%'可以代表任意长度字符串:WHERE ID LIKE 'I%',这里就是匹配以‘I’开头的任意长度字符串
'_'可以代表一个字符:WHRER ID LIKE 'I_',这里就是匹配以‘I’开头的2个长度的字符串
GROUP BY 属性1 分组
按照属性分组,属性相同的分为一组,但是显示的时候只会显示出每组的第一条记录,所以单独的分组是没意义的,搭配集合函数使用效果会更好
使用GROUP_CONCAT(属性)函数:会把分组中指定的属性列出来
SELECT GROUP_CONCAT(ID) FROM DEMO GROUP BY SEX;
使用COUNT(属性)函数:会计算分组中指定的属性个数
SELECT COUNT(ID) FROM DEMO GROUP BY SEX;
GROUP BY也可以按照多个属性分组
GROUP BY 属性1,属性2,...:先按照属性1分组,如果属性1中有重复的记录再按照属性2分组,一次类推
HAVING 分组条件
HAVING和WHERE不一样,WHERE条件表达式是作用与表和视图中的,HAVING条件表达式是作用于分组后的数据,用于选择满足条件的组
ORDER BY 属性2
按照属性2对查询结果排序,默认的是升序排序
ASC/DESC
ORDER BY 后面可以设置排序方式
ASC:升序排序,默认就是这个
DESC:降序排序
LIMIT
限制查询结果显示数量
LIMIT 2:只显示查询结果中的前2条记录
LIMIT 2, 4:从查询结果中找到第3条记录开始,显示后面的4条记录,结果集下标从0开始算起。
二:集合函数查询
SELECT [[COUNT()][SUM()][AVG()][MIN()][MAX()]] FROM 表名
COUNT(属性):计算属性记录的个数
SUM(属性):计算属性取值的和
AVG(属性):计算属性取值的平均值
MIN(属性):得到属性取值的最小值
MAX(属性):得到属性取值的最大值
三:连接查询
内连接查询:
假如2个表中有表示相同意义的字段,可以通过内连接查询得到该字段在2个表中的结果集
表1
| ID | USER | PWD |
表2
| USER | TIME |
SELECT ID,表1.USER,PWD,TIME FROM 表1,表2 WHERE 表1.USER = 表2.USER
得到结果集类似
| ID | USER | PWD | TIME |
外连接查询:
分为左连接查询和右连接查询,一般用的比较少,这里不做介绍
四:子查询
子查询语句就是将一个查询语句嵌套进一个查询语句中,内层查询语句结果可以作为外层查询语句的查询条件。
子查询中包含比较运算符和一些关键字IN、NOT IN、ANY、ALL、EXISTS、NOT EXISTS等
IN:内层查询语句结果中包含外层查询语句条件的字段
SELECT * FROM 表1 WHERE 字段1 IN (SELECT 字段1 FROM 表2);
NOT IN和IN相反,这个就不多做描述。
ANY:表示满足其中任意一个条件。只要内层查询语句返回的结果中的任何一个,就可以通过该条件来执行外层查询语句
SELECT 字段1 FROM 表1 WHERE 字段1 [[<][=][>][<=][>=][<>][!=]] ANY (SELECT 字段1 FROM 表2);
其实到这里IN关键字和ANY关键字在某种情况下是相同的:
SELECT * FROM 表1 WHERE 字段1 IN (SELECT 字段1 FROM 表2);
SELECT * FROM 表1 WHERE 字段1 = ANY (SELECT 字段1 FROM 表2);
ALL:表示满足其中全部条件。只要满足内层查询语句返回的结果中的全部条件,才可以通过该条件来执行外层查询语句。
SELECT 字段1 FROM 表1 WHERE 字段1 [[<][=][>][<=][>=][<>][!=]] ALL (SELECT 字段1 FROM 表2);
ANY 关键字和ALL关键字的意思是相反的,ANY是只要满足其中一个条件,ALL关键字是满足全部条件。
EXISTS:表示存在,使用EXISTS关键字时,内层查询语句不返回查询记录,而是返回一个真假值,如果为真(true)则执行外层查询语句,如果为假(false)则不执行外层查询语句。
SELECT * FROM 表1 WHERE EXISTS (SELECT * FROM WHERE...);
NOT EXISTS关键字和EXISTS关键字意思相反,这里就不多做描述。
五:正则表达式查询
待续。。。
六:合并查询结果
有时候我们要把两个SELECT语句查询得到的结果合并在一起,我们要用到UNION和UNION ALL关键字
UNION:合并两个SELECT语句查询结果,并且去掉重复的记录。
UNION ALL:合并两个SELECT 语句查询结果。
SELECT ... [[UNION][UNION ALL]] SELECT ...
七:为表和字段取别名
在实际使用的时候有些表的名称和字段的名称都比较长,SELECT语句写出来显的有点臃肿或者不易于阅读,我们可以给表和字段取别名来解决这个问题。
给表取别名:表名 表的别名
给字段取别名:字段名 [AS] 字段的别名
SELECT * FROM TABLE1 T1 WHERE T1.ID = 1;
SELECT ID AS T1ID FROM TABLE1 WHERE T1ID = 1;
MYSQL数据库学习----查询的更多相关文章
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Mysql数据库学习笔记之数据库索引(index)
什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...
- MySQL数据库学习: 01 —— 数据库的概述
壹 概述 一 了解SQL 1.1 数据库基础 1.1.1 什么是数据库 数据库(database)保存有组织的数据的容器(通常是一个文件或一组文件). 易混淆:人们常常用“数据库”这个词语来代表他们使 ...
- MYSQL数据库学习笔记1
MYSQL数据库学习笔记1 数据库概念 关系数据库 常见数据库软件 SQL SQL的概念 SQL语言分类 数据库操作 创建数据库 查看数据库的定义 删除数据库 修改数据库 创建表 数据类型 约束 ...
- Mysql数据库使用量查询及授权
Mysql数据库使用量查询及授权 使用量查询 查看实例下每个库的大小 select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2 ...
- MySQL数据库的查询缓冲机制
MySQL数据库的查询缓冲机制 2011-08-10 11:07 佚名 火魔网 字号:T | T 使用查询缓冲机制,可以极大地提高MySQL数据库查询的效率,节省查询所用的时间.那么查询缓冲机制是怎样 ...
- MySql数据库慢查询
一.什么是数据库慢查询? 数据库慢查询,就是查询时间超过了我们设定的时间的语句. 可以查看设定的时间: 默认的设定时间是10秒.也可以自己根据实际项目设定. set long_query_time=0 ...
随机推荐
- 记一次ORM的权衡和取舍
面对ORM的选型,有些人是根据自己熟悉程度来评判,有些人是根据他人的推荐来抉择,有些人觉得都差不多,随便了.当自己要真正做选择的时候,以上的这些依据都无法真正说服自己,因为不同的业务需求,不同的团队构 ...
- dropwatch 网络协议栈丢包检查利器 与 火丁笔记
http://blog.yufeng.info/archives/2497 源码:http://git.fedorahosted.org/cgit/dropwatch.git http://blog. ...
- 1054. 求平均值 (20)-PAT乙级真题
今天刚刚到学校,2017年学习正式开始了,今天看到了浙大的<数据结构>这学期又要开课了,决定一定要跟着学习一遍:在大学生mooc网上学习:http://www.icourse163.org ...
- Android 支付宝快捷支付集成及ALI64错误的有效解决
支付宝开放平台採用了RSA安全签名机制,开发人员能够通过支付宝公钥验证消息来源.同一时候可使用自己的私钥对信息进行加密. RSA算法及数字签名机制是支付宝开放平台与开发人员网关安全通信的基础.若开发人 ...
- [Javascript] Wrap fireEvent with fireEventAsync
The idea is wrap a object with all its function methods and add some additional handling into a new ...
- [HTML5] Show Images of Differing Resolutions Depending on the Viewport Width with srcset
For small viewports, we want to save bandwidth and we may be dealing with slow speeds; so it's very ...
- shell 检查文件夹所属用户组
shell 检查文件夹所属用户组 #!/bin/bash # 检查文件夹 权限是否777 检查文件夹所属组是否www # authro ranmufei # 2017 08 21 云板容器版 /dat ...
- Effective C++ 条款13/14 以对象管理资源 || 在资源管理类中小心拷贝行为
三.资源管理 资源就是一旦你使用了它,将来不用的时候必须归还系统.C++中最常用的资源就是动态内存分配.其实,资源还有 文件描述符.互斥器.图形界面中的字形.画刷.数据库连接.socket ...
- 从头学起-CLR的执行模型
1.将源代码编译成托管代码 公共运行时(Common Language Runtime) a.面向运行时的所有语言都可以通过异常报告错误 b.面向运行时的所有语言都可以创建线程 c.核心功能:管理内存 ...
- Excel实用技巧-如何批量提取excel工作表名称
Excel实用技巧-如何批量提取excel工作表名称 1. 打开Excel文件,点击“公式”栏,进而点击“定义管理器” 2. 在弹出的对话框中,点击新增按钮, 名称:“sheet”,引用位置:“=RE ...