数据查询(select)
1.基本用法
select 查询字段 6
from 表名或视图名(逐行扫描) 1
where条件(行过滤) 2
group by 分组 3
having 分组筛选 4
order by 排序 [asc | desc] 5
-1- 注释:
单行:-- 注释
多行:/* 注释 */
-2- as的两种用法:
1)给字段或者表取别名:字段名|表名 [as] 别名
2)添加附加字段:'附加字段值' as 附加字段名
注:附加字段值如果是null 或者数字可以不加引号,但如果是字符串,必须加引号,否则会报错没有这个字段。
-3- 连接函数concat()
concat(字段名,'连接值') (位置可以互换)
例:select name as 姓名, concat(age,'岁') as 年龄, concat('中国',city) as 所在地, '中国' as 国家
from Students;
-4- 逻辑运算 && || ! ==> and or not
-5- 查询指定数目的数据(记录)条数:
MySQL:limit m,n; 从第m个索引开始取n个值(m从0开始)
-6- 升序、降序问题:
注:1)一个查询语句中可以指定多个排序方式,如果第一个排序方式相同,则按第二个排序方式,以此类推。
2)如果排序的字段值相同,且没有其他排序方式,则此时会按照默认的id排序。
-7- 聚合函数(统计)
1)sum:对数值的字段进行求和 例:select sum(age) from Students;
2)avg:对数值的字段求平均值
3)max:对数值、日期或字符类型进行求最大值
4)min:
5)count:计数:count(字段)--> 统计列中非空字段的个数
统计行数:count(*)--> 统计结果集中的行数
-8- distinct:删除重复值
例:select distinct sex from Students;
2.模糊查询
-1- like:字符串的模糊查询,通常会与通配符一起使用(也可以与正则表达式一起配合使用)
如果只单独使用一个like,则 like 和 = 相同。
注: os中的通配符:* 任意个字符
? 一个字符
数据库中的通配符:% 任意个字符
_ 一个字符
-2- (not) between A and B:数值与日期的范围查询,介于两者之间
注:等价于 字段 >= A and 字段 <= B (匹配的范围包含A和B)
-3- (not) in:一个范围内值的匹配
例:select * from Students where classId not in(1,3);
-4- substring()函数:截取一个字符串,进行匹配
例:查询出生日期在1960年至1969年出生的客户信息,返回客户名(根据身份证查询)
select Name as 客户名
from customers
/* 方法一:(前面是6个_)
where CardNo like '______196%';
*/
/* 方法二:
where substring(CardNo,7,4) like '196_';
*/
-- 方法三:
where substring(CardNo,7,4) between 1960 and 1969;
3.分组查询
基本用法:group by 分组字段1,分组字段2...
注:group后一般放的是select语句中的非聚合字段
4.分组筛选(过滤)
having语句:实现分组后结果集的再次过滤
-1- having出现的前提是必须有分组group by查询,且放在其后
-2- where与having的区别:
1)位置:where在group by之前,having在grop by之后;
2)过滤对象:where 实现对表中行的过滤
having 实现对象分组后的结果集的过滤
5.多表查询(连接查询)
关键点:主外键的关系(父表 子表 主键 外键)
实现:
-1- where:
select 字段
from 表1 , 表2 [表3,...]
where 父表主键 = 子表外键 [and 主键 = 外键] [and 其他条件];
-2- join(连接)
基本语法:
select 字段
from 子表1
[inner | left | right] join 父表2
on 父表2主键 = 子表1外键
[join 子表3 on 子表1主键 = 子表3外键];
1)内连接(交集):inner join
2)外连接:
左外连接:left join:若为空值则会设为null
右外连接:right join
-3- 联合:union [all]:将多个查询结果合并成一个结果集
语法:
select 1
union [all]
select 2
union [all]
select 3;
注:1> union:会删除联合在一起的重复记录
union all:不会删除重复记录,将所有查询结果合并成一个结果集
2> 查询结果的字段个数和类型要匹配。
1.基本用法
select 查询字段 6
from 表名或视图名(逐行扫描) 1
where条件(行过滤) 2
group by 分组 3
having 分组筛选 4
order by 排序 [asc | desc] 5
-1- 注释:
单行:-- 注释
多行:/* 注释 */
-2- as的两种用法:
1)给字段或者表取别名:字段名|表名 [as] 别名
2)添加附加字段:'附加字段值' as 附加字段名
注:附加字段值如果是null 或者数字可以不加引号,但如果是字符串,必须加引号,否则会报错没有这个字段。
-3- 连接函数concat()
concat(字段名,'连接值') (位置可以互换)
例:select name as 姓名, concat(age,'岁') as 年龄, concat('中国',city) as 所在地, '中国' as 国家
from Students;
-4- 逻辑运算 && || ! ==> and or not
-5- 查询指定数目的数据(记录)条数:
MySQL:limit m,n; 从第m个索引开始取n个值(m从0开始)
-6- 升序、降序问题:
注:1)一个查询语句中可以指定多个排序方式,如果第一个排序方式相同,则按第二个排序方式,以此类推。
2)如果排序的字段值相同,且没有其他排序方式,则此时会按照默认的id排序。
-7- 聚合函数(统计)
1)sum:对数值的字段进行求和 例:select sum(age) from Students;
2)avg:对数值的字段求平均值
3)max:对数值、日期或字符类型进行求最大值
4)min:
5)count:计数:count(字段)--> 统计列中非空字段的个数
统计行数:count(*)--> 统计结果集中的行数
-8- distinct:删除重复值
例:select distinct sex from Students;
2.模糊查询
-1- like:字符串的模糊查询,通常会与通配符一起使用(也可以与正则表达式一起配合使用)
如果只单独使用一个like,则 like 和 = 相同。
注: os中的通配符:* 任意个字符
? 一个字符
数据库中的通配符:% 任意个字符
_ 一个字符
-2- (not) between A and B:数值与日期的范围查询,介于两者之间
注:等价于 字段 >= A and 字段 <= B (匹配的范围包含A和B)
-3- (not) in:一个范围内值的匹配
例:select * from Students where classId not in(1,3);
-4- substring()函数:截取一个字符串,进行匹配
例:查询出生日期在1960年至1969年出生的客户信息,返回客户名(根据身份证查询)
select Name as 客户名
from customers
/* 方法一:(前面是6个_)
where CardNo like '______196%';
*/
/* 方法二:
where substring(CardNo,7,4) like '196_';
*/
-- 方法三:
where substring(CardNo,7,4) between 1960 and 1969;
3.分组查询
基本用法:group by 分组字段1,分组字段2...
注:group后一般放的是select语句中的非聚合字段
4.分组筛选(过滤)
having语句:实现分组后结果集的再次过滤
-1- having出现的前提是必须有分组group by查询,且放在其后
-2- where与having的区别:
1)位置:where在group by之前,having在grop by之后;
2)过滤对象:where 实现对表中行的过滤
having 实现对象分组后的结果集的过滤
5.多表查询(连接查询)
关键点:主外键的关系(父表 子表 主键 外键)
实现:
-1- where:
select 字段
from 表1 , 表2 [表3,...]
where 父表主键 = 子表外键 [and 主键 = 外键] [and 其他条件];
-2- join(连接)
基本语法:
select 字段
from 子表1
[inner | left | right] join 父表2
on 父表2主键 = 子表1外键
[join 子表3 on 子表1主键 = 子表3外键];
1)内连接(交集):inner join
2)外连接:
左外连接:left join:若为空值则会设为null
右外连接:right join
-3- 联合:union [all]:将多个查询结果合并成一个结果集
语法:
select 1
union [all]
select 2
union [all]
select 3;
注:1> union:会删除联合在一起的重复记录
union all:不会删除重复记录,将所有查询结果合并成一个结果集
2> 查询结果的字段个数和类型要匹配。