一:基础查询
#进阶一:基础查询/*语法: select 查询列表 from 表名;特点: 1.查询的结果集是一个虚拟表 2.select类似于System.out.println(); 3.执行顺序: 先执行from子句; 再执行select子句。 4.查询列表可以是:字段、表达式、常量、函数等*/#一:查询常量SELECT 100;#二:查询表达式SELECT 100%3;#三:查询单个字段(``是着重号,通常在加在列名和表名上,为了和关键字区分)SELECT last_name FROM employees;SELECT `last_name` FROM `employees`;#四:查询多个字段SELECT `employee_id`,`first_name`,`email` FROM employees;#五:查询所有字段(结果集中的列名顺序和原表相同)SELECT * FROM employees;#六:查询函数(调用函数、获取返回值)SELECT DATABASE();SELECT VERSION();SELECT USER();#七:起别名 #方式一:使用as关键字 SELECT last_name AS 姓 FROM employees; SELECT last_name AS '姓' FROM employees; SELECT last_name AS "姓" FROM employees; SELECT last_name AS '姓 名' FROM employees;#此时必须要加''或"" SELECT last_name AS "姓 名" FROM employees; #方式二:使用空格 SELECT first_name "名" FROM employees;#八:查询first_name和last_name拼接成的全名,最终起别名为“姓名”。(使用concat拼接函数)(拼接的时候,如果一个字段为null,则全都为null,此时可以使用ifnull()函数避免此状况)SELECT CONCAT(last_name,last_name) AS "姓 名" FROM employees;/*JAVA中“+”的作用:加法运算、拼接符mysql中“+”的作用:加法运算*/#九:distinct关键字的使用(去除重复数据)SELECT DISTINCT department_id FROM employees;#十:查看表结构DESC employees;SHOW COLUMNS FROM employees;#十一:ifnull(参数一,参数二)函数。(如果“参数一”为null,则显示“参数二”,如果“参数一”不为null,则显示“参数一”)SELECT commission_pct,IFNULL(commission_pct,'空') FROM employees;
二:条件查询
#进阶二:条件查询
/*
语法:
select 查询列表
from 表名
where 筛选条件;
执行顺序:
from子句
where子句
select子句
特点;
1.按关系表达式筛选
关系运算符:> < >= <= = <>
补充:<>在SQL中是不等于的意思,也可以使用!=,但不建议
2.按逻辑表达式筛选
逻辑运算符:and or not
补充:也可以使用%%、||、!,但不建议
3.模糊查询
like
in
between and
is null
*/
#一:按关系表达式筛选(查询部门编号不是100的员工信息)
select *
from employees
where department_id <> 100;
#二:按逻辑表达式筛选(查询部门编号不是50~100之间的员工信息)
#方式一:
select *
from employees
where department_id < 50 or department_id > 100;
#方式二:(语义性更强)
SELECT *
FROM employees
WHERE not(department_id >= 50 and department_id <= 100);
#三:模糊查询
#3.1:like \ not like
/*
功能:一般和通配符搭配使用,对字符型数据进行部分匹配查询。
常见的通配符:
_ 任意单个字符
% 任意多个字符,支持0-多个
*/
#案例一:查询姓名中包含字符a的员工信息
select *
from employees
where last_name like '%a%';
#案例一:查询姓名中第二个字符为"_"的员工信息(使用\转义字符)
SELECT *
FROM employees
WHERE last_name LIKE '_\_%';
#或者(ESCAPE:将XXX设置为转义字符)(推荐使用)
SELECT *
FROM employees
WHERE last_name LIKE '_$_%' escape '$';
#3.2:in / not in
/*
功能:查询某字段的值是否属于指定的列表之内
in(常量值1,常量值……)
*/
#案例一:查询部门编号是30/50/90的员工名
select last_name
from employees
where department_id in(30,50,90);
#3.3:between and / not between and
/*
功能:判断某个字段的值是否介于XXX之间
*/
#案例一:查询部门编号是30~90的员工名
select last_name
from employees
where department_id between 30 and 90;#30和90的顺序不能颠倒
#案例二:查询年薪不是100000到200000之间的员工姓名、工资、年薪
select last_name,salary,salary*12*(1+ifnull(commission_pct,0)) as '年薪'
from employees
where salary*12*(1+IFNULL(commission_pct,0)) not between 100000 and 200000;
#3.4:is null / is not null
#案例一:查询没有奖金的员工信息
select *
from employees
where commission_pct is null;
/*
说明:
commission_pct = NULL;是错误的,因为:
= 只能判断普通的内容
IS 只能判断NULL值
<=> 安全等于,既能判断普通内容,又能判断NULL值
*/
三:排序查询
#进阶三:排序查询
/*
语法:
select 查询列表
from 表名
【where 筛选条件】
order by 排序列表
执行顺序:
from子句
where子句
select子句
order by子句
特点:
1.排序列表可以是单个字段、多个字段、表达式、别名、函数、列数、以及以上的组合
2.升序,通过asc,默认行为
降序,通过desc
*/
#一:按单个字段排序
#案例一:将员工编号大于120的员工信息进行工资的升序
SELECT *
FROM employees
WHERE employee_id > 120
ORDER BY salary ASC;
#二:按表达式排序
#案例一:对有奖金的员工,按年薪降序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) AS '年薪'
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
#三:按别名排序
#案例一:对有奖金的员工,按年薪降序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) AS '年薪'
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY '年薪' DESC;
#四:按函数的结果排序
#案例一:按姓名的字数长度进行升序
SELECT last_name
FROM employees
ORDER BY LENGTH(last_name) ASC;
#五:按多个字段排序
#案例一:查询员工的姓名、工资、部门编号,先按工资升序,再按部门编号降序
SELECT last_name,salary,department_id
FROM employees
ORDER BY salary ASC,department_id DESC;
#六:按列数排序(补充选学)
SELECT *
FROM employees
ORDER BY 2;