MySQL----,case,if,连接查询

/*
case 变量语句:搭配select语句,case后的变量是根据筛选的条件case..when..then..else..end as 别名 from标名
*/

case 变量------等价switch

SELECT salary 原始工资,department_id,#select和case之间是有,隔开的
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工资
FROM employees;

不同于普通查询,select结尾要有“,”
#case后不见变量,则相当于if

SELECT salary,
CASE
WHEN salary > 12000 THEN 'A'
WHEN salary > 9000 THEN 'B'
WHEN salary >8000 THEN 'C'
ELSE 'D'
END AS 工资级别
FROM employees;

#显示系统时间(日期加时间)

SELECT NOW();


#查询员工工资提高20%之后的结果

SELECT 
  employee_id,
  last_name,
  salary,
  salary * 1.2 newsalary 
FROM
  employees ;

#按员工姓名首字母排序

SELECT 
  last_name,
  LENGTH(last_name) 姓名长度 
FROM
  employees 
ORDER BY SUBSTR(last_name, 1) DESC ;

#连接操作

SELECT 
  CONCAT(
    last_name,
    ' earns ',
    salary,
    ' monthiy but wants ',
    salary * 3
  ) AS 'dream salary' 
FROM
  employees 
  WHERE salary = 24000;


  /*
分组函数
分类:sum 放一个参数,avg,max min count
分组函数都忽略null值
可以和distinct搭配实现去重
count 函数
和分组函数一同查询的字段有限制,要求是group by后的字段
*/

SELECT SUM(salary),AVG(salary) FROM employees;
SELECT SUM( DISTINCT salary),SUM(salary) FROM employees;
SELECT COUNT(1) FROM employees;
SELECT COUNT(*) FROM employees;

SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary) FROM employees;

SELECT COUNT(*)
FROM employees
WHERE department_id=90;


#查询员工表中最大入职时间和最小入职时间相差的天数
#datediff函数

SELECT DATEDIFF(MAX(hiredate),MIN(hiredate)) AS DAY FROM employees ;

/*
分组查询:select中的列名必须出现在group by后面
order by 放在最后
格式:
    select 分组函数,列(要求出现在group by后面)
    from 表
    【where 筛选条件】
    group by 分组的列表
    having 条件
    【order by 子句】
    注意:查询列表比较特殊,要求是分组函数和group by后出现的字段
*/

SELECT MAX(salary),job_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING MAX(salary)>12000;


/*
链接查询
笛卡尔积现象
如果为表起了别名,则不能用原名
*/

/*
等值链接
自链接:将一个表看做两个表
*/
#查询员工名称和其上级

SELECT e.`employee_id`,e.`last_name`,m.`employee_id`,m.`last_name`
FROM employees e,employees m
WHERE e.`manager_id`=m.`employee_id`;


/*
sql99语法:
    select 查询列表
    from 表1 别名 【连接类型】
    join 表2 别名
    on 链接条件
    【where 筛选条件】
    【group by 分组】
    【having 筛选条件】
    【order by 排序列表】
    
    
分类: 内连接:inner
       外连接:
    ··左外链接:left 【outer】
    ··右外链接:right【outer】
    ··全外链接:full 【outer】
    交叉链接:cross
    
    
内连接查询
    select 查询列表
    from 表1 别名
    inner join 表2 别名
    on 链接条件
*/

SELECT 
  last_name,
  department_name 
FROM
  employees e 
  INNER JOIN departments d 
    ON e.`department_id` = d.`department_id` ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值