一、条件查询
根据条件过滤来查询语句。
语法:
select xxx from xxxx where 条件;
SELECT * FROM employees WHERE salary >= 12000;
执行顺序是,先查询from,找到表,然后对虚拟的结果表进行where筛选,最后进行select。
在where语句中,有如下关系运算符及关键字:
- >、<、>=、<=、=(只需要一个)、<>(不等于,写!=也行)。
- AND、OR、NOT。
- BETWEEN...AND、IN、LIKE、IS NULL。(模糊查询)
# 1. 关系运算
SELECT * FROM employees WHERE department_id <> 100;
SELECT first_name,last_name FROM employees WHERE salary < 15000;
# 2. 逻辑运算
SELECT
first_name,
last_name,
department_id,
email
FROM
employees
WHERE NOT (
department_id >= 50
AND department_id <= 100
) ;
###
SELECT
*
FROM
employees
WHERE commission_pct > 0.03
OR (
employee_id >= 60
AND employee_id <= 110
) ;
# 模糊查询
/*
3. like
一般与通配符进行匹配,对字符型数据进行部分匹配查询
常见的通配符:_ 表示任意单个字符
% 表示任意多个字符(0个也行)
当要查询下划线时,不把它当做通配符时,需要加转义符'\'
同样可以使用sql语句设置某个字符为转义符,escape 'x'
*/
SELECT * FROM employees WHERE last_name LIKE '%a%'; #查找lastname中有a的数据
SELECT * FROM employees WHERE last_name LIKE '__e%';#查找lastname第三个字符为e的数据
SELECT * FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';
# 将'$'设置为转义符,查询时'$_'表示查询下划线。
/*
4. in
查询某字段的值,是否属于指定的列表之内。
a in (常量值1,常量值2,......) 查询a字段的值是否在几个常量值中
a not in ...是否不在...
*/
SELECT * FROM employees WHERE department_id IN (30,50,90);
SELECT * FROM employees WHERE job_id NOT IN ('SH_CLERK','IT_PROG');
/*
5. between and
判断某字段的值,是否在某个区间之内
也有not between and
*/
SELECT * FROM employees WHERE department_id BETWEEN 30 AND 90;
/*
6. is null/is not null
查询是不是null
*/
SELECT * FROM employees WHERE commission_pct IS NULL;
二、 排序查询
语法与上面的查询语句一样,后面加上order by (排序列表)即可。
select 查询列表 from 表名 (where 筛选条件可有可无) order by 排序列表
执行顺序是:
- 先进行from查询
- 然后where筛选
- 然后select查出来
- 最后order by进行排序
SELECT last_name,salary FROM employees ORDER BY salary;
/*
1.排序列表可以是单个字段、多个字段、别名、表达式、函数、列数(常量)、以及这几个的组合。
2.默认升序排序,asc
降序排序,使用desc
*/
SELECT * FROM employees ORDER BY salary ASC;
SELECT * FROM employees ORDER BY salary DESC;
# 使用别名"年薪"进行排序
SELECT
* , salary * 12 * (1+ IFNULL(commission_pct, 0)) 年薪
FROM
employees
ORDER BY 年薪 DESC ;
#函数LENGTH(xx),可以获取xx字符的长度
SELECT last_name FROM employees ORDER BY LENGTH(last_name) ;
#按照多个字段进行排序,先按照工资降序排序,同样工资的按照姓名长度升序
SELECT last_name,salary FROM employees ORDER BY salary DESC , LENGTH(last_name) ;
#按照选择的第2列,即email进行排序
SELECT first_name,email FROM employees ORDER BY 2 ;