MySQL:数据查询
数据查询
一、基本查询语句
1、语法:写一行
select{*<字段列表>}//查询的字段,多个字段用逗号分开
from<表1>,<表2>…//数据表名
{//可选
[where<表达式>]//限定条件,只能放一个。
2、实例
mysql> select * from publisher;
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 01 | 2 | 1111 |
| 02 | 3 | 1111 |
二、单表查询
1、用于查询的比较运算
|
操作符 |
含义 |
操作符 |
含义 |
操作符 |
含义 |
|
= |
等于(不是==) |
<= |
小于、等于 |
in(set) |
等于值列表中的一个 |
|
> |
大于 |
<>(!=) |
不等于 |
like |
模糊查询 |
|
>= |
大于、等于 |
:= |
赋值 |
is (not)null |
(不是)空值 |
|
< |
小于 |
betwee…and |
在两值之间 |
2、比较运算符的优先级
|
优先级 |
运算符 |
优先级 |
运算符 |
|
1 |
算术运算符 |
5 |
[NOT] BETWEEN |
|
2 |
连接符 |
6 |
NOT |
|
3 |
比较符 |
7 |
AND |
|
4 |
IS [NOT] NULL, LIKE, [NOT] IN |
8 |
OR |
3、查询所有字段
语法:
select * from 表名(心号两边有空格)
4、查询指定字段,所有记录
语法:
select 字段名1…字段名n from 表名 where 条件表达式
5、给显示的列名重新命名
语法:
select 字段1 as 列名1[字段2 as 列名2……字段n as 列名n] from 表名
6、查询指定记录,单个记录
语法:
select 字段名1…字段n from 表名 where 条件
7、带IN关键字的查询
作用:用于查询指定范围内的条件记录,只要满足条件范围内的一个值即为匹配项
语法:
select 字段 from 数据表 where 指定字段(not)in(取值条件,取值条件1)等于where 指定字段=取值条件 or指定字段=取值条件1(order by 字段//条件可选);
【附】加not代表不在这个范围的值
实例:
mysql> select bh,cbs from publisher where bh in(01,09) order by cbs;
+----+-----+ bh的值为01,09输出结果
| bh | cbs |
+----+-----+
| 09 | 10 |
| 01 | 2 |
+----+-----+
8、带BETWEEN AND的范围查询
作用:查询每个范围内的值
语法:
select 显示结果的列 from 数据表名 where 条件的列 between 范围的开始值 and 范围的结束值;
字段名>=起始值 and 字段名<=结束值
两个表达式字段名相同,值不同
实例:
mysql> select bh,cbs from publisher where cbs between 7 and 09;
+----+-----+
| bh | cbs |
+----+-----+
| 06 | 7 |
| 07 | 8 |
| 08 | 9 |
+----+-----+
9、带LIKE的字符匹配查询
作用:查询某个字符,如“apple”“grape”“coconut”中带“a”的字段
通配符:用于where的特殊字符
(1)、“%”匹配任意长度的字符,甚至包括零字符,最大字段为数据类型的长度
语法:
select 字段from 数据表名 where 字段(类型必须是char或varchar) like '条件%';
实例:
1)全部值
mysql> select*from publisher;
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 01 | 2 | 1111 |
| 02 | 3 | 1111 |
+----+-----+------+ 2)取bh列且0在前面的值
mysql> select*from publisher where bh like '0%';
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 01 | 2 | 1111 |
| 02 | 3 | 1111 |
+----+-----+------+ 3)取列bh且0在后面的值
mysql> select*from publisher where bh like '%0';
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 10 | 11 | 1111 |
| 20 | 21 | 1111 |
+----+-----+------+
4)取例bh且有0在的值
mysql> select*from publisher where bh like '%0%';
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 01 | 2 | 1111 |
| 02 | 3 | 1111 |
+----+-----+------+
(2)“_”一次只能匹配任意一个字符;
作用:基本和“%”类似
语法:
select 字段from 数据表名 where 列 like '条件_';(后面两个’条件_ _’)
【例】:
查询bh列且以“1”开头,后面接一个任意符
mysql> select*from publisher where bh like '1_';
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 10 | 11 | 1111 |
+----+-----+------+
10、查询空值
空值:一般表示数据未知、不适用或者在将来以后添加数据,它不是空格,或者0.
语法:
select 字段from 数据表名 where 列1 is null and…… and 例n;
11、带AND的多条件查询
条件:满足所有的条件表达式
语法:
select 字段from 数据表名 where 条件表达式1 and 条件表达式2 … and 条件表达式n;
【例】
mysql> select bh,cbs,bz from publisher where bh=10 and cbs=11 and bz=1111;
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 10 | 11 | 1111 |
+----+-----+------+
12、带0R的多条件查询
条件:满足一个条件表达式
语法:语法:
select 字段from 数据表名 where 条件表达式1 or 条件表达式2… or 条件表达式n;
【例】
mysql> select bh,cbs,bz from publisher where bh=10 or cbs=11 or bz=111;
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 10 | 11 | 1111 |
+----+-----+------+
【附】and和or联用
【例】
mysql> select bh,cbs,bz from publisher where bh=10 or cbs=11 and bz=111;
+----+-----+------+
| bh | cbs | bz |
+----+-----+------+
| 10 | 11 | 1111 |
+----+-----+------+ mysql> select bh,cbs,bz from publisher where bh=10 and cbs=10 or bz=111;
Empty set (0.00 sec) mysql> select bh,cbs,bz from publisher where bz=111 or bh=10 and cbs=10;
Empty set (0.00 sec)
说明:and的优先级高于or,因此先对and两边的操作数进行操作,再于or的操作数结合。
13、查询结果不重复
语法:
select distinct 字段名 from 数据表名;
14、对查询结果排序
(1)单列:
语法:
select 要显示的字段from 数据表名 order by 排序依据的字段(聚合函数) desc\asc;
注意:desc降序,asc升序,asc为排序的默认方式
(2)多列:
语法:
select 要显示的字段from 数据表名 order by a desc\asc,b desc\asc ……;
注意:先进行a表的升降序,在进行b表的升降序
15、使用LIMIT限制查询结果的数量-----分页查询
语法:limit [位置偏移量,] 行数
位置偏移量:值从那行开始显示,是可选,如果不指定,从第一条记录开始(第一条记录的位置从0开始,和java的索引相类似)
行数:指示返回的记录
注意:limit 4 offset 3,意思为获取从第五条记录开始后面3条记录,和limit 4,3返回的结果相同。
【例】select * from dingdan limit 2,3;
二、连接查询------先内在外
1、内连接查询(inner join)
语法:
①select 字段名 fromA表表名,B表表名……where【A表表名.】字段名a=【B表表名.】字段名b=……
②select 字段名 fromA表表名 inner join B表表名on【A表表名.】字段名a=【B表表名.】字段名b
注意:字段a、b必须是有相同意义和相同类型
2、外连接查询
①左外连接:
select 需要的字段名 fromA表表名 left joinB表表名 on A表表名.】字段名=【B表表名.】字段名
A表被称为左表 B表被称为右表
注意:
左外连接,不管连接条件是否满足。都执行一次
右外连接,是否执行,根据连接条件判断
②右外连接:
select 需要的字段名 fromA表表名 right joinB表表名 on A表表名.】字段名=【B表表名.】字段名
A表被称为左表 B表被称为右表
注意:
右外连接,不管连接条件是否满足。都执行一次
左外连接,是否执行,根据连接条件判断
3、连接条件的特点
(1)内连接:满足连接条件记录出现
(2)左外连接:左表记录至少出现一次
(3)满足连接条件,满足出现的记录
(4)不满足,左表记录信息出现,右表信息为空
4、连接查询思路
1、根据题目要求,确定连接结果
2、根据连接结果,确定连接方式
3、根据语法,写出语句
4、确定查询字段
5、确定访问的表
6、连接条件
三、子查询
1、带ANY、SOME关键字的子查询
①定义:只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件
②语法:select 字段名 from 表名 where 字段名 关系运算符 any/some(select 字段 from 表名)
关系运算符:>,<=,<,>=,=
条件:select 字段 from 表名
2、带ALL关键字的子查询
①定义:只要满足内层子查询中的所有比较条件,才返回一个结果作为外层查询的条件
②语法:select 字段名 from 表名 where 字段名 关系运算符 all(select 字段 from 表名)
关系运算符:>,<=,<,>=,=
条件:select 字段 from 表名
3、带EXISTS关键字的子查询---------判断某个字段是否存在
①定义:判断条件是否满足,满足返回true,外层开始查询,不满足返回false,外层不查询。
②语法:select 字段名 from 表名 where exist(条件)
关系运算符:>,<=,<,>=,=
条件:select 字段 from 表名 where 条件
③注意:no exists判断条件是否满足,不满足返回true,外层开始查询,满足返回false,外层不查询。
4、带IN关键字的子查询
①定义:内层查询语句仅仅返回一个数据列,这个数据列的里的值,将提供给外层查询语句查询比较
②语法:elect 字段名 from 表名 where 字段名 in(select 字段名 from 表名 where 条件)
5、带比较运算符关键字的子查询
关键字:<,>,>=,<=,!=(不等于),<>(不等于)
四、合并查询结果
①语法:select 字段名 from 表名 union【all】select 字段名from 表名;
②注意:
1、两个表对应的列数和数据数量必须相同
2、各个select之间用union或union all关键字分开
3、union执行时删除重复的行,结果唯一
4、union all执行时包含重复的行
五、为表和字段取别名
1、为表取别名:表名 as 表别名
2、为字段取别名:列名 as 列别名
注意,取别名时,别名不能与原有的数据的表名和列名有冲突
六、使用正则表达式查询
1、语法:select 字段名 from 表名 where 字段名 regexp ‘正则表达式’;
2、常用的正则表达式字符匹配列表
符号 说明 例子 匹配值示例
|
符号 |
说明 |
例子 |
匹配值示例 |
|
^ |
匹配文本开始字符 |
‘ ^ b’匹配以字母b开头的字符串 |
book,big |
|
$ |
匹配文本结束字符 |
‘st$’匹配以st结尾的字符串 |
test,resist |
|
. |
匹配任何单个字符 |
‘b.t’匹配任何b和t之间有一个字符 |
bit,bat,but |
|
* |
匹配零个或多个在它前面的字符 |
‘f*n’匹配字符n前面有任意个字符f |
fn,fan,abcn |
|
+ |
匹配一次或多次在它前面的字符 |
‘ba+’匹配以b开头后面紧跟至少有一个a |
ba,bay,bare |
|
<字符串> |
匹配包含指定的字符串的文本 |
‘fa’指定文本中包含fa的字符 |
fan,afa,faad |
|
[字符集合] |
匹配字符集合中的任何一个字符 |
‘[xz]’匹配x或z |
dizzy,xebra, |
|
[ ^ ] |
匹配不在括号中的任何字符 |
‘[ ^ abc]’匹配任何不包含a,b,c的字符串 |
desk,fox,f8ke |
|
字符串{n,} |
匹配前面的字符串至少n次 |
b{2}匹配至少2个的b |
bbb,bbbb,bb |
|
字符串{n,m} |
匹配前面的字符串至少n次,至多m次。 |
b{2,4}匹配至少2个,至多4个的b |
bbbb,bbb,bb |
注意:
1)字符串{n,m},如果n为0,此参数为可选参数
2)匹配多个指定字
3)符串,字符串之间用“|”分开
MySQL:数据查询的更多相关文章
- nodejs mysql 数据查询例子
1.安装nodejs 2.安装mysql npm包 地址:https://github.com/felixge/node-mysql npm install mysql 3.相应API查看及调用: ...
- MySQL数据查询之单表查询
单表查询 简单查询 - 创建表 DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCREMEN ...
- mysql 数据查询全讲
数据查询 涉及到DQL(Data Query Language)是sql语句的一类 本文全面介绍了mysql下 select 语句的各种查询方式:普通查询,模糊查询,查询排序,分页查询,聚合函数查询 ...
- MySQL - 数据查询 - 简单查询
1. 简述 查询数据是指从数据库中获取所需要的数据.如Jack 要达到验证用户名和密码的目的,就需要从数据库已保存的用户表中读取当前用户的密码进行验证,以验明正身!保存查询数据是数据库操作中常用且重要 ...
- 【初学python】使用python连接mysql数据查询结果并显示
因为测试工作经常需要与后台数据库进行数据比较和统计,所以采用python编写连接数据库脚本方便测试,提高工作效率,脚本如下(python连接mysql需要引入第三方库MySQLdb,百度下载安装) # ...
- Packets larger than max_allowed_packet are not allowed(mysql数据查询提示:不允许超过允许的最大数据包)解决方案
问题背景: 首先我的项目运用的时Mysql,在做一个数据更新操作的时候,提示异常:System.Exception:“ExecuteNonQuery:Packets larger than max_a ...
- MySQL数据查询
数据查询语言DQL select [all | distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by子句] [ ...
- MySQL数据查询之多表查询
多表查询 多表联合查询 #创建部门 CREATE TABLE IF NOT EXISTS dept ( did int not null auto_increment PRIMARY KEY, dna ...
- MySql数据查询的逻辑蕴含条件问题
SQL语言中没有蕴含逻辑运算.但是,可以利用谓词演算将一个逻辑蕴含的谓词等价转换为:p->q ≡┐p∨q. 我们通过一个具体的题目来分析:(具体的表和数据详见文章:Mysql数据库中的EXIST ...
- 笔记-4:mysql数据查询
1.创建查询表 1.1 创建班级表 含义 字段名 数据类型 宽度 班级编号 classNo 字符型 6 班级名称 className 字符型 20 所属院系 department 字符型 30 年级 ...
随机推荐
- 清理Visual Studio 2017的项目历史记录或手工修改Visual Studio 2017的注册表设置
Visual Studio 2017的"最近的文件列表"和"项目列表"总是删了之后重启电脑又出现(PS:这期间没有打开过项目,更没打开过VS). 一怒之下,按照 ...
- H5开发:横屏适配
平常我们做过的需求里,主要是以竖屏式为主,而横屏式较少.对于竖屏式场景来说,大家的经验会比较丰富,因此,此次主要式探讨下横屏式场景下的一些需要注意的点,特别是怎样去做横屏适配. 对于 H5 横屏页面来 ...
- springboot使用hibernate validator校验
一.参数校验 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗长 每次要 ...
- Unable to execute 'doFinal' with cipher instance
今天项目启动后登录项目,突然爆出Unable to execute 'doFinal' with cipher instance错误.清除cookie登录测试,又不报错了,以前也见过类似问题,因为不影 ...
- Docker 部署 portainer
Docker 部署 portainer 环境: docker 版本 :18.09.1 主机地址:192.168.1.81 一.部署 porttainer 1.修改docker配置文件,开放端口. vi ...
- Python爬虫(四)——豆瓣数据模型训练与检测
前文参考: Python爬虫(一)——豆瓣下图书信息 Python爬虫(二)——豆瓣图书决策树构建 Python爬虫(三)——对豆瓣图书各模块评论数与评分图形化分析 数据的构建 在这张表中我们可以发现 ...
- Overture里如何添加震音记号
五线谱里的震音记号是指当一个或数个音以相同的时值反复奏响,为了减少乐谱写作中的工作量,而使用的一种省略记号.震音记号用短斜线表示,斜线的数目与演奏时的符尾数目相同. 震音可以分为单震音和复震音两种.单 ...
- PHP钩子的简单介绍
<?php /** * 钩子类 */ class Hook { static public function execute($type, $model='') { if($model == ' ...
- Spring中 @Autowired标签与 @Resource标签
spring不但支持自己定义的@Autowired注解,还支持由JSR-250规范定义的几个注解,如:@Resource. @PostConstruct及@PreDestroy. @Autowired ...
- Python自学:第二章 Python之禅
>>print import <Python之禅>,提姆·彼得斯著 美胜于丑. 显式优于隐式. 简单胜于复杂. 复杂总比复杂好. 平的比嵌套的好. 稀疏胜于稠密. 可读性计数. ...