DQL一般查询

进阶1:基础查询

/*
语法:
select 查询列表 
from 表名;

特点:
1、查询列表可以是表中字段、常量值、表达式、函数
2、查询结果是一个虚拟的表格
*/

USE myemployees;

1.查询单个字段

SELECT last_name FROM employees;

2.查询多个字段

SELECT 
  last_name,
  salary,
  email 
FROM
  employees ;

3.查询所有字段

SELECT 
  `first_name`,
  `last_name`,
  `email`,
  `phone_number`,
  `job_id`,
  `salary`,
  `commission_pct`,
  `manager_id`,
  `department_id`,
  `hiredate` 
FROM
  employees ;            #顺序与表可不一致,鼠标双击左栏里的表,最后按F12
  
SELECT * FROM employees; #顺序与表完全一致

4.查询常量值

SELECT 100;
SELECT "john";

5.查询表达式

SELECT 100%98;

6.查询函数

SELECT VERSION();

7.起别名

/*
便于理解
区分重名的情况
*/
SELECT 100%98 AS 结果;
SELECT last_name AS;

SELECT last_name 姓; #as可省略

SELECT salary AS "out put" FROM employees;

8.去重

#案例:查询员工表涉及到的部门编号
SELECT DISTINCT department_id FROM employees;
#不可以像下面这样,得到的结果不规则
select distinct a,b from c;

9.+的作用

/*
java中的+ 运算符  连接符
MySQL中的+ 仅运算符
	       字符+数字: 试图将字符型数值转换为数值型
			   成功 继续加
			   失败 字符型数值转换为0
	                   一方为null,结果必为null
*/
#案例:查询员工和姓名连城一个字段,并显示为姓名
SELECT last_name+first_name AS 姓名 FROM employees;#错误的方法
#concat函数,拼接字符
SELECT CONCAT(last_name,first_name) AS 姓名 FROM employees;#正确的方法
#ifnull函数,判断字段或表达是否为null,是则返回指定值,否则返回原本的值
SELECT ifnull(commission_pct,0) FROM employees;

进阶2:条件查询

/*
语法:
select 查询列表
from 表名
where 筛选条件;

分类:
    1、按条件表达式筛选
       条件运算符:> < = <> >= <= != <=>
    2、按逻辑表达式筛选
       逻辑运算符:&& || !
		   and or not
    3、模糊查询:
		like
		between and | not between and
		in
		is null | is not null
*/

1、条件表达式筛选

#案例1:查询工资>12000的员工信息

SELECT * FROM employees WHERE salary>12000;

#案例2:查询部门编号不等于90的员工名和部门编号

SELECT last_name, department_id FROM employees WHERE department_id<>90;

2、逻辑表达式筛选

#案例1:工资1w到2w之间的员工名、工资以及奖金

SELECT `last_name`,`salary`,`commission_pct`FROM employees WHERE salary>10000&&salary<20000;

#案例2:查询部门编号不是90~110之间,或工资高于1.5w的员工信息

SELECT * FROM employees WHERE department_id<90 OR `department_id`>110 OR salary >= 15000;

3、模糊查询

/*
like	可判断字符型或数值型
        与通配符搭配:%任意多个字符,包括0个
		      _任意单个字符
between and	
        提高简洁度,包含临界值,临界值顺序固定        
in
	提高简洁度,判断是否属于IN列表中的某一项,IN列表内值类型兼容,不支持通配符
is null 或 is not null
	判断null值,<> 或 = 不能用于判断null值,可读性高,建议使用
	<=> 既可以判断null,也可判断普通数值,可读性较低
*/

like

#案例1:查询员工名包含字符a的员工信息

SELECT * FROM employees WHERE last_name LIKE "%a%";

#案例2:查询员工名第三个字符为n,第五个为l的员工信息

SELECT * FROM employees WHERE last_name LIKE "__n_l%";

#案例3:查询员工名中第二个字符为_的员工名,加转义字符\

SELECT last_name FROM employees WHERE last_name LIKE "_\_%";

between and

#案例:查询员工编号100~120的员工信息

SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;

in

#案例:查询员工工种编号是 IT_PROG、AD_VP、AD_PRES的一个的员工名和工种编号

SELECT last_name, job_id FROM employees WHERE job_id IN('IT_PROG','AD_VP','AD_PRES');

is null

#案例:查询没有/有奖金的员工名和奖金率

SELECT last_name,commission_pct FROM employees WHERE commission_pct IS NULL;

SELECT last_name,commission_pct FROM employees WHERE commission_pct IS NOT NULL;

安全等于 <=>

#可判断null和普通类型的值

#案例:查询工资为12000的员工信息

SELECT last_name,salary FROM employees WHERE salary <=> 12000;

经典面试题

试问:select * from employees;和
select * from employees where last_name like “%%”;
结果是否一样?
答:字段值有null则不一样!

进阶3:排序查询

/*
语法:
select 查询列表
from 表名
(where 筛选条件)
order by 排序列表 (asc|desc);

特点:
	asc升序 desc降序 不写则默认升序
	order by 子句支持多字段,表达式,函数,别名
	order by 子句一般放在最后面,limit子句除外
*/
#案例1:查询员工信息,工资从高到低

SELECT * FROM employees ORDER BY salary DESC;

#案例2:查询部门编号>=90的员工信息,入职时间先后排序,【筛选后排序】

SELECT * FROM employees WHERE department_id >= 90 ORDER BY `hiredate`; 

#案例3:按年薪高低显示员工信息和年薪,【按表达式排序】

SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪 
FROM employees
ORDER BY  salary*12*(1+IFNULL(commission_pct,0));

#案例4:【按别名排序】

SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪 
FROM employees
ORDER BY  年薪;

#案例5:按姓名长度排序显示员工姓名和工资,【按函数排序】

SELECT LENGTH(last_name) 字节长度,last_name,salary
FROM employees
ORDER BY LENGTH(last_name);

#案例6:员工信息,先按工资,再按编号,【按多个字段排序】

SELECT * FROM employees
ORDER BY salary DESC,`employee_id`;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值