/*
基础语法:
select 查询列表 from 表名;
特点:
1.查询列表可以是:字段,常量值,表达式,函数
2.查询的结果是一个虚拟的表格
*/
--eg1:字段
select * from employees;
--eg2:常量值
select 100;
select 'test';
--eg3:表达式
select * from 100*2;
--eg4:函数
select VERSION();
1.1 取别名
/*
取别名(两种方式):
1.as关键字,
2.空格
*/
--第一种方式:
select last_name as 姓,first_name as 名 from employees;
--第二种方式:
select last_name 姓,first_name 名 from employees;
--案例1:查询salary,显示结果为out put(需要使用双引号,单引号也行,MySQL建议使用双引号)
select salary as "out put" from employess;
1.2 去重
/*
distinct关键字:去重
*/
--eg:查询员工表中涉及到的所有的部门编号
select distinct department_id from employess;
/*
分类:
1.按照条件表达式筛选
简单条件运算符:> < = != <> >= <=
2.按照逻辑表达式筛选
逻辑运算符:&& || ! and or not (作用于连接条件表达式)
&& 或 and:两个条件都为true,结果为true,否则为false
|| 或 or:只要一个条件为true,结果为true,否则为false
! 或 not:连接条件本身为false,结果为true,否则为false
3.模糊查询
like
between and
in
is null
*/
2.1 按照条件表达式筛选
--eg1:查询工资>12000的员工信息
select * from employees where salary > 12000;
--eg2:查询部门编号不等于90的员工名和部门编号
select last_name,department_id from employees where department_id != 90;
或者
select last_name,department_id from employees where department_id <> 90;
或者
select last_name,department_id from employees where department_id > 90 or dempartment_id < 90;
2.2 按照逻辑表达式筛选
--eg1:查询工资在10000到20000之间的员工名,工资以及奖金
select last_name,salary,commission_pct where salary >= 10000 and salary <= 20000;
--eg2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
select * from employees where not(department_id >= 90 and department_id <= 110) or salary >= 15000;
2.3 模糊查询-like
/*
特点:一般和通配符搭配使用
通配符:
%:任意多个字符,包含0个字符
_:任意单个字符
*/
--eg1:查询员工名中包含a的员工信息
select * from employees where last_name like '%a%';
或
/*使用concat函数模糊匹配-不推荐*/
select * from employees where last_name like concat("%","a","%");
--eg2:查询员工名中第三个字符为s,第五个字符为i的员工信息
select * from employees where last_name like '__s_i%';
--eg3:查询员工名中第二个字符为_的员工名
select last_name from employees where last_name like '_\_%';
/*
escape关键字:
指定一个字符代替"\"的使用
*/
select last_name from employees where last_name like '_$_%' escape '$';
2.4 模糊查询-between and
/*
特点:
1.使用between and可以提高语句的简洁度
2.包含临界值
3.两个临界值不能调整顺序
*/
--eg1:查询员工编号在100到120之间的员工信息
select * from employees where employee_id >= 100 and employees <= 120;
或
/*这两条语句是等价的*/
select * from employees where employee_id between 100 and 120;
2.5 模糊查询-in
/*
含义:判断某字段的值是否属于in列表中的某一项
特点:
1.提高了语句的简洁度
2.in列表中的值类型必须一致或者兼容
3.in类表中不支持通配符
*/
--eg1:查询员工的工种编号是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");
2.6 模糊查询-is null
/*
is null 或 is not null:可以判断null值
= 或 <>:不能用于判断null值
<=>:安全等于即可判断null值,又可判断普通类型的数值
*/
--eg1:查询没有奖金率的员工名和奖金率
select last_name,commission_pct from employees where commission_pct is null;
--eg2:查询有奖金率的员工名和奖金率
select last_name,commission_pct from employees where commission_pct is not null;
--eg3:查询工资为12000的员工名和奖金率(错误查询语句示例)
select last_name,commission_pct from employees where salary is 12000;
/*使用<=>*/
--eg4:查询没有奖金率的员工名和奖金率
select last_name,commission_pct from employees where commission_pct <=> null;
--eg5:查询工资为12000的员工名和奖金率
select last_name,commission_pct from employees where salary <=> 12000;
/*
ifnull(parm1,parm2)函数:
如果第一个参数为null,则返回第二个参数的值
*/
--eg6:显示出first_name,last_name,job_id,commission_pct列,各个列之间用逗号连接,列头显示成out_put
select concat(first_name,"_",last_name,"_",job_id""_",ifnull(commission_pct,0)) as out_put from employees;
3 排序查询
/*
语法:
select
查询列表
from 表名
where
筛选条件 order by 排序的字段或者表达式
特点:
1.asc代表升序,可以省略
2.desc代表的是降序
3.order by子句可以支持单个字段,别名,表达式,函数,多个字段
4.order by子句在查询语句的最后面,除了limit子句
*/
-- 一:按单个字段排序
select * from employees order by salary desc;
--案例1:查询部门编号>=90的员工信息,并按员工编号降序
select * from employees where department_id >= 90 order by employee_id desc;
-- 二:按表达式排序
--案例2:查询员工信息,并按年薪降序
select *,salary*12*(1+ifnull(commission_pct,0)) as 年薪 from employees order by salary*12(1+ifnull(commission_pct,0)) desc;
-- 三:按别名排序
--案例3:查询员工信息,并按年薪升序
select *,salary*12(1+ifnull(commission_pct,0)) as 年薪 from employees order by 年薪 asc;
-- 四:按函数排序
--案例4:查询员工名,并且按照名字的长度降序
select last_name,length(last_name) from employees order by length(last_name) desc;
select last_name,length(last_name) name_len from employees desc;
-- 五:按多个字段排序
--案例5:查询员工信息,要求先按工资降序,再按员工编号升序
select * from employees order by salary desc,employee_id asc;