目录
简单查询
在MySQL中可以通过SQL语句来实现基本数据查询,SQL语句可以通过如下几种方式使用:查询所有字段数据、查询指定字段数据、避免重复数据查询、实现数学四则运算数据查询、设置显示格式数据查询。
数据库中可以包含无数的表。表中可能包含无数的记录,因此要获得所需的数据并非易事。在MySQL中,可以使用SELECT语句来查询数据,根据查询条件的不同,数据库系统会找到不同的数据,通过SELECT语句可以方便地获取所需的信息。
在MySQLzhong SELECT语句的基本语法形式如下:
SELECT field1,field2 ... fieldn
FROM tablename
[WHERE CONDITION1]
[GROUP BY fieldm [HAVING CONDITION2]]
[ORDER BY fieldn [ASC | DESC]]
其中,field1~fieldn 参数表示需要查询的字段名; tablename参数表示表的名称;CONDITION1参数表示查询条件;fieldm参数表示按该字段中的数据进行分组;CONDITION2参数表示满足该表达式的数据才能输出;fieldn参数值按该字段进行排序。排序方式又ASC和DESC两个参数指出;ASC参数表示按升序的顺序进行排序,是默认参数;DESC参数表示按降序的顺序进行排序。
查询所又字段数据
查询所需要字段是指定查询表中所有字段的数据,这种方式可以将表中所有字段的数据都查询出来。MySQL有两种方式可以查询表中的所有字段、
1.列出表的所有字段
通过SQL语句SELECT列出表的虽有字段,具体语法形式如下:
SELECT field1,field2,....,fieldn FROM tablename
其中,field1~fieldn参数表示需要查询的字段名;tablename参数表示表的名称。
2.“*”符号的使用
查询所有字段数据,除了使用上面的方法外,还可以通配符“*”来实现,具体形式如下
SELECT * FROM tablename
其中,符号“*”表示所有字段名;tablename参数表示表的名称。
与上一种方式相比,“*”符号方式的优势比较明明显,即可用该符号代替表中的所有字段,但是这种方式不够灵活,只能按照表中字段的固定顺序显示,不能随便改变字段的顺序。
查询自定字段数据
插叙所有字段数据,需要在关键SELECT后指定包含所有字段的列表或者符号 “*”,如果需要查询指定字段数据,只需要修改关键字SELECT后面字段列表为指定字段即可。
例如:从学生表中查询姓名、性别和年龄字段,SQL语句如下所示。
SELECT name,gender,age FROM t_student;
如果关键字SELECT 后面的字段不包含在所查询的表中,那么MySQL会报错
DISTINCT 查询
DISTINCT 可以去除重复数据
SELECT DISTINCT name FROM user
取出user表中name相同的数据咱是,可以指定多列。
左图为没有去重的name中的数据,有图为去重后的数据
IN查询
在MySQL中提供可关键字IN,用来实现判断字段的数值是否在指定集合的田间查询,该关键字具体语句形式如下
SELECT field1,field2,....,fieldn
FROM tablename WHERE fieldm IN(value1,value2,value3,..,valuen);
在上述语句中,参数field表示名称为tablename的表中的字段名,参数valuen表示集合中的值,通过关键字IN来判断字段fieldm的值是否在集合(value1,value2,value3,..,valuen)中,如果字段fieldm的值在集合中,就满足查询条件,该记录会被查询出来,否则不会被查询出来。
1.在集合中的数据记录
查询mysql库下的user表中user列的值为‘root’和‘twz’用户
SELECT user from user WHERE user IN ('root','twz')
说明:user表示字段名,mysql.user为mysql库下的use表,查询名称为’root‘和‘twz’的记录
2.不在集合中的数据记录查询
通过关键字NOT IN设置集合查询条件,以实现查询mysql库中user表用户名不为’root‘和‘twz’的记录
3.集合查询的注意
在具体使用关键字IN时,查询的集合如果存在NULL,则不会影响查询;使用关键字,NOT IN,查询的集合如果存在NULL,则不会有任何的查询结果。
(1).通过IN关键字以实现查询mysql库中user表用户名称为'root'和‘twz’的记录,带有NULLj结果如下。
(1).通过NOT IN关键字以实现查询mysql库中user表用户名称不为'root'和‘twz’的记录,带有NULLj结果如下。
BETWEEN AND查询
MySQL提供了关键字BETWEEN AND,用来实现判断字段的数值是否在指定范围内打的条件查询。该关键字的语法形式如下:
SELECT field1,field2,...,fieldn
FROM tablename WHERE fieldm BETWEEN 85 AND 90;
在上述语句中,参数fieldn表示名称为tablename的表中的字段名,通过关键字BETWEEN和AND来设置字段字段field的取值范围,如果字段field的值在所指定的范围内,那么满足查询田间,该记录会被查询出来,否则不会查询出来。
BETWEEN minvalue AND mavvalue 表示的是一个范围间的判断过程,只针对数字类型。
1。符合范围的数据记录查询
通过关键字BETWEEN和AND 设置查询范围,已实现查询ID为10和20之间的数据,具体SQL语句如下:
SELECT id FROM app_node WHERE id BETWEEN 10 AND 20;
结果如下:
2.不符合的数据记录查询
通过关键字NOT设置非查询范条件。具体SQL语句如下
SELECT id FROM app_node WHERE id NOT BETWEEN 10 AND 20;
结果如下:
LIKE模糊查询
MySQL提供了关键字LIKE来实现模糊查询,具体语法形式如下:
SELECT field1,field2,...,fieldn
FROM tablename WHERE fieldm LIKE VALUE;
在上述语句中,参数tablename表示表名,参数fieldn表示表中的字段名字,通过关键字LIKE来判断字段field的值是否与value字符串匹配,如果相匹配,则满足查询条件,该记录就会被查询出来,否则就不会查询出来。
在MySQL中,字符串必须加上单引号(‘’)或者双引号("")。由于关键字LIKE可以实现模糊查询,因此该关键字后面的字符串参数除了可以使用完整的字符串外,还可以包含通配符。LIKE关键字支持的通配符打入下表:
通配符 | 功能描述 |
_ | 该通配符值能匹配单个字符 |
% | 该通配符可以匹配任意长度的字符串,既可以是0个字符、1个字符,也可以是很多字符。 |
1.带有“%”通配符的查询
(1)查询字段name中以字母R开头的数据记录,具体SQL语句如下:
SELECT user FROM user WHERE user like 'R%';
结果如下:
(2)MySQL不区别大小写,上述SQL语句可以修改如下:
SELECT user FROM user WHERE user like 'r%';
(3)如果想查询以字母r开头的全部用户,可以执行逻辑非运算符(NOT或!),具体语句如下:
SELECT user FROM user WHERE user NOT LIKE 'r%';
2.带有“_”通配符查询
(1)查询字符user中以第二个字母O的记录,具体SQL语句如下:
SELECT user FROM user WHERE user LIKE '_o%';
结果如下:
(2)如果想查询第二个字母不是o的全部用户,可以执行逻辑非运算符(NOT或!),具体语句如下:
SELECT user FROM user WHERE user NOT LIKE '_o%';
(3)如果相查询第二个字符不是0 的全部用户,也可以用一下SQL语句查询:
SELECT user FROM user WHERE NOT user LIKE '_o%';
3.使用LIKE关键字查询其他类型数据
在MySQL中,LIKE关键字除了可以操作字符串类型的数据外,还可以操作其他数据类型。
(1)执行SQL语句SELECT,查询字段ID带有数字9的全部用户,具体SQL如下:
SELECT id FROM user WHERE id LIKE '%9%';
结果如下:
(2)对于LIKE关键字,如果匹配‘%%’,就表示查询所有数据记录
SELECT id FROM user WHERE id LIKE '%%';
对查询结果排序
在MySQL中,从表中查询出来的数据是无序的,或者其排列顺序不是用户所期望的顺序,为了使查询结果的顺序满足用户的要求,可以使用关键字ORDER BY对诗句进行排序。具体语法形式如下:
SELECT field1,field2,...,fieldn
FROM tablename ORDER BY fieldm [ASC[DESC]]
在上述语句中,参数tablename表示进行排序的表明,参数field表示表中的字段名字,参数fieldm表示按照该字段进行排序;ASC表示按升序进行排序;DESC表示按降序进行排序。默认的情况下按ASC进行排序;
(1)执行SQL语句SELECT,查询表user中所有的数据记录,按照id字段升序排序,具体SQL语句如下:
SELECT id FROM user ORDER BY id;
结果如下:
(2)执行SQL语句SELECT,查询表user中的id数据记录,按照id字段进行降序排序,具体语句如下:
SELECT id FROM user ORDER BY id DESC;
简单分组查询
MySQL软件提供了5个统计函数来帮助用户统计数据,可以使用户很方便地对记录进行统计数、统计和、统计平均数,计算最大值和最小值,而不需要的查询所有数据。
在具体使用统计函数时,都是针对表中所有记录数或指定特定条件(WHERE子句)的数据记录进行统计计算,在实现应用中,经常会先把虽有数据记录进行分组,再对这些进组后的数据记录进行统计计算。
MySQL通过SQL语句GROUP BY来是心啊,分组数据查询语法如下:
SELECT function()
FROM tablename WHERE CONDITION GROUP BY field;
在上述语句中,参数field表示某字段名,通过该字段名对名称为tablename的表的数据进行分组。
(1)执行SQL语句GROUP BY,对所有数据记录plan(工单表)中的字段userId进行分组,具体语句如下:
select userId from plan ORDER BY userId ;
结果如下:
注:在GROUP BY 可以使用多个字段进行分组,用‘,’分隔,使用统计的只能查询分组的字段,或者使用聚合函数(AVG() 返回某列的平均值,COUNT() 返回某列的行数,MAX() 返回某列的最大值,MIN() 返回某列的最小值,SUM() 返回某个列之和)。