首先简单认识一下SQL
- SQL是一种非过程化语言,只需要提出做什么而不需要指明怎么做。
- SQL可以做什么
- 对数据表中的数据CPUD增删改查
- 创建表,修改表
- 用户权限/角色的授予和取消
- 事务控制
- SQL分类
- DML数据操作语言update delete insert
- DQL数据索引语言select
- DDL数据定义语言create alter drop
- DCL数据控制语言grant revoke
- TCL事务控制语言SAVEPOINT ROLLBACK SETTRANSACTION COMMIT
- 数据操作语言针对表中的数据、数据定义语言主要针对数据库对象(表、视图、索引、触发器、储存过程、函数、表空间)
- SQL:1999 SQL-92
数据库基本概念
- 关系:整个二维表
- 关系名:表格名称
- 元组:行数据(记录)
- 属性:列数据
- 属性名:列名称
- 主键:唯一确定元组的属性组(关键字)
- 域:属性的取值范围
select表单查询语句
一. 最简单的查询方式
1. select name,age from emp;
二. 使用算数运算符
1. +-/*
2. select age+10 from emp;
三. 使用字段别名查询
1. select name as 名字,age as 年龄 from emp; as可省略
四. 连接运算符
1. ||连接两个属性值变成一字符串
2. select name||'is a'||age from emp;
五. 查询去重
1. select distinct job,age from emp;
六. order by
1. ASC 升序 DESC 降序
2. select name from emp order by name asc;
3. 数字大小排列,字符串自然顺序排列
七. where
1. 比较运算符 > >= < <= = != <>
2. 逻辑运算符 OR AND
3. 模糊匹配 LIKE
1. _ 代表一个字符 % 代表一个或多个字符
4. 区间查询 BETWEEN A AND B 在A 和B之间的数据 包含A和B
5. In关键字查询 列名 IN(20,30)
八. 元素符优先级
1. 算术>连接>比较>逻辑
九. 优化问题
1. AND:把检索结果较少的条件放到后面
2. OR:把检索结果较多的条件放到后面
单行函数
一. 字符函数
1. INITCAP()把字符串首字母大写
2. LOWER()把字符串字母小写
3. UPPER()把字符串字母大写
4. REPLACE(STR,V1,V2)替换字母
5. SUNSTR(STR,START,END)截取第几个到第几个的字符串
6. CONCAT(STR1,STR2)把字符串1与2连接起来与|| 的作用一样。
二. 数值函数
1. ABS(n)取绝对值
2. CEIL(n)向上取整
3. FLOOR(n)向下取整
4. POWER(n,m)n的m次幂
5. MOD(m,n)m除以n取余数
6. ROUND(m,n)四舍五入
7. TRUNC(m,n)截断 12.234,2取两位小数
8. SQRT(m)开方
三. 日期函数
1. MONTHS_BETWEEN(DATE1,DATE2)返回两个时间点之间的月份
2. ADD_MONTHS(DATE1,N)在月份上加上指定的月份数量
3. NEXT_DAY(DATE,'星期几')返回一个指定日期后第一个星期几的日期
4. LAST_DAY(DATE)返回本月最后一天
5.
四. 转换函数
1. TO_NUMBER()
2. TO_CHAR()
3. TO_DATE('','YYYY-MM-DD:HH24:MI:ss')
五. 其他函数
1. NVL(EXP1,EXP2)如果EXP1的值=null那么返回EXP2否则返回EXP1
2. NVL2(EXP1,EXP2,EXP3)如果EXP1是null那么返回EXP2否则返回EXP3。
3. DECODE(VALUE,IF1,VALUE1,IF2,VALUE……)=>也就是value=if1那就返回value1如果value=if2那么就返回value2以此类推
多行函数
单行行数:是用来处理某一行数据里某一个或者多个字段 多行函数:处理某一个表中的多条记录
多行函数的分类:
- 只能处理数值型的数据
- AVG平均值 SUM求和
- 能处理所有类型的数据
- COUNT求个数 MAX求最大值 MIN求最小值
- 说明COUNT里面的参数可以是列名可以也是固定值,也可以是*
- 列名:计算出不为空的列的个数
- 固定值:计算表中的所有数据
- *:计算表中所有的不同是为空的数据 以上函数是从多条数据中计算,最后返回给用户一个结果。
- COUNT求个数 MAX求最大值 MIN求最小值
- GROUP BY
- 在SELECT后来出现的列名必须在GROUP BY后面出现
- WHERE是过滤分组出现之后的数据,只能使用表名或者虚拟表后面
- HAVING是过滤分组之后的数据,只能用在GROUP BY 后面
---显示部门编号大于10 的部门的人数,要求人数大于4
SELECT DEPTNO,COUNT(1) FROM EMP WHERE DEPTNO>10 GROUP BY DEPTNO HAVING COUNT(1)>4;