IT信息技术
信息 数据
数据库 存储管理数据
数据库是一种软件
他是没有图形化界面 是以后台服务的形式存在
如果开机时数据库启动失败,需要手动启动
常用的数据库软件
- MySQL开源 开放源代码
- Oracle 甲骨文
- DB2 IBM 在金融领域使用比较多
使用类似
数据库的客户端软件
Navicat for MySQL
字符集的概念 也称之为编码方式
计算机真正能处理的数据只有0和1
计算机处理任何数据之前需要进行编码操作
将二进制代码恢复成原始数据需要解码操作
数据库中使用表来存储数据
表中的列是固定不变的,数据的格式
表中的行是变化的,数据行
数据库每存储一类信息 就需要创建一张表
表的数量越多 软件的复杂度越高
数据库阶段需要学习的是sql语言
结构化查询语言 他是负责与数据库沟通的
Sql是第四代编程语言
Sql基本语法
- 关键字 具有特殊语法含义的单词
不能缩写 不区分大小写 建议大写
- 标识符 就是名字
他必须是字符开头 不能使用关键字做为名字
- 代码中出现的标点符号必须是英文标点
1.SELECT 查询
SELECT 列名1,列名2 FROM 表名;
如果想查询所有列项 就把列名换成*
SELECT ename, job, sal, comm
FROM emp;
2. 空值NULL
任何包含空值的算术表达式运算后的结果都为空值NULL。
但凡运算的项有一个为null 那么结果就为null.
select ename, 12*sal+comm
from emp
IFNULL(列名,想把null变成的数据)
SELECT comm,IFNULL(comm,0) FROM emp;
/*意为 如果comm列有值为null的数据 那么把该行的null变为0数值
3.列别名
- 方式1:列名 列别名
- 方式2:列名 AS 列别名
如果别名中有空格的话 那么别名需要加上双引号
SELECT ename AS name, sal salary FROM emp;
4.消除重复行
相同内容的行会只显示一行
SELECT DISTINCT deptno FROM emp;
5.显示表结构
- 可以使用DESCRIBE 或者 DESC命令来查看表结构
DESC emp;
/*显示emp表中的信息
6. where 选择限定数据行
- WHERE子句紧跟在FROM子句之后
SELECT ename,deptno FROM emp WHERE deptno!=10;
/*查询emp表中 员工编号不为10 的 员工姓名和员工编号
日期比较大小 是把日期转换为数字比较 比如2001>2000
如果比较的是字符 或者 日期类型 则需要加单引号
SELECT ename,sal,deptno,hiredate FROM emp WHERE hiredate > '1987-1-1';
SELECT deptno,job,hiredate from emp WHERE job = 'SALESMAN'
7. BETWEEN..AND.. 在...和...之间
小在前大在后 包含前后数值
SELECT ename,sal FROM emp WHERE sal BETWEEN 1250 AND 1500;
/*查询emp表中工资大于等于1250 小于等于1500的 员工姓名,员工工资
8.in(条件1,条件2);
检索符合条件1或2的数据行
SELECT ename,deptno FROM emp where deptno in(10,30);
/*查询emp表中 员工编号为10 或 20 的员工姓名和员工编号
9. like % _
%代表多个字符
_代表一个字符
查询以D结尾的员工姓名
SELECT ename from emp WHERE ename LIKE'%D';
查询姓名是以W开头以D结尾
SELECT ename FROM emp where ename LIKE 'W%D';
查询名字倒数第二个字母是k的人
SELECT ename from emp where ename LIKE '%k_';
10. IS NULL 查询某一项为空值的行信息
查询奖金为空的员工姓名
SELECT ename,comm from emp WHERE comm IS NULL;
查询奖金不为空的员工姓名
SELECT ename,comm from emp WHERE comm IS NOT NULL;
逻辑运算符
1. and 逻辑与
多个条件用and连接时 返回结果必须满足所有条件
查询十号部门工资并且大于1000的员工信息
SELECT ename,sal,deptno FROM emp where sal > 1000 AND deptno = 10;
2. or 逻辑或
多个条件用or连接时,返回结果满足其中一个条件即可
查询职位为SALESMAN或MANAGER,部门编号为10或者20,姓名包含A的员工姓名、职位、部门编号。
SELECT ename,job,deptno
FROM emp
WHERE (job = 'SALESMAN' or job = 'MANAGER')
AND deptno in(10,20)
AND ename LIKE '%A%';
3. not 逻辑非
... WHERE deptno NOT IN (10, 20)
... WHERE sal NOT BETWEEN 3000 AND 5000
... WHERE ename NOT LIKE 'D%’
... WHERE mgr IS NOT NULL
运算符的优先级 not > and > or
order by 排序
asc 升序 desc 降序
多重排序时用逗号隔开
可以用列名排序 也可以用返回序号排序
把部门按照降序排序(主排序) 每个部门里面的工资也按照升序排序(副排序)
SELECT ename,job,sal,deptno
FROM emp
ORDER BY deptno DESC ,sal ASC;
或者可以表现为
SELECT ename,job,sal,deptno
FROM emp
ORDER BY 4 DESC ,sal ASC;
limit 限制记录的行数
limit接受一个或两个整数参数。
第一个参数表示从第几行记录开始输出 如果从第一行开始可以省略,length表示输出的记录行数。
注意:第一个参数所指的行数从0开始
查询20号部门下入职日期最早的前2名员工姓名,入职日期。
SELECT ename,hiredate FROM emp WHERE deptno =20 ORDER BY hiredate LIMIT 2;