MySQL 入门(九)—— 查询数据
查询数据就是从数据库中获取所须要的数据。
1、基本查询语句
即Select语句
当中。属性列表表示要查询的字段名。表名和视图列表表示从此处指定的表或者视图中查询数据。能够有多个;条件表达式1制定了查询的条件。属性名1指按该字段中的数据进行分组;条件表达式2表示满足该表达式的数据才干被输出;属性名2指按该字段中的数据进行排序,默认顺序为升序ASC,即按从小到大的顺序排列。
Group by子句通常和Count()、Sum()等聚合函数一起使用。
2、单表查询
单表查询顾名思义即从一张表中查询所需数据。
2.1 查询全部字段
详细可分为以下两种方法
(1)列出表的全部字段
即在select语句的属性列表中列出所要查询的表中的全部的字段。
(2)使用*查询全部字段
即使用*符号取代select语句中的属性列表。
显然这样的方法简单方便非常多。可是使用这样的方式仅仅能依照表中字段的顺序进行排列,不能改变字段的排列顺序。
2.2 查询指定字段
顾名思义,就是在属性列表中列出所要查询的指定字段就可以。
2.3 查询指定记录
即设定查询条件语句where字句。where子句中经常使用的查询条件包括
(1)带keywordIN的查询
INkeyword能够推断某个字段的值是否在指定的集合中,其语法规则为
[NOT] IN (元素1,元素2,···,元素n)
当中,元素n表示集合中的元素。注意字符型元素须要加上单引號。
(2)带Between And的范围查询
Between Andkeyword能够判读某个字段的值是否在指定的范围内,语法规则例如以下
[NOT] Between 取值1 And 取值2
即选取满足大于等于取值1,二小于等于取值2的范围。
(3)带LIKE的字符匹配查询
Likekeyword能够匹配字符串是否相等。语法规则例如以下
[NOT] Like ‘字符串’
字符串參数的值能够是一个完整的字符串。也能够是包括%或者_的通配字符。
当中,%能够代表随意长度的字符串。长度能够为零;_仅仅能表示单个字符。
注意须要匹配的字符串须要加引號,能够单引號也能够双引號。假设要匹配中文。注意一个汉字是两个字符。所以使用_的话应该用两个。比如匹配江某,匹配的字符串应该为“江 _ _”。
(4)查询空值
Is NULLkeyword能够用来推断字段的值是否为空值。语法规则为
Is [NOT] NULL
(5)带AND的多条件查询
Andkeyword能够用来联合多个条件进行查询,语法规则为
条件表达式1 AND 条件表达式2 [··· AND 条件表达式n]
(6)带OR的多条件查询
Orkeyword能够用来联合多个条件进行查询,语法规则为
条件表达式1 OR 条件表达式2 [··· OR 条件表达式n]
2.4 查询结果不反复
假设表中的某些字段上没有唯一性约束,这些字段可能存在反复的值。select语句能够使用distinctkeyword来消除反复的记录,语法规则为
select distinct 属性名
2.5 对查询结果排序
即使用select语句中的order by子语句。
注意,假设存在一条记录的某字段的值为空值时,在ASC參数情况下,这条记录将显示为第一条记录。而DESC时。则显示为最后一条。
2.6 分组查询
即使用group bykeyword将查询结果按某个字段或者多个字段进行分组,字段中值相等的为一组。
详细为
Group by 属性名 [Having 条件表达式] [With ROLLUP]
当中with rollupkeyword将会在全部记录的最后加上一条记录。该记录为上面全部记录的总和,注意,对于数字类类型,这个总和即将其相加。对于字符串类型,则是取集合,很多其它情况有待实验。
2.7 利用Limit限制查询结果的数量
Limit时MySQL中的一个特殊keyword,能够用来指定查询结果从哪条记录開始显示。也能够指定一共显示多少条记录。
(1)不指定初始位置
此时记录从第一条记录開始显示,二显示记录的条数由Limit指定,语法为
Limit 显示记录数
此子句用在select语句的“From 表名和视图列表”之后。
(2)指定初始位置
即从该位置開始显示而且能够指定显示多少条记录,语法为
Limit 初始位置。 记录数
注意在MySQL系统中。第一条记录的位置是0。
3、使用集合函数查询
集合函数包括Count()、Sum()、Avg()、Max()和Min(),分别用来统计记录的条数、计算字段的值的总和、计算字段的值的平均值、查询字段的最大值和查询字段的最小值。
这些集合函数除了和group by一起使用外,还能够直接用在select后的属性列表中。即作属性使用。
注意,后两者不仅适用于数值类型,也适用于字符类型,即字母a最小,字母z最大,按ASCII码来比較。
4、连接查询
连接查询是将多个表按某个条件连接起来,从中选取须要的数据。
以两个表为例。当两个表中存在表示相允许义的字段时,能够通过该字段来连接这两个表,当该字段的值相等时。就查询出该记录。
连接查询包括内连接查询和外连接查询。
4.1 内连接查询
最经常使用的连接查询方式。
举个样例,假设表employee和表department中的d_id字段都是表示部门号,从而能够通过该字段将两个表进行内连接查询。
假设我们从表employee中查询出num、name、d_id、age和sex这几个字段,从表department中查询出d_name和function这几个字段,则select语句例如以下
4.2 外连接查询
相较于内连接查询,外连接查询不仅能够查询出该字段取值相等时的记录,也能够查询出该字段取值不相等时的记录,详细分为左连接查询和右连接查询。基本的语法为
当中參数on后面接的就是连接条件。
(1)进行左连接查询时,能够查询出表名1所指的表中的全部记录,而表名2所指的表中。仅仅能查询出匹配的记录。
(2)进行左连接查询时。反之。
连接查询中使用最多的还是内连接查询。
5、子查询
子查询是将一个查询语句嵌套在还有一个查询语句中。即实现多表之间的查询。
内层查询语句的查询结果,为外层查询语句提供查询条件。
子查询中可能包括IN、NOT IN、ANY、ALL、EXISTS和NOT EXISTS等keyword。还可能包括比較运算符。
5.1 带INkeyword的子查询
在上例中,查询的过程就是,先确定表department中的全部d_id,然后显示出表employee中d_id和前面d_id同样的记录们。
5.2 带比較运算符的子查询
比較运算符<>和!=是等价的。
在上例中,查询的过程就是,先从表employee中招待年龄为24的员工的d_id,然后显示出表depatment中年龄不为24的员工的d_id和d_name信息。
5.3 带EXISTSkeyword的子查询
使用EXISTSkeyword时,内层查询语句不返回查询的记录。而是返回一个真假值。假设内层查询语句查询到满足条件的结果。就返回一个TRUE,外层查询语句将进行查询,假设内层没查到返回一个FALSE,外层查询语句将不进行查询或者查询不出不论什么记录。
EXISTSkeyword还能够与其它的查询条件一起使用。条件表达式与EXISTSkeyword一起使用时用AND或者OR连接。
5.4 带ANYkeyword的子查询
Anykeyword表示满足当中任一条件,即使用ANYkeyword时。仅仅要满足内层查询语句返回的结果中的随意一个,就能够通过该条件来运行外层查询语句。
ANYkeyword通常与比較运算符一起使用。比如>ANY表示大于不论什么一个值。
5.5 带ALLkeyword的子查询
Allkeyword标是满足全部条件,即使用Allkeyword时。仅仅有满足内层查询语句返回的全部结果。才干够运行外层查询语句。
同样,ALLkeyword通常与比較运算符一起使用,比如>ALL表示大于全部值。
6、合并查询结果
合并查询结果是将多个select语句的查询结果合并到一起显示。
进行合并操作能够使用UNION和UNION ALLkeyword,使用UNION时。数据库系统会将全部的查询结果合并到一起然后去除掉同样的记录。相似于进行集合;而使用UNION ALL时,仅仅是将全部查询结果进行简单合并,并不剔除同样的记录。
7、为表和字段取别名
在查询时。能够为表和字段取一个别名,这个别名能够取代其指定的表和字段。
7.1 为表取别名
基本形式为
表名 表的别名
通过这样的方式,表的别名就能够在此次查询中取代表名了。
7.2 为字段取别名
基本形式为
属性名 [AS] 别名
当中,属性名为字段原来的名称,ASkeyword可有可无。实现的作用都是一样的。
注意。字段的别名仅仅是在显示的时候用来替代字段本来的名称,在查询条件中是不能使用这个定义的别名的,即在条件表达式中,不能使用字段的别名。
8、使用正則表達式查询
正則表達式就是用某种模式去匹配一类字符串的一种方式,比前面提到的通配字符的查询能力强大非常多也更加灵活。
MySQL中使用Regexpkeyword来匹配查询正則表達式。基本形式为
属性名 Regexp ‘匹配方式’
以下是正則表達式的匹配方式经常使用的模式字符
以下我们一一进行举例
(1)从info表的name字段中查询以字符串’LLL’开头的记录
Select * from info where name regexp ‘^LLL’;
(2)从info表的name字段中查询以字母’a’结尾的记录
Select * from info where name regexp ‘a$’;
(3)从info表的name字段中查询以字母’L’开头,以字母’y’结尾。中间有两个随意字符的记录
Select * from info where name regexp ‘^L..y$’;
(4)从info表的name字段中查询包括数字或者字母a,b和c的记录
Select * from info where name regexp ‘[0-9a-c]’;
假设须要匹配字母a,b和c。则[abc]。每一个字符之间不须要符号隔开。假设要匹配全部字母,能够适用[a-zA-Z]。即a与z之间用-隔开。z与A之间不用符号隔开。
(5)从info表的name字段中查询不含字母a到w和数字的记录
Select * from info where name regexp ‘[^a-w0-9]’;
(6)从info表的name字段中查询包括ic、uc和ab这三个字符串中随意一个的记录
Select * from info where name regexp ‘ic|uc|ab’;
注意每一个字符串与|之间不能有空格,否则查询过程中。空格也会被当做一个字符。
(7)从info表的name字段中查询字母’c’之间出现过字母’a’的记录
Select * from info where name regexp ‘a+c’;
假设用*替代上面的+,则因为可表示0个。所以的不能目标结果。
(8)从info表的name字段中查询出现过’ab’最少一次最多三次的记录
Select * from info where name regexp ‘ab{1,3}’;
MySQL 入门(九)—— 查询数据的更多相关文章
- MySql数据库,查询数据导出时会出现重复的记录(数据越多越明显)
在查询数据时,数据量多的时候,我们会使用分页功能. 每页显示多少数据. 这种情况下,一半看不出什么问题. 而导出数据时,有时就是通过分页的方法,逐步讲数据追加到导出文件中. 当全部数据都导出之后,就有 ...
- Mysql入门到精通数据表的操作
变更表 ALTER TABLE tb_name; 1.加入场 ALTER TABLE tb_name ADD 字段名字 字段类型 约束条件 [FIRST/AFTER 字段名称] 1>加入user ...
- php 基本连接mysql数据库和查询数据
连接数据库,有三种方法 1. 常规方式: $con=mysql_connect($dbhostip,$username,$userpassword) or die("Unable to co ...
- <MySQL>入门一 查询 DQL
1. 数据库表 1.1 员工表 Create Table CREATE TABLE `employees` ( `employee_id` ) NOT NULL AUTO_INCREMENT, `fi ...
- MySQL分层和查询数据的流程
MySQL分层 MySQL分层 主要分为:连接层,服务层,引擎层,存储层 客户端执行一条select命令的流程如下 连接器 功能: 负责跟客户端建立连接.获取权限.维持和管理连接 细节: 1.当用户登 ...
- IntelliJ IDEA2017 java连接mysql数据库并查询数据
最近自己开始重新学习java基础了,做java开发不可避免要处理数据库,由于好久不写java了,对idea也有点陌生了.所以这里写篇用jdbc来连接mysql的文章 至于mysql怎么装,请自行百度 ...
- MySQL下分页查询数据
-- 分页 -- 前两条 -- 启始位置从下标0开始,查询的是数据库中的第1条开始 -- 0:启始位置 2:一次性查询多少条 select * from account LIMIT 0,2; -- ...
- java实现连接mysql数据库单元测试查询数据项目分享
1.按照javaweb项目的要求逐步建立搭建起机构,具体的类包有:model .db.dao.test;具体的架构详见下图: 2.根据搭建的项目架构新建数据库test和数据库表t_userinfo并且 ...
- MySQL 查询数据
MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...
- 十二、MySQL 查询数据
MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...
随机推荐
- poj2367 Genealogical tree
思路: 拓扑排序,这里是用染色的dfs实现的.在有环的情况下可以判断出来,没有环的情况下输出拓扑排序序列. 实现: #include <vector> #include <cstri ...
- vue 父子组件双向绑定
vue组件有2大特性: 1.全局组件和局部组件 2.父子组件的数据传递 接下来直接用demo直接看如何传值(静态传值) father.vue <template> <div> ...
- Elasticsearch--搜索
目录 基本知识 查询结果返回设置:版本值.得分限制.定制返回字段 搜索类型 搜索执行偏好 基本查询 过滤器类型 高亮 控制高亮的片段 验证查询 数据排序 查询重写 基本知识 查询结果返回设置:版本值. ...
- Android集成微信分享功能应用签名生成方法及分享不生效的问题
通过友盟sdk集成微博.微信.qq等分享功能时,微博和qq很顺利,但在做微信集成时一直不成功.主要问题还是之前在微信开放平台申请创建移动应用时,对应用签名没有填写对,走了很多弯路现总结出来,加深记忆避 ...
- UVM基础之---------Reporting Classes
Reporting 类提供了一组工具用于格式化报告输出 report机制大概包括四个主要的类uvm_report_object,uvm_report_handler, uvm_report_serve ...
- Struts工作机制
Struts工作机制? 为什么要使用Struts?工作机制:Struts的工作流程:在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config. ...
- 部署bugzilla(bugzilla+apache+mysql+linux)
工作原因,需要部署bugzilla.在此,容我新造个轮子.官方轮子:https://bugzilla.readthedocs.org/en/latest/installing/quick-start. ...
- Java_大数值_16.5.12
如果基本的整数和浮点数精度不能满足要求,那么可以使用java.math包中的BigInteger和BigDecimal这两个类.这两个类可以处理包含任意长度数字序列的数值.BigInteger类实现了 ...
- 并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理
在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并 ...
- CAD利用Select2得到所有实体(网页版)
主要用到函数说明: IMxDrawSelectionSet::Select2 构造选择集.详细说明如下: 参数 说明 [in] MCAD_McSelect Mode 构造选择集方式 [in] VARI ...