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 as 名
FROM 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和分页参数语句