MySql数据库学习(二)

 

一、对表的理解

什么是表?

table是数据库的基本组成单元,所有的数据都以表格的形式组织,目的是可读性强

一个表包含行和列

行:表示数据(data)

列:字段

 

二、对SQL语句的理解

1.学习MySQL猪腰还是学习通用的SQL语句,那么SQL语句包含增删改茶,SQL语句怎么分类?

DQL:(数据查询语言)查询语句,凡是select语句都是DQL

DML:(数据操作语言)insert delete update, 对表中数据进行增删改

DDL:(数据定义语言) create drop alter,对表结构增删改

TCL:(事务控制语言) commit提交事务,rollback回滚事务

DCL:(数据控制语言) grant授权、revoke撤销权限等

root超管-->创建其他用户

 

三.导入初始化数据

第一步:登陆mysql数据库管理系统

dos命令窗口:mysql -u[用户名] -p[密码]

第二步:查看有哪些数据库

show databases; (这个不是sql语句,属于MySQL的命令)

第三步:创建属于我们自己的数据库

create database control_platform;

第四步:使用control_platform数据

use control_platform;(这个不是SQL语句,属于MYSQL的命令)

第五步:查看当前使用的数据库中有哪些表

show tables;

第六步:初始化数据库:

mysql> source [需要执行的sql语句路径]

 

四、对SQL脚本的理解

1. con_project.sql,这个文件以sql结尾,这样的文件被称为‘sql脚本’。什么是sql脚本?

当一个文件的扩展名是.sql,并且该文件中编写了大量的sql语句,我们称这样的文件为sql脚本。

注意:直接使用source命令可以执行sql脚本,sql脚本中数据量太大的时候,无法打开,请使用source命令完成初始化。

2.删除数据库 drop database control_platform;

 

五.简单查询(DQL)

查询一个字段:select 字段名1,字段名2,字段名3,... from 表名;

提示:

1、任何一条sql语句以“;”结尾。

2、sql语句不区分大小写。

3.给查询结果的列重命名:

select sale*12 as yearsale from emp;

select sale*12 as '年薪' from emp;

注意:标准sql语句中要求字符串使用单引号括起来。虽然mysql支持双引号,尽量别用

as关键字可以省略:

select sale*12 '年薪' from emp;

4.Java程序中不能使用select * from emp;//实际开发中不建议使用号,效率很低

六.条件查询

1. 语法格式:select 字段1,字段2,....from 表名 where 条件;

执行顺序:先from,然后where,最后select

 

2. between... and...在使用的时候必须左小右大,数字的话是闭区间,字符的话是左闭右开;

select salary from emp where name between 3000 and 5000;

between... and...除了可以使用在数字方面之外,还可以使用在字符串方面

select name from emp where name between 'A' and 'C';

 

3.is null和is not null

在数据库当中null不是一个值,代表什么也没有,为空。空不是一个值不能用等号衡量,所以必须使用is null 或者is not null

select ename,sal,comn from emp where comn is null;//找出哪些人津贴为null;

select ename,sal,comn from emp where comn is not null;//找出哪些人津贴不为null;

 

4.and 和or的优先级问题

例子:

找出工作岗位是MANAGER和SALEMAN的员工?

select name,job from emp where job='MANAGER' or job='SALEMAN';

and和or联合使用:

找出薪资大于1000的并且部门编号是20或者30部门的员工

select name salary,deptno from emp where salary>1000 and (deptno=20 or deptno=30);

注意:当运算符的优先级不确定的时候加小括号

 

5.in条件查询

in等同于or:找出工作岗位是MANAGER和SALEMAN的员工?

select name,job from emp where job in('MANAGER' ,'SALEMAN');

select name,salary from emp where salary in(1000 ,5000);//找出工资1000和5000的员工

注:in后面不是区间,是具体的数值

not in表示不在后面具体数值这几个值内

6.like模糊查询语法

在模糊查询中必须掌握两个特殊的符号,一个%,一个下划线

%代表任意多个字符,_代表任意一个字符

找出名字当中含有o的?

select name from emp where name like '%o%';

找出第二个字母是A的?

select name from emp where name like '_A';

找出名字中有下划线的?(进行转译)

select name from emp where name like '%\_%';

找出名字最后一个字母是T的?

select name from emp where name like '%T';

 

7.数据排序(升序、降序)

找出工作岗位是manager的用户按照工资升序排?

select name salary from emp where job='manager' order by salary;

先执行from ,然后执行where,再执行select,最后执行order by;

select                       3

*

from                       1

tablename

where                    2

条件

order by                4

......

order by是最后执行的

注意:默认是升序,asc表示升序,desc表示降序

多个字段排序,越靠前的字段越能起到主导作用,只有在前面的字段相等无法完成排序的时候,才会启用后面的字段进行排序

 

8.分组函数

count 计数

sum 求和

avg 平均值

max 最大值

min 最小值

记住:分组函数一共5个。分组函数还有另一个名字:多行处理函数。所有的分组函数都是对‘某一组’数据进行操作的,分组函数自动忽略NULL.

where后面不能使用分组函数,因为group by是在where执行之后才会执行

//找出工资总和

select sum(salary) from emp;

//找出最高工资

select max(salary) from emp;

//找出最低工资

select min(salary) from emp;

//找出平均工资

select avg(salary) from emp;

//找出总人数

select count(name) from emp

count(*)与count(具体字段),count(*)统计总的条数,count(具体字段)统计的是不为空的元素总数

 

9.单行处理函数

什么是单行处理函数?

输入一行,输出一行

计算每个员工的年薪?

select name,(salary+ifnull(coum,0))*12 as yearsalary from emp;

重点:所有数据库都是这样规定的只要有null参与运算结果一定是null;

ifnull()空处理函数

ifnull(可能为null的数据,被当作什么处理):属于单行处理函数

select name ifnull(conm,0) as conm from emp;

 

10.分组查询group by和having

group by:按照某个字段或者某些字段进行分组

having:是对分组之后的数据进行再次过滤

案例:找出每个工作岗位的最高薪资。

select job,max(salary) from emp group by job;

执行顺序:先进行from,再执行group by分组,最后select 分组函数

注意:分组函数一般都会和group by联合使用,并且任何一个分组函数(count,avg,sum,max,min)都是在group by语句执行之后才会执行,当一条sql语句中没有group by的话,整张表的数据会自成一组。

执行顺序如下:

select                     5

..

from                       1

..

where                    2

..

group by              3

..

having                 4

..

order by             6

..

找出工资高于平均工资的员工

select name salary from emp where salary >(select avg(salary) from emp);

selectname, job,max(salary) from emp group by job;

以上在mysql中,查询结果是有的,但是没有意义,在oracle数据库中会语法报错。

记住一个规则:当一条语句中有group by的话,select后面只能跟分组函数和参与分组的字段

 

11.多个字段联合分组查询

案例:找出每个部门不同工作岗位的最高薪资

select

deptno,job,max(salary)

from

emp

group by deptno,job;

将需要分组的两个字段按拼接为一个字段的思想来分类。

 

12.having和where语句

案例:找出每个部门的最高薪资,要求显示薪资大于2500的数据

第一步:找出每个部门的最高薪资

select max(salary),deptno from emp group by deptno;

第二步:找出薪资大于2900的

select max(salary),deptno from emp group by deptno having max(salary) >2900;/效率低

应该使用where过滤:

select max(salary),deptno from emp where salary>2900 group by deptno ;//效率较高,建议使用where过滤的尽量使用where

 

案例2:找出每个部门的平均薪资,要求显示薪资大于2000的数据;

第一步:找出每个部门的平均薪资;

select avg(salary),deptno from emp group by deptno;

第二步:要求显示薪资大于2000的数据

select avg(salary),deptno from emp group by deptno having avg(salary) >2000;

注意:where后面不能使用分组函数,所以使用having进行过滤

 

13.关于查询结果集的去重?

select distinct job from emp;//distinct关键字去除重复数据

//以下sql语句是错误的

select name, distinct job from emp;

记住:distinct只能出现在所有字段的最前方。

select distinct deptno,job from emp;

记住:distinct在最前面表示后面所有字段联合起来去除重复。

案例:统计岗位的数量?

select count(distinct job) from emp;

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值