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;


浙公网安备 33010602011771号