#进阶1: 基础查询
/*
语法:
select 查询列表
from 表名;
特点:
1,查询列表可以是:表中的字段,常量值,表达式,函数
2,查询的结果是一个虚弥表格
*/
#打开这个库
USE myemployees;
#显示表departments的结构
DESC departments;
#1.查询表中的单个字段
SELECT last_name FROM employees;
#2.查询表中的多个字段
SELECT last_name,salary,email FROM employees;
#查询表中所有字段"双击"
#方式一
SELECT
`employee_id`,
`first_name`,
`last_name`,
`email`,
`phone_number`,
`job_id`,
`salary`,
`commission_pct`,
`manager_id`,
`department_id`,
`hiredate`
FROM
employees;
#方式二
SELECT * FROM employees;
#4.查询常量值
SELECT 100;
SELECT 'john';
#5.查询表达式
SELECT 100%98;
#6.查询函数
SELECT VERSION();#版本号
#7.起别名
/*
①方便理解
②如果要查询的字段有重名的情况,使用别名可以区分开来
*/
#方式一:使用AS
SELECT 100%98 AS 结果;
SELECT last_name AS 姓,first_name AS 名 FROM employees;
#方式二:使用空格
SELECT last_name 姓,first_name 名 FROM employees;
#案例:查询salary, 查询的结果为 out put
SELECT salary AS "out put" FROM employees;
SELECT salary "out put" FROM employees;
#8.去重
#案例: 查询员工表中涉及到的所有的部门编号
SELECT DISTINCT department_id FROM employees;
#9.+号的作用
/*
仅仅只有一个功能: 运算符
select 100+90; 两个操作数都为数值型,则做加法运算
select '123'+90;只要其中一方为字符型,试图将字符型转换为数值型
如果转换成功,则继续做加法运算
select 'john'+90; 如果转换失败,将字符型数字转换为零
select nu11+10; 只要其中一方为nu11,则结果肯定为nu11
*/
#案例: 查询员工名和姓连接成一个字段,并显示为 姓名
# CONCAT() 拼接函数
SELECT CONCAT('a','b','c') AS 结果;
SELECT
CONCAT(last_name,first_name) AS 姓名
FROM
employees;
#案例:显示出表employees的全部列,各个例之间用逗号连接,列头显示成OUT_PUT
SELECT IFNULL(commission_pct,0) AS 奖金率,#如果commission_pct有null则用0代替
commission_pct
FROM
employees;
#------------------------------------------------------------
SELECT
CONCAT(`first_name`,',',`last_name`,',',`email`,',',
`phone_number`,',',`job_id`,',',IFNULL(commission_pct,0)) AS OUT_PUT
FROM
employees;
-------------------------------------------------------------------------------------------------------------------
#进阶2: 条件查询
/*
语法:
select
查询列表
from
表名
where
赛选条件;
分类:
一,按条件表达式赛选
简单条件运算符: > < = != <> >= <=
二,安逻辑表达式筛选
逻辑运算符:
&& || !
and or not
且 &&和and: 两个条件都是为1,结果为1,反之为0;
或 ||或or: 只要有一个条件为1,结果为1,反之为0;
非 !或not: 如果连接的条件本身为0,结果为1,反之为0:
三,模糊查询
like
between and
in
is null
*/
#一,按条件表达式筛选
#案例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 AS 名,
salary,
commission_pct
FROM
employees
WHERE
salary>=10000 AND salary<=20000;
#案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
SELECT
*
FROM
employees
WHERE
NOT(department_id>=90 AND department_id<=100) OR salary>15000;
#三,模糊查询
/*
like
特点:
①一般和通配符使用
通配符:
% 任意多个字符,包含0个字符
_任意单个字符
between and
in
is null|is not null
*/
#1.案例1:查询员工名中包含字符a的员工信息
SELECT
*
FROM
employees
WHERE
last_name LIKE '%a%'; #%表示任意字符
#案例2:查询员工中第三个字符为N,第五个字符为L的员工名和工资
SELECT
last_name,
salary
FROM
employees
WHERE
last_name LIKE '__n_l%';
#案例3:查询员工名中第二个字符为_的员工
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_$_%' ESCAPE '$'; #ESCAPE 将$设为转义字符
#2.between and
#①使用berweem 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
/*
含义:判断某字段的值是属于in列表中的某一项
特点:
①使用in提高语句整洁度
②in列表的值类型必须一直或兼容
*/
#案例:查询员工的工种编号是 IT_PROG,AD_VP,AD_PRES中的一个员工名和工种编号
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = 'IT_PROG' OR job_id = 'AD_VP' OR job_id = 'AD_PRES';
#------------------------------
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN ('IT_PROG','AD_VP','AD_PRES');
#4.is null
/*
=或<>不能用于判断null值
is null或is not null 可以判断null的值
*/
#案例1: 查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL;
#案例1: 查询有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NOT NULL;
#安全等于 <=>
#案例1: 查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=>NULL;
#案例1: 查询工资为12000的员工信息
SELECT
last_name,
salary
FROM
employees
WHERE
salary<=> 12000;
#IS NULL PK <=>
IS NULL: 仅仅可以判断null值,可读性较高
<=>: 既可以判断null值,又可以判断普通的数值,可读性
#-------------测试-------------
#1.查询工资大于12000的员工姓名和工资
SELECT
last_name,
salary
FROM
employees
WHERE
salary > 12000;
#2. 查询员工号为176的员工的姓名和部门号和年薪
SELECT
last_name,
department_id,
employee_id,
salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
employees
WHERE
employee_id = 176;
#3.选择工不在5000到12000的员工姓名和工资
SELECT
last_name,
salary
FROM
employees
WHERE
salary > 12000 OR salary < 5000;
#4.选择员工姓名第三个字母都是a的员工性名
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '__a%';
#5.查询没有奖金,且工资小于18000的salary,last_name
SELECT
salary,
last_name
FROM
employees
WHERE
commission_pct IS NULL AND salary<18000;
#6.查询employees表中,job_id不为 'IT' 或者 工资为12000的员工信息
SELECT
*
FROM
employees
WHERE
job_id<>'IT' OR salary = 12000;
#7.查询部门departments表的结构,查询效果如下
DESC departments;
#8.查询部门departments设计到那类位置编号
SELECT DISTINCT location_id
FROM departments;