基于命令行mysql的基础学习

Mysql的学习笔记


一、数据库概述

1、 概述

  • 数据库:Database , 简称DB。是指按照一定格式存储数据的一些文件的组合(数据仓库)
  • 数据库管理系统:DataBaseManagement , 简称DBMS,用来管理数据库中的数据的。可以对其中的数据进行增删改查。
    • 常见的数据库管理系统:MySQL 、 Oracle、MS SqlSever 、 DB2 、sybase等
  • SQL:是一种结构化查询语言通过编写SQL语句,由DBMS负责执行SQL语句,最终来完成数据库中数据的增删改查(相当于编程语言)
  • 关系:DBMS -----> 通过执行SQL语句操作数据库中的数据
  • CRUD : 增删改查,对应 create 、retrave(查,检索)、update 、 delete ;

2、 安装MySQL

  • 免安装版:

    • 第一步:去官网下载安装
    • (重点)第二步:先解压,然后在mysql下创建一个my.ini文件,
      更改my.ini文件里面的两行安装目录,
      第二行加上\data,my.ini文件不能多或少一个符号,
      在path(环境变量里面)加上mysql路径(/bin)。
    • (重点)第三步:进入命令指示符(cmd),
      输入mysqld --initialize-insecure --user=mysql,
      再输入mysqld -install,
      出现Service successfully installed.表示配置完成
      启动数据库net start mysql,
      输入mysql -u root -p,不用输入密码直接回车
      出现mysql>表示配置完成
      输入alter user user() identified by “密码”;
      输入net stop mysql关闭数据库
  • 安装版(msi):

    • 注意事项
      • 1、端口号:是任何一个软件都会有的,端口号是一个软件的唯一代表。通常和ip地址在一起。ip地址用来定位计算机,port端口号是用来定位计算机上的服务/应用的。在同一台计算机上,端口号不能重复,具有唯一性。 MySQL占用的默认端口号3306
      • 2、字符集(字符编码方式):设置MySQL的字符编码方式为UTF - 8
      • 3、服务名称:默认是MySQL
      • 4、环境变量path
      • 5、MySQL超级管理员root名称不变,设置密码
      • 6、设计密码的同时,可以激活root账户远程访问。激活后,root账户可以从外地登录访问;不激活则表示root账户只能在本地使用

3、 MySQL的卸载

  • 免安装版:

    • 第一步:停止mysql服务
      net stop mysql
    • 第二步:卸载mysql
    • 第三步:删除mysql服务
      sc delete mysql(服务名称)
      • 如果服务删除不了,就从注册表删除
        win+R:regedit打开注册表
        HEKY_LOCAL_MACHINE-SYSTEM-CurrentControlSet-Service
        找到mysql服务删除即可
    • 第四步:环境变量删除
  • 安装版(msi):

    • 第一步:双击安装包卸载
    • 第二步:删除目录(表层位置,C盘的ProgramDate文件下的MySQL目录一起删掉)
    • 第三步:环境变量删除

4、计算机中MySQL的服务

  • 流程:计算机右键 — 管理 — 服务和应用程序 — 服务 — 找MySQL服务
  • MySQL的服务默认为启动, 默认为自动启动,表示启动操作系统的时候自动启动

Windows 系统中的启动方式

net start MySQL							// 启动MySQL服务
net stop MySQL 							// 关闭MySQL服务

5、如何登录MySQL服务(客户端)

使用bin目录下的mysql.exe命令来连接mysql数据库服务器

  • 第一步:启动MySQL服务

  • 第二步:mysql -u 用户名称 -p密码 (其中的-u 表示user , -p表示passward)

  • 本地登录(显示密码的形式)

    C:\Users\张中宇>mysql -u root -p123456
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 8.0.18 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    
  • 本地登录(隐藏密码的形式)

    C:\Users\张中宇>mysql -u root -p
    Enter password:******
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 10
    Server version: 8.0.18 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    

二、基础命令

1、登录与退出

mysql -u root -p								// 本地登录
exit 										   //  退出 
\q											   //  退出

2、MySQL的常用命令

(命令不区分大小写)(mysql不见分号不执行)

show databases;							// 查看mysql中有哪些数据库(默认自带4个)
use  数据库名称 ;						// 使用某一个数据库
create database 数据库名称 ;    			 // 创建一个新的数据库
show tables ;						   //  查看数据库下有哪些表 
source + 文件路径						//  导入sql文件
select * from 表名 ;					  //  查看表中的数据	
desc(describe) 表名	;				  //  不看表的数据,只看表的结构
select version() ;				 	   //   查看mysql数据库的版本号
select database();					    //  查看当前使用的数据库
\c									// 中止命令的输入

三、数据库基本知识

1、表(table)

  • 概念:类似于Excel
  • 表是数据库中最基本的单元,数据库中以表的是形式表示数据;因为表比较直观
  • 任何表都有行和列
    • 行(row , 被称为数据或者记录)
    • 列(column ,被称为字段)
      • 每个字段都有字段名、数据类型(字符串、数字、日期等)、约束(限制性措施)等属性

2 、SQL语句的分类

  • 分为DQL、DML、DDL、TCL、DCL
    • DQL : 数据查询语言,关键字SELECT
    • DML:数据操作语言,对表中的数据进行增删改的 关键字INSECT;DELETE; UPDATE
    • DDL:数据定义语言,主要操作的是表的结构,增删改 关键字CREATE、DROP、ALTER
    • TCL:事务控制语言:事务提交、事务回滚 关键字COMMIT 、 ROLLBACK
    • DCL:数据控制语言:授权、撤销权限 关键字GRANT、REVOKE

3、数据的导入

  • source + 文件目录
  • 注意:文件的路径一定不要有中文!!!!
mysql> source D:\MySQL\sql-documents\pre\bjpowernode.sql
Query OK, 0 rows affected, 1 warning (0.43 sec)

Query OK, 0 rows affected, 1 warning (0.01 sec)

Query OK, 0 rows affected, 1 warning (0.01 sec)

Query OK, 0 rows affected, 1 warning (0.63 sec)

Query OK, 0 rows affected, 5 warnings (0.38 sec)

Query OK, 0 rows affected (0.14 sec)

Query OK, 1 row affected (0.15 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.02 sec)

Query OK, 0 rows affected (0.02 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.12 sec)

Query OK, 1 row affected (0.02 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> select * from dept;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.04 sec)

mysql> select * from emp
    -> ;
+-------+--------+-----------+------+------------+---------+---------+--------+
| EMPNO | ENAME  | JOB       | MGR  | HIREDATE   | SAL     | COMM    | DEPTNO |
+-------+--------+-----------+------+------------+---------+---------+--------+
|  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800.00 |    NULL |     20 |
|  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     30 |
|  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     30 |
|  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |    NULL |     20 |
|  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     30 |
|  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |    NULL |     30 |
|  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |    NULL |     10 |
|  7788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 | 3000.00 |    NULL |     20 |
|  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000.00 |    NULL |     10 |
|  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    0.00 |     30 |
|  7876 | ADAMS  | CLERK     | 7788 | 1987-05-23 | 1100.00 |    NULL |     20 |
|  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |    NULL |     30 |
|  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |    NULL |     20 |
|  7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |    NULL |     10 |
+-------+--------+-----------+------+------------+---------+---------+--------+
14 rows in set (0.00 sec)

mysql> select * from salgrade;
+-------+-------+-------+
| GRADE | LOSAL | HISAL |
+-------+-------+-------+
|     1 |   700 |  1200 |
|     2 |  1201 |  1400 |
|     3 |  1401 |  2000 |
|     4 |  2001 |  3000 |
|     5 |  3001 |  9999 |
+-------+-------+-------+
5 rows in set (0.00 sec)

4、表的结构

  • 不看表内容 , 只看表的结构 desc + 表名 ;

  • mysql> desc dept;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | DEPTNO | int(2)      | NO   | PRI | NULL    |       |		部门编号
    | DNAME  | varchar(14) | YES  |     | NULL    |       |		部门名称
    | LOC    | varchar(13) | YES  |     | NULL    |       |		地理位置
    +--------+-------------+------+-----+---------+-------+
    3 rows in set (0.15 sec)
    
    mysql> desc emp ;
    +----------+-------------+------+-----+---------+-------+
    | Field    | Type        | Null | Key | Default | Extra |
    +----------+-------------+------+-----+---------+-------+
    | EMPNO    | int(4)      | NO   | PRI | NULL    |       |	员工编号
    | ENAME    | varchar(10) | YES  |     | NULL    |       |	员工姓名
    | JOB      | varchar(9)  | YES  |     | NULL    |       |	工作岗位
    | MGR      | int(4)      | YES  |     | NULL    |       |	上级编号
    | HIREDATE | date        | YES  |     | NULL    |       |	入职日期
    | SAL      | double(7,2) | YES  |     | NULL    |       |	工资
    | COMM     | double(7,2) | YES  |     | NULL    |       |	补助
    | DEPTNO   | int(2)      | YES  |     | NULL    |       |	部门编号
    +----------+-------------+------+-----+---------+-------+
    8 rows in set (0.00 sec)
    
    mysql> desc salgrade ;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | GRADE | int(11) | YES  |     | NULL    |       |		工资等级
    | LOSAL | int(11) | YES  |     | NULL    |       |		最低工资
    | HISAL | int(11) | YES  |     | NULL    |       |		最高工资
    +-------+---------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    

5、MySQL常用命令

  • 详情参见第二部分

四、常用命令

1、DQL语句

1.1 SELECT语句
  • 注意:select语句不会更改原表之中的任何内容,只负责检索、查询
  • select 后面可以跟字段名(自变量) , 也可以跟字面量/ 字面值(数据)
    • 如果select后面跟的是字段名,那么查询字段
    • 如果跟的是数据,那么会借助这个表的结构, 形成这个数据表
1.1.1 简单查询
select 字段名 from 表名 ;			        	// 查询一个字段
select 字段名1,字段名2,... from 表名;			  // 查询多个字段
select * from 表名 ; 					          //  查询所有字段(效率低、可读性差)
select 字段名 as 新字段名 from 表名;				 // 给查询的列起别名
/*注意:只是将列名的显示改为新的名称,原表不变。select语句不会更改原表之中的任何内容
	    as可以省略,但只能显示一个字符。
	    假设起别名是有空格,加上单引号 
	    字符串用单引号标起来(标准),双引号在oracle数据库中无法使用
	    在列之中的字段可以使用数学表达式
	    别名是中文,属于字符串,用单引号括起来即可*/

1.1.2 条件查询
  • 查询出来符合条件的
  • 格式 : select 字段名1 , 字段名2 , 字段名3 … from 表名 where 条件 ;
  • 条件查询的条件:
    • = \ <>或 != \ < \ <= \ > \ >= \ between…and … \ is null \ and \ or \ in \ not \ like \ % \ _
1= 等于
 【案例】:查询薪资等于800的员工的姓名和编号
 select empno,ename from emp where sal=800 ;

2<>!= 不等于
 【案例】:查询薪资不等于800的员工的姓名和编号
  select empno,ename from emp where sal<>800 ;
  select empno,ename from emp where sal!=800 ;
  
3<  小于
 【案例】:查询薪资小于2000的员工的姓名与编号
  select empno,ename from emp where sal<2000 ; 
 
4<= 小于等于
 【案例】:查询薪资小于3000的员工的姓名与编号
  select empno,ename from emp where sal<=3000 ; 
 
5> 大于
 【案例】:查询薪资小于2000的员工的姓名与编号
  select empno,ename from emp where sal>4000 ; 
 
6>= 大于等于
 【案例】:查询薪资小于2000的员工的姓名与编号
  select empno,ename from emp where sal>=4000 ; 
 
7between... and... 两个值之间,等同于 >= and <=
注意:使用此语句时必须保证左小右大 , 闭区间,包含两端的值
 【案例】:查询薪资小于2000的员工的姓名与编号
  select empno,ename from emp where sal between 2000 and 4000 ; 
  select empno,ename from emp where sal >= 2000 and sal <= 4000 ; 
 
8is (not) null 
 【案例】:查询津贴(补助)(不)为null的员工姓名和员工编号
  select empno,ename from emp where comm is null;
  select empno,ename from emp where comm is not null ;
  
9and 并且
 【案例】:查询工作岗位是manager并且工资大于2500的员工信息
 select * from emp where job = 'manager' and sal > 2500 ;

10or 或者
 【案例】:查询工作岗位是manager或者是salesman的员工信息
 select * from emp where job = 'manager' or job = 'salesman';
 
 【注意】:andor 同时出现,and 优先级高 , 先执行and。
 【语句】: select * from emp where sal > 2500 and deptno = 10 or deptno = 20 ;
      表达的意义是工资大于2500并且dept = 10 的人,或者是deptno = 20 的所有人
       select * from emp where sal > 2500 and (deptno = 10 or deptno = 20) ;
       表达的意义是工资大于2500的人,同时是dept = 10 或者deptno = 20 的所有人
 
11(not) in 包含,相当于多个or
 【案例】:查询工作岗位是manager或者是salesman的员工信息
  select * from emp where job in ('manager', 'salesman');
  【注意】:in后面是具体的值,不是区间

12not   not 可以取非 , 主要用在isin之中
 
13like   like称为模糊查询,支持% 或者_匹配 
			%    匹配任意个字符
			_    一个下划线只匹配一个字符
【案例】: 找出姓名中含有'o'的员工信息
  select * from emp where ename like '%o%' ;
【案例】:找出姓名中以T结尾的
  select * from emp where ename like '%t';
【案例】:找出姓名以k开始的
  select * from emp where ename like 'k%';
【案例】:找出姓名第二个字母是A的
  select * from emp where ename like '_a%';
【案例】:找出第三个字母是r的
  select * from emp where ename like '__r%';
【案例】:找出名字中含有下划线的
  select * from emp where ename like '%\_%';     // 反斜杠代表转义, 类似于转义字符
1.1.3 排序
  • 格式 : select 字段名1 , 字段名2 , 字段名3 … from 表名 order by 字段名 ;(默认升序排列)
  • 格式: select 字段名 from 表名 where 条件 order by 排序方式 ;
【案例】:查询所有员工薪资
  select ename , sal from emp order by sal ;			// 默认升序
  select ename , sal from emp order by sal asc ;		// 指定升序排列 
  select ename , sal from emp order by sal desc ;		// 指定降序排列 
【案例】:按照员工名字和薪资排列,按照薪资升序排列,如果相同按照姓名升序排列
  select ename , sal from emp order by sal asc , ename asc ;	// 多字段排序
【案例】:按照查询结果的第二列排列 
  select ename , sal from emp order by 2 ;				// 不建议,因为不健壮
  
【案例】:找出工资在12503000之间的员工信息,按照薪资的降序排列
格式: select 字段名 from 表名 where 条件 order by 排序方式 ;
  select ename , sal from emp where sal between 1500 and 3000 order by sal desc ;
1.1.4 数据处理函数
  • 数据处理函数又被称为单行处理函数

  • 特点:一个输入对应一个输出

    函数名 函数功能
    lower 转换小写
    upper 转换大写
    substr 取子串(substr(被截取的字符子串,起始下标,截取的长度))
    length 取长度
    trim 去空格
    str_to_date 将字符串转换成日期
    date_format 格式化日期
    format 设置千分位
    round 四舍五入
    rand() 生成随机数
    ifnull 可以将null转换成一个具体值
// 单行处理函数
1、lower / upper  转换大小写
 【案例】:将员工姓名转换成小写
 select lower(ename) from emp ;

2、substr  取子串
【格式】:substr(字符串 , 起始下标 , 截取长度) 		起始下标从1开始
【案例】:请找出员工名字第一个字母是A的员工信息
 select ename from emp where ename like 'a%' ;
 select ename from emp where substr(ename , 1  1) = 'A' ;      // 注意是一个等号

3、length
【格式】:length(字段名)
【案例】:求取员工姓名的长度,并更名为enamelength
 select length(ename) as enamelength from emp ;

4、trim         去空格
【格式】: select 字符段 from 表名 where 字符段 = trim('传过来的数据');
【案例】: 查询king的数据
 select * from emp where ename = trim('  king '); 

5、str_to_date   将字符串varchar转换成date 类型
 【格式】:str_to_date('字符串日期''日期格式') ;
 		日期格式:年月日时分秒分别为: %Y , %m , %d , %h , %i , %s ;
 【案例】:向t_user表中插入一个数据,将字符串类型转换成日期类型
 insert into t_user (id , name , birth) values (1 , 'zhangsan' , str_to_date('01-10-1990' , '%d-%m-%Y')) ;
 【注意】:如果输入的格式是 %Y-%m-%d , 则转换函数可以省略。

6、date_format   将date类型转换成具有一定格式的varchar字符串类型
 【格式】:date_format(字段名 ,'日期格式')
 【案例】:查询t_user表中的名字和生日
 select name , date_format(birth , '%Y-%m') as birth from t_user ;

7、format	数字格式化
【格式】:format (数字 , ‘格式’);
mysql> select empno , ename , Format(sal , '$999,999') from emp ;
+-------+--------+--------------------------+
| empno | ename  | Format(sal , '$999,999') |
+-------+--------+--------------------------+
|  7369 | SMITH  | 800                      |
|  7499 | ALLEN  | 1,600                    |
|  7521 | WARD   | 1,250                    |
|  7566 | JONES  | 2,975                    |
|  7654 | MARTIN | 1,250                    |
|  7698 | BLAKE  | 2,850                    |
|  7782 | CLARK  | 2,450                    |
|  7788 | SCOTT  | 3,000                    |
|  7839 | KING   | 5,000                    |
|  7844 | TURNER | 1,500                    |
|  7876 | ADAMS  | 1,100                    |
|  7900 | JAMES  | 950                      |
|  7902 | FORD   | 3,000                    |
|  7934 | MILLER | 1,300                    |
+-------+--------+--------------------------+
14 rows in set, 14 warnings (0.06 sec)


8、round        四舍五入(可以有负数,负数表示相应的整数位数 ; 可以有小数,也是四舍五入保留位数 : 0.40.6 保留的位数就不一样)
【格式】: select round(值, 保留的小数位数) from 表名 ;
【案例】: 测试  1236.567  的四舍五入值
  select round(1236.567 , 0) as result from emp ;

9、rand()	  生成随机数  , 也会借助表的结构
【格式】:  select rand() as result from emp ;
【案例】:生成 100 以内的 随机数
  select round(rand() * 100) as result from emp ;

10、ifnull		可以将null转换成一个具体值
【注意】:在数据库之中,只要有null参与的数学运算 , 结果均为null
【格式】:ifnull(数据 , 被当做的值) 
【案例】:将null 改为0 , 计算员工的年薪 , 并重命名为yearsal
 select ename , (sal + ifnull(comm , 0)) * 12 as yearsal from emp ;

10、concat    字符串拼接
【案例】:将员工的姓名和员工的编号拼接起来
 select concat(ename , empno) from emp ;
 
11case.. when... then... when... then...else... end ....
【案例】:当员工的岗位是manager的时候,工资上调10% , 当工作岗位是salesman的时候,工资上调50% (注意:不修改数据库)
 select ename , job , sal as oldsal ,(case job when 'manager' then  sal*1.1 when 'salesman' then sal * 1.5  else sal end) as newsal from emp order by sal asc , ename  desc ;
 
 
【案例】:将员工信息以首字母大写的形式展现出来			
 select concat(upper(substr(ename , 1 , 1)) , lower(substr(ename , 2 , length(ename) - 1)) ) as ename from emp ; 
1.1.5 分组函数
  • 概念:分组函数又被称为聚合函数、多行处理函数

  • 特点:多个输入对应一个输出

    函数名 函数功能
    count 取得记录数
    sum 求和
    avg 取平均值
    max 取最大的数
    min 取最小的数
  • 注意:

    • 1、分组函数在使用的时候必须先进行分组,然后才能用;如果进行分组,整张表为一个组
    • 2、分组函数会自动忽略null , 不需要提前进行处理
    • 3、分组函数count(*)和count(字段)的区别
      • count(具体字段) : 表示统计该字段下所有不为null的元素的总数
      • count(*) : 只要有一行数据,count则++
    • 4、分组函数不能够直接使用在where子句中
      • 执行顺序:from、 where 、 group by、select 、 order by
      • 因为执行where 语句的时候 尚未分组 ,所以会报错
    • 5、所用的分组函数可以组合起来一起用
// 多行处理函数
1、count	
【案例】:求出员工数量总和
select count(ename) from emp ;

2、sum
3、avg
4、max
5、min

【案例】:同时计算所有员工的工资总和、最高工资、最低工资、平均工资、总数
  select sum(sal) , max(sal) , min(sal) , avg(sal) , count(sal) from emp ;
  +----------+----------+----------+-------------+------------+
 | sum(sal) | max(sal) | min(sal) | avg(sal)    | count(sal) |
 +----------+----------+----------+-------------+------------+
 | 29025.00 |  5000.00 |   800.00 | 2073.214286 |         14 |
 +----------+----------+----------+-------------+------------+
1.1.6 分组查询(重点)
  • 概念:在实际的应用之中,可能有这样的需求,需要先进行分组,之后对每一个分组进行操作,这个时候就要用到分组查询
  • 使用having子句 ,可以对分完组之后的数据进一步过滤 , 不能单独使用,要和group by一起使用 ,并且位置不能改变,不能代替where
  • 格式: select 字段名 from 表名 group by …
  • 格式 : select 字段名 from 表名 where 条件 group by … order by 排序 ;
【案例】:计算每个工作岗位的工资和
 select job , sum(sal) from emp group by job ;
 
【案例】:计算每个工作的平均薪资
 select job , avg(sal) from emp group by job ;
 
【案例】:计算每个部门的最高薪资
 select deptno , max(sal) from emp group by deptno ;
  
 [注意]:在一条select语句后面有 group by ,则在 select 后面只能跟分组的字段,以及分组函数
 
 
 【案例】:找出每个部门,不同工作岗位的最高工资
 select deptno , job , max(sal) from emp group by deptno , job order by deptno asc;
	 +--------+-----------+----------+
	| deptno | job       | max(sal) |
	+--------+-----------+----------+
	|     10 | CLERK     |  1300.00 |
	|     10 | MANAGER   |  2450.00 |
	|     10 | PRESIDENT |  5000.00 |
	|     20 | ANALYST   |  3000.00 |
	|     20 
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值