mysql复习1
SQL语句分为以下三种类型:
DML: Data Manipulation Language 数据操纵语言,用于查询与修改数据记录,包括如下SQL语句:
INSERT:添加数据到数据库中
UPDATE:修改数据库中的数据
DELETE:删除数据库中的数据
SELECT:选择(查询)数据
DDL: Data Definition Language 数据定义语言,用于定义数据库的结构,比如创建、修改或删除数据库对象,包括如下SQL语句:
CREATE TABLE:创建数据库表
ALTER TABLE:更改表结构、添加、删除、修改列长度
DROP TABLE:删除表
CREATE INDEX:在表上建立索引
DROP INDEX:删除索引
DCL: Data Control Language 数据控制语言,DCL用来控制数据库的访问,包括如下SQL语句:
GRANT:授予访问权限
REVOKE:撤销访问权限
COMMIT:提交事务处理
ROLLBACK:事务处理回退
SAVEPOINT:设置保存点
LOCK:对数据库的特定部分进行锁定
注意点:
1.列的别名使用双引号。
2.日期和字符只能在单引号中出现。
3.使用 desc table 显示表结构。
4.WHERE 子句紧随 FROM 子句。
5.使用 LIKE 运算选择类似的值选择条件可以包含字符或数字:% 代表零个或多个字符(任意个字符), _ 代表一个字符。
6.使用 IS (NOT) NULL 判断空值。
7.在多表中如有相同列时,在列名之前加上表名前缀。
8.当完成 n 个表之间的连接查询时,至少需要 n - 1 个连接条件。
9.左外连接:left join ...on 将多个表中满足条件的数据查询出来,还将左表中不满足条件的数据也查询出来
10.右外连接:right join ...on 将多个表中满足条件的数据查询出来,还将右表中不满足条件的数据也查询出来
11.count(),组函数不计算空值。
12.单行函数传递一行返回一个结果,多行函数是传递多行返回一个结果。
13.出现在select 子句后的非分组函数,就一定得出现在group by子句后。
14.where不能过滤组函数,若需要过滤组函数需要使用having。









练习题:
-- 分组函数
-- MAX() MIN() AVG() SUM() COUNT()
SELECT MAX(salary), MIN(salary), AVG(salary), SUM(salary), COUNT(salary)
FROM employees;
-- 查询各个部门的平均工资
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id;
-- ***出现在 SELECT 子句后的非分组函数,一定得出现在 GROUP BY 子句后,多列分组
-- 求出各个部门中每个工种(job_id)的平均工资是多少
SELECT department_id, job_id, AVG(salary)
FROM employees
GROUP BY department_id, job_id;
-- where 不能过滤组函数,若需要过滤组函数需要使用 having
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
HAVING AVG(salary) >= 10000;
-- MySQL中组函数不能嵌套,但是 Oracle 可以
SELECT department_id, MAX(AVG(salary))
FROM employees
GROUP BY department_id;
SELECT MAX(avg_sal)
FROM (
SELECT department_id, AVG(salary) avg_sal
FROM employees
GROUP BY department_id
) e;
-- 子查询
-- 谁的工资比 Abel 高?
-- 主查询(外查询)
SELECT *
FROM employees
WHERE salary > (
-- 子查询(内查询)
SELECT salary
FROM employees
WHERE last_name = 'Abel'
);
-- 题目:返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id 和工资
SELECT last_name, job_id, salary
FROM employees
WHERE job_id = (
SELECT job_id
FROM employees
WHERE employee_id = 141
) AND salary > (
SELECT salary
FROM employees
WHERE employee_id = 143
);
-- 题目:返回公司工资最少的员工的last_name,job_id和salary
SELECT last_name, job_id, salary
FROM employees
WHERE salary = (
SELECT MIN(salary)
FROM employees
);
-- 题目:查询最低工资大于50号部门最低工资的部门id和其最低工资
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary) > (
SELECT MIN(salary)
FROM employees
WHERE department_id = 50
);
--题目: 查询平均工资最低的部门信息
SELECT *
FROM departments
WHERE department_id = (
SELECT department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary) = (
SELECT MIN(avg_sal)
FROM (
SELECT AVG(salary) avg_sal
FROM employees
GROUP BY department_id
) e
)
);
--题目: 查询平均工资最低的部门信息和 该 部门的平均工资
SELECT d.*, (SELECT AVG(salary) FROM employees WHERE department_id = d.`department_id`)
FROM departments d
WHERE department_id = (
SELECT department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary) = (
SELECT MIN(avg_sal)
FROM (
SELECT AVG(salary) avg_sal
FROM employees
GROUP BY department_id
) e
)
);
-- 题目: 查询平均工资最高的 job 信息
SELECT *
FROM jobs
WHERE job_id = (
SELECT job_id
FROM employees
GROUP BY job_id
HAVING AVG(salary) = (
SELECT MAX(avg_sal)
FROM (
SELECT AVG(salary) avg_sal
FROM employees
GROUP BY job_id
) e
)
);
--题目: 各个部门中 最高工资中最低的那个部门的 最低工资是多少
-- 1) 求出各个部门的最高工资
SELECT MAX(salary)
FROM employees
GROUP BY department_id
-- 2) 在1) 基础上查出最低的
SELECT MIN(max_sal)
FROM (
SELECT MAX(salary) max_sal
FROM employees
GROUP BY department_id
) e
-- 3) 求出哪个部门的最高工资是 2) 的结果
SELECT department_id
FROM employees
GROUP BY department_id
HAVING MAX(salary) = (
SELECT MIN(max_sal)
FROM (
SELECT MAX(salary) max_sal
FROM employees
GROUP BY department_id
) e
)
-- 4) 再在3) 的基础上求出最低工资
SELECT MIN(salary)
FROM employees
WHERE department_id = (
SELECT department_id
FROM employees
GROUP BY department_id
HAVING MAX(salary) = (
SELECT MIN(max_sal)
FROM (
SELECT MAX(salary) max_sal
FROM employees
GROUP BY department_id
) e
)
);
-- 题目:查询平均工资最高的部门的 manager 的详细信息: last_name, department_id, email, salary
SELECT last_name, department_id, email, salary
FROM employees
WHERE employee_id = (
SELECT manager_id
FROM departments
WHERE department_id = (
SELECT department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary) = (
SELECT MAX(avg_sal)
FROM (
SELECT AVG(salary) avg_sal
FROM employees
GROUP BY department_id
) e
)
)
)
--题目:查询平均工资最低的部门信息
SELECT *
FROM departments
WHERE department_id = (
SELECT department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary) = (
SELECT MIN(avg_sal)
FROM (
SELECT AVG(salary) avg_sal
FROM employees
GROUP BY department_id
) e
)
);
mysql复习1的更多相关文章
- mysql复习秘籍
mysql复习 一:复习前的准备 1:确认你已安装wamp 2:确认你已安装ecshop,并且ecshop的数据库名为shop 二 基础知识: 1.数据库的连接 mysql -u -p -h -u 用 ...
- mysql复习-来源考试
mysql复习- No1 .登录和权限 (一)常用命令1.登录mysqlmysql -h localhost -u root -p 2.重启mysqlservice mysql restart 延 ...
- MySQL复习值代码知识点(1)
MySQL复习值代码知识点 一. 创建数据库 create database 数据库名: 二. 删除数据库 drop database 数据库名: 三. 选择相应的数据库 use 数据库名: 四. 创 ...
- mysql复习相关
Mysql相关 mysql增删改查 我们需要修改数据表名或者修改数据表字段时,就需要使用到Mysql Alter命令 删除,添加或修改表字段 alter table student drop regi ...
- 一天一点MySQL复习——获取数据库系统时间、变量赋值、变量比较
一.SQL获取系统时间 mysql> select now() from dual; +---------------------+ | now() | +------------------- ...
- Mysql 复习
1.my.ini :mysql 配置文件 [client]#password = your_passwordport = 3306socket = /tmp/mysq ...
- mysql 复习与学习(二)数据库及表结构的创建删除
mysql -h localhost -uroot -p123456 //连接数据库 show databases; //查看数据库 create database if not exists db_ ...
- mysql复习
1.数据库操作 CREATE DATABASE 数据库名 charset utf8; 查看数据库 show databases; show create database db1; select da ...
- Mysql复习大全(转)
基础知识: 1.数据库的连接 mysql -u -p -h -u 用户名 -p 密码 -h host主机 2.库级知识 显示数据库: show databases; 选择数据库: use dbname ...
- mysql复习之一
DROP DATABASE mysql_shiyan;. cd /home/shiyanlou/Desktop git clone https://github.com/shiyanlou/SQL4 ...
随机推荐
- P1041 查找元素
题目描述 现在告诉你一个长度为 \(n\) 的有序数组 \(a_1, a_2, ..., a_n\) ,以及 \(q\) 次询问,每次询问会给你一个数 \(x\) ,对于每次询问,你需要确定在数组中是 ...
- Java语言中使用OpenMP
从去年年中,开始学习Java,主要是维护公司用Java编写的服务器软件.目前,该服务器软件遇到一个问题,在下载大文件时,如果同时下载的用户很多, 服务器软件工作会出现异常,有的用户无法下载.服务器硬件 ...
- Fast Stone截图工具使用教程
下面是Fast Stone的显示面板,很小巧,但功能强大 一.特殊功能 1.1 添加水印 (1)选择功能栏的"Edge" (2)将要水印的图片选中,选择水印图片的放置位置,应用即可 ...
- vue-learning:6-template-v-bind
绑定元素特性的指令v-bind 回顾下,从HTML元素的结构看,在VUE框架中,内容由插值{{ }}和v-html绑定:v-if和v-show可以控制元素的可见性:v-for可以用于批量生成列表元素. ...
- vue-learning:24 - component - 目录
component 组件 组件的概念 Vue 组件同时也都是 Vue 实例,可接受相同的选项对象option (除了一些根级特有的选项) 和使用相同的生命周期钩子,以及模板调用方式. 组件的构建和注册 ...
- 2019-8-31-dotnet-core-隐藏控制台
title author date CreateTime categories dotnet core 隐藏控制台 lindexi 2019-08-31 16:55:58 +0800 2019-2-1 ...
- C# string和String的区别
string是String的别名,功能没什么区别.但是具体代码约束如下
- Struts2标签库常用标签(转)
struts2标签讲解 要使用Struts2的标签,只需要在JSP页面添加如下一行定义即可:<%@ taglib prefix="s" uri="/struts-t ...
- git之github推送篇
1.创建项目 2.生成ssh密钥并设置到github 在文件夹里面右键打开git命令行,输入下面命令,然后一直回车. ssh-keygen -t rsa 生成位置在当前用户的.ssh文件夹里,带pu ...
- VRChat之转移地图缓存
我的电脑是win10,win10的缓存地址和名称可能和win7的名字有所不同. win10缓存路径:C:\Users\Administrator\AppData\LocalLow\VRChat\VRC ...