本文以admin、beauty、boys为例来讲述MySQL数据库的查询操作
admin表
beauty表
boys表
1、基础查询
1.1查询boys表中所有数据
SELECT *FROM boys;
1.2查询boys表中部分字段
查询boys表中的id和namea字段
select id,namea from boys;
1.3为字段起别名
为id和namea分别起别名为序号和名字,注意as可以省略
select id as 序号,namea as 名字 from boys;
1.4去掉重复内容
去掉beauty表中boyfriend_id字段的重复内容
SELECT DISTINCT boyfriend_id FROM beauty;
1.5连接显示
连接显示就是将两列数据合并成一列来显示,MySQL中通过concat()函数来实现合并操作。
下面语句为,把boys表中的id和namea字段连接显示,
SELECT CONCAT('编号:',id,'名字:',namea) AS 帅哥 FROM boys;
2条件查询
条件查询,通过WHERE关键字指定筛选条件
1、按条件表达式查询
条件运算符:
、< 、>=、 <=、 =、 !=、 <>、 ,<=>安全等于,用于判断是否为null
案例1:在boys表中查询女朋友个数大于1的人的信息
SELECT * FROM boys
WHERE girl_count >1;
案例2:在beauty中查询没有工资的人
SELECT NAME FROM beauty
WHERE salary <=>NULL;
2、按逻辑表达式查询
逻辑运算符:
and、&& 两个条件都为true,结果为true,反之为false
or、|| 两个条件只要有一个为true,结果为true,反之为false
not、! 如果连接的条件本身为false,结果为true,反之为false
//优先级
not > and > or
案例1:在beauty表中查询月薪在4000到5000的人的名字
SELECT NAME FROM beauty
WHERE salary >= 3000 AND salary <= 5500;
案例2:在beauty表中查询工资不在4000到5000之间的人的名字
SELECT NAME FROM beauty
WHERE NOT(salary>=4000 AND salary<=5000);
3模糊查询
/*
1.like
一般搭配着通配符使用,用作字符型的判断
通配符:
% 任意多个字符
_ 任意单个字符 1
2.between and
特点:在…之间
①等价于 使用 字段>=值1 and 字段<=值2
②两个临界值是包含的 [1,10]
③两个临界值不能颠倒顺序
3.in
特点:判断某个字段的值是否在某个列表内
in(值1,值2,…)
等价于 or
4.is null/is not null
*/
like
案例1:查询beauty表的姓名中含有周的人员信息
SELECT NAME FROM beauty
WHERE NAME LIKE '%周%';
案例2:查询名字中第一个字是王,第三个字是师的人员信息
SELECT *FROM beauty
WHERE NAME LIKE '王_师%';
注意,如果查询的是特殊符号,需要使用转义字符
between and
案例1:在beauty表中查询工资大于3000,小于5500的人员信息
SELECT * FROM beauty
WHERE salary BETWEEN 3000 AND 5000;
in
案例1:在beauty表中查询工资是3000,或者是5000的人员信息
SELECT *FROM beauty
WHERE salary IN(3000,5500);
is null / is not null
案例1:查询没有工资的人员信息
SELECT *FROM beauty
WHERE salary IS NULL;
4排序查询
排序查询的语法如下:
select 字段|表达式|常量
from 表
【where 条件】
order by 排序的字段;
排序查询可以按表达式、函数、别名、多个字段进行排序
案例1:将beauty表中的人按照薪资多少由大到小进行排序
SELECT *FROM beauty
ORDER BY salary asc;
注意:默认为升序排列,若降序排序最后面加desc关键字
案例2:将beauty表中的人员信息按照姓名长度进行降序排序
SELECT *FROM beauty
ORDER BY LENGTH(NAME) DESC;
5分组函数与查询
分组函数的分类
max():最大值
min():最小值
sum():和
avg():平均值
count():计算非空的个数
一、查询分组函数
SELECT MAX(salary) 最大值 FROM beauty;
SELECT MIN(salary) 最小值 FROM beauty
SELECT SUM(salary) 和 FROM beauty;
SELECT AVG(salary) 平均值 FROM beauty;
SELECT COUNT(salary) 个数 FROM beauty;
SELECT MAX(salary) 最大值,SUM(salary) 和 FROM beauty;
注意:sum 和 avg 1.只支持数值型2.sum和avg都忽略null值
min 和 max 1.支持任何类型2.max和min都忽略null值
分组语法:
select 分组函数 别名,分组后的字段
from 表
【where 分组前筛选】
group by 分组的字段
【having 分组后筛选】
【order by 排序的字段】
从上到下依次顺序,不能颠倒顺序
案例1:查询beauty表中各个部门的最高工资,及部门id
SELECT MAX(salary), departments_id FROM beauty
GROUP BY departments_id;
案例:2查询boyfriend_id为9的,各个部门的最最高工资大于4000的部门编号
SELECT departments_id,MIN(salary) FROM beauty
WHERE boyfriend_id = 9
GROUP BY departments_id
HAVING MIN(salary)>4000;
注意:order by 和 having 都支持使用别名查询