查询数据指从数据库中获取所需要的数据。查询数据是数据库操作中最常用,也是最重要的操作。用户可以根据自己对数据的需求,使用不同的查询方式。通过不同的查询方式,可以获得不同的数据。MySQL中是使用SELECT语句来查询数据的。
基本查询语句
查询数据是数据可以操作中最最常用的操作。通过对数据库的操作,用户可以从数据库中获取需要的数据。数据库中可能包含着无数的表,表中可能包含着无数的记录。因此,要获得所需的数据并非易事。MySQL中使用SELECT语句来查询数据。根据查询的条件不同,数据库系统会找到不同的数据。
MySQL中,select的基本语法形式如下:
SELECT 属性列表
FROM 表名和视图列表
[WHERE 条件表达式
[GROUP BY 属性名1[HAVING 条件表达式]
[ORDER BY 属性2[ASC|DESC]];
其中,‘属性列表’参数表示需要查询的字段名,‘表名和视图列表’参数表示从此处指定的表或者视图中查询数据,表盒视图可以有多个,‘条件表达式1’参数指定查询条件,‘参数名1’参数指该字段中的数据进行分组,‘条件表达式2’参数表示满足该表达式的数据才能输出,‘属性名2’参数指该字段中的数据进行排序,排序方式由‘ASC’和‘DESC’两个参数指出,ASC参数表示升序,这是默认参数,DESC参数表示按降序的顺序进行排序。
如果有where子句,就按照‘条件表达式1’指定的条件进行查询,如果没有,就查询所有记录。
如果有GROUP BY子句,就按照‘属性名1’指定的字段进行分组,如果后面带有HAVING关键字,那么只有满足‘条件表达式2’中指定的条件才能够输出。GROUP BY子句通常和count、SUM等聚合函数一起使用。
如果有ORDER BY子句,就按照‘属性名2’指定的字段进行排序,排序方式由‘ASC’和‘DESC’两个参数指出。默认的情况下是‘ASC’。
单表查询
单表查询是指从一张表中查询所需要的数据。查询数据时,可以从一张表中查询数据,也可以从多张表中同时查询数据。两者的查询方式由一定的区别。因为单表查询只在一张表上进行操作,所以查询比较简单。
查询所有的字段
查询所有字段是指查询表中所有字段的数据。这种方式可以将表中所有字段的数据都查询出来,mysql中有两种方式可以查询表中所有的字段。
1.列出表的字段
2.使用“*”查询所有字段
查询指定字段
查询数据时,可以在select语句的‘属性列表’中列出所要查询的字段。这种方式可以指定需要查询的字段,而不需要查询出所有的字段。
查询指定条件
select语句中可以设置查询条件。用户可以根据自己的需要来设置查询条件,按条件进行查询。查询的结果必须满足查询条件。其语法规则如下:
where 条件表达式
带IN关键字的查询
IN关键字可以判断某个字段的值是否在指定的集合中。如果字段的值在集合中,则满足查询条件,该记录将被查询出来。如果不在集合中,则不满足查询条件。其语法规则如下:
[not] in (元素1,元素2,...,元素n)
in图:
not in 图:
带BETWEEN AND的范围查询
BETWEEN AND关键字可以判断某个字段的值是否在指定的范围内。如果字段的值在指定范围内,则满足查询条件,该记录将被查询出来。如果不在指定范围内,则不满足查询条件。其语法规则如下:
[NOT] BETWEEN 取值1 AND 取值2
带LIKE的字符匹配查询
LIKE关键字可以匹配字符串是否相等。如果字段的值与指定的字符串相匹配,则满足查询条件,该记录将被查询出来。如果与指定的字符串不匹配,则不满足查询条件。其语法规则如下:
[NOT] LIKE ‘字符串’
1.匹配完整字符串
2.匹配使用通配符'%'的字符串(%代表后面、中间和前面的所有字符)
3.匹配使用通配符'_'的字符串(_代表其中的一个字符)
4.not LIKE
查询空值
IS NULL关键字可以用来判断字段的值是否为空值(NULL)。如果字段的值是空值,则满足查询条件,该记录将被查询出来。如果字段的值不是空值,则不满足查询条件。其语法规则如下:
IS [NOT] NULL
其中,“NOT”是可选参数,加上NOT表示字段不是空值时满足条件。
带AND的多条件查询
AND关键字可以用来联合多个条件进行查询。使用AND关键字时,只有同时满足所有查询条件的记录会被查询出来。如果不满足这些查询条件的其中一个,这样的记录将被排除掉。AND关键字的语法规则如下:
条件表达式1 AND 条件表达式2 [...AND 条件表达式
其中,AND可以连接两个条件表达式。而且,可以同时使用多个AND关键字,这样可以连接更多的条件表达式。
带OR的多条件查询
OR关键字也可以用来联合多个条件进行查询,但是与AND关键字不同,使用OR关键字时,只要满足这几个查询条件的其中一个,这样的记录将会被查询出来。如果不满足这些查询条件中的任何一个,这样的记录将会被排除掉。OR关键字的语法规则如下:
条件表达式1 OR 条件表达式2 [...OR 条件表达式
其中,OR可以用来连接两个条件表达式。而且,可以同时使用多个OR关键字,这样可以连接更多的条件表达式。
查询结果不重复
如果表中的某些字段上没有唯一性约束,这些字段可能存在着重复的值,例如,employee表的d_id字段就存在着重复的情况
可以使用distinct关键字来消除字段中的重复记录,看下图:
对查询结果排序
从表中查询出来的数据可能是无序的,或者其排列顺序不是用户所期望的顺序。为了使查询结果的顺序满足用户的要求,可以使用ORDER BY关键字对记录进行排序。其语法规则如下:
ORDER BY 属性名 [ASC|DESC]
默认是升序ASC
分组查询
GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组。字段中值相等的为一组,其语法规则如下:
GROUP BY 属性名 [HAVING 条件表达式] [with rollu
1.单独使用GROUP BY关键字来分组
2.GROUP BY关键字与GROUP_CONCAT函数一起使用
这里先使用GROUP BY字段先进行分组查询,然后再使用GROUP_CONCAT函数将每个分组的name字段的值显示出来,看图:
3.GROUP BY关键字与聚合函数一起使用
这里先使用GROUP BY字段先进行分组查询,取值相同的为一组,然后对每一组使用聚合函数COUNT进行计算,求出每一组的记录数,如图:
4.GROUP BY关键字与HAVING一起使用
这里先使用GROUP BY字段先进行分组查询,然后显示记录数大于等于多少的分组,如图:
5.按多个字段进行分组
6.GROUP BY关键字与WITH ROLLUP一起使用
用LIMIT限制查询结果的数量
查询数据时,可能会查询出很多的记录。而银行需要的记录可能只是很少的一部分。这样就需要来限制查询结果的数量。LIMIT是MySQL中的一个特殊关键字。其中可以用来指定查询结果从哪条记录开始显示。还可以指定一共显示多少条记录。LIMIT关键字有两种使用方式。这两种方式分别是不指定初始位置和指定初始位置。
1.不指定初始位置
显示前几条
2.指定初始位置
指定从第几条开始显示,然后显示多少条,0代表的是第1条,依次类推
使用集合函数查询
集合函数包括count,sum,avg,max和min。其中,count用来统计记录的条数;sum用来计算字段的值得总和;AVG用来计算字段的值得平均值;MAX用来查询字段的最大值;MIN用来查询字段的最小值。当需要对表中的记录求和、求平均值、查询最大值、查询最小值等操作时,可以使用集合函数。GROUP BY关键字通常需要与集合函数一起使用。
COUNT函数
count函数用来统计记录的条数。如果要统计employee表中有多少条记录,可以使用该函数。如图:
sum函数
sum函数是求和函数。使用sum函数可以求出表中某个字段取值的总和。例如,可以用sum函数来求学生的总成绩。
AVG函数
AVG函数是求平均值的函数。使用AVG函数可以求出表中某个字段取值的平均值。例如,可以用AVG函数来求平均年龄,也可以使用AVG函数来求学生的平均成绩。
MAX函数
MAX函数是求最大值的函数。使用MAX函数可以求出表中某个子弹取值的最大值。例如,可以用该函数来查询最大年龄,也可以求出各科的最高成绩。
MIN函数
MIN函数是求最小值的函数。使用MIN函数可以求出表中某个字段取值的最小值。例如,可以用该函数来查询最小年龄,也可以求出各科的最低成绩。
连接查询
连接查询时将两个或两个以上的表按某个条件连接起来,从中选取需要的数据。连接查询是同时查询两个或两个以上的表时使用的。当不同的表中存在表示相同意义的字段时,可以通过该字段来连接这几个表。例如,学生表中有course_id字段来表示所学课程的课程号,课程表中有num字段来表示课程号。那么,可以通过学生表中的course_id字段和课程表中num字段来进行连接查询。连接查询包含内连接查询和外连接查询。
内连接查询
内连接查询是一种最常用的连接查询。内连接查询可以查询两个或两个以上的表。当两个表中存在表示相同意义的字段时,可以通过该字段来连接这两个表。当该字段的值相等时,就查询出该记录。
外连接查询
外连接查询可以查询两个或两个以上的表。外连接查询也需要通过指定字段来进行连接。当该字段取值相等时,可以查询出该记录。而且,该字段不相等的记录也可以查询出来。外连接查询包括左连接查询和右连接查询。其基本语法如下:
SELECT 属性名列表 from 表名1 left|right join 表名2 on 表名1.属性名1=表名2.属性名2
1.左连接查询
当表名1中有值,而表名2没值的时候,表名2值就显示null,按照表名1的值来显示
2.右连接查询
当表名1中有值,而表名2没值的时候,表名1的值就不显示,按照表名2的值来显示
复合条件连接查询
在连接查询时,也可以增加其他的限制条件。通过多个条件的复合查询,可以使查询结果更加准确。例如,当employee表和department表进行连接查询时,可以限制age字段的取值必须大于24。这样,可以更加准确地查询出年龄大于24岁的员工的信息。
子查询
子查询是将一个查询语句嵌套在另一个查询语句中。内层查询语句的查询结果,可以为外层查询语句提供查询条件。因为在特定情况下,一个查询语句的条件需要另一个查询语句来获取。例如,现在需要从学生成绩表中查询计算机系学生的各科成绩。那么,首先就必须知道哪些课程是计算机学生选修的。因此,必须先查询计算机系学生选修的课程,然后根据这些课程来查询计算机系学生的各科成绩。通过子查询,可以实现多表之间的查询。子查询可能包含in,not in,any,all,exists,not exists等关键字。子查询还可能包含比较运算符,如=,!=,>和
带in关键字的子查询
一个查询语句的条件可能落在另一个select语句的查询结果中。这可以通过in关键字来判断。例如查询employee表中的记录,这些记录的d_id字段的值必须在department表中出现过。如图所示:
带比较运算符的子查询
子查询可以使用比较运算符。这些比较运算符包含=,!=,>,
带EXISTS关键字的子查询
EXISTS关键字表示存在。使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值。如果内层查询语句查询到满足条件的记录,就返回一个真值(true)。否则,就返回一个假值(FALSE)。当返回的值是真值时,外层查询语句将进行查询,当返回值是假值时,外层查询语句不进行查询或者查询不出任何记录。
带ANY关键字的子查询
ANY关键字表示满足其中任一条件。使用ANY关键字时,只要满足内层查询语句返回的结果中的任何一个,就可以通过该条件来执行外层查询语句。例如,需要查询哪些同学能够获得奖学金。那么,首先必须从奖学金表中查询出各种奖学金要求的最低分。只要一个同学的成绩高于不同奖学金的最低分的任何一个,这个同学就可以获得奖学金。ANY关键字通常与比较运算符一起使用。
带ALL关键字的子查询
ALL关键字表示满足所有条件。使用ALL关键字时,只有满足内层查询语句返回的所有结果,才可以执行外层查询语句。例如,需要查询哪些同学能够获得一等奖学金。首先必须从奖学金表中查询出各种奖学金要求的最低分。因为一等奖学金要求的分数最高,只有当同学的成绩高于所有奖学金的最低分时,才可能获得一等奖学金。ALL关键字也经常与比较运算符一起使用。如图:
合并查询结果
合并查询结果是将多个SELECT语句的查询结果合并到一起。因为某种情况下,需要将几个SELECT语句查询出来的结果合并起来显示。例如,现在需要显示公司甲和公司乙这两个公司所有员工的信息。这就需要从公司甲中查询出所有员工的信息,再从公司乙中查询出所有公司的信息。然后将两次查询到的结果合并到一起。进行合并操作使用UNION和UNION ALL关键字。
使用UNION关键字时,数据库系统会将所有的查询结果合并到一起,然后去掉相同的记录。而UNION ALL关键字则只是简单地合并到一起。其语法规则如下:
SELECT 语句1 UNION|UNION ALL SELECT 语句2 UNION|UNION ALL........ SELECT 语句n;
为表和字段取别名
在查询时,可以为表和字段取一个别名。这个别名可以代替其指定的表和字段。
为表取别名
当表的名称特别长时,在查询时直接使用表名很不方便。这时可以为表取一个别名。用这个别名代替表的名称。
MySQL中为表取别名的基本形式如下:
表名 表的别名
为字段取别名
当查询数据时,MySQL会显示每个输出列的名词。默认的情况下,显示的列名是创建表定义的列名。MySQL中为字段取别名的基本形式如下:属性名 [AS] 别名,看图:
使用正则表达式查询
正则表达式是用某种匹配模式去匹配一类字符串的一个方式。例如,使用正则表达式可以查询出A,B,C其中任何一字符的字符串。正则表达式的查询能力比通配字符的查询能力更强大,而且更加的灵活。正则表达式可以用于非常复杂的查询。MySQL中,使用REGFEXP关键字来匹配查询正则表达式。
其基本形式如下:属性名 regexp ‘匹配方式’
查询以特定字符或字符串开头的记录
使用字符“^”可以匹配以特定字符或字符串开头的记录
下面从info表name字段中查询以字母“L”开头的记录。代码如下:SELECT * FROM INFO WHERE NAME REGEXP '^L';
匹配字符串也是同种方式,看图:
查询以特定字符或字符串结尾的记录
使用字符“$”可以匹配以特定字符或字符串结尾的记录。
看图:
用符号“.”来代替字符串中的任意一个字符
用正则表达式来查询时,可以用“.”来替代字符串中的任意一个字符。看图:
匹配指定字符中的任意一个
使用方括号()可以将需要查询字符组成一个字符集。只要记录中包含方括号中的任意字符,该记录将会被查询出来。例如,通过“[abc]”可以查询包含这3个字母中任何一个的记录。看图:
第二个查询语句是查询包含0-9数字的记录,第三个是查询a-c或者0-9的记录
下面从info表name字段中查询包含a到w字母和数字之外开头的字符的记录,看图:
匹配指定字符串
正则表达式可以匹配字符串。当表中的记录包含这个字符串时,就可以将该记录查询出来。如果指定多个字符串时,需要用符号“|”隔开。只要匹配这些字符串中的任意一个即可。看图:
使用“*”和“+”来匹配多个字符
正则表达式中,“*”和“+”都可以匹配多个该符号之前的字符。但是,“+”至少表示一个字符。而“*”可以表示零个字符。
看图:
使用或者来指定字符串连续出现的次数
正则表达式中,“字符串”表示字符串连续出现M次,“字符串”表示字符串连续出现至少M次,最多N次。例如,“ab”表示字符串“ab”连续出现两次。“ab”表示字符串“ab”连续出现至少两次,最多四次。
领取专属 10元无门槛券
私享最新 技术干货
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287