MySql数据库查询操作

5 篇文章 0 订阅

        Sql查询

                数据库中百分之八十的操作都是查询操作

基本的查询语句语法

select [distinct] *  |  列名
 from 表名   (可以写多个表名字,以逗号隔开)
 [where 条件]  (可以写多个条件,以and 或者是 or 进行分隔)
 [group by 列名 [having 条件]] (可以写多个条件,以and 或者是 or 进行分隔)
 [order by 列名 asc | desc]; (可以写多个列名,以逗号隔开)

基本查询语句 :

查询所有

select * from <表名>

在实际开发的过程中一定不要用*,会影响 查询性能,不利于查询优化,应该写上需要查找的字段

select <字段> ,<字段> ,<字段> from <表名>

在查询指定字段的时候可以设置别名

select job as 职位 ,sal from emp

distinct可以去掉相同数值的记录,对后面所有的字段一起判断

select distinct <字段>, <字段> from <表名>

where 是在表名之后,设置查询的条件,可以通过AND或OR设置多个条件

select * from emp where job=‘clerk’ AND SAL>1000 

select * from emp where job =‘clerk’ OR SAL>1000

可以通过ORDER BY进行排序(ASC升序 ,DESC降序)

select * from emp order by sal DESC

group by 分组查询

        在使用分组查询的时候,查询的字段必须是group by条件的字段,或者是聚合函数,不可以写其他字段

        常用聚合函数

                avg:求平均

                sum:求和

                count:求数量

        where 必须写在group的前面 这个条件在group之前就会生效

        如果需要在查询之后,在使用条件进行筛选,那么则使用having

select avg(sal),job from emp where DEPTNO=20 group by job having avg(sal)<1500 order by avg(sal) desc;

排序

        基本排序必须写在最后面

        ASC是升序 DESC是降序

可以支持多个字段的排序,以逗号进行分割即可,默认排序是ASC,如果需要降序需要手动在字段的最后面写上DESC

select 字段,字段,字段 from 表名 order by 字段,字段 DESC;

条件查询

        主要通过表名的后面的where设置条件

        等值判断:主要通过=进行判断

                无论数值,时间,字符串都可以使用

                无论数值,时间,字符串也都可以使用字符串

select * from 表名 where 字段=要判断的条件

select * from 表名 where 字段 = 要判断的条件

逻辑判断

        and:两个同时满足

        or :其中一个满足

        not:取反的情况,需要和别的关键词配合使用

select * from 表名 where 字段 not in(值1,值2,值3)

不等于号

        <,>:判断大于还是小于

        <=,>= 判断大于等于或者小于等于

        !=: 不等于

        <>:不等于

区间判断

        通过between。。。and查询两个条件之间的结果

select * from emp where sal between 800 and 1600;

相当于以下操作

select * from emp where sal > 800 and sal< 1600;

空值判断

        判断字段是否是空值

select * from 表名 where 字段 is null

可以和not配合查询非空字段

select * from emp where comm is not null;

枚举查询

        主要通过in查找指定的集合的数值条件

select * from 表名 shere 字段 in (值1,值2)

也可以配合not使用

select * from emp where sal not in (900,1100,1300,1500,1700);

模糊查询

        主要是通过like进行条件判断

        在设置比较的值后需要通过%作为多个字符的通配符

-- 查询以s开头的名字
select * from emp where ENAME like 's%';
-- 查询包含一个s的名字
select * from emp where ENAME like '%s%';
-- 查询以s结尾的名字
select * from emp where ENAME like 's%';

_是匹配一个字符

-- 查询第三个字符是O的操作
select * from emp where ENAME like '__o%';

分支查询

        主要在字段的结果通过分支来实现不同的输出定义

select ENAME,SAL,CASE
        WHEN SAL > 3000 THEN 'P7'
        WHEN SAL <= 3000 AND SAL> 2000 THEN 'P6'
        WHEN SAL <= 2000 AND SAL> 1000 THEN 'P5'
        ELSE 'P4'
        END AS LEVEL
from emp;

        以CASE开头,以END AS字段别名作为结尾

        中间通过WHEN...THEN结果作为条件

        最后使用ELSE设置其他情况

时间查询

        时间类型可以直接使用符号和字符进行判断

select * from emp where HIREDATE > '1982-1-1'

        时间类型的函数的使用

时间函数描述
SYSDATE()当前系统时间(日、月、年、时、分、秒)
CURDATE()获取当前日期
CURTIME()获取当前时间
WEEK(DATE)获取指定日期为一年中的第几周
YEAR(DATE)获取指定日期的年份
HOUR(TIME)获取指定时间的小时值
MINUTE(TIME)获取时间的分钟值
DATEDIFF(DATE1,DATE2)获取DATE1 和 DATE2 之间相隔的天数
ADDDATE(DATE,N)计算DATE 加上 N 天后的日期

 字符串查询

        concat用于字符串的拼接 ,不能使用+号

select concat('聪明',ENAME,'后缀') from emp;

在指定的位置插入文字

SELECT INSERT('这是一个数据库',3,2,'MySql');
#指定内容转换为小写
SELECT LOWER('MYSQL');#mysql
#指定内容转换为大写
SELECT UPPER('mysql');#MYSQL
#指定内容截取
SELECT SUBSTRING('JavaMySQLOracle',5,5);#MySQL

聚合函数

        单例总和

x #统计所有员工每月的工资总和SELECT sum(salary)FROM t_employees;

单例最大值

#统计所有员工每月的平均工资
SELECT AVG(salary)
FROM t_employees;

单例最大值

#统计所有员工中月薪最高的工资
SELECT MAX(salary)
FROM t_employees;

单例最小值

#统计所有员工中月薪最低的工资
SELECT MIN(salary)
FROM t_employees;

总行数

#统计员工总数
SELECT COUNT(*)
FROM t_employees;
#统计有提成的员工人数
SELECT COUNT(commission_pct) 
FROM t_employees;

注意:聚合函数自动忽略null值,不进行统计

分组查找

        查询每个部门的人数

select count(*),DEPTNO from emp group by DEPTNO;

查询各个部门的平均工资

select avg(sal),DEPTNO from emp group by DEPTNO;

查询20,30最大的工资的人

select MAX(sal),DEPTNO from emp group by DEPTNO having DEPTNO in(20,30);

子查询

        将查询的结果,作为另一个查询条件

        查询结果有多个值的时候需要使用in

select * from emp where sal in
(select MAX(sal) from emp group by DEPTNO having DEPTNO in(20,30));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值