mysql-应用篇

mysql版本

docker search mysql:5.7

远程工具

Navicat Premium

数据库容灾方案

主主模式

MySQL主从模式是对主操作数据,从会实时同步数据。反之对从操作,主不会同步数据,还有可能造成数据紊乱,导致主从失效。

主从模式

MySQL主主模式是互为对方的从服务器,每台服务器即是对方的主服务器,又是对方的从服务器。
无论对哪一台进行操作,另一台都会同步数据。一般用作高容灾方案。

=================================================

数据库的介绍

简介:介绍什么是mysql以及整套课程的大纲知识点

简介介绍

简介:mysql的简介

  • 1、什么是mysql?
mysql是一个开源的关系型数据库管理系统,现在是oracle公司旗下的一款产品,
由C和C++语言编写,可移植性高。支持在多种操作系统上安装,
最常见有AIX,linux,window。mysql因为开源免费,所以受到了目前互联网行业的欢迎。

以mysql作为数据库,linux系统作为操作系统,apache或者nginx作为web服务器,
perl/php/python作为服务端的脚本解释器,就可以搭建起一个免费的网站。
被业界称为LNMP或者LAMP
  • 2、适合人群:

适合零基础,运维人员,程序开发人员,DBA数据库管理员等等所有从事IT行业的人。

  • 3、学后达到的水平:

入门偏中等水平

课程大纲总览

简介:介绍课程知识目录大纲

入门基础知识

简介:主讲面试时,面试官必问的知识点,主要关于版本号,服务进程,有哪些sql操作语句等

各个版本的重要性介绍

简介:各个版本的区别 官网:https://dev.mysql.com/downloads/mysql/

  • MySQL Community Server 社区版本,开源免费,但不提供官方技术支持。
  • MySQL Enterprise Edition 企业版本,需付费,购买了之后可以电话支持
  • MySQL Cluster 集群版,开源免费。可将几个MySQL Server封装成一个Server。

数据库服务管理

简介:mysql的service服务管理与登录管理

查看mysql服务进程:ps -ef | grep mysql
service服务管理:cp -a mysql.server /etc/rc.d/init.d/mysql
启动命令:service mysql start
关闭命令:service mysql stop
重新启动命令:service mysql restart
查看状态命令:service mysql status
登录管理: ln -s /usr/local/mysql/bin/*  /bin
登录命令:mysql -uroot -p
默认端口号:3306
配置文件:/etc/my.cnf

可视化图形界面与命令行操作

简介:命令行的登录与图形化界面的登录

  • 命令行模式
    登录命令:mysql -u用户 -p密码

    退出命令:exit;  quit;
  • 图形化模式
    ip地址或者主机名:120.76.62.13

库表深入解析

简介:mysql数据库的基本概念详解

  • 什么是库?
顾名思义就是数据仓库的意思,存储着一定数据结构的数据,一个数据库中可能包含着若干个表,
我们可以通过数据库提供的多种方法来管理数据库里边的数据。
本质上mysql数据库是一个关系型数据服务管理系统
  • 什么是表?
我们所说的表就是数据表,每一张表是由行和列组成,每记录一条数据,数据表就增加一行。列是由字段名
与字段数据属性组成,我们称之列为字段,每一个字段有着多个属性。例如是否允许为空、长度、类型等等
数据库:database
数据表:table
字段(列):column
行:row

sql各类语句精讲

简介:mysql的操作语句分类

  • 操作语句分为四类:
1、DDL 数据定义语言 (Data Definition Language) 例如:建库,建表
2、DML 数据操纵语言(Data Manipulation Language) 例如:对表中的数据进行增删改操作
3、DQL 数据查询语言(Data Query Language)	例如:对数据进行查询
4、DCL 数据控制语言(Data Control Language)	例如:对用户的权限进行设置

DDL 数据库与数据表

简介:对DDl数据定义语言进行深入学习

数据库创建、查看、切换

简介:细讲数据库的创建使用

  • 直接创建数据库 db1
create database db1;
  • 查看当前在哪个库里边
select database();
  • 进入库的操作
use 库名;
  • 判断是否存在,如果不存在则创建数据库 db2
 create database if not exists db2;
  • 创建数据库并指定字符集为 gbk、utf8
create database db3 default character set gbk; 
   
create database db4 default character set utf8; 
  • 查看某个库是什么字符集;
show create database XD; 
  • 查看当前mysql使用的字符集
show variables like 'character%';

创建表之常用数据类型

简介:细讲常用数据类型

  • 数据类型是什么?
数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。
有一些数据是要存储为数字的,数字当中有些是要存储为整数、小数、日期型等...
  • mysql常见数据类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CeWZ1eA2-1645158041680)(E:/桌面/项目相关/1-mysql-专栏/img/1.jpg)]

create table test_time (
    date_value date,
    time_value time,
    year_value year,
    datetime_value datetime,
    timestamp_value timestamp
) engine=innodb charset=utf8;

insert into test_time values(now(), now(), now(), now(), now());

数据表创建表

简介:讲解表是怎么来创建的,以及常见约束条件举例说明

  • 语法:
CREATE TABLE 表名 (
    字段名1 字段类型1 约束条件1 说明1,
    字段名2 字段类型2 约束条件2 说明2,
    字段名3 字段类型3 约束条件3 说明3
);
  • 建表复制
create table 新表名 as select * from 旧表名 where 1=2;
(注意:建议这种创建表的方式用于日常测试,因  为可能索引什么的会复制不过来)

create table 表名1 as select 字段名1,字段名2 from 表名2;
​
eg:
  create table emp as select empno ,ename from employee;

create table 新表名 like 旧表名;
  • 约束条件:
comment         ----说明解释
not null        ----不为空
default         ----默认值
unsigned        ----无符号(即正数)
auto_increment  ----自增
zerofill        ----自动填充
unique key      ----唯一值
  • 创建sql
CREATE TABLE student (
  id tinyint(5) zerofill auto_increment  not null comment '学生学号',
  name varchar(20) default null comment '学生姓名',
  age  tinyint  default null comment '学生年龄',
  class varchar(20) default null comment '学生班级',
  sex char(5) not null comment '学生性别',
  unique key (id)
)engine=innodb charset=utf8;;
​
CREATE TABLE student (
  id tinyint(5)  auto_increment  default null comment '学生学号',
  name varchar(20) default null comment '学生姓名',
  age  tinyint  default null comment '学生年龄',
  class varchar(20) default null comment '学生班级',
  sex char(5) not null comment '学生性别',
  unique key (id)
)engine=innodb charset=utf8;

数据表查看

简介:如何查看表的基本结构信息

查看数据库中的所有表:show tables;
查看表结构:desc 表名;
查看创建表的sql语句:show create table 表名;
\G :有结束sql语句的作用,还有把显示的数据纵向旋转90度
\g :有结束sql语句的作用

表结构维护与删除

简介:细讲核心知识表结构的修改

  • 修改表名
 rename table 旧表名 to 新表名;
 rename table student to user;
  • 添加列
给表添加一列:alter table 表名 add 列名 类型;
alter table user add addr varchar(50);

alter table add 列名 类型 comment '说明';
alter table user add famliy varchar(50) comment '学生父母';
  • 给表最前面添加一列:
alter table 表名 add 列名 类型 first;
alter table user add job varchar(10) first;
  • 给表某个字段后添加一列:
alter table 表名 add 列名 类型 after 字段名;
alter table user add servnumber int(11)  after id;

注意:没有给表某个字段前添加一列的说法

  • 修改列类型
alter table 表名 modify 列名 新类型;
alter table user modify servnumber varchar(20);
  • 修改列名
alter table 表名 change 旧列名 新列名 类型;
alter table user change servnumber telephone varchar(20);
  • 删除列
alter table 表名 drop 列名;
alter table user drop famliy;
  • 修改字符集
alter table 表名 character set 字符集;
alter table user character  set GBK;
  • mysql表的删除
drop table 表名;
drop table user;

看表是否存在,若存在则删除表:drop table if exists 表名;
drop table  if exists teacher;

DML 表的数据管理

简介:细讲核心知识对数据表的数据进行增删改

表数据新增

简介:讲解表数据新增的多种例子

  • 普通的插入表数据
insert into 表名(字段名) values(字段对应值);
​
insert into employee (empno,ename,job,mgr,hiredate,sal,deptnu) 
values ('1000','小明','经理','10001','2019-03-03','12345.23','10');
​
insert into 表名 values(所有字段对应值);
insert into employee  values ('1001','小明','经理','10001','2019-03-03','12345.23','10');    
  • 蠕虫复制(将一张表的数据复制到另一张表中)
insert into 表名1 select * from 表名2;
​
insert into 表名1(字段名1,字段名2) select 字段名1,字段名2 from 表名2;
​
insert into emp (empno,ename) select empno,ename from employee;
  • 一次性插入多个数据
insert into 表名  (字段名) values (对应值1),(对应值2),(对应值3);

eg:
  insert into employee 
    values 
  ('1001','xiao hong','jing li','10001','2019-03-01','12345.21','11'),
  ('1002','xiao ming','wen yuan','10002','2019-03-02','12345.22','12'),
  ('1003','xiao liu','cai wu','10003','2019-03-03','12345.23','13'); 
  • 创建sql:
某个公司的员工表
CREATE TABLE employee(
    empno       INT  PRIMARY KEY comment '雇员编号',
    ename       VARCHAR(20) comment '雇员姓名',
    job         VARCHAR(20) comment '雇员职位',
    mgr         INT comment '雇员上级编号',
    hiredate    DATE comment '雇佣日期',
    sal         DECIMAL(7,2) comment '薪资',
    deptnu      INT comment '部门编号'
    )engine=innodb charset=utf8;

表数据的修改、删除

简介:讲解如何对表数据进行修改删除以及注意事项

  • 修改(更新):
update 表名 set 字段名1=值1 where 字段名=值;
​
update 表名 set 字段名1=值1,字段名2=值2 where 字段名=值;
  • 删除:
delete from 表名 where 字段名=值;
​
 truncate table 表名;
 delete from 表名;
 drop table 表名;
  • 注意事项:
面试时:面试官问在删改数据之前,你会怎么做?
答案:会对数据进行备份操作,以防万一,可以进行数据回退
​
面试时:面试官会问,delete与truncate与drop 这三种删除数据的共同点都是删除数据,他们的不同点是什么?
delele 会把删除的操作记录给记录起来,以便数据回退,不会释放空间,而且不会删除定义。
truncate不会记录删除操作,会把表占用的空间恢复到最初,不会删除定义
drop会删除整张表,释放表占用的空间。
  • 删除速度:
drop > truncate > delete

中文乱码问题

简介:详细讲解汉字显示乱码问题

  • 查看当前mysql使用的字符集:show variables like ‘character%’;
mysql> show variables like 'character%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8                             |
| character_set_connection | utf8                             |
| character_set_database   | utf8                             |
| character_set_filesystem | binary                           |
| character_set_results    | utf8                             |
| character_set_server     | utf8                             |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
  • character_set_client:客户端请求数据的字符集

  • character_set_connection:客户端与服务器连接的字符集

  • character_set_database:数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将默认使用配置上的字符集

  • character_set_results:返回给客户端的字符集(从数据库读取到的数据是什么编码的)

  • character_set_server:为服务器安装时指定的默认字符集设定。

  • character_set_system:系统字符集(修改不了的,就是utf8)

  • character_sets_dir:mysql字符集文件的保存路径

  • 临时:set names gbk;

  • 永久:修改配置文件my.cnf里边的

[client]
default-character-set=gbk
作用于外部的显示
​
[mysqld]
character_set_server=gbk
作用于内部,会作用于创建库表时默认字符集
  • 修改库的字符集编码
alter database xiaoxiao default character set gbk;
  • 修改表的字符集编码
alter table employee default character set utf8;

DQL SQL查询实战

简介:细讲对数据表中的数据进行各种查询,以及项目实战查询

/*创建部门表*/
CREATE TABLE dept(
    deptnu      INT  PRIMARY KEY comment '部门编号',
    dname       VARCHAR(50) comment '部门名称',
    addr        VARCHAR(50) comment '部门地址'
)engine=innodb DEFAULT CHARSET=utf8;
​
某个公司的员工表
CREATE TABLE employee(
    empno       INT  PRIMARY KEY comment '雇员编号',
    ename       VARCHAR(50) comment '雇员姓名',
    job         VARCHAR(50) comment '雇员职位',
    mgr         INT comment '雇员上级编号',
    hiredate    DATE comment '雇佣日期',
    sal         DECIMAL(7,2) comment '薪资',
    deptnu      INT comment '部门编号'
)engine=MyISAM DEFAULT CHARSET=utf8;/*创建工资等级表*/
CREATE TABLE salgrade(
    grade       INT  PRIMARY KEY comment '等级',
    lowsal      INT comment '最低薪资',
    higsal      INT comment '最高薪资'
)engine=innodb DEFAULT CHARSET=utf8;/*插入dept表数据*/
INSERT INTO dept VALUES (10, '研发部', '北京');
INSERT INTO dept VALUES (20, '工程部', '上海');
INSERT INTO dept VALUES (30, '销售部', '广州');
INSERT INTO dept VALUES (40, '财务部', '深圳');/*插入emp表数据*/
INSERT INTO employee VALUES (1009, '唐僧', '董事长', NULL, '2010-11-17', 50000,  10);
INSERT INTO employee VALUES (1004, '猪八戒', '经理', 1009, '2001-04-02', 29750, 20);
INSERT INTO employee VALUES (1006, '猴子', '经理', 1009, '2011-05-01', 28500, 30);
INSERT INTO employee VALUES (1007, '张飞', '经理', 1009, '2011-09-01', 24500,10);
INSERT INTO employee VALUES (1008, '诸葛亮', '分析师', 1004, '2017-04-19', 30000, 20);
INSERT INTO employee VALUES (1013, '林俊杰', '分析师', 1004, '2011-12-03', 30000, 20);
INSERT INTO employee VALUES (1002, '牛魔王', '销售员', 1006, '2018-02-20', 16000, 30);
INSERT INTO employee VALUES (1003, '程咬金', '销售员', 1006, '2017-02-22', 12500, 30);
INSERT INTO employee VALUES (1005, '后裔', '销售员', 1006, '2011-09-28', 12500, 30);
INSERT INTO employee VALUES (1010, '韩信', '销售员', 1006, '2018-09-08', 15000,30);
INSERT INTO employee VALUES (1012, '安琪拉', '文员', 1006, '2011-12-03', 9500,  30);
INSERT INTO employee VALUES (1014, '甄姬', '文员', 1007, '2019-01-23', 7500, 10);
INSERT INTO employee VALUES (1011, '妲己', '文员', 1008, '2018-05-23', 11000, 20);
INSERT INTO employee VALUES (1001, '小乔', '文员', 1013, '2018-12-17', 8000, 20);/*插入salgrade表数据*/
INSERT INTO salgrade VALUES (1, 7000, 12000);
INSERT INTO salgrade VALUES (2, 12010, 14000);
INSERT INTO salgrade VALUES (3, 14010, 20000);
INSERT INTO salgrade VALUES (4, 20010, 30000);
INSERT INTO salgrade VALUES (5, 30010, 99990);

查看SQL的执行情况

eg:
mysql> explain select * from test where password like '199%' \G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: test
   partitions: NULL
         type: range
possible_keys: index_password
          key: index_password
      key_len: 63
          ref: NULL
         rows: 19590
     filtered: 100.00
        Extra: Using index condition

where条件查询

简介:详解where条件下的各种查询

  • 简单查询
select * from employee;
select empno,ename,job as ename_job from employee;
  • 精确条件查询
select * from employee where ename='后裔';
select * from employee where sal != 50000;
select * from employee where sal <> 50000;
select * from employee where sal > 10000;
  • 模糊条件查询
show variables like '%aracter%'; 

select * from employee  where ename like '林%';

  • 范围查询
select * from employee where sal between 10000 and 30000;
select * from employee where hiredate between '2011-01-01' and '2017-12-1';
  • 离散查询
select * from employee where ename in ('猴子','林俊杰','小红','小胡');  
  • 清除重复值
select distinct(job) from employee;
  • 统计查询(聚合函数):
count(code)或者count(*)
  select count(*) from employee;
  select count(ename) from employee;

sum()  计算总和 
  select sum(sal) from employee;

max()    计算最大值
  select * from employee where sal= (select  max(sal) from employee);

avg()   计算平均值
  select avg(sal) from employee;

min()   计算最低值
  select * from employee where sal= (select  min(sal) from employee);

concat函数: 起到连接作用
  select concat(ename,' 是 ',job) as aaaa from employee;

group by分组查询(分组)

简介:详解group by的用法以及应用场景

  • 作用:把行 按 字段 分组
  • 语法:group by 列1,列2…列N
  • 适用场合:常用于统计场合,一般和聚合函数连用
eg:
     select deptnu,count(*) from employee group by deptnu;
     select deptnu,job,count(*) from employee group by deptnu,job;
     select job,count(*) from employee group by job;

having条件查询(筛选)

简介:详解having的用法以及应用场景

  • 作用:对查询的结果进行筛选操作
  • 语法:having 条件 或者 having 聚合函数 条件
  • 适用场合:一般跟在group by之后
eg:
    select job,count(*) from employee group by job having job ='文员';
    
    select  deptnu,job,count(*) from employee group by deptnu,job having count(*)>=2;
    
    select  deptnu,job,count(*) as 总数 from employee group by deptnu,job having 总数>=2;

order by排序查询(排序)

简介:详解order by的用法以及应用场景

  • 作用:对查询的结果进行排序操作
  • 语法:order by 字段1,字段2 …
  • 适用场合:一般用在查询结果的排序
eg:
     select * from employee order by sal;
     
     select * from employee order by hiredate;
     
     select  deptnu,job,count(*) as 总数 from employee 
     group by deptnu,job having 总数>=2 order by deptnu desc;
     
     select  deptnu,job,count(*) as 总数 from employee 
     group by deptnu,job having 总数>=2 order by deptnu asc;
     
     select  deptnu,job,count(*) as 总数 from employee 
     group by deptnu,job having 总数>=2 order by deptnu;
​
     顺序:where ---- group by ----- having ------ order by 

limit限制查询(限制)

简介:详解limit的用法以及应用场景

  • 作用:对查询结果起到限制条数的作用
  • 语法:limit n,m n:代表起始条数值,不写默认为0;m代表:取出的条数
  • 适用场合:数据量过多时,可以起到限制作用
eg:
    select * from XD.employee limit 4,5;
  • limit查询优化(当一个表数据有几百万的数据的时候成了问题)
1.子查询优化法
先找出第一条数据,然后大于等于这条数据的id就是要获取的数据
eg:
  select * from test where id = 8000000 limit 0,50;

2.倒排表优化法
倒排表法类似建立索引,用一张表来维护页数,然后通过高效的连接得到数据
缺点:只适合数据数固定的情况,数据不能删除,维护页表困难
eg:
select * from test order by id asc limit 7000000,50; 
换成 select * from test order by id desc limit 2999950,50;

3.反向查找优化法
当偏移超过一半记录数的时候,先用排序,这样偏移就反转了
缺点:order by优化比较麻烦,要增加索引,索引影响数据的修改效率,并且要知道总记录数

4.limit限制优化法
把limit偏移量限制低于某个数。。超过这个数等于没数据,我记得alibaba的dba说过他们是这样做的

5.只查索引法
  • 可能出现的问题
ORDER BY排序后,用LIMIT取前几条,发现返回的结果集的顺序与预期的不一样

如果order by的列有相同的值时,mysql会随机选取这些行,为了保证每次都返回的顺序一致可以额外增加一个排序字段(比如:id),用两个字段来尽可能减少重复的概率

于是,改成 order by status, id;

exists型子查询

简介:详解exists的用法

  • exists型子查询后面是一个受限的select查询语句
  • exists子查询,如果exists后的内层查询能查出数据,则返回 TRUE 表示存在;为空则返回 FLASE则不存在。
分为俩种:exists跟 not exists
​
select 1 from employee where 1=1;
select * from 表名 a where exists (select 1 from 表名2 where 条件);
​
eg:查询出公司有员工的部门的详细信息
select * from dept a where exists (select 1 from employee b where a.deptnu=b.deptnu);
select * from dept a where not exists (select 1 from employee b where a.deptnu=b.deptnu);

左连接与右连接查询

简介:详解左右连接的用法以及应用场景

  • 左连接称之为左外连接 右连接称之为右外连接 这俩个连接都是属于外连接
  • 左连接关键字:left join 表名 on 条件 / left outer 表名 join on 条件 右连接关键字:right join 表名 on 条件/ right outer 表名 join on 条件
  • 左连接说明: left join 是left outer join的简写,左(外)连接,左表(a_table)的记录将会全部表示出来, 而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
  • 右连接说明:right join是right outer join的简写,与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。
eg:列出部门名称和这些部门的员工信息,同时列出那些没有的员工的部门
        dept,employee
        select a.dname,b.* from dept a  left join employee b on a.deptnu=b.deptnu;
        select b.dname,a.* from employee a  right join  dept b on b.deptnu=a.deptnu;

内连接查询与联合查询

简介:详解内连接与联合查询的用法以及应用场景

  • 内连接:获取两个表中字段匹配关系的记录
  • 主要语法:INNER JOIN 表名 ON 条件;
eg:想查出员工张飞的所在部门的地址
    select a.addr  from dept a inner join employee b on a.deptnu=b.deptnu and b.ename='张飞';
    select a.addr from dept a,employee b where a.deptnu=b.deptnu and b.ename='张飞';
  • 联合查询:就是把多个查询语句的查询结果结合在一起

主要语法1:… UNION … (去除重复) 主要语法2:… UNION ALL …(不去重复)

  • union查询的注意事项:
(1)两个select语句的查询结果的“字段数”必须一致;
​
(2)通常,也应该让两个查询语句的字段类型具有一致性;
​
(3)也可以联合更多的查询结果;
​
(4)用到order by排序时,需要加上limit(加上最大条数就行),需要对子句用括号括起来
​
eg:对销售员的工资从低到高排序,而文员的工资从高到低排序
    (select * from employee a where a.job = '销售员'  order by a.sal limit 999999 ) 
    union  (select * from employee b where b.job = '文员' order by b.sal desc limit 999999);

高级查询实战(一)

简介:高级查询实战

  • 查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。
涉及表: employee dept
语句:select deptnu,count(*) from employee group by deptnu

语句:select a.deptnu,a.dname,a.addr, b.zongshu from dept a,
  (select deptnu,count(*) as zongshu from employee group by deptnu) b where a.deptnu=b.deptnu;
  • 列出薪金比安琪拉高的所有员工。
涉及表:employee
语句:select * from  employee 
  where sal > (select sal from employee where ename='安琪拉');
  • 列出所有员工的姓名及其直接上级的姓名。
涉及表:employee
语句:select a.ename,ifnull(b.ename,'BOSS') as leader from employee a 
  left join employee b on a.mgr=b.empno;
  • 列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。
涉及表:employee dept
条件:a.hiredate < b.hiredate
语句:select a.empno,a.ename,c.dname from employee a 
  left join employee b on a.mgr=b.empno 
  left join dept c on a.deptnu=c.deptnu where a.hiredate < b.hiredate;
  • 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
涉及表:dept employee
语句:select a.dname,b.* from dept a left join employee b on a.deptnu=b.deptnu;
  • 列出所有文员的姓名及其部门名称,所在部门的总人数。
涉及表:employee dept
条件:job='文员'
语句:select deptnu,count(*) as zongshu from employee group by deptnu;

语句:select b.ename,a.dname,b.job,c.zongshu from dept a ,employee b ,
  (select deptnu,count(*) as zongshu from employee group by deptnu) c 
  where a.deptnu=b.deptnu and b.job='文员' and b.deptnu=c.deptnu;

高级查询实战(二)

简介:高级查询实战续

  • 列出最低薪金大于15000的各种工作及从事此工作的员工人数。
涉及表:employee
条件:min(sal) > 15000 
语句:select job,count(*) from employee group by job having   min(sal) > 15000;
  • 列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。
 涉及表:employee dept
 select  ename  from employee where deptnu=(select deptnu from dept where dname='销售部');
  • 列出与诸葛亮从事相同工作的所有员工及部门名称。
涉及表:employee dept
语句:select a.ename,b.dname from employee a,dept b where a.deptnu=b.deptnu and a.job=
 (select job from employee where ename='诸葛亮');

语句:select a.ename,b.dname from employee a left join dept b on a.deptnu=b.deptnu where 
a.job=(select job from employee where ename='诸葛亮');
  • 列出薪金比 在部门30工作的员工的薪金 还高的员工姓名和薪金、部门名称。
涉及表:employee dept
语句:select a.ename,a.sal,b.dname from employee a ,dept b where a.deptnu=b.deptnu 
and sal > (select max(sal) from employee where deptnu=30);
  • 列出每个部门的员工数量、平均工资。
涉及表:employee
语句:select deptnu , count(*) ,avg (sal) from employee  group by deptnu;
  • 列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。
涉及表:employee dept salgrade
条件:select avg(sal) from employee
语句:select a.*,c.dname,b.ename,d.grade from employee a,employee b,dept c ,salgrade d 
where a.mgr=b.empno and a.deptnu =c.deptnu and a.sal > (select avg(sal) from employee)  
and a.sal  between d.lowsal and d.higsal;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z先生09

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值