mysql--表数据操作

查询:

简单查询

####查询的字段必须在表中存在
#### 对查询出来的数据进行修改时,不会修改原来的数据,只是修改了可视化的,我们看到的数据。
# 查一个数据
select 字段名  from  表名;

# 查多个数据
select 字段名,字段名,字段名......   from 表名;

# 对查询出来的内容进行运算
select 字段名*12 from 表名

# 对查询出来的数据字段名去重
####distinct
select distinct 某个字段 from 表;

# 查询出来的字段进行重命名
select 字段名 新名字 from 表;
select 字段名 as 新名字 from 表;

# 查询出来的内容进行拼接
# concat
select concat('你想要用什么拼接字段名',字段名,'你想要拼接的其他的内容','字段名')from 表;
# 自动拼接 (确定用什么拼接,然后拼接后面的所有字段,用法类似于str方法的join方法)
select concat_ws('你想要用什么拼接',字段名,字段名,字段名...) from 表;

条件查询:

1  case 语句

### case语句
select 
    (case 
    when 条件(比如:name =='小明')  then  # 如果条件成立,查找下面的这个内容
         要查询的字段名
    when 条件  then  
        concat(要查询的字段名,'_可以加上拼接的内容') # 如果这个条件成立,给这个内容,拼接(其实就是对这个内容的操作,)
    else 
        concat(要查询的字段名,'拼接的内容')
    end) as 新名字  from 表名 # end 结束语句, as 起一个代名,从表中查找

2  where 条件:

###where条件查询
# where 支持 
# 1 比较运算符 :>   <    >=    <=  <>   !=
# 2 between 80 and 100  值在80到100之间的数
# 3 in(80,90,100)  值为80或者90或者100
#     not in 值不是80,90,100
# 4 like 'e%'
     通配符可以是%或者_
    % 表示任意多个字符
     _表示一个字符    


 select 字段 fromwhere 条件;
select 字段 fromwhere like '金%' # 表示条件为 金...的内容,后面不限字数
                                                 #'金_' 表示 金*内容,固定了字数
                                                #'金__' 表示金**内容,固定了字数
#tetween
select 字段 fromwhere 字段 between 范围

#身份运算符  is   /is not null
 # 用来判断你是不是为空

#   regex 使用正则
select 字段 fromwhere 字段 regexp '正则表达式'; 

3   group by  分组

#### group by 分组
select 字段 fromgroup by 字段; 
# 这个式子查出来的是根据这个分类,将相同的分成一类,并且重复的数据只显示一个,可以根据这个方法去重。


# 显示所有数据使用group_concat
select  group_concat(字段) fromgroup by 字段;
# 这个式子查出来的是根据这个分类,将相同的分成一类,并显示每一类的所有数据

4    聚合函数

#强调:聚合函数聚合的是组的内容,若是没有分组,则默认一组

示例:
    SELECT COUNT(*) FROM employee; # 查询中的数据数量
    SELECT COUNT(*) FROM employee WHERE depart_id=1; # 查询表中depart_id= 1的数据数量
    SELECT MAX(salary) FROM employee; # 查询salary字段最大的数据
    SELECT MIN(salary) FROM employee;# 查询salary字段最小的数据
    SELECT AVG(salary) FROM employee;# 查询salary字段数据的平均值
    SELECT SUM(salary) FROM employee;
    SELECT SUM(salary) FROM employee WHERE depart_id=3;# 查询depart_id=3的数据总和

5   having  过滤

###having
#对分组进行条件过滤,一般都和group by连用
 select post,group_concat(emp_name) from emp group by post having salary > 10000;#错误,分组后无法直接取到salary字段,使用条件字段时,我们必须要先查找这个数据

mysql> select 字段,group_concat(字段) fromgroup by 字段 having avg(字段) > 10000; 
# 查找分组中的数据



# 如果我们想要使用having当做条件查询 
# 那么他的条件就要先找出来才能使用
select emp_name,age from emloyee having age>18;

#select * 的时候,我们默认这个将整个表当做一个分组
select * from emloyee having age>18;

 

小总结:

#!!!执行优先级从高到低:where > group by > having 
#1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
#2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数

 

6  order  排序

 

按单列排序
    SELECT * FROM employee ORDER BY salary;  # 根据salary排序,升序
    SELECT * FROM employee ORDER BY salary ASC;  #ASC是升序
    SELECT * FROM employee ORDER BY salary DESC;# desc是降序

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

limit 

显示前n条,limit n
limit 1 显示一条

    SELECT * FROM employee ORDER BY salary DESC 
        LIMIT 3;                    #默认初始位置为0 
    
    SELECT * FROM employee ORDER BY salary DESC
        LIMIT 0,5; #从第0开始,即先查询出第一条,然后包含这一条在内往后查5条

    SELECT * FROM employee ORDER BY salary DESC
        LIMIT 5,5; #从第5开始,即先查询出第6条,然后包含这一条在内往后查5条

 

posted @ 2019-04-24 17:41  msKk1  Views(134)  Comments(0Edit  收藏  举报