判断是否为空 mysql
检查字段是否为空 is null
检查字段是否不为空 is not null
创建一个表t1,包含id和name两个字段
create table t1(id int, name varchar(10));
向t1表中插入两行数据,只指定了id,name为NULL
insert into t1(id) values(1),(2);
向t1表中插入一行数据,指定了id和name
insert into t1 values(3,'tongyao');
查询t1表中name不为NULL的所有记录
select * from t1 where name is not null;
查询t1表中name为NULL的所有记录
select * from t1 where name is null;
---------------逻辑判断
逻辑与操作符 and or not
查询students表中年龄在16到21岁之间的所有记录
select * from students where 16<=age and age<=21;
查询students表中年龄小于等于16岁或大于等于22岁的所有记录
select * from students where age<=16 or age >=22;
查询students表中年龄不是16岁的所有记录
select * from students where not age=16;
--------------排序
用于对查询结果进行排序 order by
根据age字段正序排序查询students表
select * from students order by age;
根据age字段倒序排序查询students表
select * from students order by age desc;
-----限制
用于限制查询结果的行数 limit
展示students表中的前5条数据
select * from students limit 5;
从students表的第4条数据开始(注意,这里的计数从0开始),输出接下来的3条数据
select * from students limit 3,3;
-------去重
用于去除查询结果中的重复记录 distinct
查询grades表中不重复的subject_number字段值
select distinct subject_number from grades;
--------模糊查询
用于进行模糊匹配查询 like
查询students表中name字段以'xi'开头的所有记录
select * from students where name like 'xi%';
查询students表中name字段第二个字符为'l'且第三个字符任意的所有记录
select * from students where name like 'li_ _'; #这里2个下划线 匹配几个下划线-1
--------------范围查询
用于指定一个范围进行查询 between
select * from students where age in (1,16,17,22); #选择 age 在 (1, 16, 17, 22) 这些值中的记录
查询students表中年龄在16到22岁之间的所有记录(包含16和22)
select * from students where age between 16 and 22;
-----------聚合函数
计算students表中的记录总数
select count(*) from students;
计算students表中非NULL的name字段值的数量
select count(name) from students;
计算students表中所有记录的age字段值之和
select sum(age) from students;
计算students表中所有记录的age字段值的平均值
select avg(age) from students;
--------------分组
根据一个或多个列对结果集进行分组,然后使用聚合函数进行计算 having子句用于对分组后的结果进行过滤
通过subject_number和grade对grades表进行分组,并筛选出grade大于等于80的分组及其记录数
select subject_number, grade, count(*) from grades group by subject_number, grade having grade>=80;
注意:where子句在数据分组前进行过滤,而having子句在数据分组后进行过滤 having 在 where后面
------------子查询 子查询是嵌套在另一个查询中的查询
派生表(子查询的结果集)必须有一个别名,以便在外部查询中引用
查询students表中年龄小于18岁的记录,但仅限于年龄最小的前5名记录
select * from (select * from students order by age limit 5) as tongyao where age < 18;
--------------链接查询
内连接查询,选择t1和t2中id匹配的记录
SELECT t1.id, t1.name AS t1_name, t2.name AS t2_name FROM t1
INNER JOIN t2 ON t1.id = t2.id;
外连接(LEFT JOIN 和 RIGHT JOIN)
左外连接查询,选择t1表中的所有记录,以及t2表中匹配的记录
如果t1中的id在t2中没有对应的记录,则t2的字段将为NULL
SELECT t1.id, t1.name AS t1_name, t2.name AS t2_name FROM t1
LEFT JOIN t2 ON t1.id = t2.id;
右外连接查询,选择t2表中的所有记录,以及t1表中匹配的记录
如果t2中的id在t1中没有对应的记录,则t1的字段将为NULL
SELECT t1.id, t1.name AS t1_name, t2.name AS t2_name FROM t1
RIGHT JOIN t2 ON t1.id = t2.id;
在进行连接查询时,确保在 JOIN 关键字后面紧跟着 ON 关键字,并在 ON 后面指定连接条件。
当进行外连接时,未匹配的记录将在对应的表中显示为NULL。左外连接(LEFT JOIN)保留左表中的所有记录,而右外连接(RIGHT JOIN)保留右表中的所有记录。