单表查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单表查询相关的知识,希望对你有一定的参考价值。

简单查询

1简单查询

select * from employee;

2去重字段 :distinct+字段 

select distinct post from employee;

3通过四则运算查询

select name, salary*12 from employee;
select name, salary*12 as Annual_salary from employee;
select name, salary*12 Annual_salary from employee;

4定义显示的格式 :concat

第一种 CONCAT() 函数用于连接字符串
   SELECT CONCAT ( ‘姓名: ‘ ,name, ‘  年薪: ‘ , salary*12)  AS Annual_salary 
   FROM employee;

第二种 简化重复的字符,第一个参数传入需要重复的字符
   SELECT CONCAT_WS(‘:‘,name,salary*12)  AS Annual_salary 
   FROM employee;
例如:
    Bob: 82000
    Coco: 92000

WHERE约束

1.比较运算 = > < !=

select * from 表 where id > 1 and name != ‘alex‘ and num = 12; -- 筛选id>1且name不为alex且num为12的数据

2.关键字between...and...  

select * from 表 where id between 5 and 16; -- 筛选id值在5到16范围内的数据

3.关键字in

select * from 表 where id in (11,22,33)     -- 筛选id值b为11或22或33的数据
select * from 表 where id not in (11,22,33) -- 筛选id值不为11或22或33的数据
select * from 表 where id in (select nid from 表)

4.通配符

select * from 表 where name like ‘%le%‘      -- 选取name包含有le的所有数据
select * from 表 where name like ‘ale_‘      -- ale开头的所有(一个字符)
select * from 表 where name regexp "^[awv]"; -- 选取name以‘a‘、‘w‘或‘v‘开始的所有数据
select * from tb where name regexp "^[a-c]"; -- 选取name以a到c开头范围内的所有的数据
select * from tb where name regexp "^[^a-c]";-- 选取name非以a到c开头的所有数据

GROUP BY分组

1关键字count

统计个数

select count(id) from employee    统计总个数
select count post.count(id) from employee group by post;   统计分组之后的个数    

2关键字group_concat

获取字段中的内容

select post.group_concat(name) from employee group by post; 

3聚合函数

只要涉及到分组,select就不能直接拿到组内内容,要通过聚合函数才能取得(聚合函数聚合的是组的内容,若是没有分组,则默认一组)

 

    SUM(字段)        -- 求和
    COUNT(字段)      -- 次数统计
    AVG(字段)        -- 平均值 
    MAX(字段)        -- 最大
    MIN(字段)        -- 最小

 

注意:分组之后只能查看分组的这个字段,如果查询字段中的内容(信息),只显示字段的第一个值

这种查询不符合逻辑,所以设置全局变量后输入查询名字字段就会报错 

全局变量
设置的2种方法:
1)select @@global.sql_mode
2)set global sql_mode=‘ONLY_FULL_GROUP_BY‘
退出重新登录
在我们设置全局变量之后,当我们再次查询名字内容时,直接报错

HAVING过滤

where与having区别:

1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数

注意:having后面跟的条件判断的字段必须是聚合函数返回的结果,否则sql会报错

select * from employee_tbl group by name having id>4            错误写法
select * from employee_tbl group by name having count(id)>4     正确写法

order by排序

1单列排序:

select * from tb order by name asc;          -- 按照name升序排列
select * from tb order by name desc;         -- 按照name降序排列

2多列排序

SELECT * from employee             
        ORDER BY age, 
        salary DESC;
先按照age排序,如果年纪相同,则按照薪资排序

LIMIT限制

select * from tb limit 2;                    -- 前2行
select * from tb limit 2,2;                  -- 从第2行开始的后2行
select * from tb limit 2 offset 2;           -- 从第2行开始的后2行

 注意:Limit 数据比较大的情况下查找速度会变慢,索引能够缓解查找速度问题

以上是关于单表查询的主要内容,如果未能解决你的问题,请参考以下文章

mysql 单表查询

单表查询

mysql之单表查询__我自己敲的代码

单表继承(休眠)的 JPA 2 标准查询

java代码中 单表查询出的list集合 怎么读写到redis中

关于MySQL的关联查询