Mysql笔记

目录

一、数据库的好处

1、可以持久化数据到本地
2、结构化查询

二、数据库的常见概念 ★

1、DB:数据库,存储数据的容器
2、DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB
3、SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言

三、数据库存储数据的特点

1、数据存放到表中,然后表再放到库中
2、一个库中可以有多张表,每张表具有唯一的表名用来标识自己
3、表中有一个或多个列,列又称为“字段”,相当于java中“属性”
4、表中的每一行数据,相当于java中“对象”

四、常见的数据库管理系统

mysql、oracle、db2、sqlserver

MySQL服务的启动和停止

方式一:通过命令行
net start 服务名
net stop 服务名
方式二:计算机——右击——管理——服务

MySQL服务的登录和退出

登录:mysql 【-h 主机名 -P 端口号】 -u 用户名 -p密码

密码:qq134*******

退出:exit或ctrl+C

MySQL的实例

单个表

查找最晚入职员 SQL195

select  *
from  employees
where  hire_date = (
        select max(hire_date)
        from employees
  )

查找入职员工时间排名倒数第三的员工 SQL196

select  *
from  employees
where  hire_date = (
        select DISTINCT  hire_date
        from  employees
        ORDER by  hire_date DESC
        limit 1 offset  2 )

获取薪水第二多的员工

SELECT
    a.emp_no,
    a.salary -- 再套一层查询
FROM
    (
        SELECT
            emp_no,
            salary,
            dense_rank() over (
                ORDER BY
                    salary DESC
            ) rank_num
        FROM
            salaries
        WHERE
            to_date = '9999-01-01'
    ) a
WHERE
    a.rank_num = 2;
SELECT
    a.emp_no,
    a.salary -- 再套一层查询
FROM salaries a
where salary=(
    select salary
    from salaries
    where to_date = '9999-01-01'
    order by salary desc
    limit 1 offset 1
)

查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t SQL201

select emp_no, count(emp_no) as t
from salaries
group by emp_no
having t > 15;

统计单个列出现过的数 SQL202

select distinct salary
from  salaries
order by salary desc

请你查找employees表所有emp_no为奇数,且last_name不为Mary的员工 SQL209

select *
from employees as e
where e.last_name!="Mary" and e.emp_no%2=1
order by hire_date DESC

所有员工的薪水按照salary降序先进行1-N的排名,并有一列显示当前排第几 SQL217

select
    emp_no,
    salary,
    dense_rank() over (
        order by
            salary desc
    ) as t_rank
from
    salaries
where
    to_date = '9999-01-01'

使用子查询的方式找出属于Action分类的所有电影SQL224

select
    f.title,
    f.description
from
    film f
    left join film_category fc on f.film_id = fc.film_id
where
    fc.category_id = (
        select
            category_id
        from
            category
        where
            name = 'Action'
    )

将employees表的所有员工的last_name和first_name拼接起来作为Name SQL226

select
    concat (last_name, " ", first_name)
from
    employees

两个表

left join: 包含左表的所有行,对应的右表行可能为空

right join: 包含右表的所有行,对应的左表行可能为空

inner join: 只包含左右表都匹配并且不为空的行

join: 只包含左右表都匹配并且不为空的行

left outer join: 包含左表的所有行,对应的右表行可能为空。

两个表有一列相同,查找领导表的薪水表 SQL197

SELECT  s.emp_no,s.salary,s.from_date, s.to_date,d.dept_no
from salaries as s, dept_manager as d
where  s.emp_no = d.emp_no
order by  s.emp_no

两个表员工表、部门表,查找所有已经分配部门的员工的last_name和first_name以及dept_no,也包括暂时没有分配具体部门的员工 SQL199

select e.last_name, e.first_name,d.dept_no
from employees as e left JOIN dept_emp AS d 
on e.emp_no = d.emp_no;

查找一个表中,没有在另一个表的元素 SQL204

select emp_no
from employees as e
where emp_no not in (
        select emp_no
        from dept_manager)

员工表dept_emp、部门经理表,获取所有员工当前的manager SQL205

select e.emp_no, d.emp_no
from
    dept_emp as e
    inner join dept_manager as d on e.dept_no = d.dept_no
where
    e.emp_no != d.emp_no

你统计出各个title类型对应的员工薪水对应的平均工资avg SQL210

select
    title,
    avg(salary) as a
from
    titles as t
    inner join salaries as s on t.emp_no = s.emp_no
group by
    t.title
order by
    a

获取每个部门中当前员工薪水最高的相关信息 SQL206

员工表、薪水表

select
    t1.dept_no,
    t2.emp_no,
    t1.salary
from
    (
        select
            d.dept_no,
            max(s.salary) salary
        from
            dept_emp d
            join salaries s on d.emp_no = s.emp_no
            and d.to_date = '9999-01-01'
            and s.to_date = '9999-01-01'
        group by
            d.dept_no
    ) t1
    join (
        select
            d.emp_no,
            d.dept_no,
            s.salary
        from
            dept_emp d
            join salaries s on d.emp_no = s.emp_no
            and d.to_date = '9999-01-01'
            and s.to_date = '9999-01-01'
    ) t2 on t1.dept_no = t2.dept_no
    and t1.salary = t2.salary
order by
    t1.dept_no;

在职员工自入职以来的薪水涨幅情况 SQL215

select
    b.emp_no,
    (b.salary - a.salary) as growth
from
    (
        select
            e.emp_no,
            s.salary
        from
            employees e
            left join salaries s on e.emp_no = s.emp_no
            and e.hire_date = s.from_date
    ) a -- 入职工资表
    inner join (
        select
            e.emp_no,
            s.salary
        from
            employees e
            left join salaries s on e.emp_no = s.emp_no
        where
            s.to_date = '9999-01-01'
    ) b -- 现在工资表
    on a.emp_no = b.emp_no
order by
    growth

三个表

查找所有员工的last_name和first_name以及对应的dept_name也包括暂时没有分配部门的员工 SQL213

员工表、部门表、部门员工关系表

select
    e.last_name,
    e.first_name,
    d.dept_name
from
    employees e
    left join dept_emp de on e.emp_no = de.emp_no
    left join departments d on de.dept_no = d.dept_no

统计各个部门的工资记录数 SQL216

部门表、关系表、薪水表

select
    d.dept_no,
    d.dept_name,
    count(*) as sum
from
    (
        departments d
        join dept_emp de on d.dept_no = de.dept_no
    )
    join salaries s on de.emp_no = s.emp_no
group by
    d.dept_no
order by
    dept_no

获取员工其当前的薪水比其manager当前薪水还高 SQL219

select
    a.emp_no,
    b.emp_no manager_no,
    c.salary emp_salary,
    d.salary manager_salary
from
    dept_emp a
    inner join dept_manager b on a.dept_no = b.dept_no
    inner join salaries c on a.emp_no = c.emp_no
    inner join salaries d on b.emp_no = d.emp_no
where
    c.salary > d.salary

汇总各个部门当前员工的title类型的分配数目 SQL220

select
    d.dept_no,
    d.dept_name,
    t.title,
    count(title)
from
    departments d
    join dept_emp de on d.dept_no = de.dept_no
    join titles t on de.emp_no = t.emp_no
where
    de.to_date = "9999-01-01"
    and t.to_date = "9999-01-01"
group by
    dept_no,
    title
order by
    dept_no

四个表

获取所有非manager员工薪水情况 SQL218

SELECT
    b.dept_no,
    a.emp_no,
    d.salary
from
    employees a,
    dept_emp b,
    dept_manager c,
    salaries d
WHERE
    a.emp_no = b.emp_no
    AND b.dept_no = c.dept_no
    AND b.emp_no != c.emp_no
    AND a.emp_no = d.emp_no

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值