x and y => x(true) and y(true) <=> true x(false) and y(true) <=> false
or
x or y => x(true) or y(true) <=> true x(false) or y(true) <=> true x(false) or y(false) <=> false
xor
x xor y => x(true) xor y(true) <=> false x(false) xor y(true) <=> true x(false) xor y(false) <=> false
1 2
-- select 字段名/* from 表名[ where 条件表达式1 and/or/xor 条件表达式2]; select*from a where id=2and name='aa';
模糊匹配查询 like 与 操作符
操作符名称
释义
%
通配符,匹配所有
_
下划线表示匹配单个字符(两个下划线等于匹配两个字符)
\
转义符(如果内容包含操作符,则需要使用转义字符)
1 2 3 4 5 6 7
-- select 字段名/* from 表名 where 字段名[ not] like[ binary] '[操作符]模糊字段值[操作符]'; select*from stud where name like'_i%'; select*from stud where name notlike'%k__'; -- 添加binary区分大小写 select*from stud where name likebinary'Y'; -- 转义 select*from stud where name like'%\%%';
范围查询 between 用于查 date 日期类型
1 2 3
-- select 字段名/* from 表名 where 字段名 between 开始值 and 结束值; select*from stud where id between2and4; select*from stud wheretimewherebetween'2022-11-07'and'2022-11-09';
空/非空值查询 [not] null
1 2
-- select 字段名/* from 表名 where 字段名 is[ not] null; select*from stud where id isnotnull;
排序 order(默认升序 asc)
1 2
-- select 字段名/* from 表名 order by 字段名1[,字段名2..字段名n][ desc/asc]; select*from stud orderby id desc; -- 降序
替换查询 case when.. then..[ else..] end
1 2
-- select 字段名1[,字段名n], (case when 条件表达式1 then 替换值[ when 条件表达式n then 替换值n][ else 条件表达式x] end) as 别名 from 表名; select id, (casewhen c>100then'a'when c>200then'b'else'c'end) as c_cout from 表名;
运算符 +-*/%
1 2
-- select 字段名运算符字段名[ as 别名] from 表名 select price*num as p from 表名
分组函数 group_concat()、group by 和 统计查询 with rollup
1 2 3
-- select[ 字段名/*,] group_concat(字段名/*) from 表名 group by 字段名[, 字段名2...字段名n]; select gp,group_concat(name) from q_gp groupby gp; -- 单字段查询 select gp,id,group_concat(name) from q_gp groupby gp,id; -- 多字段查询
1 2
-- select[ 字段名/*,] group_concat(字段名/*) from 表名 group by 字段名[, 字段名2...字段名n] with rollup; select gp,group_concat(name) from q_gp groupby gp withrollup;
过滤分组 hiving
1 2 3
-- select 字段名x[,字段名1..字段名n] from 表名[ group by 字段名] having [聚合函数名(字段名x)]/字段名x 条件表达式 select gp from q_gp having gp>2; select id from q_gp havingavg(id)>=2;
聚合函数
方法
释义
max()
最大值
min()
最小值
count()
计数
sum()
列求和
avg()
列平均
1 2
-- select 聚合函数名(字段名)[, 聚合函数名(字段名2), 字段名n] from 表名[ 查询条件][ where 条件表达式]; select gp,count(name) from q_gp groupby gp;
6.13 更新数据
1 2 3 4 5 6
-- update 表名 set 字段名1=字段值1[,...,字段名n=字段值n][ where 条件表达式1[,...,条件表达式n]]; update stud set stuNo=10,stuName='cc'where stuNo=1,stuName='a'; update stud set score=100where stuNo<3;
-- 不加条件就更改表中所有字段名匹配的数据 update stud set score=90;
6.14 删除数据
使用 delete 删除
1 2
-- delete from 表名[ where 条件表达式];(不写条件表达式就表示删除该表中所有数据;数据删除:行) deletefrom stud where stuNo=1;
使用 truncate 删除表中所有数据
1 2
-- truncate[ table] 表名 truncate stud;
6.15 复制数据表(里面没有数据)
1 2
-- create table 新表名 like 旧表名; createtable newTable like stud;
6.16 复制表中数据(不写条件表达式即为新表插入所有数据)
1 2 3
-- insert into 新表名 select * from 旧表名[ where 条件表达式]; insertinto newTable select*from stud; insertinto newTable select*from stud where id=2;
6.17 设置别名
1 2
-- as 别名 select id as idd,name from ss as aaa;
6.18 删除数据表(存在外键)
删除外键,再删主表
删除外键关联表,再删主表(不推荐)
七、多表操作
7.0 (补充)合并查询 union(表2字段要和表1相同,不足的字段可以用数字充当字段)
1 2 3
-- select */字段1[,字段n] from 表1 union[ all] select */字段1[,字段n][,1,2,..,x][ from 表2]; select id,name,age,sex from tb_student_info unionselect id,name,1,2from tb_course; select id,name from tb_student_info unionselect1,2;
7.1 交叉连接(笛卡尔积)
1 2
-- select */字段1[,字段n] from 表1[ as][ 别名] cross join 表2[ as][ 别名][ where 条件表达式]; select*from tb_course crossjoin tb_student_info;
7.2 内连接
1 2
-- select */字段1[,字段n] from 表1[ as][ 别名][ inner] join 表2[ as][ 别名][ on 条件表达式]; select s.name,c.course_name from tb_students_info s join tb_course c on s.course_id = c.id;
7.3 外连接
7.3.1 左连接
1 2
-- select */字段1[,字段n] from 主表[ as][ 别名] left[ outer] join 表2[ as][ 别名][ on 条件表达式]; select s.name,c.course_name from tb_students_info s leftjoin tb_course c on s.course_id = c.id;
7.3.2 右连接
1 2
-- select */字段1[,字段n] from 表2[ as][ 别名] right[ outer] join 主表[ as][ 别名][ on 条件表达式]; select s.name,c.course_name from tb_course c rightjoin tb_students_info s on s.course_id = c.id;
7.4 子查询
in & not in = & <>
1 2 3 4 5
-- select */字段1[,字段n] from 主表[ as][ 别名]([ not] in)/(=/<>) (select 子表字段1[,子表字段n] from 子表名 where 条件表达式); select name from tb_students_info where course_id in (select id from tb_course where course_name ='java'); select name from tb_students_info where course_id notin (select id from tb_course where course_name ='java'); select name from tb_students_info where course_id = (select id from tb_course where course_name ='java'); select name from tb_students_info where course_id <> (select id from tb_course where course_name ='java');