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的更多相关文章

  1. mysql复习秘籍

    mysql复习 一:复习前的准备 1:确认你已安装wamp 2:确认你已安装ecshop,并且ecshop的数据库名为shop 二 基础知识: 1.数据库的连接 mysql -u -p -h -u 用 ...

  2. mysql复习-来源考试

    mysql复习-   No1 .登录和权限 (一)常用命令1.登录mysqlmysql -h localhost -u root -p 2.重启mysqlservice mysql restart 延 ...

  3. MySQL复习值代码知识点(1)

    MySQL复习值代码知识点 一. 创建数据库 create database 数据库名: 二. 删除数据库 drop database 数据库名: 三. 选择相应的数据库 use 数据库名: 四. 创 ...

  4. mysql复习相关

    Mysql相关 mysql增删改查 我们需要修改数据表名或者修改数据表字段时,就需要使用到Mysql Alter命令 删除,添加或修改表字段 alter table student drop regi ...

  5. 一天一点MySQL复习——获取数据库系统时间、变量赋值、变量比较

    一.SQL获取系统时间 mysql> select now() from dual; +---------------------+ | now() | +------------------- ...

  6. Mysql 复习

    1.my.ini :mysql 配置文件 [client]#password    = your_passwordport        = 3306socket        = /tmp/mysq ...

  7. mysql 复习与学习(二)数据库及表结构的创建删除

    mysql -h localhost -uroot -p123456 //连接数据库 show databases; //查看数据库 create database if not exists db_ ...

  8. mysql复习

    1.数据库操作 CREATE DATABASE 数据库名 charset utf8; 查看数据库 show databases; show create database db1; select da ...

  9. Mysql复习大全(转)

    基础知识: 1.数据库的连接 mysql -u -p -h -u 用户名 -p 密码 -h host主机 2.库级知识 显示数据库: show databases; 选择数据库: use dbname ...

  10. mysql复习之一

    DROP DATABASE mysql_shiyan;. cd /home/shiyanlou/Desktop git clone https://github.com/shiyanlou/SQL4 ...

随机推荐

  1. H3C 显示RIP当前运行状态及配置信息

  2. Bishops Alliance—— 最大上升子序列

    原题链接:http://codeforces.com/gym/101147/problem/F 题意:n*n的棋盘,给m个主教的坐标及其私有距离p,以及常数C,求位于同一对角线上满足条件:dist(i ...

  3. linux readv 和 writev

    Unix 系统已经长时间支持名为 readv 和 writev 的 2 个系统调用. 这些 read 和 write 的"矢量"版本使用一个结构数组, 每个包含一个缓存的指针和一个 ...

  4. Linux 内核 嵌入的 kobjects

    在我们进入细节前, 值得花些时间理解如何使用 kobjects. 如果你回看被 kobjects 处 理的函数列表, 你会看到它们都是代表其他对象进行的服务. 一个 kobject, 换句话说, 对其 ...

  5. jdk+tomcat+mysql一键安装脚本

    最近在搞一个web项目部署,每次都要安装jdk.配置环境变量.安装tomcat和mysql.对于非开发人员,还是有点难度的,经常出错,然后就整理了一个自动化的脚本. JDKinstall.bat @e ...

  6. apache WEB服务器安装(包括虚拟主机)

    一.apache下载编译安装 yum install apr apr-devel apr-util apr-util-devel gcc-c++ wget tar -y cd /usr/src wge ...

  7. Strongly Connected Tournament

    题解: 有一个很重要的性质就是 对于一张完全强联通图来说 一定有一个强联通分量入度为0(或者出度为0) 然后就一些计数题的基本套路 https://www.cnblogs.com/onioncyc/p ...

  8. form提交时accept-charset属性在IE及Edge下不起作用解决方案

    问题描述 我的页面是utf-8编码 目标页面是EUC-JP编码 即使已经设置了accept-charset="EUC-JP",提交后IE 和 Edge下还是乱码 解决方案: 1. ...

  9. Qt串行化的输入和输出(使用QDataStream读写QByteArray,对QIODevice直接起作用)

    参考https://lug.ustc.edu.cn/sites/qtguide/ 今天看了一个介绍Qt串行化的介绍,感觉很受益,就记录了下来. 串行化(Serialization)是计算机科学中的一个 ...

  10. 软RAID和硬RAID的区别

    要实现RAID可以分为硬件实现和软件实现两种.所谓硬RAID就是指通过硬件实现,同理软件实现就作为软RAID.   硬RAID 就是用专门的RAID控制器将硬盘和电脑连接起来,RAID控制器负责将所有 ...