【MySQL数据库基本操作04-DQL】

MySQL数据库基本操作04-DQL

简单查询

在这里插入图片描述

运算符

MySQL支持四种运算符:算数、比较、逻辑、位运算符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

排序查询

在这里插入图片描述

聚合查询

  • count函数对null值的处理:

    如果count函数的参数为星号(*),则统计所有记录的个数。而如果参数为某字段,不统计含null值的记录个数。

  • sum和avg函数对null值的处理:

    这两个函数忽略null值的存在,就好象该条记录不存在一样。

  • max和min函数对null值的处理:

    max和min两个函数同样忽略null值的存在。

分组查询

select 字段1,字段2… from 表名 group by 分组字段 having 分组条件;

注:如果要进行分组的话,则SELECT子句之后,只能出现分组的字段和统计函数,其他的字段不能出现

  • 分组之后对统计结果进行筛选的话必须使用having,不能使用where
  • where子句用来筛选 FROM 子句中指定的操作所产生的行
  • group by 子句用来分组 WHERE 子句的输出。
  • having 子句用来从分组的结果中筛选行

分页查询

-- 方式1-显示前n条
select 字段1,字段2... from 表明 limit n;
-- 方式2-分页显示
select 字段1,字段2... from 表明 limit m,n;
# m: 整数,表示从第几条索引开始,计算方式 (当前页-1)*每页显示条数
# n: 整数,表示查询多少条数据

-- 查询product表的前5条记录 
select * from product limit 5 ;
-- 从第4条开始显示,显示5条 
select * from product limit 3,5;

insert into select语句

insert into Table2(field1,field2,…) select value1,value2,… from Table1 #  # 或者:
insert into Table2 select * from Table1
# 要求目标表Table2必须存在
create table pro2(pname varchar(20),price double);
insert into pro2(pname,price) select pname,price from product;

P55\P56 练习

select name,english from student;
select distinct * from student;
select name,(chinese+english+math) as total from student;
select name,(chinese+english+math+10) as total2 from student;
select * from student where english >90;
select * from student where (chinese+english+math) >200;
select * from student where english between 80 and 90;
select * from student where english not between 80 and 90;
select * from student where math in (89,90,91);
select * from student where name like '李%' order by (chinese+english+math) desc;
selcet gender,count(*) from student group by gender 
order by count(*) desc;
-- --------------------------------------------------------
select * from emp where deptno != 10 order by empno ;
select * from emp where ename not like '_A%' and sal >1000 order by (sal+ifnull(comm,0))*12 desc;
select deptno,avg(sal) from emp group by deptno;
select deptno,job,max(sal) from emp group by deptno,job order by deptno;
select deptno,avg(sal) from emp group by deptno having avg(sal) >2000;
select ename,sal from emp where comm is not null;
select max(sal)-min(sal) from emp ;

正则表达式

正则表达式(regular expression)

​ MySQL通过REGEXP关键字支持正则表达式进行字符串匹配。

-- ^ 在字符串开始处进行匹配
SELECT  'abc' REGEXP '^a';
select * from product where pname regexp '^海'; 

-- $ 在字符串末尾开始匹配
SELECT  'abc' REGEXP 'a$';
SELECT  'abc' REGEXP 'c$';
select * from product where pname regexp '水$'; 

-- . 匹配任意单个字符,除换行符之外
SELECT  'abc' REGEXP '.b';
SELECT  'abc' REGEXP '.c';
SELECT  'abc' REGEXP 'a.'; 

-- [...] 匹配括号内的任意单个字符
SELECT  'abc' REGEXP '[xyz]'; #0
SELECT  'abc' REGEXP '[xaz]'; #1

-- [^...] 注意^符合只有在[]内才是取反的意思,在别的地方都是表示开始处匹配
SELECT  'a' REGEXP '[^abc]'; #0
SELECT  'x' REGEXP '[^abc]'; #1
SELECT  'abc' REGEXP '[^a]'; #1
 
-- a* 匹配0个或多个a,包括空字符串。可以作为占位符使用.有没有指定字符都可以匹配到数据
 
SELECT 'stab' REGEXP '.ta*b';
SELECT 'stb' REGEXP '.ta*b';
SELECT '' REGEXP 'a*';
 
-- a+  匹配1个或者多个a,但是不包括空字符
SELECT 'stab' REGEXP '.ta+b';
SELECT 'stb' REGEXP '.ta+b';

-- a?  匹配0个或者1个a
SELECT 'stb' REGEXP '.ta?b';
SELECT 'stab' REGEXP '.ta?b';
SELECT 'staab' REGEXP '.ta?b';
 
-- a1|a2  匹配a1或者a2,
SELECT 'a' REGEXP 'a|b';
SELECT 'b' REGEXP 'a|b';
SELECT 'b' REGEXP '^(a|b)';
SELECT 'a' REGEXP '^(a|b)';
SELECT 'c' REGEXP '^(a|b)';
 
-- a{m} 匹配m个a
 
SELECT 'auuuuc' REGEXP 'au{4}c';
SELECT 'auuuuc' REGEXP 'au{3}c';

-- a{m,} 匹配m个或更多个a
 
SELECT 'auuuuc' REGEXP 'au{4,}c';
SELECT 'auuuuc' REGEXP 'au{3,}c';
SELECT 'auuuuc' REGEXP 'au{5,}c'; #0

 -- a{m,n} 匹配m到n个a,包含m和n
 
SELECT 'auuuuc' REGEXP 'au{3,5}c';
SELECT 'auuuuc' REGEXP 'au{4,5}c';
SELECT 'auuuuc' REGEXP 'au{5,10}c';
 
-- (abc) abc作为一个序列匹配,不用括号括起来都是用单个字符去匹配,如果要把多个字符作为一个整体去匹配就需要用到括号,所以括号适合上面的所有情况。
SELECT 'xababy' REGEXP 'x(abab)y';
SELECT 'xababy' REGEXP 'x(ab)*y';
SELECT 'xababy' REGEXP 'x(ab){1,2}y';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值