### 单表查询
查询的时候,首先看是否关联和是否有未知的:
有关联且没有未知的:
方法一:可以直接使用关联,
方法二:可以使用子查询(通过关联id找)
有关联且是未知的(必须使用子查询):
先把未知的求出来与原表进行关联
没有关联且是未知的:
设置一个未知数,在求
首先看条件字段是否在一个表里,使不使用关联,再看有没有未知的,有未知的先求未知在与原表关联,没有未知用关联,或者子查询通过id
不得不子查询,如果有未知的(并且条件中字段在不同的表),先把未知的算出来作为一个表与原表型关联.如果有未知的,并且条件字段在一张表,不需要关联.
如果不是未知的可以直接连表,或者用子查询的时候先求关联id,然后通过id求值,最后合并,每一步都作为单表操作
sql 查询语句的完整语法:
"""select 字段 from .表 where .. group by(分组,分类) .. having(塞选) .. order by(排序) .. limit(条数) .."""
要看查询的是什么
一.where 条件的使用
"""功能: 对表中的数据进行筛选和过滤"""
"""
语法:
1.判断的符号:
= > >= < <= != <> 不等于
2.拼接条件的关键字
and or not
3.查询的区间范围值 between
between 小值 and 大值 [小值,大值] 查询两者之间这个范围内所有数据,左闭右闭区间
4.查询具体某个值的范围 in
in(1,2,3) 指定范围
5.模糊查询 like "%" "_" 通配符
like "%a" 匹配以a结尾的任意长度的字符串
like "a%" 匹配以a开头的任意长度的字符串
like "%a%" 匹配含有a字母的任意长度的字符串
like "_a" 个数一共2个字符,必须以a结尾,前面的字符随意
like "a__" 个数一共3个字符,必须以a开头,后面的字符随意
"""
# (1) 单条件的查询
# 查询部门是sale的所有员工姓名:
select emp_name from employee where post = "sale";
# (2) 多条件的查询
# 部门是teacher , 收入大于10000的所有数据
select * from employee where post="teacher" and salary > 10000;
# (3) 关键字 between .. and .. 在什么之间
# 收入在1万到2万之间的所有员工姓名和收入
select emp_name,salary from employee where salary between 10000 and 20000;
# 收入不在1万到2万之间的所有员工姓名和收入
select emp_name,salary from employee where salary not between 10000 and 20000;
# (4) null 关键字 在查询的时候,要用is进行判定,不要用=
其他空的可以用等号
# 查询post_comment 是空的所有数据
select * from employee where post_comment = null;
select * from employee where post_comment = '';
select * from employee where post_comment is null;
select * from employee where post_comment is not null;
update employee set post_comment = "" where id = 1
select * from employee where post_comment = "";
# (5) 关键字 in 在..之中 查询
# 查询收入是3000 ,4000 ,5000,8300 所有员工的姓名和收入
select emp_name,salary from employee where salary=3000 or salary=4000 or salary=5000 or salary=8300;
# 用in优化,在小括号里面具体指定某个值
select emp_name,salary from employee where salary in (3000,4000,5000,8300);
# 不在 not in ..
select emp_name,salary from employee where salary not in (3000,4000,5000,8300);
# (6) 模糊查询 like "%" "_" 通配符
# (1) "%" 通配符 以on结尾的员工名搜一下
select emp_name,age,post from employee where emp_name like "%on";
# (2) "_" 通配符 可以限定具体的长度
select emp_name,age,post from employee where emp_name like "a_e_";
# (7) concat (as 起别名) 拼接(将字段拼接)
select concat("姓名:",emp_name,"工资:",salary) as aa from employee;
# concat_ws(拼接的符号,参数1,参数2,参数3 ... )
select concat_ws(" : ",emp_name,salary) as bb from employee;
# 计算年薪 可以在mysql中使用四则运算符(+ - * /)
select concat_ws(" : ",emp_name,salary * 12) as cc from employee;
<