1)程序复杂,效率低
2)无法体现类型,无法做数据检查
3)无法存储大量数据
4)增删改查不方便
常用数据软件:oracle mysql sqlsv db2
1)表(table):实际负责数据存储的单元,通常也叫做“实体集”
2)行(row):存放了一组相关业务数据,通常叫做“实体”
3)列(column):表示业务数据中的一个具体的属性,也成为“字段”
主键(primary key):可以唯一标识一组业务数据,非空,唯一
外键(foreign key):体现两张表数据关系的字段,值必须取自另一个表的主键,
可以为null,可以重复
1)安装成功后,先解锁hr账户
① sqlplus sys as sysdba
② 输入管理员密码
③ 解锁hr: alter user hr account unlock;
④ 设置hr的密码: alter user hr identified by 密码;
2) 工作方式
1)sql命令 : 结构化的查询语言(重点),不可以缩写,不区分大小写,必须以;结尾
2)plsql命令: oracle数据库方言
3)sqlplus命令:工具自身的命令(可以缩写)
start --- sqlplus命令,执行sql文件
desc --- 描述表结构
— 请查询员工的编号,姓名,工资和所在部门编号
Select employee_id,last_name,salary,department_id from employees;
— 请查询员工的详细信息 (通过*表示所有字段)
Select * from employees;
— 可以对查询的字段做数学运算
— 请查询员工的编号,姓名,以及年薪
Select employee_id,last_name,salary*12 from employees;
— 注意:
1)数字类型±*/
2)字符串类型不能做任何数学运算
3)日期类型值可以加减,以“天”为单位
— 可以为结果里的字段定义“别名”
语法:紧跟在列之后空格接着写,如果含有特殊字符或者需要区分大小写,使用双
引号”
select employee_id id, last_name, salary*12 “anual salary”from employees;
— 字符串连接操作 : ||
—请显示员工编号,姓名,以及完整邮箱地址
Select employee_id,last_name,email||’@zparkhr.com.cn’from employees;
注意:如果在sql命令里使用到了字符串字面值或者日期字面值,需要使用单引号
— distinct 去除查询结果里的重复数据
— 请显示我们公司里所有的职位 job_id
Select distinct job_id from employees;
Select * from employees order by salary ;
— 排序条件可以通过字段名,别名,或者下标指定
Select employee_id,last_name,salary*12 from employees order by 3;
— 多个排序条件
Select * from employees order by salary,department_id;
先按工资升序,工资相同在按部门升序排列
Select * from employees order by salary,department_id desc; 先升再降
Select * from employees order by salary desc , department_id desc;
— 关于null值 : oracle中null被认定为最大值
— 请查询30部门的员工信息
Select * from employees where department_id=30;
— 请查询last_name叫做‘King’的员工信息
Select * from employees where last_name = ‘King’ ;
注意:字符串字面值区分大小写
— 请查询工资介于5000到10000的员工信息
Select * from employees where salary>=5000 and salary<=10000 ;
select * from employees where last_name>=’King’;
— 请查询30,50,70部门的员工信息
Select * from employees where department_id=30 or department_id=50 or …
Select * from employees where department_id in(30,50,70);
— 请查询工资介于5000到10000的员工信息
Select * from employees where salary between 5000 and 10000; 包括边界值
— 请查询部门编号为null的员工信息
Select * from employees where department_id is null;
Select * from employees where last_name like ‘K%’;
— 请查询last_name是由四个字符组成的员工信息
Select * from employees where last_name like ‘____’;
— 请查询last_name是以’S_’开头的员工信息
Escape 声明转义字符
1)abs函数 — 计算一个数据的绝对值
--- select abs(salary) from employees; --- 107行
--- select abs(-126) from employees; ----107行
2)dual —哑表,oracle提供的单行单列表,为了维护select语句的完整性,里面的
数据没有任何意义,也不允许向里面存放数据
--- select abs(-126) from dual; --- 1行
3)sysdate — 获取db sv里的当前系统日期
--- select sysdate from dual;
--- 数据库默认日期格式 dd-mon-rr
4)to_char( date日期值 ,‘格式字符串’) 【重点】
作用 : 将给定的日期值按照格式字符串的要求转换成字符串类型值
— 请显示详细的当前系统时间
Select to_char(sysdate,’yyyy-mm-dd,day,hh24:mi:ss’) from dual;
— 请显示2005年入职的员工信息
Select * from employees where hire_date like ‘%05’;
Select * from employees where to_char( hire_date, ‘yyyy’)=2005;
— 按照入职月份升序的方式显示员工信息
Select * from employees order by to_char(hire_date,’mm’);
5).to_date(string,’格式字符串’)
将给定的string按照格式字符串的要求变成数据库支持的日期值
— 请写一句sql命令,查询你出生的那天是星期几 1998-06-13
to_char( to_date(‘1998-06-13’,’yyyy-mm-dd’) , ‘day’)
1)max() , min() : 最大,最小值 , 适用于所有类型的数据
2)avg() : 求平均值 ,适用于数字类型字段
3)sum() : 求和, 适用于数字类型字段
4)count() : 统计数量
注意: 所有组函数在统计时,null值都不在统计范畴
--- select max(salary),min(salary),avg(salary),sum(salary) from employees;
--- select max(salary) from employees where department_id=30;
--- count(字段名) : 统计指定字段里非空值的数量
--- count(*) : 统计结果中行的数量
--- 统计30部门的人数
Select count(*) from employees where department_id=30;
— 请统计公司里有多少种职位
Select count( distinct job_id) from employees;