数据库mysql no.4

2024-01-12 23:12
文章标签 mysql 数据库 database no.4

本文主要是介绍数据库mysql no.4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.流程控制函数


①if(条件表达式,表达式1,表达式2):

                                         如果条件表达式成立,返回表达式1,否则返回表达式2
     case情况1
case 变量或表达式或字段
when 常量1 then 值1
when 常量2 then 值2
...
else 值n
end

    case情况2
case 
when 条件1 then 值1
when 条件2 then 值2
...
else 值n
end

2.分组函数

sum  求和     avg  平均值              max 最大值    min 最小值    count 计算个数

只能处理数值型                              任何类型都可以处理

他们都忽略null值

3.分组查询 group by 

筛选条件

数据源位置关键字
分组前筛选原始表group by子句前where
分组后筛选分组后的结果集group by子句后having

注意:分组函数作为筛选条件的时候一定是放在having子句中

          分组查询也可以用排序order by,一般置于最后

          优先使用分组前筛选,即where筛选

4.连接查询

内连接:等值连接,非等值连接(betweenand..)自连接(两个表为一个)

外连接:左外连接(left outer join),右外连接,全外连接(full outer join)

交叉连接(cross outer join)

注意:如果给表起了别名,则查询的字段就不能使用原来的表名去限定

5.SQL练习

-- 分组查询GROUP BY
-- 查询每个部门的平均工资
SELECT AVG(salary),job_id FROM employees GROUP BY job_id;
-- 查询每个位置上的部门个数
SELECT COUNT(*),location_id FROM departments GROUP BY location_id;-- 添加筛选条件  查询邮箱中包含a字符的,每个部门的平均工资
SELECT AVG(salary),department_id FROM employees WHERE email LIKE '%a%' GROUP BY department_id;-- 查询有奖金的每个领导手下员工的最高工资
SELECT MAX(salary),manager_id FROM employees WHERE commission_pct IS NOT NULL GROUP BY manager_id;SELECT  COUNT(*),department_id FROM employees GROUP BY department_id HAVING count(*)>2;-- 查询每个工种有奖金的员工的最高工资》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; -- 按员工姓名的长度分组,查询每一组的员工个数筛选员工个数>5的有哪些
SELECT COUNT(*) c,LENGTH(last_name) a from employees GROUP BY a HAVING c>5;-- 按多个字段分组
-- 查询每个部门每个工种的员工的平均工资
SELECT AVG(salary),department_id,job_id FROM employees WHERE department_id IS NOT NULL GROUP BY department_id,job_id HAVING AVG(salary)>12000 ORDER BY AVG(salary) DESC;-- 查询各job_id的员工工资的最大值,最小值,平均值,总和,并按job_id升序
SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary),job_id FROM employees GROUP BY job_id;
-- 查询员工最高工资和最低工资的差距
SELECT max(salary)-MIN(salary) difference FROM employees;
-- 查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内
SELECT MIN(salary),manager_id FROM employees WHERE manager_id IS NOT NULL GROUP BY manager_id HAVING MIN(salary)>=6000;
-- 查询所有部门的编号,员工数量和工资平均值,并按平均工资降序
SELECT department_id,COUNT(*),AVG(salary) FROM employees GROUP BY department_id ORDER BY AVG(salary) DESC
-- 选择具有各个job_id的员工人数
SELECT COUNT(*),job_id FROM employees GROUP BY job_id;SELECT last_name,department_name FROM employees,departments where employees.department_id=departments.department_id;-- 查询员工名 工种号,工种名
SELECT last_name,jobs.job_id,job_title FROM employees,jobs WHERE employees.job_id=jobs.job_id;
-- 别名
SELECT last_name,a.job_id,job_title FROM employees a,jobs b WHERE a.job_id=b.job_id;-- 查询有奖金的员工名、部门名
SELECT last_name,department_name, commission_pct FROM employees e,departments d WHERE e.department_id=d.department_id AND e.commission_pct is not null;-- 查询城市名中第二个字符为o的部门名和城市名
SELECT department_name,city FROM departments d,locations l WHERE d.location_id=l.location_id and city LIKE '_o%'-- 查询每个城市的部门个数
SELECT COUNT(*) 个数,city FROM departments,locations
WHERE departments.location_id=locations.location_id GROUP BY city;-- 查询每个工种的工种名和员工的个数,并且按员工个数降序
SELECT job_title,COUNT(*) FROM jobs,employees WHERE
jobs.job_id=employees.job_id GROUP BY job_title ORDER BY COUNT(*) DESC;-- 查询员工名,部门名和所在的城市
SELECT last_name,department_name,city FROM employees e,departments d,locations l WHERE
e.department_id=d.department_id and d.location_id=l.location_id GROUP BY last_name,department_name,city ORDER BY department_name DESC;-- 自连接
-- 查询员工名和上级的名称
SELECT e.employee_id,e.last_name,m.employee_id,m.last_name
FROM employees e,employees m WHERE e.manager_id=m.employee_id;-- 显示员工表的最大工资,工资平均值
SELECT max(salary),ROUND(AVG(salary),2) FROM employees;SELECT employee_id,job_id,last_name FROM employees ORDER BY department_id DESC,salary ASC;SELECT job_id FROM employees WHERE job_id LIKE '%a%e%';SELECT NOW();
SELECT TRIM(' s s s   ');
SELECT TRIM('a' FROM 'aaa hejun aaa');
SELECT SUBSTR('hejun',3,3);-- 显示所有员工的姓名,部门号和部门名称
SELECT last_name,e.department_id,d.department_name FROM employees e,departments d WHERE e.department_id=d.department_id; -- 查询90号部门员工的job_id和90号部门的location_id
SELECT job_id,location_id FROM employees e,departments d WHERE
e.department_id=d.department_id AND e.department_id=90;-- 查询每个国家下的部门个数大于2的国家编号
SELECT country_id,COUNT(*) 部门个数 FROM departments d,locations l WHERE d.location_id=l.location_id GROUP BY country_id HAVING 部门个数>2;SELECT e.last_name employees,e.employee_id "Emp#",m.last_name manager,m.manager_id "Mgr#" FROM employees e,employees m WHERE
e.manager_id=m.employee_id AND e.last_name='kochhar';-- 用内连接实现等值连接
-- 查询员工名 部门名
SELECT last_name,department_name FROM employees e INNER JOIN
departments d on e.department_id=d.department_id;-- 查询名字中包含e的员工名和工种名
SELECT last_name,job_title FROM employees e INNER JOIN
jobs j on e.job_id=j.job_id WHERE e.last_name LIKE '%e%';-- 查询员工名部门名工种名并按部门名降序
SELECT last_name,department_name,job_title FROM employees e
INNER JOIN departments d on e.department_id=d.department_id
INNER JOIN jobs j on e.job_id=j.job_id ORDER BY department_name
DESC;-- 查询姓名中包含字符k的员工的名字,上级的名字
SELECT e.last_name,m.last_name FROM employees e
INNER JOIN employees m on e.manager_id=m.employee_id
AND e.last_name like '%k%';
SELECT e.last_name,m.last_name FROM employees e
INNER JOIN employees m on e.manager_id=m.employee_id
WHERE e.last_name like '%k%';SELECT * FROM beauty;
SELECT * FROM boys;SELECT b.`name`,bo.* FROM beauty b left OUTER JOIN
boys bo on b.boyfriend_id=bo.id WHERE bo.id is not NULL;SELECT b.`name`,bo.* FROM boys bo right OUTER JOIN
beauty b on b.boyfriend_id=bo.id WHERE bo.id is not NULL;-- 查询哪个部门没有员工
SELECT d.*,e.employee_id 
FROM employees e 
RIGHT OUTER JOIN departments d 
on d.department_id=e.department_id 
WHERE e.department_id is null;SELECT b.id,b.name,bo.*
FROM beauty b LEFT JOIN
boys bo on b.boyfriend_id=bo.id
WHERE b.id>3;SELECT city,d.* FROM locations l 
left outer join departments d ON
l.location_id=d.location_id
WHERE d.location_id is NULL;

这篇关于数据库mysql no.4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/599461

相关文章

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MySQL 衍生表(Derived Tables)的使用

《MySQL衍生表(DerivedTables)的使用》本文主要介绍了MySQL衍生表(DerivedTables)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录一、衍生表简介1.1 衍生表基本用法1.2 自定义列名1.3 衍生表的局限在SQL的查询语句select

MySQL 横向衍生表(Lateral Derived Tables)的实现

《MySQL横向衍生表(LateralDerivedTables)的实现》横向衍生表适用于在需要通过子查询获取中间结果集的场景,相对于普通衍生表,横向衍生表可以引用在其之前出现过的表名,本文就来... 目录一、横向衍生表用法示例1.1 用法示例1.2 使用建议前面我们介绍过mysql中的衍生表(From子句

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二:

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA