MySQL查询语句

CONTENT

一、基本查询操作

二、MySQL数据排序、分组查询

三、MySQL对查询结果去重

 


一、基本查询操作

 1、条件查询使用where语句,运算符如下所示:

 

2、字段可以参与数学运算,比如查询员工的年薪(我是用Linux下MariaDB,SQL语句基本都是通用的)

select ENAME ,SAL*12 from EMP;

 给查询的结果重命名,中文要加单引号,用as关键字:

select ENAME ,SAL*12 as '年薪' from EMP;

 

as关键字可以省略:

select ENAME,EMPNO,SAL*12 yearsal from EMP;

 

3、下面举出一些查询例子:

查询SMITH的工资:

select SAL from EMP  where ENAME = 'SMITH' ;

 

找出工资高于3000的员工:

select ENAME,SAL from EMP where SAL > 3000;


       找出工资不等于3000的员工:

select ENAME,SAL from EMP where SAL != 3000;

 

找出工资在1100到3000之间的员工,包括1100和3000;

select ENAME,SAL from EMP where SAL>=1100 and SAL<=3000; -- 或者是下面这个

select ENAME,SAL from EMP where SAL between 1100 and 3000;

 

between and还可以使用在字符串上面,例如查出名字在A与C之间的员工(左闭右开,所以右边是D,这个很少用):

select ENAME from EMP where ENAME between 'A' and 'D';

 

查出哪些人没有津贴:(空值null和COMM值为0不一样,要区别开!

select ENAME,SAL,COMM from EMP where COMM = 0 or COMM is null;

 

4、and和or要区别开,

如找出薪资大于1000的并且部门编号是20或30部门的员工(运算符的优先级不确定时加小括号)

 select ENAME,SAL,DEPTNO from EMP where SAL>1000 and (DEPTNO = 20 or DEPTNO=30);

 


      5、in等同于or:

找出工作岗位是MANAGER和SALESMAN的员工

select ENAME,JOB from EMP where JOB in('SALESMAN','MANAGER');

 

找出工资为800和5000的员工:

select ENAME,SAL from EMP where SAL in(800,5000);

not in 不在这些值中:

select ENAME,SAL from EMP where SAL not in(800,5000);

 

6、_和%的运用

找出名字含有C或者首字母为C的员工(_代表一个字符,%代表多个字符,)

若查询名字含有_的员工,要用转义符号,模仿格式,如:

select name from EMP where name like '%\_%';

 

 

 


二、MySQL数据排序、分组查询

1、排序:默认是升序,可以指定升序(asc),降序(desc)。

select ENAME,SAL from EMP order by SAL;//升序

select ENAME,SAL from EMP order by SAL asc;//升序

select ENAME,SAL from EMP order by SAL desc;//降序

按照工资的降序排列,当工资相同时再按照,名字的升序排列,注意前面的字段起主导作用,前面相同时再匹配后面的。

select ENAME,SAL from EMP order by SAL desc;

select ENAME,SAL from EMP order by SAL desc,ENAME asc;

找出工作岗位是SALESMAN的员工,并且要求按照薪资的降序排列:

 select ENAME,JOB,SAL from EMP where JOB ='SALESMAN' order by SAL desc;

2、分组函数(多行处理函数),特点输入多行最终输出的结果是1行。

count(计数)、sum(求和)、avg(平均值)、max(最大值)、min(最小值)

注意所有的分组函数都是对某一组数据进行操作的。

eg:

select sum(SAL) from EMP; -- 找出工资总和:
select max(SAL) from EMP; -- 找出最高工资:
select min(SAL) from EMP; -- 找出最低工资:
select avg(SAL) from EMP; -- 找出平均工资
select count(*) from EMP; -- 找出总人数
select count(ENAME) from EMP; -- 也是找出总人数

 分组函数自动忽略NULL,所以一般查询语句后面无需额外添加过滤条件。

select count(COMM) from EMP;

3、单行处理函数(输入一行,输出一行)

计算每个员工的年薪:

select ENAME,(SAL+COMM)*12 as yearsal from EMP;-- (数据库规定,只要有NULL参与运算,结果为NULL)

要使用ifnull函数

 select ENAME,(SAL+(ifnull(COMM,0)))*12 as yearsal from EMP; -- 如果COMM为NULL则当0处理)

分组函数可以组合一起用:

select count(*),sum(SAL),avg(SAL),max(SAL),min(SAL) from EMP;

where后可以再接一个查询语句,如找出工资高于平均工资的员工:

select ENAME,SAl from EMP where SAL>(select avg(SAL) from EMP);

4、SQL中有一个语法规则,分组函数不可直接使用在where子句当中。因为group by是在where执行后才会执行。

5、group by(按照某个字段或者某些字段进行分组) 和having(对分组之后的数据进行再过滤)

分组函数一般都会和group by联合使用,这就是它被称为分组函数的原因。

还有一个规则,当一条语句有group by的话,select后面只能和分组函数和参与分组的字段。如:

select ENAME,MAX(SAL),JOB from EMP group by JOB; -- 这和在Oracle数据库会报错,MySQL中不报错,但没有意义。

group by案例:

找出每个工作岗位的最高薪资:

select max(SAL),JOB from EMP group by JOB;

每个工作岗位的平均薪资:

select JOB,avg(SAL) from EMP group by JOB;

多个字段联合起来一块分组,如找出每个部门不同岗位的最高薪资: 

 select DEPTNO,JOB,max(SAL) from EMP group by DEPTNO,JOB;

having案例:

找出每个部门的最高薪资,要求显示薪资大于2900的数据: 

 

select max(SAL),DEPTNO from EMP group by DEPTNO having max(SAL)>2900; -- 效率比较低      

 

select max(SAL),DEPTNO from EMP where SAL>2900 group by DEPTNO; --或者用这个效率较高建议使用where过滤

 

有时候就必须用having过滤,如找出每个部门的平均薪资并要求薪资大于2000的数据:

 select DEPTNO,avg(SAL) from EMP group by DEPTNO having avg(SAL)>2000;

注意只有出现了group by才能使用having ,this is very important.


三、MySQL对查询结果去重

(1)用distinct关键字去除重复记录,比如查询EMP表中JOB的种类:

select distinct JOB from EMP;


注意://下面这句sql语句是错误的,distinct只能出现在所有字段的最前面

 

select ENAME,distinct JOB from EMP;

(2)查询DEPTNO和JOB两栏都不重复的数据:

select distinct DEPTNO,JOB from EMP;


常见的案例:查询岗位的数量:

 

select count(distinct JOB) from EMP;

 

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL是一种常用的关系型数据库管理系统,它支持使用SQL语言进行数据的查询、插入、更新和删除等操作。以下是一些常见的MySQL查询语句: 1. SELECT语句:用于从数据库检索数据。 示例:SELECT * FROM 表名; 2. WHERE子句:用于在SELECT语句添加条件筛选。 示例:SELECT * FROM 表名 WHERE 条件; 3. ORDER BY子句:用于对查询结果进行排序。 示例:SELECT * FROM 表名 ORDER BY 列名 ASC/DESC; 4. LIMIT子句:用于限制查询结果的数量。 示例:SELECT * FROM 表名 LIMIT 数量; 5. JOIN语句:用于在多个表之间建立关联。 示例:SELECT * FROM 表1 JOIN 表2 ON 表1.列 = 表2.列; 6. GROUP BY子句:用于对查询结果进行分组。 示例:SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名; 7. HAVING子句:用于在GROUP BY子句后添加条件筛选。 示例:SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名 HAVING 条件; 8. INSERT INTO语句:用于向数据库插入新的数据。 示例:INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2); 9. UPDATE语句:用于更新数据库的数据。 示例:UPDATE 表名 SET 列名 = 值 WHERE 条件; 10. DELETE FROM语句:用于从数据库删除数据。 示例:DELETE FROM 表名 WHERE 条件; 这些只是MySQL查询语句的一部分,还有很多其他的语句和功能可以用于满足不同的需求。如果你有具体的问题或者需要更详细的介绍,请告诉我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬核的无脸man~

你的鼓励是我创作的最大功力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值