#查询employees表中所有字段select*from employees;#查询employees表中的first_name字段select first_name from employees;#查询employees表中的多个字段select first_name,salary FROM employees;#查询常量值select100+123;select"zhaoxr"#查询表达式select100*98;#查询函数select version();#起别名select98*98as result;select last_name as"姓",first_name as"名"from employees;select last_name "姓",first_name "名"from employees;#去重selectdistinct department_id from employees;# +的作用select100+99;select"123"+99;select"zhaoxr"+"linux";selectnull+16;# concat函数select concat(last_name," ",first_name)"姓名"from employees;
类似于Java中 :System.out.println(要打印的东西);
特点:
① 通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
② 要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数
2.条件查询
条件查询:根据条件过滤原始表的数据,查询到想要的数据
语法:
select 要查询的字段|表达式|常量值|函数
from 表
where 条件 ;分类:
一、条件表达式示例:salary>10000条件运算符:> < >= <= = != <>二、逻辑表达式
示例:salary>10000 && salary<20000逻辑运算符:and(&&):两个条件如果同时成立,结果为true,否则为falseor(||):两个条件只要有一个成立,结果为true,否则为falsenot(!):如果条件成立,则not后为false,否则为true三、模糊查询
like
between and
in
is null | is not null通配符:
%:任意多个字符,包含0个字符
_:单个字符
\:转义字符,"\_"代表字符_示例:last_name like 'a%'
# 查询工资大于等于12000的员工ID,姓名和薪水select employee_id,CONCAT(last_name," ",first_name)as"姓名",salary
from employees
where salary>=12000;# 查询部分编号不等于90的员工姓名和部门编号select CONCAT(last_name," ",first_name)as"姓名",department_id
from employees
where department_id!=90;#查询工资在10000到20000之间的员工ID,姓名和工资select employee_id,concat(last_name," ",first_name)as"姓名",salary
from employees
where salary>=10000and salary<=20000;#查询员工姓中含有a的员工信息select*from employees
where last_name like"%a%";#查询员工姓第三个字母是l,第五个是e的员工信息select*from employees
where last_name like"__l_e%";#查询员工姓的第二个字符是_的员工信息select*from employees
where last_name like"_\_%";#查询员工ID在100到200之间的员工信息,包含100和200select*from employees
where employee_id between100and200;#查询工种编号是IT_PROG,PU_CLERK,ST_CLERK的员工信息select*from employees
where job_id in("IT_PROG","PU_CLERK","ST_CLERK");#查询奖金率为null的员工信息select*from employees
where commission_pct isnull;
3.排序查询
语法:
select要查询的东西
from表
where 条件order by 排序的字段|表达式|函数|别名 【asc|desc】
#length函数|查询员工的姓,以及姓的长度select last_name,length(last_name)from employees;#concat函数|查询员工的姓名select concat(last_name," ",first_name)as"姓名"from employees;#upper函数和lower函数|查询员工的姓名,姓大写,名小写select concat(upper(last_name)," ",lower(first_name))as"姓名"from employees;#substr截取函数|注意:截取函数从1开始#返回"i love china"中的"china"select substr("i love china",8);#返回"我爱你中国"中"中国"select substr("我爱你中国",4);#返回"i love china"中的"love"select substr("i love china",3,4);#instr返回子串第一次出现的索引|返回"i love china"中的'c'在第几个位置select instr("i love china","c");#trim去空格|删除" love "左右的空格select trim(" love ");#trim去除指定的字符|删除"aaaaaloveaaaa"左右的'a'select trim('a'from"aaaaaaaloveaaaaa");#lpad填充|使用'0'填充字符"我爱你",总字符数10个,填充结果为"0000000我爱你"select lpad("我爱你",10,'0');#replace替换|将"我爱china",替换为"我爱中国"selectreplace("我爱china","china","中国");
if 处理双分支if(判断条件,真就执行此处,假就执行此处)case 要判断的字段或者表达式when 常量1 then 要显示的值1或者语句1when 常量2 then 要显示的值2或者语句2。。。。。else 要显示的值n或者语句nendcase when 条件1 then 要显示的值1或者语句1when 条件2 then 要显示的值2或者语句2。。。。。else 要显示的值n或者语句nend
语法:
select 查询的字段,分组函数
from 表
group by 分组的字段特点:
1、可以按单个字段分组
2、和分组函数一同查询的字段最好是分组后的字段
3、分组筛选针对的表 位置 关键字
分组前筛选: 原始表 group by的前面 where
分组后筛选: 分组后的结果集 group by的后面 having4、可以按多个字段分组,字段之间用逗号隔开
5、可以支持排序
6、having后可以支持别名
#查询每个部门的平均工资selectavg(salary),department_id
from employees
groupby department_id;#查询每个工种的最高工资selectmax(salary),job_id
from employees
groupby job_id;#查询工资大于10000的每个工种的最高工资selectmax(salary),job_id
from employees
where salary>10000groupby job_id;#查询哪个部门员工的个数大于2selectcount(*),department_id
from employees
groupby department_id
HAVINGcount(*)>2;#按员工的姓名长度分组,查询每一组员工的个数,筛选员工个数大于5的有哪些selectcount(*),length(last_name)as"len_name"from employees
groupby length(last_name)havingcount(*)>5;#查询每个部门每个工种的平均工资selectavg(salary),department_id,job_id
from employees
groupby department_id,job_id;#查询每个部门每个工种的平均工资,并按照降序排列selectavg(salary),department_id,job_id
from employees
groupby department_id,job_id
orderbyavg(salary)desc;