两种登录方法,两种方法得在bin目录下才行。
注意:mysql是不见分号不执行。分号表示结束,以分号结尾,分号是英文的分号。
表示正在使用一个名字叫做sys的数据库。
show databases;
后文的例子都使用此表,此表名为dept。
describe缩写为:desc
姓名 性别 年龄(列:字段)
张三 男 20 ------->行(数据/记录)
李四 女 21 ------->行(数据/记录)
王五 男 22 ------->行(数据/记录)
此表中有:姓名字段、性别字段、年龄字段。
每一个字段都有:字段名、数据类型、约束等属性。字段名可以理解,是一个普通的名字,见名知意即可。
数据类型:字符串,数字,日期等
约束:约束也有很多,其中一个叫做唯一性约束,这种约束添加之后,该字段中的数据不能重复。
凡是带有create、drop、 alter的都是DDL
select deptno,dname from dept;
select a,b,c,d,e,f... from tablename;
select * from dept;
表示从dept表查询所有数据。
这种方式的缺点: 1、效率低 2、可读性差。 在实际开发中不建议,在DOS命令窗口中想快速的看一看全表数据可以采用这种方式。
select deptno,dname as deptname from dept;
select deptno,dname deptname from dept;
select deptno,dname 'dept name' from dept;
//加单引号select deptno,dname "dept name" from dept;
//加双引号在所有的数据库当中,字符串统一使用单引号括起来,单引号是标准,双引号在oracle数据库中用不了。但是在mysql中可以使用。
查询出来符合条件的数据,不是将表中所有数据都查出来。
select
字段1,字段2,字段3…
from
表名
where
条件;
=等于
select empno,ename from emp where sal = 800;
select empno,sal from emp where ename = 'SMITH';
//字符串使用单引号<> 或!= 不等于
select empno,ename from emp where sal != 800;
select empno,ename from emp where sal <> 800;
// 小于号和大于号组成的不等号<小于
select empno,ename,sal from emp where sal < 2000;
<= 小于等于
select empno,ename,sal from emp where sal <= 3000;
‘>’ 大于
select empno,ename,sal from emp where sal > 3000;
‘>=’ 大于等于
select empno,ename,sal from emp where sal >= 3000;
between … and …. 两个值之间, 等同于 >= and <=
查询薪资在2450和3000之间的员工信息?包括2450和3000
= and <= (and是并且的意思。)
select empno,ename,sal from emp where sal >= 2450 and sal <= 3000;
select empno,ename,sal from emp where sal between 2450 and 3000;
使用between and的时候,必须遵循左小右大。 between and是闭区间,包括两端的值。
在数据库当中null不能使用等号"="进行衡量。需要使用is null,因为数据库中的null代表什么也没有,
它不是一个值,所以不能使用等号衡量。
and和or同时出现的话,有优先级问题吗?
and和or同时出现,and优先级较高。
如果想让or先执行,需要加“小括号“。如果不确定优先级,就加小括号就行了。
select ename,sal from emp where sal = 800 or sal = 5000 ;
select ename,sal from emp where sal in (800,500);
in不是一个区间。in后面跟的是具体的值。
not 可以取非,主要用在 is 或 in 中
select
…
from
…
group by
字段不写group by相当于整张表分成一组
select ename,job,sum(sal) from emp group by job;
以上语句在mysql中可以执行,在oracle中执行报错。因为在select后面添加ename字段没有意义。
oracle的语法比mysql的语法严格。
重点结论:在一条select语句当中,如果有group by语句的话,select后面只能跟:参加分组的字段(group by后面的字段),以及分组函数。其它的一律不能跟。
找出“每个部门,不同工作岗位”的最高薪资?
select
deptno, job, max(sal)
from
emp
group by
deptno, job;
技巧:两个字段联合成1个字段看。(两个字段联合分组)。
找出每个部门最高薪资,要求显示最高薪资大于3000的?
使用having可以对分完组之后的数据进一步条件筛选。
having不能单独使用,having不能代替where,having必须和group by联合使用。
where和having,优先选择where,where实在完成不了了,再选择having。
语法格式:
select
ename,sal
from
emp
order by
sal; // 默认是升序!!
以两个字段排序吗?或者说按照多个字段排序?
查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,再按照名字升序排列。
select
ename,sal
from
emp
order by
sal asc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。
关键字顺序不能变:
select
from
where
order by
以上语句的执行顺序必须掌握:
单行处理函数的特点:一个输入对应一个输出,一行求完了再去求下一行。
常见的单行处理函数
lower 转换小写
`mysql> select lower(ename) as ename from emp;`
upper 转换大写
mysql> select upper(name) as name from t_student;
substr 取子串(substr(被截取的字符串, 起始下标,截取的长度))
mysql> select substr(ename, 1, 1) as ename from emp;
concat函数进行字符串的拼接
mysql> select concat(empno,ename) from emp;
length 取长度
mysql> select length(ename) enamelength from emp;
trim 去空格
mysql> select * from emp where ename = trim(' KING');
str_to_date 将字符串转换成日期
date_format 格式化日期
format 设置千分位
case…when…then…when…then…else…end
当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其它正常。注意:不修改数据库,只是将查询结果显示为工资上调)
select
ename,job, sal as oldsal,
(case job when ‘MANAGER’ then sal1.1 when ‘SALESMAN’ then sal1.5 else sal end) as newsal
from
emp;
mysql> select round(1236.567, 0) as result from emp;
//保留整数位。mysql> select round(1236.567, 1) as result from emp;
//保留1个小数mysql> select round(1236.567, 2) as result from emp;
//保留2个小数mysql> select round(1236.567, -1) as result from emp;
// 保留到十位。
mysql> select round(rand()*100,0) from emp;
// 100以内的随机数
ifnull是空处理函数。专门处理空的。在所有数据库当中,只要有NULL参与的数学运算(加减法也是NULL),最终结果就是NULL。
注意:NULL只要参与运算,最终结果一定是NULL。为了避免这个现象,需要使用ifnull函数。
分组函数即多行处理函数。
将之前的关键字全部组合在一起。
select
from
where
group by
order by
以上关键字的执行顺序如下。
- from
- where
- group by
- select
- order by
(1)分组函数的使用注意事项
select ename,sal from emp where sal > min (sal) ;
//报错。.select sum(sal) from emp ;
(2)常见的分组函数