概念:
常说的装数据库 就是装数据库管理系统 DBMS(常用的sql service2008(微软 win)/mysql/db2 Oracle、IBM (以上是关系性管理系统R(relation)DBMS) mangodb(非关系型数据库(nosql ),属于文档型数据库。先解释一下文档的数据库,即可以存放xml、json、bson类型系那个的数据。数据结构由键值(key=>value)对组成。)) 也可以教数据库软件 数据库应用 而数据库管理软件就是对数据库DB进行管理的;程序猿使用DBMS就需要使用SQL(结构化查询语言 structure query language)对数据库用来访问和操作数据库系统。
SQL:(结构化语言)
一、DQL(数据查询语言 data query language)
(1)基础查询:
1、涉及关键词:select from
2、语法:select 查询列表 from 表名
(2)条件查询
1、涉及关键词:select from where
2、语法:select 查询列表 from 表名 where 筛选条件
3、筛选条件的分类:
1、简单条件运算符:> < = <> != >= <= <=>安全等于
· 2、逻辑运算符: && (and)、|| (or) 、! (not)
3、模糊查询:涉及关键词 like 一般搭配通配符使用,可以判断字符型或数值型
通配符:%任意多个字符,_任意单个字符
(3)排序查询
1、涉及关键词:select from where order by 【asc(默认,升序)/desc】
2、语法:select 查询列表 from 表 where 筛选条件 order by 排序列表 【asc}desc】
3、注意:order by的位置一般放在查询语句的最后(除limit语句之外)
(4)常见函数
分类:
1、单行函数:字符 、数学、 日期、 流程控制 、其他函数
字符:concat()做字符的拼接(不涉及字符串的概念)、substr(截取函数)、upper(表大写) 、lower(变小写)、replace(替换)、length(返回字节长度)、trim(去掉前后空格 去掉自选字符 ‘字符’ from 主字符)lpad(左填充)rpad(右填充) instr(获取子串中第一次出现的索引)
数学:round四舍五入 mod 取模 floor 乡下取整 ceil 向上取整 truncate截断 rand 获取随机数
日期:datediff 返回两个日期的差值 now(返回当前日期时间)year(返回年)month(返回月)day(返回日)date_format 将日期转换成字符 str_to_date 将字符转换为日起 curtime 返回当前时间 hour:小时 minute:分钟 second:秒 monthname:以英文形式返回月
其他:version 当前数据库服务器的版本 database 当前打开的数据库 user当前用户
password('字符'):返回该字符的密码形式 md5('字符'):返回该字符的md5加密形式
流程控制:
①if(条件表达式,表达式1,表达式2):如果条件表达式成立,返回表达式1,否则返回表达式2
②case情况1
case 变量或表达式或字段
when 常量1 then 值1
when 常量2 then 值2
...
else 值n
end
③case情况2
case
when 条件1 then 值1
when 条件2 then 值2
...
else 值n
end
2、分组函数
count max min avg sum 传一组 返回一个
支持的类型
sum和avg一般用于处理数值型
max、min、count可以处理任何数据类型
以上分组函数都忽略null
和分组函数一同查询的字段,要求是group by后出现的字段
(5)分组查询
语法:
select 分组函数,分组后的字段
from 表
【where 筛选条件】
group by 分组的字段
【having 分组后的筛选】
【order by 排序列表】
二、特点
使用关键字 筛选的表 位置
分组前筛选 where 原始表 group by的前面
分组后筛选 having 分组后的结果 group by 的后面
(6)连接查询
sql92(支持内连接(等值连接 非等值连接 自连接 ) 部分外连接(oracle mysql sqlserver不支持))标准 sql99标准(建议)(内连接 外连接(左外 右外 全外(mysql不支持)交叉连接 形成一个笛卡尔积 )):
sql92:
等值连接语法:
select 查询列表
from 表1 别名,表2 别名
where 表1.key=表2.key
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】
sql99:外连接语法 内连接将left|right|full 换成inner 交叉 换成corss
select 查询列表
from 表1 别名
left|right|full【outer】 join 表2 别名 on 连接条件
where 筛选条件
group by 分组列表
having 分组后的筛选
order by 排序列表
limit 子句;
(7)子查询
分类:
1、按出现位置
select后面:
仅仅支持标量子查询
from后面:
表子查询
where或having后面:
标量子查询
列子查询
行子查询
exists后面:
标量子查询
列子查询
行子查询
表子查询
2、按结果集的行列
标量子查询(单行子查询):结果集为一行一列
列子查询(多行子查询):结果集为多行一列
行子查询:结果集为多行多列
表子查询:结果集为多行多列
(8)分页查询
1、语法:select 查询列表 from 表 limit 【offset,】size;
注意:
offset代表的是起始的条目索引,默认从0卡死
size代表的是显示的条目数
计算起始页面公式:
假如要显示的页数为page,每一页条目数为size
select 查询列表 from 表 limit (page-1)*size,size;
(9)联合查询
1、涉及关键词:union:合并、联合,将多次查询结果合并成一个结果
2、语法
查询语句1
union 【all】
查询语句2
union 【all】
...
3、特点:
要求多条查询语句的查询列数必须一致
要求多条查询语句的查询的各列类型、顺序最好一致
union 去重,union all包含重复项
(10)查询总结
语法 及执行顺序
select 查询列表 ⑦
from 表1 别名 ①
连接类型 join 表2 ②
on 连接条件 ③
where 筛选 ④
group by 分组列表 ⑤
having 筛选 ⑥
order by排序列表 ⑧
limit 起始条目索引,条目数; ⑨