查询语句是MYSQL数据库中用到的最多的语句。

查询语句分为几种

  1. 单表查询
  2. 集合函数查询
  3. 连接查询
  4. 子查询
  5. 合并查询
  6. 正则表达式查询

一:单表查询

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数据库学习----查询的更多相关文章

  1. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  2. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. Mysql数据库学习笔记之数据库索引(index)

    什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...

  5. MySQL数据库学习: 01 —— 数据库的概述

    壹 概述 一 了解SQL 1.1 数据库基础 1.1.1 什么是数据库 数据库(database)保存有组织的数据的容器(通常是一个文件或一组文件). 易混淆:人们常常用“数据库”这个词语来代表他们使 ...

  6. MYSQL数据库学习笔记1

      MYSQL数据库学习笔记1 数据库概念 关系数据库 常见数据库软件 SQL SQL的概念 SQL语言分类 数据库操作 创建数据库 查看数据库的定义 删除数据库 修改数据库 创建表 数据类型 约束 ...

  7. Mysql数据库使用量查询及授权

    Mysql数据库使用量查询及授权 使用量查询 查看实例下每个库的大小 select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2 ...

  8. MySQL数据库的查询缓冲机制

    MySQL数据库的查询缓冲机制 2011-08-10 11:07 佚名 火魔网 字号:T | T 使用查询缓冲机制,可以极大地提高MySQL数据库查询的效率,节省查询所用的时间.那么查询缓冲机制是怎样 ...

  9. MySql数据库慢查询

    一.什么是数据库慢查询? 数据库慢查询,就是查询时间超过了我们设定的时间的语句. 可以查看设定的时间: 默认的设定时间是10秒.也可以自己根据实际项目设定. set long_query_time=0 ...

随机推荐

  1. 小窥React360——用React创建360全景VR体验

    前言    混迹VR届的发烧友兼开发者们一定不要错过这款FaceBook推出的跨端VR开发框架——React360,称为360全景体验框架更为准确,因为其前身是FaceBook和Oculus2017年 ...

  2. 某考试 T2 sum

    为什么其他人都是插值套插值啊,,,,就我是XJB做的吗2333 k次多项式的前缀和可以表示成k+1次多项式,用两次这个玩意就可以发现g可以表示成一个k+2次多项式. 然后我的做法是把g用拉格朗日插值+ ...

  3. Spring实战Day5

    3.3自动装配bean的歧义性 产生歧义的原因 找到多个符合条件的组件,如下注入talent时会有两个满足条件的组件 解决方法 标示首选的bean,但是同时标示两个或多个同样会存在歧义 自动装配标示P ...

  4. oracle-统计员工x

    1. SELECTe.depid,avg(s.bonussalary+s.basesalary) AS avgsal from employ e,salary s where e.employId=s ...

  5. 前端和后端采用接口访问时的调用验证机制(基于JWT的前后端验证)(思路探讨)

    说明:基于前后端,尤其是使用Ajax请求的接口,现在市面上网页上调用的Ajax基本都是没有验证的,如果单独提取之后可以无线的刷数据. 继上一篇http://www.cnblogs.com/EasonJ ...

  6. go语言学习之路五:Go语言内存分配机制make&new

    Go有两种分配内存的机制,规则很简单,下面来简单介绍一下.1.new函数New()函数可以给一个值类型的数据分配内存(不知道什么是值类型请前往切片那一部分),调用成功后返回一个初始化的内存块指针,同时 ...

  7. 【sourcetree】sourcetree连接远程仓库需要登陆但是一直登陆不上的问题 解决方法

    授权类型选用 基础 .只需要登陆你在bitbucket的用户名和密码 如下 .即可成功连接远程仓库

  8. 深入理解javascript之设计模式

    设计模式 设计模式是命名.抽象和识别对可重用的面向对象设计实用的的通用设计结构. 设计模式确定类和他们的实体.他们的角色和协作.还有他们的责任分配. 每个设计模式都聚焦于一个面向对象的设计难题或问题. ...

  9. mysql 同样内容的字段合并为一条的方法

    从两个表中内联取出的数据,当中category_name字段有同样内容,想将具有同样内容的字段进行合并,将amount字段进行加法运算,变成下表中的内容 url=http%3A%2F%2Fdev.my ...

  10. React 组件开发注意事项

    0.state的设定原则,如果render里用不到,则就不应该是一个state. 1.数组遍历时,用每一条数据的唯一标识作为key,尽量不要使用遍历的索引值作为key,如果它们从不重新排序,它们工作也 ...