1.concat连接字段查询 , Ifnull(字段名,0):如果字段为null,则强制转换为0
<> 就是!=
select concat(name,"-",gender) from users;
2.模糊查询like, between and, in ,is null
通配符 %代表匹配任意个字符(包含0个字符),_代表匹配一个字符
案例1:查询员工名称中包含字符a的员工信息
select * from employees where username like ‘%a%’;
案例2:查询员工名称中第三个字符为a,第5个字符为e的员工信息
select * from employees where username like ‘__a_e%’;
案例3:查询员工名称中第二个字符为_的员工信息
select * from employees where username like ‘_\_%’;
select * from employees where username like ‘_$_%’ ESCAPE ‘$’;#指定$为转义符
案例4:查出员工编号在100到120之间的员工信息
select * from employees where id >=100 and id <=120;
select * from employees where id between 100 and 120;
between and注意:
1.包含临界值
2.临界值顺序不能调换
案例5:查出员工编号为100或者120的员工信息
select * from employees where id =100 or id =120;
select * from employees where id in(100,120);
案例6:查询员工编号为null的记录
select * from employees where id is null; #注意不能用=
查询员工编号不为null的记录
select * from employees where id is not null;
案例7:
select * from employees;
select * from employees where id like ‘%%’;
select * from employees where address like ‘%%’;
如果address有null值,则上面三条语句查询出的记录是不一样的,否则一样
3. 常见函数
select trim(a from “aaabaaacaaa”); #output: baaac
select lpad(a,3,0);# output: 00a
select rpad(a,3,0);# output: a00;
select now();
select curdate();
select year(now());
select datediff(d1,d2);
instr:获取子串第一次出现的索引
str_to_date:字符转日期
date_format:日期转字符
4.分组查询(默认忽略null)
案例:查询哪个部门的员工个数>2,having关键字添加分组后结果的筛选条件,where是在分组前筛选
select count(*),department_id from employees group by department_id Having count(*)>2;
5.多表查询
如果给表起了别名,那原始表名就不被认识了,因为from语句是先执行的
sq192语法
内连接:等值连接,非等值连接,自连接(查交集)
n表等值连接,必须有n-1个连接条件
自连接案例:查询员工名和上级名:
select e.employee_id, e.name, m.employee_id, m.name from employees
as e, employees as m
where e.manager_id = m.employee.id
sql199语法
外连接:左外,右外,全外(sql不支持);交叉连接)
select 查询列表
from 表1 别名【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】
分类:
内连接:inner
左外:left 【outer】
右外:right 【outer】
全外:full 【outer】
交叉连接: cross join等价于sql192语法的笛卡尔乘集结果,count=表1记录数*表2记录数
sql199语法的内连接和sql192语法的内连接效果一样,写法格式不一样,推荐用sql199语法 ,
连接条件和筛选条件分离,可读性更强
sql199外连接特点:
1. 外连接查询结果为主表中的所有记录=内连接结果+主表中有而从表中没有的记录
如果从表中有和它匹配的,则显示匹配的值;如果从表中没有和它匹配的,则显示null
2.左外连接,left outer join左边是主表;右外连接,right outer join右边是主表
3.左外和右外交换两表顺序,可以实现同样的效果
4.全外连接=内连接结果+表1中有但表2中没有的+表2中有但表1中没有的,mysql不支持这种操作
6 子查询(select嵌套)
定义:标量子查询(结果1行1列)
列子查询(结果1列多行)
行子查询(结果1行多列)
表子查询(结果为多行多列)
按子查询出现的位置:
select后面只支持标量子查询
from,exists后面支持表子查询
where或having后面支持除表子查询以外的三种查询,用得比较多的是标量和列子查询
特点:1.子查询放在小括号内,2.子查询一般放在条件右侧 3.标量配合<>=用 4.列子配合in,any/some(min or max),all(max or min
7 union联合查询
查询语句1
union 默认去重
查询语句2
union all(加上all以后不去重)
查询语句3
。。。。。
应用场景:要查询的结果来自多个表,且多个表没有直接的连接关系,但查询的信息一致时
注意事项:要求查询列数一致,类型,顺序一致