**
基础查询
**
```sql
#1.显示常量
SELECT 100;
SELECT 'john';
#2.显示表达式
SELECT 98*23;
#3.显示函数(方法)
SELECT LENGTH('john');
SELECT VERSION();
#4.显示表中的字段
SELECT last_name FROM employees;
#5.显示表中的多个字段
SELECT `last_name`,`phone_number`,`first_name`,`salary`,`commission_pct`,`manager_id`
FROM `employees`;
#6.显示表中所有字段
SELECT * FROM employees;
#7.起别名
#方式一:
SELECT last_name AS 姓,first_name AS 名 FROM employees;
#方式二:
SELECT last_name 姓,first_name 名 FROM employees;
#示例:别名:out name
SELECT last_name
"out name" FROM employees;
#8.如何去重
#查询employees表中的所有部门编号
-- distinct
SELECT DISTINCT department_id FROM employees;
**
## 条件查询
**
```sql
#条件查询
/*
概念:根据指定的条件过滤出数据
语法:
select 字段 from 表名
where 条件;
分类:
1、按条件表达式查询
条件运算符:
> 、< 、>=、 <=、 =、 !=、 <>、 ,<=>安全等于,用于判断是否为null
2、按逻辑表达式查询
逻辑运算符:
and、&& 两个条件都为true,结果为true,反之为false
or、|| 两个条件只要有一个为true,结果为true,反之为false
not、! 如果连接的条件本身为false,结果为true,反之为false
//优先级
not > and > or
3、模糊查询:
*/
#一、按条件表达式查询
#案例1:查询月薪>5000的员工信息
SELECT * FROM employees WHERE salary>5000;
#案例2:查询月薪=12000的员工信息
SELECT * FROM employees WHERE salary=12000;
#案例 查询月薪不等于12000的员工信息
SELECT * FROM employees WHERE salary<>12000;
#案例3:查询没有奖金的员工名
SELECT last_name,commission_pct FROM employees
WHERE
commission_pct<=>NULL;
#二、按逻辑表达式查询
#案例1:查询月薪在5000到12000的员工工资和姓名
SELECT salary,last_name FROM employees WHERE
salary>= 5000 AND
salary<=12000;
#案例2:查询月薪不在5000到12000的员工工资和姓名
SELECT salary,last_name FROM employees WHERE NOT(salary>= 5000 AND
salary<=12000);
#案例3:查询部门编号=90 或 月薪>10000并且月薪<15000的员工信息
SELECT * FROM employees WHERE department_id = 90 OR (salary>10000 AND salary<15000);
-- 随机数
SELECT CEIL(RAND()*30);
**
模糊查询
**
#模糊查询
/*
1.like
一般搭配着通配符使用,用作字符型的判断
通配符:
% 任意多个字符
_ 任意单个字符
1
2.between
and
特点:在...之间
①等价于 使用 字段>=值1 and 字段<=值2
②两个临界值是包含的
[1,10]
③两个临界值不能颠倒顺序
3.in
特点:判断某个字段的值是否在某个列表内
in(值1,值2,...)
等价于
or
4.is null/is not null
*/
#1.like
#案例1:查询姓名中包含字符 e的员工信息
SELECT * FROM employees
WHERE last_name LIKE '%e%';
#案例2:查询姓名中第二个字符为e,第四个字符为a的员工信息
SELECT * FROM employees
WHERE last_name LIKE '_e_a%';
#案例3:查询姓名中第三个字符为_的员工信息
SELECT * FROM employees
WHERE last_name LIKE '__\_%';
// 斜线 \ ->
window 斜线
/ ->
Linux 斜线
// 反斜线
#ESCAPE 自定义 转移符
SELECT * FROM employees
WHERE last_name LIKE '__$_%' ESCAPE '$';
// ESCAPE '$'; 这句话是 让$ 拥有转义字符的形式和功能
UPDATE employees SET last_name='' '' WHERE
employee_id=100;
#2.between and
#案例1:显示出表employees部门编号在80-100之间 的姓名、职位
SELECT last_name,job_id,department_id
FROM employees
WHERE department_id BETWEEN
80 AND 100;
WHERE department_id BETWEEN
100 AND 80; ×
#等价于
SELECT last_name,job_id,department_id
FROM employees
WHERE department_id<=100 AND department_id>=80;
#3.in
#案例1:显示出表employees的manager_id
是 100,101,110 的员工姓名、职位
SELECT last_name,job_id,manager_id
FROM employees
WHERE manager_id IN(100,101,110);
#等价于
SELECT last_name,job_id,manager_id
FROM employees
WHERE manager_id=100 OR manager_id=101 OR manager_id = 110;
#案例2:查询
job_id 为AD_VP或ST_MAN或SA_MAN
SELECT last_name,job_id,manager_id
FROM employees
WHERE job_id IN('AD_VP','S_\_MAN');# ×
#4.is null / is not null
#案例1:查询没有奖金的员工
SELECT * FROM employees
WHERE commission_pct IS NULL;
#案例2:查询有奖金的员工
SELECT * FROM employees
WHERE commission_pct IS
NOT NULL;
SELECT * FROM employees
WHERE NOT(commission_pct IS NULL);
SELECT * FROM employees WHERE last_name IS NULL;
排序查询
#排序查询
/*
语法:
select 字段|表达式|常量
from 表
【where 条件】
order by 排序的字段;
1. 升序 asc
降序 desc
默认是 升序asc
2.可以按表达式、函数、别名、多个字段进行排序
3.一般来讲order by放到查询的语句的最后,在不使用分页的情况下
*/
#一、按单个字段进行排序
SELECT * FROM employees ORDER BY salary ;
SELECT * FROM employees ORDER BY salary DESC;
#二、按多个字段进行排序
SELECT * FROM employees
ORDER BY salary DESC,employee_id ASC;
#三、按表达式排序
#案例:按年薪降序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
#四、按别名排序
#案例:按年薪降序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 DESC;
#五、按函数排序
#案例:按姓名中的字节长度大小降序
SELECT last_name,LENGTH(last_name)
FROM employees
ORDER BY LENGTH(last_name) DESC;