#进阶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');