1~27 #进阶1:基础查询 28~38排序查询

#进阶1:基础查询
/*
语法:
select 查询列表
from 表名

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

#1.查询表中的单个字段
SELECT last_name FROM employees;

#2.查询表中多个字段
SELECT last_name,salary,email FROM employees;

#3.查询表中所有字段
SELECT * FROM employees;

#4.查询常量值
SELECT 100;
SELECT 'john';

#5.查询表达式
SELECT 100%98;

#6.查询函数
SELECT VERSION();

#7.起别名
/*
1.便于理解.
2.如果要查询的字段有重名的情况,使用别名可以区分开来.
*/
#方式1:使用as
SELECT 100%98 as 结果;
SELECT last_name as 姓,first_name as 名 from employees;

#方式2:使用空格
SELECT last_name 姓,first_name 名 from employees;

#案例:查询salary,显示结果有特殊符号(空格)
SELECT salary as 'out put' from employees;

#8.去重
#案例:查询员工表中涉及到的所有员工编号
SELECT DISTINCT department_id from employees;

/*
java中的+号:
1.运算符,两个操作数都为数值型。
2.连接符,只要有一个操作数为字符串。

MySQL中的+号:
仅仅只有一个功能:运算符

select 100+90;
SELECT '123'+'90';其中一方为字符型,试图将字符型转换成数值型;如果转换成功,则继续做加法运算.
SELECT 'john'+90;转换失败,则将字符型数值转换为0.
SELECT null+10;  只要其中一方为null,则结果肯定为null.
*/

#9.+的作用
#案例:查询员工名和姓连接成一个字段,并显示为 姓名
SELECT CONCAT('a','b','c') as 结果;
SELECT CONCAT(last_name,first_name) as 姓名 from employees;



#以下为练习:
#1. 下面的语句是否可以执行成功
select last_name , job_id , salary as sal
from employees;

#2. 下面的语句是否可以执行成功
select * from employees

#3. 找出下面语句中的错误
select employee_id , last_name,
salary * 12 “ANNUAL SALARY”
from employees;
#,以及“

4. 显示表 departments 的结构,并查询其中的全部数据
desc departments;
SELECT * from departments;

5. 显示出表 employees 中的全部 job_id(不能重复)
select DISTINCT job_id from employees;

6. 显示出表 employees 的全部列,各个列之间用逗号连接,列头显示成 OUT_PUT

#IFNULL(expr1,expr2)    expr1:可能出现null的值;expr2:出现null值返回的值.

SELECT IFNULL(commission_pct,0) as 奖金率,     
		   commission_pct 
FROM employees;
#进阶2:条件查询 
/*
语法:
			SELECT 
							查询列表
			from    
			        表名 
			WHERE 
						 筛选条件
分类:
			一.按条件表达式筛选 
			条件运算符:> < = != <> >= <=
			二.按逻辑表达式筛选
			逻辑运算符;
			作用:用于连接条件表达式 
						&& || !
						and or not 
			&& 和 and:两个条件都为true,结果为true,反之为false
			||或or:只要有一个条件为true,结果为true,反之为false
			!或not:如果连接的条件本身为false,结果为true,反之为false
			三.模糊查询
						LIKE
					  BETWEEN AND
						IN
						ISNULL 
					 
*/
#一.按条件表达式筛选 
#案例1:查询工资>12000的员工信息 
SELECT * from employees where salary>12000;

#案例2:查询部门编号不等于90号的员工名和部门编号 
SELECT last_name,department_id from employees where department_id<>90;

#按逻辑表达式筛选 

#案例1:查询工资在10000和20000之间的员工名、工资以及奖金 
SELECT
			last_name,salary,commission_pct
FROM 
			employees
WHERE 
		  salary>=10000&&salary<=20000;

#案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
SELECT *
FROM employees
WHERE department_id<=90 or department_id?=110 or salary>=15000;

#三.模糊查询 
/*
like 
特点:1.一般和通配符搭配使用
		 2.通配符:% 任意多个字符,包含0个字符
		 3.️_任意单个字符
%任意多个字符

BETWEEN AND
特点:1.使用between and可以提高语言的简洁度
     2.包含临界值
		 3.两个临界值不要调数据
		 
IN
含义:判断某字段的值是否属于in列表某一项 
特点:1.使用in提高语句简洁度
		 2.in列表的值类型必须一致或兼容
		 3.不可以用通配符
		 
is NULL || IS NOT NULL
  =或<>不能判断null值
  is NULL 或 is not null可以判断null值


*/




#1.like 
#案例1:查询员工名中包含字符a的员工信息 
SELECT * FROM employees where last_name LIKE '%a%';

#案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
SELECT last_name,salary FROM employees WHERE last_name LIKE '__n_l%';

#案例3:查询员工名中第二个字符为_的员工名(转义字符)
SELECT last_name FROM employees WHERE last_name LIKE '_\_%';
#SELECT last_name FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';

#2.BETWEEN AND
#案例1:查询员工编号在100到120之间的员工信息
#SELECT * FROM employees WHERE employee_id>=100 AND employee_id<=120;
SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120; 

#3.IN
#案例:查询员工的工种名是:IT_PROG、AD_VP、ST_MAN员工名和工种编号
#SELECT last_name,job_id FROM employees WHERE (job_id='IT_PROG' OR job_id='AD_VP' OR job_id='ST_MAN');

#------------------------------------
SELECT last_name,job_id FROM employees WHERE job_id IN('IT_PROG','AD_VP','ST_MAN');

#is NULL
#案例1:查询没有奖金的员工名和奖金率 
SELECT last_name,commission_pct from employees WHERE commission_pct is not null;

#安全等于 <=>
SELECT last_name,commission_pct FROM employees WHERE commission_pct<=>null;
SELECT last_name,salary FROM employees WHERE salary<=>12000;


#is null pk <=>
#is NULL:仅仅可以判断null值,可读性较高,建议使用
#<=>:既可以判断null值,又可以判断普通的数值,可读性较低

#以下为练习:
#1. 查询工资大于 12000 的员工姓名和工资
SELECT last_name AS 姓名,salary AS 工资 FROM employees WHERE salary>12000;

#2. 查询员工号为 176 的员工的姓名和部门号和年薪
SELECT last_name as 员工姓名,department_id as 部门号,salary*12*(1+IFNULL(commission_pct,0)) as 年薪
FROM employees;

#3. 选择工资不在 5000 到 12000 的员工的姓名和工资
SELECT last_name as 员工姓名,salary as 工资 FROM employees  WHERE salary NOT BETWEEN 5000 and 12000;

#4. 选择在 20 或 50 号部门工作的员工姓名和部门号
SELECT last_name as 员工姓名,department_id AS 部门号 FROM employees where department_id in ('20','50');

#5. 选择公司中没有	奖金的员工姓名及 job_id
SELECT last_name,job_id FROM employees WHERE commission_pct is null;

#6. 选择公司中有奖金的员工姓名,工资和奖金级别
SELECT last_name,salary,commission_pct FROM employees WHERE commission_pct is not null;

#7. 选择员工姓名的第三个字母是 a 的员工姓名
SELECT last_name FROM employees WHERE last_name LIKE '__a%';

#8. 选择姓名中有字母 a 和 e 的员工姓名
SELECT last_name from employees WHERE last_name like '%a%e%' or last_name LIKE '%e%a%';

#9. 显示出表 employees 表中 first_name 以 'e'结尾的员工信息
SELECT * FROM employees WHERE first_name LIKE '%e';

#10. 显示出表 employees 部门编号在 80-100 之间 的姓名、职位
SELECT last_name,job_id FROM employees WHERE department_id BETWEEN 80 AND 100;

#11. 显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、职位#
SELECT last_name,job_id FROM employees WHERE manager_id in('100','101','110');

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值