Mysql-查询

1.基本查询

//查询所有内容
select * from  表名;

//查询指定字段
select 字段1,字段2,字段3.....from 表名;

//查询时给字段起别名
select 字段1 as '别名1' , 字段2 as '别名2' ... from 表名;

//去重查询
select distinct 字段列表 from 表名;

2.条件查询

//语法
select 字段列表 from 1 表名 where 条件列表 ;

//算数运算
mysql> select 5, 5+3, 5-3, 5*3, 5/3, 5.2/3, 5%3, 3%5, 50%30 from dual;
+---+-----+-----+-----+--------+---------+------+------+-------+
| 5 | 5+3 | 5-3 | 5*3 | 5/3 | 5.2/3 | 5%3 | 3%5 | 50%30 |
+---+-----+-----+-----+--------+---------+------+------+-------+
| 5 | 8 | 2 | 15 | 1.6667 | 1.73333 | 2 | 3 | 20 |
+---+-----+-----+-----+--------+---------+------+------+-------+
//dual表是一个虚拟表,用于测试或者在没有真实表的情况下执行一些查询操作,可以省略from dual

//省略from dual表字句,查看日期时间
mysql> select now(); 
+---------------------+
| now() |
+---------------------+
| 2023-08-03 14:24:59 |
+---------------------+
1 row in set (0.00 sec)

//字符串123会转为数值123
mysql> select "123"+80; 
+----------+
| "123"+80 |
+----------+
| 203 |
+----------+
1 row in set (0.00 sec)

//非数值字符串进行数值运算会转为0
mysql> select "china"+80; 
+------------+
| "china"+80 |
+------------+
| 80 |
+------------+
1 row in set, 1 warning (0.00 sec)

//注意这里是字符串null
mysql> select "NULL"+100;
+------------+
| "NULL"+100 |
+------------+
| 100 |
+------------+
1 row in set, 1 warning (0.00 sec)

//这才是NULL
mysql> select NULL+100; 
+----------+
| NULL+100 |
+----------+
| NULL |
+----------+
1 row in set (0.00 sec)

# 查询总分大于200的学生信息
mysql> select distinct name "姓名" , chinese+math+english "总分" from student3
where (chinese+math+english)>200;

# 查询男生的信息
mysql> select * from student3 where gender="男";

# 查询英语成绩在80到90之间的学生信息
mysql> select * from student3 where english>80 and english<90 ;
mysql> select * from student3 where english between 80 and 90 ;

# 查询英语成绩不在80到90之间的学生信息
mysql> select * from student3 where not(english>80 and english<90) ;

# 查询数学分数为85,90,的学生信息
mysql> select * from student3 where math=85 or math=90 ;
mysql> select * from student3 where math in (85,90) ;

# 查询数学分数不为85,90的学生信息
mysql> select * from student3 where !(math=85 or math=90) ;

# 查询所有姓李的学生语文成绩
mysql> select name ,gender, chinese from student3 where name like "李%" ;

# 查询姓名为两个字的信息
mysql> select * from student3 where name like "__" ; # 两个_

# 插入新数据
mysql> insert into student3(id,name,gender) values (9,'周星星','男');

# 查询语文没有考试的学生信息
mysql> select * from student3 where chinese is NULL;
mysql> select * from student3 where chinese<=> NULL;

# <=>安全等于,作用
# 可作为普通运算符的=
# 或等价于is NULL
# 正则表达式作为条件
//匹配以数字 9 开头的字符串。
mysql> select * from student3 where math regexp "^9"; # 关键字regexp

3.聚合函数

count(*):所有行进行统计,包括NULL行
count(1):所有行进行统计,包括NULL行
count(某字段):对某字段中非Null进行统计

4.分组查询

//语法
select 字段,聚合函数 from 表名 [ where 条件 ] group by 字段  [ having 分组后过滤条件 ];


# 按照班级分组:
mysql> select class_id as '班级编号', round(avg(score),2) as '平均成绩' from
transcript group by class_id;

# 查询平均分在90分及以上的班级
mysql> select class_id as "班级", avg(score) as "平均分" from transcript group by
class_id having avg(score)>90;

# 查询每个班级的成绩平均分(不统计成绩在85分以下的学生且过滤掉平均分在90分以下的班级),以便比较不
同班级的成绩
mysql> select class_id as "班级", avg(score) as "平均分" from transcript where
score>85 group by class_id having avg(score)>90;

where与having区别
# 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进
行过滤。
# 判断条件不同:where不能对聚合函数进行判断,而having可以。

 5.排序查询

order by 字段1 asc/desc, 字段2 asc/desc.....

mysql> select * from student3 order by math ;
mysql> select * from student3 order by math desc;


# 中文排序,由于使用字符编码不同会出现问题,如按性别升序则女在前男在后了:
mysql> select * from student3 order by gender asc;
mysql> show variables like 'character_set%'; # 查看当前使用的编码


# 使用CONVERT函数按照指定编码排序
mysql> select * from student3 order by convert(gender using gbk) asc;
mysql> select * from student3 order by convert(name using gbk) asc;


# 分组排序:先按性别排序,组内部按语文成绩降序排列
mysql> select * from student3 order by convert(gender using gbk) asc,chinese
desc;

 6.分页查询

mysql> select * from student3;

mysql> select * from student3 limit 2,3; # 查看第2条开始的记录显示3条(包含第2条)

mysql> select * from student3 limit 3; # 查看3条记录

mysql> select * from student3 limit 3 offset 2; # 查看第2条开始的3条记录,同limit
2,3

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值