查询数据就是从数据库中获取所须要的数据。

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 入门(九)—— 查询数据的更多相关文章

  1. MySql数据库,查询数据导出时会出现重复的记录(数据越多越明显)

    在查询数据时,数据量多的时候,我们会使用分页功能. 每页显示多少数据. 这种情况下,一半看不出什么问题. 而导出数据时,有时就是通过分页的方法,逐步讲数据追加到导出文件中. 当全部数据都导出之后,就有 ...

  2. Mysql入门到精通数据表的操作

    变更表 ALTER TABLE tb_name; 1.加入场 ALTER TABLE tb_name ADD 字段名字 字段类型 约束条件 [FIRST/AFTER 字段名称] 1>加入user ...

  3. php 基本连接mysql数据库和查询数据

    连接数据库,有三种方法 1. 常规方式: $con=mysql_connect($dbhostip,$username,$userpassword) or die("Unable to co ...

  4. <MySQL>入门一 查询 DQL

    1. 数据库表 1.1 员工表 Create Table CREATE TABLE `employees` ( `employee_id` ) NOT NULL AUTO_INCREMENT, `fi ...

  5. MySQL分层和查询数据的流程

    MySQL分层 MySQL分层 主要分为:连接层,服务层,引擎层,存储层 客户端执行一条select命令的流程如下 连接器 功能: 负责跟客户端建立连接.获取权限.维持和管理连接 细节: 1.当用户登 ...

  6. IntelliJ IDEA2017 java连接mysql数据库并查询数据

    最近自己开始重新学习java基础了,做java开发不可避免要处理数据库,由于好久不写java了,对idea也有点陌生了.所以这里写篇用jdbc来连接mysql的文章 至于mysql怎么装,请自行百度  ...

  7. MySQL下分页查询数据

      -- 分页 -- 前两条 -- 启始位置从下标0开始,查询的是数据库中的第1条开始 -- 0:启始位置 2:一次性查询多少条 select * from account LIMIT 0,2; -- ...

  8. java实现连接mysql数据库单元测试查询数据项目分享

    1.按照javaweb项目的要求逐步建立搭建起机构,具体的类包有:model .db.dao.test;具体的架构详见下图: 2.根据搭建的项目架构新建数据库test和数据库表t_userinfo并且 ...

  9. MySQL 查询数据

    MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...

  10. 十二、MySQL 查询数据

    MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...

随机推荐

  1. Java&Xml教程(八)使用JDOM将Java对象转换为XML

    在前面的教程中我们学习了如何使用JDOM解析和修改XML文件内容,本节介绍如何将Java对象转换为XML数据并生成文件. JDOM的Document类提供了便捷的方法创建元素和属性,XMLOutput ...

  2. Pro ASP.NET Core MVC 第6版翻译 目录页

    Pro ASP.NET Core MVC 第6版 目录 第一部分 第一章 ASP.NET Core MVC 的前世今生 第二章 第一个MVC应用程序(上) 第二章 第一个MVC应用程序(下) 第三章 ...

  3. 华硕(ASUS)X554LP笔记本在64位win7下无线网络连接问题

    还是那台华硕(ASUS)X554LP笔记本,无线网卡为 Qualcomm Atheros AR956x,某天换了个环境,WIFI(此处简称为WIFI网A)就连不上网了.手机.其它笔记本用无线连接都没问 ...

  4. #NOIP前数学知识总结

    我好菜啊…… 欧拉函数 欧拉函数φ(n),是小于n且和n互质的正整数(包括1)的个数. 性质: 1.对于质数n: φ(n)=n-1 2..对于n=pk φ(n)=(p-1)*pk-1 3.积性函数的性 ...

  5. java 23种设计模式 链接集锦

    创建型抽象工厂模式 http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html工厂方法 http://www.cnblogs ...

  6. 10.4 缓冲流 BufferedReader & BufferedWriter & 缓冲流特殊功能readLine

    缓冲流和正常流的使用大致相同,缓冲流效率更高. package day10_io_fileWrite_Read.buffer_stream; import java.io.*; /* * Buffer ...

  7. CAD得到所有组名(网页版)

    主要用到函数说明: _DMxDrawX::GetAllGroupName 得到所有组名. js代码实现如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

  8. Ceres

    sudo apt-get install liblapack-dev libsuitesparse-dev libcxspares3.1.2 libgflags-dev libggoogle-glog ...

  9. oracle关闭

    Alert log 要每天查看 abort 关闭冷备会无法使用

  10. Java基础——二分法

    BinarySearch 二分法查找,顾名思义就是要将数据每次都分成两份然后再去找到你想要的数据,我们可以这样去想,二分法查找很类似与我们平时玩的猜价格游戏,当你报出一个价格时裁判会告诉你价格相对于真 ...