mysql查询例_MySQL查询实例讲解

一、单表查询

#前期例子表准备:

create table teacher(

id int primary key auto_increment,

name varchar(16),

age int,

sex enum('男','女') default '女',

xueke varchar(16),

slary int

);

insert into teacher(name,age,sex,xueke,slary) value('alex',28,'男','计算机',8000);

insert into teacher(name,age,sex,xueke,slary) value('egon',23,'男','数学',9000);

insert into teacher(name,age,sex,xueke,slary) value('hello',24,'女','语文',9500);

insert into teacher(name,age,sex,xueke,slary) value('world',26,'男','计算机',10000);

insert into teacher(name,age,sex,xueke,slary) value('python',22,'女','英语',7000);

insert into teacher(name,age,sex,xueke,slary) value('json',21,'男','化学',6000);

insert into teacher(name,age,sex,xueke,slary) value('tank',38,'男','计算机',7000);

insert into teacher(name,age,sex,xueke,slary) value('AK',28,'男','数学',7500);

insert into teacher(name,age,sex,xueke,slary) value('jeck',18,'女','语文',8000);

insert into teacher(name,age,sex,xueke,slary) value('lusi',18,'女','化学',8500);

insert into teacher(name,age,sex,xueke,slary) value('haozi',33,'男','计算机',9000);

insert into teacher(name,age,sex,xueke,slary) value('xuefei',28,'女','英语',9900);

insert into teacher(name,age,sex,xueke,slary) value('耗子',25,'男','计算机',8000);

insert into teacher(name,age,sex,xueke,slary) value('爱跟',24,'男','数学',9000);

insert into teacher(name,age,sex,xueke,slary) value('你好',23,'女','语文',9500);

insert into teacher(name,age,sex,xueke,slary) value('世界',27,'男','计算机',10000);

insert into teacher(name,age,sex,xueke,slary) value('小七',21,'女','英语',7000);

insert into teacher(name,age,sex,xueke,slary) value('合理',31,'男','化学',6000);

insert into teacher(name,age,sex,xueke,slary) value('test',48,'男','计算机',NULL);

1、where

模糊查询:like

% 匹配任意多个字符

_ 匹配任意单个字符

(1)查询名字有n的教师

select * from teacher where name like '%n%';

c24d07b98993d48515c89d6d6e40e5dc.png

(2)查询名字是4个字符的教师

select * from teacher where name like '____';

select * from teacher where char_length(name)=4;

ab466b0f5946481b7bec4b7ef14afc97.png

(3)查询年龄在22到28之间的教师

select * from teacher where age between 22 and 28;

8cf6af846877aa4939a726d1a5b57b99.png

(4)查询age小于23或者id大于28的教师

select * from teacher where age not between 22 and 28;

7a5b1011bfd56115112e17352dfe3891.png

(5)查询age不在23,28,33范围内的教师

select * from teacher where age not in(23,28,33);

30dc1930ff6041884f56b74f6fddebe7.png

(6)查询age 是23,21的教师

select * from teacher where age in(23,21);

09fb53f1a92e53f99da6d4284aa55ae4.png

(7)查询工资为空的老师

查询工资为非空的老师

select * from teacher where slary is NULL;

select * from teacher where slary is not NULL;

f32ea96cf50ee3ab218286120a4a105d.png

eaf21b5ee5b57afab506930228ca17bd.png

2. group by 分组

四个聚合函数:max、min、avg 、count

(1)查询各个学科最高工资

select xueke,max(slary) from teacher group by xueke;

(2)查询各个学科最低工资

select xueke,min(slary) from teacher group by xueke;

(3)查询各个学科的平均工资

select xueke,avg(slary) from teacher group by xueke;

(4)查询各个学科的老师人数

select xueke,count(slary) from teacher group by xueke;

98a7a30cf7e4bc889abd8a44812521a0.png

group_concat 可以获取分组后的其他字段值,还支持拼接操作。

(1)查看各科老师的名字

select xueke,group_concat(name) from teacher group by xueke;

(2)查看各科老师的名字和工资

select xueke,group_concat(name,':',slary) from teacher group by xueke;

fa79b65bdefeb36abc13c76c74a9cb70.png

cnocat是在不分组情况下使用的

select concat('名字:',name),concat('工资:',slary) from teacher;

03cf27f10fbbfaf248422f8c4a73257a.png

as 可以临时改别名

select teacher.name,teacher.slary from teacher where id=1;

等价于

select t.name,t.slary from teacher as t where id=1;

f2926bf4c34960289e2df3981e822377.png

group by 分组总结:

1、关键字where 和 group by 同时出现的时候group by 必须在where 的后面

2、where先对整体数据进行过滤之后再分组操作

3、聚合函数只能再分组之后使用

4、where条件中不能出现聚合函数,否则会报错。

3、having(是分组之后使用的)

having可以直接使用聚合函数。

(1)查询各学科年龄在20以上的教师平均工资并且保留平均工资在8000元以上的学科

select xueke,avg(slary) from teacher where age >20 group by xueke having avg(slary)>8000;

dc7d5c5a4e17fae611fd4612ca425120.png

4. distinct 去重

注意:去重必须是完全一样才可以去重,如果去重的数据中存有主键数据,则不可能去重成功,因为主键是唯一的。

(1)对工资进行去重

select distinct slary from teacher;

86f7064a9bd1eb2270d8f688154c2042.png

5. order by 排序

默认是升序 asc

降序是desc

(1)对计算机学科的老师工资进行降序排列。

select * from teacher where xueke='计算机' order by slary desc;

(2)对计算机学科的老师工资进行升序排列。

select * from teacher where xueke='计算机' order by slary asc;#asc可加可不加

3bd555e2afca3a7eb606a8ef30fff53a.png

7. limit 限制

(1)取五条数据

select * from teacher limit 5;

(2)从第五条开始取五条数据

select * from teacher limit 5,5; #第一个参数5表示从第五条开始,第二个参数5表示取的数据条数。

d1ea1f3512a6195d7ec26b75280948de.png

8、正则

查询名字以j开头,k\n结束的老师

select * from teacher where name regexp '^j.*(n|k)$';

6c3c9e13355986ddf53b37badf17bb62.png

二、多表查询

1、连表操作

(1)inner join 内连接

只拼接两张表都有的数据

select * from right_b inner join left_b on right_b.l_id=left_b.id;

(2)left join 左连接

左表所有的数据都展示出来,没有对应的项就用NULL代替

#在join左边的为左表,右边为右表

select * from right_b left join left_b on right_b.l_id=left_b.id;

(3)right join 右连接

右表所有的数据都展示出来,没有对应的项就用NULL代替

select * from right_b right join left_b on right_b.l_id=left_b.id;

(4)union

两张表的数据都展现出来

select * from right_b left join left_b on right_b.l_id=left_b.id

union

select * from right_b right join left_b on right_b.l_id=left_b.id;

fd93ad3b4be45277a720e5fa98001e22.png

8ed99aeb623e39869e600502e7c28e0f.png

2、子查询

本质:就将第一个查询的结果作为查询条件去使用(1)查询技术部门、销售部门员工的信息

select * from right_b where l_id in (select id from left_b where name=‘技术’ or name=‘销售’);

70f9ce6f8dab1069600d3b0636595a32.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值