重点掌握的知识点
一. MYSQL中的日期处理
二.分组查询
三.连接查询
四.自查询
五. limit
sql 脚本该文件是一个普通的文本文件,后缀名.sql 被称为sql脚本;
在sql 脚本中有大量的SQL语句,想批量的执行SQL语句,可以将这些SQL语句写入SQL脚本文件中,直接使用source执行这个脚本,可以执行大量的SQL语句
BS B是服务器访问浏览器S
第二阶段重点 Servlet_jsp没学会后面就不用学了
数据库是文件,是在硬盘上的,硬盘上的突然断电后不会失去。SQL程序猿与数据库打交道需要SQL的语言来交流。结构化查询语言。
SQL: 是用来和数据库打交道,完成和数据库的通信,SQL是一套标准
数据库:通常是一个或一组文件,保存了一些符合特定规格的数据,数据库(DB )对应的英文单词是DataDase简称DB。
数据库软件称为数据库管理系统(DBMD)如 mySQL 、oracle
sql Server、DBMD先编译sql再执行
程序员写SQL语句,数据库管理系统执行SQL语句。SQL语句去操作管理 数据库中的数据
数据库存储的是一个表或多个(表比较直观表):表是一种结构化的文件
表中有几个概念:列、行、主健。列叫做字段(column),行叫做表中的记录,
字段都有:字段名称/字段数据类型/字段约束/字段长度
sql的分类
数据查询语言:DQL
代表关键字select;
数据操纵语言:DML
代表关键字:insert(插入),delete(删除),update(改)针对表中的数据
数据定义语言:DDL
代表关键字:create(创建),drop(删除),alter(修改)
事务控制语言:TCL
代表关键字:commit,rollback;
数据控制语言:DCL
代表关键字:grant,revoke
数据类型有 : 数字类型,字符串类型,日期类型,枚举和集合类型
**varchar
可变长度字符串
char
定长字符串
int :整数型
bigint
长整形
float:浮点型单精度
double
浮点型双精度
data:日期类型
blod: *binary large object 二进制大对象:存放照片声音视频
clob: *character large object字符大对象:可以存比较大的文本,4G+的字符串可以存续
字符型char和varchar固定长度
tinytext 和text可变长度
/text/
整形:tingint(1字节/smallint (2字节)mediumint(3字节) int (4字节)bigint(5字节)
浮点型:float(m,d)单精度 m总个数,d小位数、
double (m,d)双精度16位精度,m总个数,d小位数、
日期时间型data日期‘2008-12-2'
Time 时间‘12:24:36’
datatime 日期时间'2003-12-2 22:34:34'
数据表的操作:插入记录(insert into values) 查找记录(select)
**记录操作:创建表(create table)
约束的使用:
数据类型的属性
MYSQL的日期格式
%Y 年
%m 月
%d . 日
%h 时
%i 分
%s 秒
order by asc(升序排序,默认)
order by desc(降序排序)
分组函数/集合函数/多行处理函数
count 求记录数
SUM 求和
AVG 。求平均值
MAX求最大值
MIN求最小值
分组函数自动忽略空值、不需要手动添加where条件 排除空值
distinct 去除查询结果中的重复元素 distinct只能出现所欲字段的最前面
分组查询
group by
order by [表示通过哪个或者哪个字段进行排序】
group by【通过哪个或者哪个字段进行分组】
select max(sal)
from emp
where group by jop 意思先搜索表 emp接着以jop 分组 再求最大值
重点:若一条DQL语句中有group by 字句,那么select关键字后面只能跟参与分组的字段的分组函数。
having:having是对分组之后的数据过滤
where 和having都是在后面添加条件
where是在group by 分组之前过滤
having是在group by 分组之后再过滤
一个完整的DQL语句的总结
select ....
from....
where....
group by .....
having...
order by .....
执行顺序是:
1.from
2.where
3.group by
4.having
5.select
6.order by
连接查询
1、什么是连接查询
-查询的时候只从一张表检索数据,被称为单表查询
-在实际的开发中,数据并不是存储在一张表中,是同时存储在多长表中
这些表和表之间存在关系,我们在检索的时候通过将多张表联合起来取得有效数据,这种多表查询被称为连接查询、
2、连接查询根据出现的年代分类;
sql92语法【1992】
sql99语法【1999:更新的语法,主要掌握这种语法】
SQL92语法;内连接中的等值连接
select e.ename(表命名为e),d.danme
from emp e,dept d where e.deptno=d.deptno;
SQL99 语法:select e.name,d.dname,
from emo e joIn dept d on e.deptno=d.deptno;(后面可以加where)
SQL 语法优点:表连接独立出来,结构更清晰,对比表连接不满意后面可以+where
3、连接查询根据连接方式可分为:
内连接
*等值连接
*非等值连接
外连接
A表和B表能够完全匹配的记录查询出来之后,将其中一张的记录无条件的完全查询出来,对方的表没有匹配的记录,会自动模拟出NULL与之匹配这种查询称为外连接
外连接的查询结果条数>=内连接的查询的结果条数
SQL99语法:外连接中的右外连接 right
select e.ename,d.dname from emp e right join dept d on e.deptno=d.deptno
左外连接 left,
子查询
什么是子查询?select语句嵌套select 语句
select ename,sal
from emp (select avg(sal) from
emp
union合并两个查询的结果成一个字段,可以来自不同的表,数据类型要相同 。
limit:(1)limit用来获取一张表汇总某部分数据
2、limit只在mysql数据库中存在,不通用是mysql的特色。
3、找出员工表的前五条记录
select ename from emp limit 5;(limit 5中的5代表从表的记录下标0开始取五条,等同于
select ename from emp limit 1,5;
limit 的使用语法格式:
1.limit 起始下表,长度;
2.起始下标没有指定默认从0开始,0表示第一条记录
4、案例:找出公司中工资排名在前五的员工
思路:按照工资降序排列取前五个
select ename ,sal from emp order by sal desc limit 5
6 、mysql中通用的分页sql语句;[只适合mysql数据库]
每条显示3条记录
第1夜:0(起始下标),3(长度)
第2页:3,3(长度)
第3页:6,3(长度)
每夜显示pagesize条记录
第pageno 页:(pageno-1)pagesize,pagesize
select ename from emp order by sal desc limit
(pageno-1)pagesize,pagesize;
将emp_bak表中的所有名字中含有0的员工修改为 zhnagsan
update emp_bak set ename='zhangsan' where ename like '%0%';
将emp_bak 表中国年所有工作岗位是manager和salesman的员工工资上调10%;
update emp_bak set sal=sal*1.1 where job='manaher' or job='salesman';
什么是约束:(1)约束实际上是就是表中数据的限制条件;(2)表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效
约束有哪些呢?
- 非空约束 。 (not null)
- 唯一性约束( unique)
主键约束 (primary key )
外键约束 (foreign key)
检查约束 【目前mysql不支持,Oracle数据库支持】
unique约束的字段具有唯一性,不可重复
列级约束:
create table t_user(
id int(10),
name varchar(20) not null,
email varchar(128) unique);
表级约束:使用表级约束给多个字段联合添加约束【以下程序表示name 和email两个字段联合唯一】。
create table t_user(
id int(10),
name varchar(28),
email varchar(128),
unique (email,name));