MySQL—简单,分组,条件查询

MySQL

1. 什么是SQL:结构化查询语言(Structured Query Language)。
2. SQL的作用:客户端使用SQL来操作服务器。
启动mysql.exe,连接服务器后,就可以使用sql来操作服务器了。
将来会使用Java程序连接服务器,然后使用sql来操作服务器。
3. SQL标准(例如SQL99,即1999年制定的标准):
由国际标准化组织(ISO)制定的,对DBMS的统一操作方式(例如相同的语句可以操作:mysql、oracle等)。
4. SQL方言
某种DBMS不只会支持SQL标准,而且还会有一些自己独有的语法,这就称之为方言!例如limit语句只在MySQL中可以使用

SQL语法

1. SQL语句可以在单行或多行书写,以分号结尾
2. 可使用空格和缩进来增强语句的可读性
3. MySQL不区别大小写,建议使用大写

SQL语句分类(*****)

1. DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
> 创建、删除、修改:库、表结构!!!
2. DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
> 增、删、改:表记录
3. DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
4. DQL*****(Data Query Language):数据查询语言,用来查询记录(数据)。
ddl:数据库或表的结构操作(*****)
dml:对表的记录进行更新(增、删、改)(*****)
dql:对表的记录的查询(*****,难点)
dcl:对用户的创建,及授权!

1.简单查询,如有数据表emp

select * from emp;
-- 以上语句会查询到emp表中所有的数据,如下图

2.in函数或者where条件,可以查询指定条件的数据

-- 1004和1005的员工信息——in
select empname from emp where empno in(1004,1005);
-- 1004和1005的员工信息——where 
select empname from emp where empno = 1004 or empno =1005;
-- 不是1004和1005的员工信息——not in
select empname from emp where empno not in(1004,1005);
-- 可以查询到指定条件empno是1004和1005的数据,注意in(),括号里的不是区间

3.模糊查询,% 表示任意0个或多个字符, _ 表示任意单个字符(有且仅有一个字符,可以是中文,也可以是英文,也可以是数字)

-- 姓名中带下划线的——模糊查询
select empno,empname from emp where empname like '%\_%';
-- 注意如果姓名中带有%或者_用\(转义字符)来修饰
-- 名字带有a的编号——模糊查询
select empno,empname from emp where empname like '%a%';
-- 会输出姓名中带下划线的和名字带有a的empno和empname

4.order by排序

-- 默认升序排列——order by
select * from emp order by sal;
-- 和上面一样升序,所以默认排序就是asc
select * from emp order by sal asc;
-- 降序就是desc
select * from emp order by sal desc;
-- 按照工资的降序排序,当工资相同时再按照姓名升序排列
select * from emp order by sal desc, empname asc;
-- 找到职位是程序员的人,并工资降序排列
select * from emp where job='程序员' order by sal asc;
-- 如下图就是第五条语句结果

5.ifnull函数,is null,如果所查询的数据中含有null,会自动转换为0输出

select empname,ifnull(comm,0) from emp;
-- 以上就是把comm为null的数据转换为0输出显示
select empname,comm from emp where comm is null;
-- 注意如果输出显示为null的数据,不能comm=null,是comm is null

6.组函数(count,max,min,avg,sum),group by分组

-- 显示工资的和
select sum(sal) from emp;
-- 按job分组,显示每个job的人数(如果多个字段排序,第一个相同,则再按第二个字段排序)
select job,count(*) from emp group by job;
-- 显示最高工资
select max(sal) from emp;
-- 显示平均工资
select avg(sal) from emp;
-- 显示最小工资
select min(sal) from emp;
-- 记住where后面一定不要用count、sum、avg、max、min这五个函数,因为会报错
-- group by按照某个字段或者某些字段进行分组,having是对分组之后的数据进行再次过滤
-- 案例找出每个岗位的最高薪资,分组函数一般都和group by一起使用
select job,max(sal) from emp group by job having max(sal)>10000;
-- 如以上就是如果算出最高工资,再加条件的时候就要用having来设置条件

7.limit子句limit用来限定查询结果的起始行,以及总行数。union(可以将结果集相加)

-- 案例:找出工作岗位是老师和程序员的员工?
select empname,job from emp where job='程序员' union select empname,job from emp where job='老师';
-- 会把查询出来的jo为程序员一列和job为老师的一列拼到一块,如下图
-- 这个是不可以的,不能两列再去拼接一列:select empname,sal from emp union select dname from dept;
-- limit(重点,以后分页查询会用到,取部分数据) limit startIndex,length:startIndex表示起始位置从几开始取,length表示取出来几个
-- 案例取出工资的前五名
select empname,sal from emp order by sal desc limit 0,5;
-- 和上线结果是一样的,以为前面数字不写默认就是0
select empname,sal from emp order by sal desc limit 5;
-- 案例找出工资第4和第9名的员工
select empname,sal from emp order by sal desc limit 3,6;

 

 

posted @ 2022-11-03 16:53  花海~  阅读(158)  评论(0)    收藏  举报