002 mysql 查询

判断是否为空 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)保留右表中的所有记录。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最常用的显示命令: 1、显示数据库列表。 show databases; 2、显示库中的数据表: use mysq...
    小小小小小小小小小小銀阅读 14,080评论 0 5
  • 1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别...
    王屋山下的传说阅读 398评论 0 2
  • 1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别...
    kang_KK阅读 21,882评论 1 51
  • 1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别...
    云小萝阅读 257评论 0 0
  • 术语 mysql数据类型 整型类型数值、日期/时间和字符串 浮点型float:单精度型,只能保证6位有效数字的准确...
    叶鸟翼阅读 405评论 1 1