#查询数据 1.基本查询语句 select (*|<字段列表>) [ from <表1>,<表2>... [where <表达式>] [group by <group by definition>] [having <expression> [{<operator> <expression>} ...]] [order by <order by definition>] [limit [<offset>,] <row count>] ] select 字段1,字段2.... from 表或视图 where 查询条件; {*| <字段列表>}:包含星号通配符选择字段列表,表示查询字段,字段列至少包含一个字段名称,多个字段每个字段间用逗号隔开,最后一个字段后不加逗号 from<表1>,<表2>... 表1和表2查询数据的来源,可以是多个 where 可选项,限定查询行必须满足的查询条件 group by <字段>:按照指定的字段分组,显示查询出来的数据 order by <字段>:按照什么样的顺序显示查询出来的数据,可进行的排序有升序(ASC)、降序(DESC) limit [<offset>,] <row count>:控制每次查询显示的数据条数 #单表查询 1.查询所有字段 (1) 格式:select * from 表名 或者 select 所有列名 from 表名 作用: 从一个表中检索所有记录 eg. mysql> select * from test1; +------+------+------------+---------+ | f_id | s_id | f_name | f_price | +------+------+------------+---------+ | a1 | 101 | apple | 5.20 | | a2 | 103 | apricot | 2.20 | | b1 | 102 | blackberry | 10.20 | | b2 | 104 | berry | 7.60 | | b5 | 107 | xxxx | 3.60 | | bs1 | 103 | orange | 11.20 | | bs2 | 104 | melon | 8.20 | | c0 | 101 | cherry | 3.20 | | l2 | 104 | lemon | 6.40 | | m1 | 106 | mango | 15.70 | | m2 | 105 | xbabay | 2.60 | | m3 | 105 | xxtt | 11.60 | | o2 | 107 | coconut | 9.20 | | t1 | 105 | banana | 10.30 | | t2 | 106 | grape | 5.30 | | t4 | 107 | xbababa | 3.60 | +------+------+------------+---------+ 2.查询指定字段 (1) 格式:select 列名 from 表名 作用:查询表中的某一个字段 eg. mysql> select f_id from test1; +------+ | f_id | +------+ | a1 | | a2 | | b1 | | b2 | | b5 | | bs1 | | bs2 | | c0 | | l2 | | m1 | | m2 | | m3 | | o2 | | t1 | | t2 | | t4 | +------+ (2) 格式:select 字段名1,字段名2,...,字段名n from 表名 作用:查询表中的多个字段 eg. mysql> select f_name,f_price from test1; +------------+---------+ | f_name | f_price | +------------+---------+ | apple | 5.20 | | apricot | 2.20 | | blackberry | 10.20 | | berry | 7.60 | | xxxx | 3.60 | | orange | 11.20 | | melon | 8.20 | | cherry | 3.20 | | lemon | 6.40 | | mango | 15.70 | | xbabay | 2.60 | | xxtt | 11.60 | | coconut | 9.20 | | banana | 10.30 | | grape | 5.30 | | xbababa | 3.60 | +------------+---------+ 3.查询指定记录 格式:select 字段名1,字段名2,...,字段名n from 表名 where 查询条件 作用:从表中根据字段名查询符合查询条件的值 where条件判断符 操作符 说明 = 相等 <>,!= 不相等 < 小于 <= 小于或者等于 > 大于 >= 大于或者等于 between 位于两值之间 eg. mysql> select f_name,f_price from test1 where f_price < 10.00; +---------+---------+ | f_name | f_price | +---------+---------+ | apple | 5.20 | | apricot | 2.20 | | berry | 7.60 | | xxxx | 3.60 | | melon | 8.20 | | cherry | 3.20 | | lemon | 6.40 | | xbabay | 2.60 | | coconut | 9.20 | | grape | 5.30 | | xbababa | 3.60 | +---------+---------+ 4.带IN关键字查询 (1) 格式:select 字段名1,字段名2,...,字段名n from 表名 where 字段名_x IN (条件) order by 字段名_v 作用:从表中查询数据,且字段名_x在条件中,并安照字段名_v排序 eg. mysql> select s_id,f_name,f_price from test1 where s_id IN (101,102) order by f_name; +------+------------+---------+ | s_id | f_name | f_price | +------+------------+---------+ | 101 | apple | 5.20 | | 102 | blackberry | 10.20 | | 101 | cherry | 3.20 | (2) 格式:select 字段名1,字段名2,...,字段名n from 表名 where 字段名_x NOT IN (条件) order by 字段名_v 作用:从表中查询数据,且字段名_x不在条件中,并安照字段名_v排序 eg. mysql> select s_id,f_name,f_price from test1 where s_id NOT IN (101,102) order by f_name; +------+---------+---------+ | s_id | f_name | f_price | +------+---------+---------+ | 103 | apricot | 2.20 | | 105 | banana | 10.30 | | 104 | berry | 7.60 | | 107 | coconut | 9.20 | | 106 | grape | 5.30 | | 104 | lemon | 6.40 | | 106 | mango | 15.70 | | 104 | melon | 8.20 | | 103 | orange | 11.20 | | 107 | xbababa | 3.60 | | 105 | xbabay | 2.60 | | 105 | xxtt | 11.60 | | 107 | xxxx | 3.60 | +------+---------+---------+ 5.带between and范围查询 格式:select 字段名1,字段名2,...,字段名n from 表名 where 字段名_x between 值1 and 值2; 作用:查询符合在between and之间的值 eg. mysql> select f_name,f_price from test1 where f_price between 2.00 and 10.00; +---------+---------+ | f_name | f_price | +---------+---------+ | apple | 5.20 | | apricot | 2.20 | | berry | 7.60 | | xxxx | 3.60 | | melon | 8.20 | | cherry | 3.20 | | lemon | 6.40 | | xbabay | 2.60 | | coconut | 9.20 | | grape | 5.30 | | xbababa | 3.60 | +---------+---------+ 6.带like的字符匹配查询 (1).通配符%,匹配任意长度的字符,包括零字符 格式:select 字段名1,字段名2,...,字段名n from 表名 where 字段名_x f_name 'b_%' 作用:查询表中以b开头的f_name,%可以放在任何位置,%g%,中间包含g字符的f_name eg. mysql> select f_id,f_name from test1 where f_name like 'b%'; +------+------------+ | f_id | f_name | +------+------------+ | b1 | blackberry | | b2 | berry | | t1 | banana | +------+------------+ (2).通配符'-',匹配任意一个字符 格式:select 字段名1,字段名2,...,字段名n from 表名 where 字段名_x f_name '----y' 作用:查询以y结尾,且y前面有4个字母记录 eg. mysql> select f_id,f_name from test1 where f_name like '____y'; +------+--------+ | f_id | f_name | +------+--------+ | b2 | berry | +------+--------+ 7.查询空值 空值为NULL,不等同于0,也不等同于空字符串,表示数据未知、不适用或将在以后添加数据 格式:select 字段名1、字段名2、... from 表名 where 字段名 is null; 作用:从表中查询数据,并判断字段名是否为空 eg. mysql> select c_id, c_name,c_email from test2 where c_email is null; +-------+-----------+---------+ | c_id | c_name | c_email | +-------+-----------+---------+ | 10003 | NetbHoood | NULL | +-------+-----------+---------+ 格式:select 字段名1、字段名2、... from 表名 where 字段名 is not null; 作用:从表中查询数据,并判断字段名是否为空 eg. mysql> select c_id, c_name,c_email from test2 where c_email is not null; +-------+---------+-------------------+ | c_id | c_name | c_email | +-------+---------+-------------------+ | 10001 | redhook | [email protected] | | 10002 | Stars | [email protected] | | 10004 | JOTO | [email protected] | +-------+---------+-------------------+ 8.带AND的多条件查询 格式:select 字段名1、字段名2、... from 表名 where 条件1 and 条件2; 作用:多条件查询,&的关系 eg. mysql> select f_id, f_price, f_name from test1 where s_id = '101' and f_price >=5; +------+---------+--------+ | f_id | f_price | f_name | +------+---------+--------+ | a1 | 5.20 | apple | +------+---------+--------+ 9.带OR的多条件查询 格式:select 字段名1、字段名2、... from 表名 where 条件1 or 条件2; 作用:多条件查询,|的关系 eg. mysql> select f_id, f_price, f_name from test1 where s_id = 101 or s_id = 102; +------+---------+------------+ | f_id | f_price | f_name | +------+---------+------------+ | a1 | 5.20 | apple | | b1 | 10.20 | blackberry | | c0 | 3.20 | cherry | +------+---------+------------+ 10.查询结果不重复 格式:select distinct 字段名 from 表名; 作用:消除表中重复的记录值 eg. mysql> select s_id from test1; +------+ | s_id | +------+ | 101 | | 103 | | 102 | | 104 | | 107 | | 103 | | 104 | | 101 | | 104 | | 106 | | 105 | | 105 | | 107 | | 105 | | 106 | | 107 | +------+ mysql> select distinct s_id from test1; +------+ | s_id | +------+ | 101 | | 103 | | 102 | | 104 | | 107 | | 106 | | 105 | +------+ 11.对查询结果排序 (1).单列排序 格式:select 字段名 from 表名 order by 字段名; 作用:将查询的结果进行排序 eg. mysql> select f_name from test1 order by f_name; +------------+ | f_name | +------------+ | apple | | apricot | | banana | | berry | | blackberry | | cherry | | coconut | | grape | | lemon | | mango | | melon | | orange | | xbababa | | xbabay | | xxtt | | xxxx | +------------+ mysql> select f_name from test1 order by f_name; +------------+ | f_name | +------------+ | apple | | apricot | | banana | | berry | | blackberry | | cherry | | coconut | | grape | | lemon | | mango | | melon | | orange | | xbababa | | xbabay | | xxtt | | xxxx | +------------+ (2)多列排序 格式:selct 字段名1,字段名2 from 表名 order by 字段名1,字段名2 作用:从表中查询字段名1,字段名2 先按字段名1排序,再按字段名2排序 eg. mysql> select f_name from test1 order by f_name; +------------+ | f_name | +------------+ | apple | | apricot | | banana | | berry | | blackberry | | cherry | | coconut | | grape | | lemon | | mango | | melon | | orange | | xbababa | | xbabay | | xxtt | | xxxx | +------------+ (3)指定排序方式 格式:select 字段名1,字段名2 from 表名 order by 字段名 DESC; 作用:将字段名按照降序方式排序,不加参数DESC默认为升序方式,升序的参数为(ASC) 注意:排序只应用于位于其前面的字段 eg. mysql> select f_price,f_name from test1 order by f_price DESC, f_name; +---------+------------+ | f_price | f_name | +---------+------------+ | 15.70 | mango | | 11.60 | xxtt | | 11.20 | orange | | 10.30 | banana | | 10.20 | blackberry | | 9.20 | coconut | | 8.20 | melon | | 7.60 | berry | | 6.40 | lemon | | 5.30 | grape | | 5.20 | apple | | 3.60 | xbababa | | 3.60 | xxxx | | 3.20 | cherry | | 2.60 | xbabay | | 2.20 | apricot | +---------+------------+ 12.分组查询 [GROUP BY 字段] [having <条件表达式>] (1)创建分组 格式:select 字段名 from 表名 group by 字段名; 作用:从表中查询数据,并安装字段名进行分组 eg. mysql> select s_id, count(*) as Total from test1 group by s_id; +------+-------+ | s_id | Total | +------+-------+ | 101 | 2 | | 102 | 1 | | 103 | 2 | | 104 | 3 | | 105 | 3 | | 106 | 2 | | 107 | 3 | +------+-------+ (2)使用having过滤分组 格式:select 字段名 from 表名 group by 字段名 having 条件 作用:将查询出来的数据根据条件再次进行过滤 eg. mysql> select s_id, count(*) as Total from test1 group by s_id having count(*) > 1; +------+-------+ | s_id | Total | +------+-------+ | 101 | 2 | | 103 | 2 | | 104 | 3 | | 105 | 3 | | 106 | 2 | | 107 | 3 | +------+-------+ (3)使用with rollup 格式:select 字段名 from 表名 group by 字段名 with rollup; 作用:计算查询出来的所有记录的总和 eg. mysql> select s_id, count(*) as Total from test1 group by s_id having count(*) > 1; +------+-------+ | s_id | Total | +------+-------+ | 101 | 2 | | 103 | 2 | | 104 | 3 | | 105 | 3 | | 106 | 2 | | 107 | 3 | +------+-------+ (4)多字段分组 格式:select 字段名1,字段名2 from 表名 group by 字段名1,字段名2 作用:将查询到的数据进行分组,从左到右的顺序依次执行,第一个相同才会执行第二个条件 eg. mysql> select s_id,f_name, count(*) from test1 group by s_id,f_name; +------+------------+----------+ | s_id | f_name | count(*) | +------+------------+----------+ | 101 | apple | 1 | | 101 | cherry | 1 | | 102 | blackberry | 1 | | 103 | apricot | 1 | | 103 | orange | 1 | | 104 | berry | 1 | | 104 | lemon | 1 | | 104 | melon | 1 | | 105 | banana | 1 | | 105 | xbabay | 1 | | 105 | xxtt | 1 | | 106 | grape | 1 | | 106 | mango | 1 | | 107 | coconut | 1 | | 107 | xbababa | 1 | | 107 | xxxx | 1 | +------+------------+----------+ (5)group by和order by一起使用 格式:select 字段名1,sum(字段名2 * 字段名3) as 变量名 from 表名 group by 字段名1 having sum(字段名2 * 字段名3) >= 100 order by 变量名 作用:从表中查询指定数据,并对指定的数据进行排序 注意:使用rollup时不能同时使用order by,两者互斥 13.使用limit限制查询结果数量 格式:select * from 表名 limit [位置偏移量,] 行数,位置偏移量表示从哪一行开始,默认为0,表示从第一行开始 作用:返回查询结果中指定的一些信息 eg. mysql> select * from test1 limit 4,3; +------+------+--------+---------+ | f_id | s_id | f_name | f_price | +------+------+--------+---------+ | b5 | 107 | xxxx | 3.60 | | bs1 | 103 | orange | 11.20 | | bs2 | 104 | melon | 8.20 | +------+------+--------+---------+
MySql数据查询(一) 单表查询
猜你喜欢
转载自blog.csdn.net/poetry_and_distance/article/details/79813725
今日推荐
周排行