MySQL基础篇之三:DQL单表查找

MySQL语法

一、提供的表

在这里插入图片描述

二、基础查询

语法:select+字段列表+from+表名;

特点:查询的结果可以是:表中的字段、常量值、表达式、函数

​ 查询的结果是一个虚拟的表格

1.查询表中的单个字段
SELECT last_name
FROM employees;
2.查询表中的多个字段
SELECT last_name,salary,email
FROM employees;
3.查询表中的所有字段
Select *
FROM employees;
4.查询常量值
SELECT 100

SELECT "john"
5.查询表达式
SELECT 100%98;
6.查询函数
SELECT VERSION();
7.为字段起别名

​ 1.便于理解

​ 2.如果要查询的字段有重名的情况,使用别名也可以区分开来。

SELECT 100%98 AS 结果;

#方式一
SELECT last_name as,first_name asFROM employees;

#方式二
SELECT last_name 姓,first_name 名
FROM employees;
8.去重操作

去除重复的冗余数据,只需要在select后加上distinct即可

SELECT DISTINCT deparatmnet_id
FROM employees;
9."+"号的作用

select 100+90; 两个操作数都为数值型,则做加法运算。

select ‘123’+90; 其中一方为字符型,视图将字符型数值转换为数值型,这个案例就会转换成功,成功之后继续做加法运算。

select ‘jonh’+90; 转换失败,将字符型数值转换成0.

select null+0; 只要加法的其中一方为null,则结果就为null。

10.CONCAT连接字

案例:查询员工名和姓,连接成一个字段,并显示为姓名

SELECT CONCAT(last_name,first_name) AS 姓名
FROM employees;
三、条件查询

语法:select+查询列表+from+表名+where+筛选条件

分类:按条件表达式筛选:> = < != <> >= <=

​ 按逻辑表达式筛选:&& || ! and or not

​ 模糊查询: like betweenand in isnull

1.按条件表达式筛选

查询工资>12000的员工信息

SELECT * 
FROM employees 
WHERE salary>12000;
2.按逻辑表达式进行筛选

查询工资在10000到20000之间的员工名,工资,以及奖金

SELECT last_name,salary,INFULL(commission_pct,0)
FROM employees 
WHERE  salary>=10000&&salary<=20000;
3.模糊查询
like

查询员工名中包含字符a的员工信息

SELECT * 
FROM employees
WHERE last_name LIKE '%a%';
between and

查询员工编号在100到120之间的员工信息

SELECT * 
FROM employees
WHERE employee_id BETWEEN 100 AND 120;
in

含义:判断某字段的值是否属于in列表中的某一项

查询员工的工种编号是IT_PROG,AD_VP,AD_PRES中的一个员工名和工种编号

SELECT last_name,job_id
FROM employees
WHERE job_id IN('IT_PROG','AD_VP','AD_PRES');
is null

查询没有奖金的员工名和奖金率

SELECT last_name,commission_pct
FROM employees
WHERE commission_pct IS NULL;
四、排序查询

语法:select+查询列表+from+表名+where+筛选条件+order by+排序列表【asc|desc】

特点:1.asc代表的是升序排列,desc代表的是降序排列,如果不写的话,默认是升序

​ 2.order by子句中可以支持单个字段,多个字段,表达式,函数,别名

​ 3.子句一般放在查询语句的最后面,limit子句除外

案例1:查询员工信息,要求工资从高到低排序

SELECT *
FROM employees
ORDER BY salary DESC;

案例2:查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序

SELECT *
FROM employees
WHERE email LIKE '%e%'
ORDER BY LENGTH(email) DESC,department_id ASC;
五、聚合函数

概念:类似于Java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名

好处:隐藏了实现细节,提高代码的重用性

调用:select+函数名(实参列表)【from 表】

分类:1.单行函数:concat,length,ifnull等

​ 2.分组函数:sum,avg,max,min,count等

1.字符函数
length

获取参数值的字节个数

SELECT LENGTH('john') AS 字节长度;
concat

拼接字符串

SELECT CONCAT(last_name,"_",first_name)
FROM employees;
upper,lower

将字符变成大写或小写

SELECT UPPER('john');

SELECT LOWER('joHn');
substr/substring

截取字符

案例:截取从指定索引处后面的所有字符

SELECT SUBSTR('今天天气真的很不错',7) AS out_put;

案例:截取从指定索引处指定字符长度的字符

SELECT SUBSTR('今天天气真的很不错',1,3) AS out_put;
instr

用于返回子串在主串中出现的索引,如果找不到就返回0

SELECT INSTR('zyb','z');
replace

字符串的替换操作

SELECT REPLACE('zyb','zyb','zzz');
2.数学函数

round:四舍五入

ceil:向上取整,返回>=该参数的最小整数

floor:向下取整,返回<=该参数的最大整数

mod:取余

3.日期函数

now:返回当前系统日期+时间

curdate:返回当前系统日期,不包含时间

curtime:返回当前时间,不包含日期

4.流程控制函数
if

三元运算符的效果

SELECT IF(10>5,'大','小');
case

语法:case 要判断的字段或者表达式

​ when 常量1 then 要显示的值或语句

​ when 常量2 then 要显示的值或语句

else 要显示的值或语句

end

案例:查询员工的工资,要求:部门号=30,显示的工资为1.1倍,部门号=40,显示的工资为1.2倍,部门号=50,显示的工资为1.3倍,其他部门,显示的工资为原工资

SELECT salary AS 原始工资,department_id
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工资
FROM employees;
六、分组查询

**语法:**select +聚合函数,列(出现在group by的后面)+from 表+【where 筛选条件】+group by 分组字段+【order by 子句】

**注意:**查询列表必须特殊,要求是聚合函数和group by后出现的字段

分组前查询:通过关键字where,加在group by前面,实现分组前的筛选

分组后查询:通过关键字having,加在group by后面,实现分组后的筛选

添加分组前筛选条件,案例:查询有奖金的每个领导手下员工的最高工资

SELECT MAX(salary),manager_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY manager_id;

添加分组后的筛选条件,案例:查询每个工种有奖金的员工的最高工资大于12000

SELECT MAX(salary),job_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING MAX(salary)>12000;

案例:查询领导编号>102的每个领导手下的最低工资>5000的领导编号是哪个,以及其最低工资

SELECT MIN(salary),manager_id
FROM employees
WHERE manager_id>102
GROUP BY manager_id
HAVING MIN(salary)>5000;
七、分页查询
  • 语法:

    select 字段列表 from 表名 limit 起始索引,查询记录数;
    

注意:

起始索引从0开始,其实索引=(查询页码-1)*每页显示记录数。

不同的数据库有不同的分页查询实现方式,MySQL中是使用limit关键字。

如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。

八、DQL执行顺序

在说明执行顺序之前,我们应该与编写顺序进行区分。

  • 编写顺序
    在这里插入图片描述

  • 执行顺序

    • 1、首先执行from,通过from决定我们要查询哪张表的数据
    • 2、通过where指定查询的条件
    • 3、通过group by指定分组
    • 4、having指定分组后的条件
    • 5、执行select,决定查询要返回哪些字段
    • 6、最后执行order by和分页参数语句
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值