进阶1:基础查询
语法:SELECT 要查询的东西【FROM 表名】;
,类似于Java中 :System.out.println(要打印的东西);
特点:
- 通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
- 要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数
示例:
- 查询单个字段
select 字段名 from 表名;
- 查询多个字段
select 字段名,字段名 from 表名;
- 查询所有字段
select * from 表名
- 查询常量
select 常量值;
注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要 - 查询函数
select 函数名(实参列表);
- 查询表达式
select 100/1234;
- 起别名
as
或者空格
- 去重
select distinct 字段名 from 表名;
+
作用:做加法运算
select 数值+数值;
直接运算
select 字符+数值;
先试 图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
select null+值;
结果都为null- 【补充】concat函数:拼接字符
select concat(字符1,字符2,字符3,...);
- 【补充】ifnull函数:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值
select ifnull(commission_pct,0) from employees;
- 【补充】isnull函数:判断某字段或表达式是否为null,如果是,则返回1,否则返回0
select isnull(commission_pct) from employees;
案例: 查询员工名和姓连接成一个字段,并显示为 姓名
SELECT CONCAT('a','b','c') AS 结果;
SELECT
CONCAT(last_name,first_name) AS 姓名
FROM
employees;
进阶2:条件查询
条件查询: 根据条件过滤原始表的数据,查询到想要的数据
语法:
select
要查询的字段|表达式|常量值|函数
from
表
where
条件 ;
分类:
- 条件表达式
条件运算符: >、 < 、>=、 <= 、=、 !=、 <>,<=>
#####案例1:查询工资>12000的员工信息
SELECT
*
FROM
employees
WHERE
salary>12000;
#####案例2:查询部门编号不等于90号的员工名和部门编号
SELECT
last_name,
department_id
FROM
employees
WHERE
department_id<>90;
- 逻辑表达式
逻辑运算符:
and(&&):两个条件如果同时成立,结果为true,否则为false
or(||):两个条件只要有一个成立,结果为true,否则为false
not(!):如果条件成立,则not后为false,否则为true
#####案例1:查询工资z在10000到20000之间的员工名、工资以及奖金
SELECT
last_name,
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<=110) OR salary>15000;
- 模糊查询
like
:一般搭配通配符使用,可以判断字符型或数值型。通配符:%任意多个字符,_任意单个字符
between and
:包含边界,两个临界值不要调换顺序
in
:判断某字段的值是否属于in列表中的某一项,注意:使用in提高语句简洁度;in列表的值类型必须一致或兼容;in列表中不支持通配符
is null /is not null
:用于判断null值,但是=或<>不能用于判断null值
#####案例1:查询员工名中包含字符a的员工信息
select
*
from
employees
where
last_name like '%a%';
#####案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
select
last_name,
salary
FROM
employees
WHERE
last_name LIKE '__e_a%';
#####案例3:查询员工名中第二个字符为_的员工名
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_$_%' ESCAPE '$'; #ESCAPE '$'表示 '$'后面的是转义字符
#####案例4:查询员工编号在100到120之间的员工信息
SELECT
*
FROM
employees
WHERE
employee_id >= 120 AND employee_id<=100;
#----------------------
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 120 AND 100;
#####案例5:查询员工的工种编号是 IT_PROG或者AD_VP或者AD_PRES的员工名和工种编号
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES';
#------------------
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN( 'IT_PROT' ,'AD_VP','AD_PRES');
#####案例6:查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL;
#####案例7:查询有奖金的员工名和奖金率
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;
#####案例2:查询工资为12000的员工信息
SELECT
last_name,
salary
FROM
employees
WHERE
salary <=> 12000;
is null 和 <=>比较
IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
<=> :既可以判断NULL值,又可以判断普通的数值,可读性较低
进阶3 排序查询
语法:
select
要查询的东西
from
表
where
条件
order by 排序的字段|表达式|函数|别名 【asc|desc】
特点:
- asc :升序,如果不写默认升序;desc:降序
- 排序列表 支持 单个字段、多个字段、函数、表达式、别名
- order by的位置一般放在查询语句的最后(除limit语句之外)
例子:
#1、按单个字段排序
#案例:查询员工信息 按工资降序
SELECT * FROM employees ORDER BY salary DESC;
#2、添加筛选条件再排序
#案例:查询部门编号>=90的员工信息,并按员工编号降序
SELECT *
FROM employees
WHERE department_id>=90
ORDER BY employee_id DESC;
#3、按表达式排序
#案例:查询员工信息 按年薪降序
SELECT *,salary*12*(1+IFNULL(commission_pct,0))
FROM employees
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
#4、按别名排序
#案例:查询员工信息 按年薪升序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 ASC;
#5、按函数排序
#案例:查询员工名,并且按名字的长度降序
SELECT LENGTH(last_name),last_name
FROM employees
ORDER BY LENGTH(last_name) DESC;
#6、按多个字段排序
#案例:查询员工信息,要求先按工资降序,再按employee_id升序
SELECT *
FROM employees
ORDER BY salary DESC,employee_id ASC;