mysql数据库开始——查询

一、简单查询

1.最简单查询(查所有数据)
select * from 表名   注意:* 代表所有列,并不是代表所有行
例:select * from test

2.查询指定列
select 列名,列名 from 表名
例:select code,name from test

3.修改结果集的列名 as
select 列名 as '显示的字' from 表名
例:select code as '代号',name as '姓名' from test

4.条件查询
select * from 表名 where 条件
例:select * from test where code='n003'

5.多条件查询
或者 or:select * from 表名 where 条件 or 条件
例:select * from test where code='p003' or nation='n001'

并且 and:select * from 表名 where 条件 and 条件
例:select * from test where code='p004' and nation='n001'

6.范围查询 (某一列的内容是谁到谁之间的数据)
例:两种写法:查找汽车价格在40到60之间

(1)select * from car where price>=40 and price>=60
(2)select * from car where price between 40 and 60

7.离散查询
查询汽车价格在(10、20、30、40、50、60)中出现的信息 in
例:两种写法

(1)select * from car where price=10 or price=20 or price=30 or price=40 or price=50 or price=60

(2)select * from car where price in(10,20,30,40,50,60)

不在(10、20、30、40、50、60)中出现的信息 not in
例:select * from car where price not in(10,20,30,40,50,60)

8.模糊查询(关键字查询)like
%:任意n个字符
_:任意一个字符

查询汽车表名称中包含奥迪
例:select * from car where name like '%奥迪%'

查询汽车表名称第二个字符为“马”的汽车
例:select * from car where name like '_马%'

9.排序查询 order by
升序 asc,可省略
例:汽车表中价格列升序

select * from car order by price asc

降序 desc(从高到低)
例:汽车表中油耗列降序

select * from car order by oil desc

先a列升序后b列降序
例:汽车表中先将a列升序后将b列降序

select * from car order by a,b desc

10.去重查询 distinct
例:查找汽车表中型号一样的去重

select distinct brand from car

11.分页查询

一页显示m条数据 当前是第n页
limit (n-1)*m,m

一页显示10条数据 当前是第二页 跳过多少条,取多少条
例:select * from chinastates limit 10,10


12.聚合函数(统计函数) 
(1)总数 count(*):查询数据总条数
例:select count(*) from chinastates

count(主键列 areacode)
例:select count(areacode) from chinastates

(2)求和 sum(求价格和列)
例:select sum(price) from car

(3)求平均 avg(求价格平均列)
例:select avg(price) from car

(4)取最大值、最小值(价格列)
例:

select max(price) from car 
select min(price) from car

13.分组查询 group by
查询汽车表中每个系列下有多少汽车
例:select brand,count(*) from car group by brand

查询汽车表中卖的汽车数量大于3的系列    注意:  group by....having(条件)
例:select brand from car group by brand having count(*)>3

 

二、高级查询


1.连接查询,对结果集列的扩展
select * from info,nation      #形成很大的冗余(笛卡尔积)
多张表的列有重名的,要写表名,然后写列名,格式如下:表名.列名
两种方式:
(1)select * from info,nation where info.nation=nation.code

select info.code,info.name,sex,nation.name,birthday from info,nation where 
info.nation=nation.code

(2)select * from info join nation on info.nation=nation.code

2.联合查询,对结果集行的扩展, 列的数量要相同 union
select code,name from info
union
select code,name from nation

3.子查询
父查询:外层查询
子查询:里查询(查询结果作为父查询的条件)

(1)无关子查询:子查询在执行时和父查询没有关系(子查询可单独执行)
a.查询民族为汉族的所有人员信息
父查询:select * from info where nation=()
子查询:select code from nation where name='汉族'
合并后就是结果:
select * from info where nation=(select code from nation where name='汉族')

b.查询系列名是“宝马5系”的所有汽车信息
select * from car where brand=(select brand_code from brand where brand_name='宝马5系')

(2)相关子查询:子查询在执行时和父查询有关系(子查询不可单独执行)
a.查询汽车表中油耗小于该系列平均油耗的所有汽车信息
父查询:select * from car where oil<(该系列平均油耗)
子查询:select avg(oil) from car where brand=该系列
合并后就是结果:
select * from car as a where oil<(select avg(oil) from car as b where b.brand=a.brand)
注意:用as修改表名时不用加引号''

posted @ 2017-03-11 16:26  彬彬有礼☆  阅读(179)  评论(0编辑  收藏  举报