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. 通过页码直接跳转 html

    <?php namespace Admin\TagLib; class BootstrapPage{ public $firstRow; // 起始行数 public $listRows; // ...

  2. js基础-原型

    1.定义:我们创建的函数都有一个prototype(原型)属性,该属性是一个对象,          原型模式声明中多了两个属性(自动生成). 构造函数:       function Box(nam ...

  3. Python--day37--进程锁

    进程锁的示意图: 锁.py: #锁 #火车票 import json import time from multiprocessing import Process from multiprocess ...

  4. [luogu1908]逆序对(upper_bound)

    对于给定的一段正整数序列,逆序对就是序列中ai>aj且i<j的有序对 用upper_bound法求逆序对,Code很棒 据说有用树状数组和线段树写逆序对的,这里用upper_bound水一 ...

  5. Android 最新架构

    1.Android系统架构 最新的Android系统分为五层六区(域): Linux内核层(Linux Kernel):Android系统基于Linux2.6内核,这一层为Android设备各种硬件提 ...

  6. 苹果笔记本修改pycharm for mac 修改字体大小

    实在是隐藏的太深了,无语

  7. slim的中间件

    slim中间件的作用简单来说就是过滤数据,request过来的数据要经过中间件才能到达内部,然后内部数据要到达外部的时候,也要经过中间件,正常通过才能到达外部

  8. 如何设置Linux时间

    \(\color{Black}{文/魂皓轩}\) linux系统时钟有两个,一个是硬件时钟,即BIOS时间,就是我们进行CMOS设置时看到的时间,另一个是系统时钟,是linux系统Kernel时间.当 ...

  9. 记一次linux磁盘清理 - 已经删除的文件占用了大量磁盘空间

    今天开发环境磁盘占满了,导致开发环境上的 nginx .redis 等组件总是报异常. 跳到系统根目录下 cd / 检查磁盘占用情况 df -h 哇,40G硬盘全用完了.看看是哪些文件占了那么多内存. ...

  10. TCP/IP||ICMP

    1.概述 ICMP为IP组成部分之一,传递差错报文并返回用户进程,在IP数据报内部被传输 类型字段可以有15个不同的值,以描述特定类型的ICMP报文,检验和字段覆盖整个ICMP报文. 2.报文类型 在 ...