数据库:
英文单词:DataBase,简称DB。
数据库管理系统:
DataBaseManagement,简称DBMS。
本地登入:
>mysql -uroot -p123456
(显示编写密码)
>mysql -uroot -p
(无密码登入)
1、sql常用命令:
1.1 查看sql中有哪些数据库:
>show databases;
1.2 选择数据库:
>use test;
1.3 创建数据库:
>create database bjpowernode;
1.4 查看当前使用的是哪个数据库:
>select database();
2、sql语句的分类
DQL:数据查询语言(凡是带有select关键字的都是DQL)
DML:数据操作语言(凡是对表中的数据进行增删改查的都是DML)
insert增;delete删;update改;主要是操作表中的data
DDL:数据定义语言(凡是带有create、drop、alter的都是DDL)
create新建;drop删除;alter修改;主要是对表的结构进行操作
TCL:事务控制语言(事务提交commit;事务回滚rollback)
DCL:数据控制语言(例如:授权grant、撤销权限revoke.......)
3、导入提前准备好的数据:
3.1 >source 路径(路径中不要有中文)
dept部门表;emp员工表;salgrade工资等级表
3.2 查看表中的数据:
select * from 表名;//统一执行这个sql语句。
>select * from emp;
//从emp表中查询所有数据。
3.3 不看表中的数据,只看结构:desc 表名;
>desc dept;
4、简单查询
4.1 查询一个字段:select 字段名 from 表名;
查询部门名字:
>select dname from dept;
4.2 查询两个字段或多个字段:(是用逗号隔开)
查询部门编号和部门名:
>select deptno,dname from dept;
4.3查询所有字段:
>select * from dept;
(不建议,效率低,可读性差)
4.4 给查询的列起别名:(as可以省略)
>select deptno,dname as deptname from dept;
要是起的别名有空格或是中文,用‘ ’括上。
>select deptno,dname as '名称' from dept;
4.5 计算员工年薪:(sal*12)
>select ename,sal*12 from emp; >select ename,sal*12 as '年薪' from emp;
5 条件查询
不是将表中所有数据都查出来,是查询出来符合条件的
语句格式:
select
字段1,字段2,字段......
from
表名
where
条件;
5.1 = 等于
查询薪资等于800的员工姓名和编号?
> select empno,ename from emp where sal = 800;
查询SMITH的编号和薪资?
>select empno,sal from emp where ename = 'SMITH'; //字符串使用单引号
5.2 <>或!= 不等于
查询薪资不等于800的员工姓名和编号?
> select empno,ename from emp where sal != 800;
> select empno,ename from emp where sal <> 800; // 小于号和大于号组成的不等号
5.3 < 小于;>大于;>=;<=
查询薪资小于2000的员工姓名和编号?
> select empno,ename,sal from emp where sal < 2000;
5.4 between … and …. 两个值之间, 等同于 >= and <=
查询薪资在2450和3000之间的员工信息?包括2450和3000
第一种方式:>= and <= (and是并且的意思。)
select empno,ename,sal from emp where sal >= 2450 and sal <= 3000;
第二种方式:between...and...
select
empno,ename,sal
from
emp
where
sal between 2450 and 3000;
注意:
使用between and的时候,必须遵循左小右大。
between and是闭区间,包括两端的值。
5.5 查询哪些员工的津贴/补助为null?
> select empno,ename,sal,comm from emp where comm is null;
注意:在数据库当中null不能使用等号进行衡量。需要使用is null
因为数据库中的null代表什么也没有,它不是一个值,所以不能使用
等号衡量。
5.6 and 并且
查询工作岗位是MANAGER并且工资大于2500的员工信息?
select
empno,ename,job,sal
from
emp
where
job = 'MANAGER' and sal > 2500;
或者 or
查询工作岗位是MANAGER和SALESMAN的员工?
select
empno,ename,job
from
emp
where
job = 'MANAGER' or job = 'SALESMAN';
5.7 and和or同时出现
查询工资大于2500,并且部门编号为10或20部门的员工?
and优先级比or高。
以上语句会先执行and,然后执行or。
select
*
from
emp
where
sal > 2500 and (deptno = 10 or deptno = 20);
and和or同时出现,and优先级较高。如果想让or先执行,需要加“小括号”
以后在开发中,如果不确定优先级,就加小括号就行了。
in 包含,相当于多个 or (not in 不在这个范围中)
查询工作岗位是MANAGER和SALESMAN的员工?
select empno,ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';
select empno,ename,job from emp where job in('MANAGER', 'SALESMAN');
5.8 like
称为模糊查询,支持%或下划线匹配, %匹配任意多个字符, 下划线:任意一个字符。
(%是一个特殊的符号,_ 也是一个特殊符号)
找出名字中含有M的?
> select ename from emp where ename like '%M%';
找出名字以T结尾的?
select ename from emp where ename like '%T';
找出名字以K开始的?
select ename from emp where ename like 'K%';
找出第二个字每是A的?
select ename from emp where ename like '_A%';
找出第三个字母是R的?
select ename from emp where ename like '__R%';
6、排序
6.1查询所有员工薪资,排序? order by
select
ename,sal
from
emp
order by
sal; // 默认是升序!!
6.2 降序:
指定降序/升序:desc/asc
select
ename,sal
from
emp
order by
sal desc;
6.3 可以两个字段排序吗?或者说按照多个字段排序?
查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,再按照名字升序排列。
select
ename,sal
from
emp
order by
sal asc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。